experimental webdav upload

This commit is contained in:
ston1th 2019-08-31 16:43:54 +02:00
commit 7570b09f9f
10 changed files with 47 additions and 2 deletions

View file

@ -312,6 +312,11 @@ func serverFlags() []cli.Flag {
Usage: "enable debugging",
Destination: &config.Debug,
},
cli.BoolFlag{
Name: "webdav",
Usage: "enable webdav file uploader",
Destination: &config.WebDav,
},
}
}

View file

@ -20,6 +20,7 @@ const (
MovePrefix = "/move"
TagsPrefix = "/tags"
DeletePrefix = "/delete"
WebDavPrefix = "/webdav"
Favicon = "/favicon.ico"
BootstrapCSS = "/bootstrap.css"

View file

@ -80,4 +80,5 @@ type Config struct {
Foreground bool `json:"foreground,omitempty"`
SecureCookie bool `json:"secure_cookie,omitempty"`
Debug bool `json:"debug,omitempty"`
WebDav bool `json:"webdav,omitempty"`
}

View file

@ -64,6 +64,14 @@ func (db *DB) CreateUser(username, password string) error {
})
}
func (db *DB) BasicAuth(username, password string) bool {
_, err := db.Login(username, password)
if err == nil {
return true
}
return false
}
func (db *DB) Login(username, password string) (u core.User, err error) {
u, err = db.GetUser()
if err != nil {

View file

@ -35,6 +35,7 @@ var reserved = []string{
core.NewPrefix,
core.MovePrefix,
core.DeletePrefix,
core.WebDavPrefix,
core.Favicon,
core.BootstrapCSS,
core.CustomCSS,

View file

@ -6,6 +6,7 @@ import (
"bytes"
"context"
"errors"
"git.giftfish.de/ston1th/authdav"
"git.giftfish.de/ston1th/docstore/pkg/core"
"git.giftfish.de/ston1th/docstore/pkg/db"
"git.giftfish.de/ston1th/docstore/pkg/fs"
@ -14,6 +15,7 @@ import (
"git.giftfish.de/ston1th/godrop/v2"
"git.giftfish.de/ston1th/jwt/v3"
"github.com/gorilla/mux"
"golang.org/x/net/webdav"
"html/template"
"net"
"net/http"
@ -48,7 +50,6 @@ func NewHTTPServer(cfg core.Config, l net.Listener, s *scan.Scanner) (srv *HTTPS
Scanner: s,
Log: log.NewScanLog(0),
}
srv.handler = srv.buildRoutes()
srv.loadTemplates()
srv.srv = &http.Server{}
return
@ -75,6 +76,7 @@ func (s *HTTPServer) Start() (err error) {
if err != nil {
return errors.New("server: " + err.Error())
}
s.handler = s.buildRoutes()
if !s.DB.UserExists() {
log.Debug("server: starting register handler")
s.srv.Handler = s.register()
@ -107,6 +109,11 @@ func (s *HTTPServer) register() http.Handler {
func (s *HTTPServer) buildRoutes() http.Handler {
r := mux.NewRouter()
r.NotFoundHandler = &notFoundHandler{s}
if s.Config.WebDav {
fs := authdav.NewWriteOnlyOnceFileSystem(webdav.Dir(s.Config.DataDir))
h := authdav.NewWebdavBasicAuth(core.WebDavPrefix, fs, nil, webdavLogger, s.DB, "DocStore WebDav")
r.PathPrefix(core.WebDavPrefix).Handler(h)
}
for _, v := range routes {
r.HandleFunc(v.Path, s.contextWrapper(v.Handler)).Methods(v.Methods...)
}

14
pkg/server/webdav.go Normal file
View file

@ -0,0 +1,14 @@
package server
import (
"git.giftfish.de/ston1th/docstore/pkg/log"
"net/http"
)
func webdavLogger(r *http.Request, err error) {
if err != nil {
log.Printf("webdav: %s %s %s error: %s\n", r.RemoteAddr, r.Method, r.URL, err)
return
}
log.Printf("webdav: %s %s %s\n", r.RemoteAddr, r.Method, r.URL)
}