fix web dav URL

This commit is contained in:
Henrique Dias 2016-11-06 13:17:07 +00:00
parent 41e7894425
commit eeeb1ce0fd
3 changed files with 13 additions and 8 deletions

View File

@ -113,7 +113,7 @@
<!-- SCRIPTS --> <!-- SCRIPTS -->
<!-- User Data and Permissions; WebDavURL --> <!-- User Data and Permissions; WebDavURL -->
<script>var user = JSON.parse('{{ Marshal .User }}'), webdavURL = "{{.Config.WebDavURL}}", baseURL = "{{.Config.BaseURL}}";</script> <script>var user = JSON.parse('{{ Marshal .User }}'), webdavURL = "{{.Config.FullWebDavURL}}", baseURL = "{{.Config.AbsoluteURL}}";</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.3/ace.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.3/ace.js"></script>
<script src="{{ .Config.AbsoluteURL }}/_filemanagerinternal/js/form2js.js"></script> <script src="{{ .Config.AbsoluteURL }}/_filemanagerinternal/js/form2js.js"></script>
<script src="{{ .Config.AbsoluteURL }}/_filemanagerinternal/js/application.js"></script> <script src="{{ .Config.AbsoluteURL }}/_filemanagerinternal/js/application.js"></script>

View File

@ -26,6 +26,10 @@ type Config struct {
CurrentUser *User CurrentUser *User
} }
func (c Config) FullWebDavURL() string {
return c.AbsoluteURL + c.WebDavURL
}
// Rule is a dissalow/allow rule // Rule is a dissalow/allow rule
type Rule struct { type Rule struct {
Regex bool Regex bool
@ -82,7 +86,7 @@ func Parse(c *caddy.Controller) ([]Config, error) {
cfg.BaseURL = strings.TrimPrefix(cfg.BaseURL, "/") cfg.BaseURL = strings.TrimPrefix(cfg.BaseURL, "/")
cfg.BaseURL = strings.TrimSuffix(cfg.BaseURL, "/") cfg.BaseURL = strings.TrimSuffix(cfg.BaseURL, "/")
cfg.BaseURL = "/" + cfg.BaseURL cfg.BaseURL = "/" + cfg.BaseURL
cfg.WebDavURL = cfg.BaseURL + "webdav" cfg.WebDavURL = "webdav"
if cfg.BaseURL == "/" { if cfg.BaseURL == "/" {
cfg.BaseURL = "" cfg.BaseURL = ""
@ -230,17 +234,18 @@ func Parse(c *caddy.Controller) ([]Config, error) {
} }
} }
caddyConf := httpserver.GetConfig(c)
cfg.AbsoluteURL = strings.TrimSuffix(caddyConf.Addr.Path, "/") + "/" + cfg.BaseURL
cfg.AbsoluteURL = strings.Replace(cfg.AbsoluteURL, "//", "/", -1)
cfg.AbsoluteURL = strings.TrimSuffix(cfg.AbsoluteURL, "/")
cfg.AddrPath = strings.TrimSuffix(caddyConf.Addr.Path, "/")
cfg.WebDavURL = "/" + strings.TrimPrefix(cfg.WebDavURL, "/")
cfg.Handler = &webdav.Handler{ cfg.Handler = &webdav.Handler{
Prefix: cfg.WebDavURL, Prefix: cfg.WebDavURL,
FileSystem: cfg.FileSystem, FileSystem: cfg.FileSystem,
LockSystem: webdav.NewMemLS(), LockSystem: webdav.NewMemLS(),
} }
caddyConf := httpserver.GetConfig(c)
cfg.AbsoluteURL = strings.TrimSuffix(caddyConf.Addr.Path, "/") + "/" + cfg.BaseURL
cfg.AbsoluteURL = strings.Replace(cfg.AbsoluteURL, "//", "/", -1)
cfg.AbsoluteURL = strings.TrimSuffix(cfg.AbsoluteURL, "/")
cfg.AddrPath = strings.TrimSuffix(caddyConf.Addr.Path, "/")
if err := appendConfig(cfg); err != nil { if err := appendConfig(cfg); err != nil {
return configs, err return configs, err
} }

View File

@ -64,7 +64,7 @@ func (f FileManager) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, err
} }
// Checks if the request URL is for the WebDav server // Checks if the request URL is for the WebDav server
if strings.HasPrefix(r.URL.Path, c.WebDavURL) { if httpserver.Path(r.URL.Path).Matches(c.WebDavURL) {
// Checks for user permissions relatively to this PATH // Checks for user permissions relatively to this PATH
if !user.Allowed(strings.TrimPrefix(r.URL.Path, c.WebDavURL)) { if !user.Allowed(strings.TrimPrefix(r.URL.Path, c.WebDavURL)) {
return http.StatusForbidden, nil return http.StatusForbidden, nil