initial commit
This commit is contained in:
commit
f6e1813d15
7 changed files with 296 additions and 0 deletions
57
authdav.go
Normal file
57
authdav.go
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
// Copyright (C) 2019 Marius Schellenberger
|
||||
|
||||
package authdav
|
||||
|
||||
import (
|
||||
"golang.org/x/net/webdav"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
// DefaultRealm is the HTTP Basic Auth default realm
|
||||
const DefaultRealm = "WebDav"
|
||||
|
||||
// Authenticator is the interface for Webdav HTTP Basic Auth
|
||||
type Authenticator interface {
|
||||
BasicAuth(username string, password string) bool
|
||||
}
|
||||
|
||||
// WebdavBasicAuth is a WebDav wrapper for HTTP Basic Auth and implements the http.Handler interface
|
||||
type WebdavBasicAuth struct {
|
||||
dav *webdav.Handler
|
||||
auth Authenticator
|
||||
realm string
|
||||
}
|
||||
|
||||
// NewWebdavBasicAuth returns a new WebdavBasicAuth wrapper
|
||||
// prefix can be empty
|
||||
// ls and log can be nil
|
||||
// an empty authenticator disables HTTP Basic Auth
|
||||
// realm can be empty and defaults to authdav.DefaultRealm
|
||||
func NewWebdavBasicAuth(prefix string, fs webdav.FileSystem, ls webdav.LockSystem, log func(*http.Request, error), auth Authenticator, realm string) *WebdavBasicAuth {
|
||||
if ls == nil {
|
||||
ls = webdav.NewMemLS()
|
||||
}
|
||||
if realm == "" {
|
||||
realm = DefaultRealm
|
||||
}
|
||||
dav := &webdav.Handler{
|
||||
Prefix: prefix,
|
||||
FileSystem: fs,
|
||||
LockSystem: ls,
|
||||
Logger: log,
|
||||
}
|
||||
return &WebdavBasicAuth{dav, auth, `Basic realm="` + realm + `"`}
|
||||
}
|
||||
|
||||
func (h *WebdavBasicAuth) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
if h.auth != nil {
|
||||
u, p, ok := r.BasicAuth()
|
||||
if !ok || !h.auth.BasicAuth(u, p) {
|
||||
w.Header().Set("WWW-Authenticate", h.realm)
|
||||
w.WriteHeader(http.StatusUnauthorized)
|
||||
w.Write([]byte("Unauthorised\n"))
|
||||
return
|
||||
}
|
||||
}
|
||||
h.dav.ServeHTTP(w, r)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue