mirror of https://github.com/dirtbags/moth.git
83 lines
2.0 KiB
Go
83 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"time"
|
|
"context"
|
|
|
|
"golang.org/x/net/webdav"
|
|
)
|
|
|
|
type StubLockSystem struct {
|
|
}
|
|
|
|
func (ls *StubLockSystem) Confirm(now time.Time, name0, name1 string, conditions ...webdav.Condition) (release func(), err error) {
|
|
return nil, webdav.ErrConfirmationFailed
|
|
}
|
|
|
|
func (ls *StubLockSystem) Create(now time.Time, details webdav.LockDetails) (token string, err error) {
|
|
return "", webdav.ErrLocked
|
|
}
|
|
|
|
func (ls *StubLockSystem) Refresh(now time.Time, token string, duration time.Duration) (webdav.LockDetails, error) {
|
|
return webdav.LockDetails{}, webdav.ErrNoSuchLock
|
|
}
|
|
|
|
func (ls *StubLockSystem) Unlock(now time.Time, token string) error {
|
|
return webdav.ErrNoSuchLock
|
|
}
|
|
|
|
|
|
type MothFS struct {
|
|
}
|
|
|
|
func (fs *MothFS) Mkdir(ctx context.Context, name string, perm os.FileMode) error {
|
|
return os.ErrPermission
|
|
}
|
|
|
|
func (fs *MothFS) OpenFile(ctx context.Context, name string, flag int, perm os.FileMode) (webdav.File, error) {
|
|
f, err := os.Open("hello.txt")
|
|
return f, err
|
|
}
|
|
|
|
func (fs *MothFS) RemoveAll(ctx context.Context, name string) error {
|
|
return os.ErrPermission
|
|
}
|
|
|
|
func (fs *MothFS) Rename(ctx context.Context, oldName, newName string) error {
|
|
return os.ErrPermission
|
|
}
|
|
|
|
func (fs *MothFS) Stat(ctx context.Context, name string) (os.FileInfo, error) {
|
|
info, err := os.Stat("hello.txt")
|
|
return info, err
|
|
}
|
|
|
|
func main() {
|
|
//dirFlag := flag.String("d", "./", "Directory to serve from. Default is CWD")
|
|
httpPort := flag.Int("p", 80, "Port to serve on (Plain HTTP)")
|
|
|
|
flag.Parse()
|
|
|
|
srv := &webdav.Handler{
|
|
FileSystem: new(MothFS),
|
|
LockSystem: new(StubLockSystem),
|
|
Logger: func(r *http.Request, err error) {
|
|
if err != nil {
|
|
log.Printf("WEBDAV [%s]: %s, ERROR: %s\n", r.Method, r.URL, err)
|
|
} else {
|
|
log.Printf("WEBDAV [%s]: %s \n", r.Method, r.URL)
|
|
}
|
|
},
|
|
}
|
|
http.Handle("/", srv)
|
|
if err := http.ListenAndServe(fmt.Sprintf(":%d", *httpPort), nil); err != nil {
|
|
log.Fatalf("Error with WebDAV server: %v", err)
|
|
}
|
|
|
|
}
|