basic functions working
This commit is contained in:
parent
abc6159044
commit
ffeeae5702
22 changed files with 420 additions and 129 deletions
|
|
@ -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])
|
||||
|
|
|
|||
|
|
@ -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":
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
Loading…
Add table
Add a link
Reference in a new issue