basic functions working

This commit is contained in:
ston1th 2019-05-02 14:17:24 +02:00
commit ffeeae5702
22 changed files with 420 additions and 129 deletions

View file

@ -9,6 +9,7 @@ import (
"git.giftfish.de/ston1th/jwt/v3"
"github.com/gorilla/mux"
"html/template"
"io"
"net/http"
"net/url"
"reflect"
@ -27,7 +28,7 @@ func newContext(w http.ResponseWriter, r *http.Request, s *HTTPServer) *Context
h.Set("X-Frame-Options", "sameorigin")
h.Set("X-Content-Type-Options", "nosniff")
h.Set("X-XSS-Protection", "1; mode=block")
h.Set("Content-Security-Policy", "default-src 'none';object-src 'self';frame-src 'self';style-src 'self';img-src 'self' https: data:;connect-src 'self';frame-ancestors 'self'")
h.Set("Content-Security-Policy", "default-src 'none';object-src 'self';frame-src 'self';style-src 'self';img-src 'self' data:;connect-src 'self';frame-ancestors 'self'")
h.Set("Referrer-Policy", "same-origin")
return &Context{
Request: r,
@ -202,6 +203,15 @@ func (c *Context) Var(name string) (ret string) {
return
}
func (c *Context) File(name string) (io.Reader, string, error) {
var filename string
f, fh, err := c.Request.FormFile(name)
if fh != nil {
filename = fh.Filename
}
return f, filename, err
}
// CheckXsrf validates the xsrf token
func (c *Context) CheckXsrf() (ok bool) {
ok = checkXsrf(c.Form("token"), c.Token.RawSig()[:keySize])

View file

@ -216,18 +216,85 @@ func indexHandler(ctx *Context) {
}
}
func uploadHandler(ctx *Context) {
path := strings.TrimPrefix(ctx.Path(), core.UploadPrefix)
ctx.Data = webData{
Title: "Upload",
BodyTitle: "Upload",
}
ctx.Data.Path = path
ctx.Template("uploadHandler")
switch ctx.Method() {
case "GET":
ctx.Exec()
case "POST":
f, orig, err := ctx.File("file")
if err != nil {
ctx.Error(err)
return
}
newfile, err := ctx.Srv.FS.NewFile(f, path, orig, ctx.Form("name"))
if err != nil {
ctx.Error(err)
return
}
ctx.Redirect(newfile, http.StatusFound)
}
}
func newDirHandler(ctx *Context) {
path := strings.TrimPrefix(ctx.Path(), core.NewPrefix)
ctx.Data = webData{
Title: "Create Directory",
BodyTitle: "Create Directory",
}
ctx.Data.Path = path
ctx.Template("newDirHandler")
switch ctx.Method() {
case "GET":
ctx.Exec()
case "POST":
err := ctx.Srv.FS.Mkdir(path, ctx.Form("name"))
if err != nil {
ctx.Error(err)
return
}
ctx.Redirect(path, http.StatusFound)
}
}
func moveHandler(ctx *Context) {
path := strings.TrimPrefix(ctx.Path(), core.MovePrefix)
ctx.Data = webData{
Title: "Move File",
BodyTitle: "Move File",
mode, err := ctx.Srv.FS.Mode(path)
if err != nil {
ctx.Error(err)
return
}
switch mode {
case fs.IsFile:
ctx.Data = webData{
Title: "Move File",
BodyTitle: "Move File",
}
case fs.IsDir:
ctx.Data = webData{
Title: "Move Directory",
BodyTitle: "Move Directory",
}
default:
ctx.Data = webData{
Title: "Move",
BodyTitle: "Move",
}
ctx.Error(noSuchFile)
return
}
ctx.Data.Path = path
ctx.Data.Paths = ctx.Srv.FS.Recursive(path)
_, ctx.Data.Data = filepath.Split(path)
ctx.Template("moveHandler")
switch ctx.Method() {
case "GET":
ctx.Data.Path = path
ctx.Data.Paths = ctx.Srv.FS.Recursive()
_, ctx.Data.Data = filepath.Split(path)
ctx.Exec()
case "POST":
name := ctx.Form("name")
@ -320,6 +387,7 @@ func dirHandler(ctx *Context) {
}
dir := ctx.Srv.FS.ReadDir(path)
ctx.Srv.DB.GetIndexed(dir.Files)
ctx.Data.Path = path
ctx.Data.Data = dir
ctx.Data.Paths = fs.Paths(path)
ctx.Exec()
@ -328,11 +396,14 @@ func dirHandler(ctx *Context) {
Title: "Document Viewer",
}
ctx.Template("fileHandler")
ctx.Data.Data = core.RawPrefix + path
ctx.Data.Data = core.Path{
Name: path,
Abs: core.RawPrefix + path,
Flag: ctx.Srv.DB.IsIndexed(path),
}
ctx.Data.Paths = fs.Paths(path)
ctx.Exec()
}
case "POST":
}
}

View file

@ -50,6 +50,20 @@ var prefixRoutes = []route{
indexHandler)),
[]string{"GET", "POST"},
},
{
core.UploadPrefix,
jwtHandler(
authHandler(
uploadHandler)),
[]string{"GET", "POST"},
},
{
core.NewPrefix,
jwtHandler(
authHandler(
newDirHandler)),
[]string{"GET", "POST"},
},
{
core.MovePrefix,
jwtHandler(
@ -69,7 +83,7 @@ var prefixRoutes = []route{
jwtHandler(
authHandler(
dirHandler)),
[]string{"GET", "POST", "PUT", "DELETE"},
[]string{"GET"},
},
}

File diff suppressed because one or more lines are too long