feat: add support for custom CORS headers

This commit is contained in:
oskar
2019-05-24 14:43:22 +01:00
committed by Henrique Dias
parent 8c66f0c585
commit e5b3946388
4 changed files with 74 additions and 0 deletions
+37
View File
@@ -118,6 +118,34 @@ func parseUsers(raw []interface{}, c *webdav.Config) {
}
}
func parseCors(raw []interface{}, c *webdav.Config) {
hosts := []string{}
for _, v := range raw {
if cfg, ok := v.(map[interface{}]interface{}); ok {
cors := webdav.CorsCfg{
Enabled: cfg["enabled"].(bool),
AllowedHosts: []string{},
}
if allowed_hosts, ok := cfg["allowed_hosts"]; ok {
for _, host := range strings.Split(allowed_hosts.(string), ",") {
hosts = append(hosts, host)
}
}
if len(hosts) == 0 {
hosts = append(hosts, "*")
}
cors.AllowedHosts = hosts
c.Cors = cors
}
}
}
func readConfig(flags *pflag.FlagSet) *webdav.Config {
cfg := &webdav.Config{
User: &webdav.User{
@@ -130,6 +158,10 @@ func readConfig(flags *pflag.FlagSet) *webdav.Config {
},
},
Auth: getOptB(flags, "auth"),
Cors: webdav.CorsCfg{
Enabled: false,
AllowedHosts: []string{},
},
Users: map[string]*webdav.User{},
}
@@ -143,6 +175,11 @@ func readConfig(flags *pflag.FlagSet) *webdav.Config {
parseUsers(users, cfg)
}
rawCors := v.Get("cors")
if cors, ok := rawCors.([]interface{}); ok {
parseCors(cors, cfg)
}
if len(cfg.Users) != 0 && !cfg.Auth {
log.Print("Users will be ignored due to auth=false")
}