summaryrefslogtreecommitdiff
path: root/service/static/config.go
diff options
context:
space:
mode:
authorWolfy-J <[email protected]>2018-06-11 11:28:24 +0300
committerWolfy-J <[email protected]>2018-06-11 11:28:24 +0300
commit2f135b359575cc1625d1461bb6d8e478da8ccf54 (patch)
tree8561f84318c3a291f4a38df6b347954bda777e41 /service/static/config.go
parent6efaa0aa951240c2bb643761f103ee3f0fafb4d9 (diff)
refactor
Diffstat (limited to 'service/static/config.go')
-rw-r--r--service/static/config.go52
1 files changed, 52 insertions, 0 deletions
diff --git a/service/static/config.go b/service/static/config.go
new file mode 100644
index 00000000..2a1f6c13
--- /dev/null
+++ b/service/static/config.go
@@ -0,0 +1,52 @@
+package static
+
+import (
+ "strings"
+ "path"
+ "os"
+ "github.com/pkg/errors"
+)
+
+// Config describes file location and controls access to them.
+type Config struct {
+ // Enables StaticFile service.
+ Enable bool
+
+ // Dir contains name of directory to control access to.
+ Dir string
+
+ // Forbid specifies list of file extensions which are forbidden for access.
+ // Example: .php, .exe, .bat, .htaccess and etc.
+ Forbid []string
+}
+
+// Forbid must return true if file extension is not allowed for the upload.
+func (cfg *Config) Forbids(filename string) bool {
+ ext := strings.ToLower(path.Ext(filename))
+
+ for _, v := range cfg.Forbid {
+ if ext == v {
+ return true
+ }
+ }
+
+ return false
+}
+
+// Valid validates existence of directory.
+func (cfg *Config) Valid() error {
+ st, err := os.Stat(cfg.Dir)
+ if err != nil {
+ if os.IsNotExist(err) {
+ return errors.New("root directory does not exists")
+ }
+
+ return err
+ }
+
+ if !st.IsDir() {
+ return errors.New("invalid root directory")
+ }
+
+ return nil
+}