Simple webDAV auth implementation (#82)

This commit is contained in:
Antonio Navarro Perez 2021-10-11 18:50:18 +02:00 committed by GitHub
parent f6e155f07e
commit 02842b1917
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 25 additions and 4 deletions

View file

@ -161,7 +161,7 @@ func load(configPath string, port, webDAVPort int, fuseAllowOther bool) error {
return return
} }
if err := webdav.NewWebDAVServer(cfs, port); err != nil { if err := webdav.NewWebDAVServer(cfs, port, conf.WebDAV.User, conf.WebDAV.Pass); err != nil {
log.Error().Err(err).Msg("error starting webDAV") log.Error().Err(err).Msg("error starting webDAV")
} }
} }

View file

@ -20,6 +20,8 @@ func DefaultConfig() *Root {
}, },
WebDAV: &WebDAVGlobal{ WebDAV: &WebDAVGlobal{
Port: 36911, Port: 36911,
User: "admin",
Pass: "admin",
}, },
Torrent: &TorrentGlobal{ Torrent: &TorrentGlobal{
GlobalCacheSize: 1024, GlobalCacheSize: 1024,

View file

@ -18,6 +18,8 @@ type TorrentGlobal struct {
type WebDAVGlobal struct { type WebDAVGlobal struct {
Port int `yaml:"port"` Port int `yaml:"port"`
User string `yaml:"user"`
Pass string `yaml:"pass"`
} }
type HTTPGlobal struct { type HTTPGlobal struct {

View file

@ -7,6 +7,8 @@ http:
# WebDAV specific configuration. Remove this to disable WebDAV. # WebDAV specific configuration. Remove this to disable WebDAV.
webdav: webdav:
port: 36911 port: 36911
user: admin
pass: admin
# Specific configuration for torrent backend. # Specific configuration for torrent backend.
torrent: torrent:

View file

@ -8,7 +8,22 @@ import (
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
) )
func NewWebDAVServer(fs fs.Filesystem, port int) error { func NewWebDAVServer(fs fs.Filesystem, port int, user, pass string) error {
log.Info().Str("host", fmt.Sprintf("0.0.0.0:%d", port)).Msg("starting webDAV server") log.Info().Str("host", fmt.Sprintf("0.0.0.0:%d", port)).Msg("starting webDAV server")
return http.ListenAndServe(fmt.Sprintf("0.0.0.0:%d", port), newHandler(fs))
srv := newHandler(fs)
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
username, password, _ := r.BasicAuth()
if username == user && password == pass {
srv.ServeHTTP(w, r)
return
}
w.Header().Set("WWW-Authenticate", `Basic realm="BASIC WebDAV REALM"`)
w.WriteHeader(401)
w.Write([]byte("401 Unauthorized\n"))
})
return http.ListenAndServe(fmt.Sprintf("0.0.0.0:%d", port), nil)
} }