File edit modal

This commit is contained in:
2021-02-23 16:50:13 +01:00
parent 346fa355c4
commit 5e8598f112
10 changed files with 180 additions and 290 deletions

View File

@@ -28,7 +28,7 @@ func (wc *WebController) adminGlobalsForm(td *TemplateData, r *http.Request) (f
return f
}
var globalsMap = make(map[string]string)
for _, v := range globals.Globals {
for _, v := range globals {
f.Fields = append(f.Fields, Field{
Name: v.Key,
DefaultValue: v.Value,

View File

@@ -225,7 +225,7 @@ func (wc *WebController) serveSkynetViewer(w http.ResponseWriter, r *http.Reques
// Get the first few bytes from the file to probe the content type and
// length
rq, err := http.NewRequest("GET", "https://skydrain.net/file/"+p.ByName("id"), nil)
rq, err := http.NewRequest("GET", "https://siasky.net/file/"+p.ByName("id"), nil)
if err != nil {
log.Warn("Failed to make request to sia portal: %s", err)
w.WriteHeader(http.StatusInternalServerError)

View File

@@ -3,123 +3,12 @@ package webcontroller
import (
"fmt"
"net/http"
"sort"
"strings"
"fornaxian.tech/pixeldrain_server/api/restapi/apitype"
"github.com/Fornaxian/log"
"github.com/julienschmidt/httprouter"
)
type filesystemPath struct {
Path []filesystemNode
Base filesystemNode
Children []filesystemNode
}
type filesystemNode struct {
HREF string
Icon string
Name string
Type string
FileSize int64
FileType string
}
func convFilesystemNode(bucketID string, v apitype.FilesystemNode) (node filesystemNode) {
node = filesystemNode{
HREF: "/fs/" + bucketID + v.Path,
Type: v.Type,
Name: v.Name,
FileSize: v.FileSize,
FileType: v.FileType,
}
if node.Type == "dir" {
node.Icon = "/res/img/mime/folder.png"
} else {
node.Icon = "/res/img/mime/empty.png"
}
return node
}
func (wc *WebController) serveFilesystem(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
var err error
var td = wc.newTemplateData(w, r)
var path = strings.TrimPrefix(p.ByName("path"), "/")
var fsPath filesystemPath
if path == "" {
buckets, err := td.PixelAPI.GetFilesystemBuckets()
if err != nil {
if err.Error() == "not_found" {
wc.templates.Get().ExecuteTemplate(w, "404", td)
} else if err.Error() == "authentication_required" {
http.Redirect(w, r, "/login", http.StatusSeeOther)
} else {
log.Error("Failed to get buckets: %s", err)
wc.templates.Get().ExecuteTemplate(w, "500", td)
}
return
}
for _, v := range buckets.Buckets {
fsPath.Children = append(fsPath.Children, filesystemNode{
HREF: "/fs/" + v.ID,
Icon: "/res/img/mime/folder-remote.png",
Type: "dir",
Name: v.Name,
FileSize: 0,
FileType: "inode/directory",
})
}
} else {
log.Info("getting path %s", path)
node, err := td.PixelAPI.GetFilesystemPath(path)
if err != nil {
if err.Error() == "not_found" || err.Error() == "path_not_found" {
wc.templates.Get().ExecuteTemplate(w, "404", td)
} else {
log.Error("Failed to get path: %s", err)
wc.templates.Get().ExecuteTemplate(w, "500", td)
}
return
}
if node.Base.Type == "file" {
http.Redirect(w, r, "/api/filesystem/"+path, http.StatusSeeOther)
return
}
for _, v := range node.Parents {
fsPath.Path = append(fsPath.Path, convFilesystemNode(node.Bucket.ID, v))
}
fsPath.Base = convFilesystemNode(node.Bucket.ID, node.Base)
for _, v := range node.Base.Children {
fsPath.Children = append(fsPath.Children, convFilesystemNode(node.Bucket.ID, v))
}
}
sort.Slice(fsPath.Children, func(i, j int) (less bool) {
// Directories always come first. Make sure we're comparing apples with
// apples
if fsPath.Children[i].Type != fsPath.Children[j].Type {
return fsPath.Children[i].Type == "dir"
}
return fsPath.Children[i].Name < fsPath.Children[j].Name
})
td.Title = "Filesystem"
td.Other = fsPath
err = wc.templates.Get().ExecuteTemplate(w, "filesystem", td)
if err != nil && !strings.Contains(err.Error(), "broken pipe") {
log.Error("Error executing template filesystem: %s", err)
}
}
func (wc *WebController) serveDirectory(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
var err error
var td = wc.newTemplateData(w, r)
@@ -138,7 +27,7 @@ func (wc *WebController) serveDirectory(w http.ResponseWriter, r *http.Request,
td.Title = fmt.Sprintf("%s ~ pixeldrain", node.Base.Name)
td.Other = node
err = wc.templates.Get().ExecuteTemplate(w, "filesystem_svelte", td)
err = wc.templates.Get().ExecuteTemplate(w, "filesystem", td)
if err != nil && !strings.Contains(err.Error(), "broken pipe") {
log.Error("Error executing template filesystem: %s", err)
}

View File

@@ -114,6 +114,7 @@ func New(
{GET, "u/:id" /* */, wc.serveFileViewer},
{GET, "u/:id/preview" /* */, wc.serveFilePreview},
{GET, "l/:id" /* */, wc.serveListViewer},
{GET, "d/*path" /* */, wc.serveDirectory},
{GET, "s/:id" /* */, wc.serveSkynetViewer},
{GET, "t" /* */, wc.serveTemplate("text_editor", false)},
{GET, "donation" /* */, wc.serveMarkdown("donation.md", false)},
@@ -150,10 +151,6 @@ func New(
{GET, "user/password_reset_confirm" /**/, wc.serveForm(wc.passwordResetConfirmForm, false)},
{PST, "user/password_reset_confirm" /**/, wc.serveForm(wc.passwordResetConfirmForm, false)},
// Filesystem
{GET, "fs/*path", wc.serveFilesystem},
{GET, "d/*path", wc.serveDirectory},
{GET, "patreon_activate" /* */, wc.serveForm(wc.patreonLinkForm, true)},
{PST, "patreon_activate" /* */, wc.serveForm(wc.patreonLinkForm, true)},