From 794a38da193c2cd0a19fb9fcac0a1b6f417d923b Mon Sep 17 00:00:00 2001 From: Fornax Date: Fri, 19 May 2023 21:45:42 +0200 Subject: [PATCH] Add realtime stats for filesystem --- res/template/403.html | 23 ++++++ svelte/src/file_viewer/FileStats.svelte | 1 + svelte/src/filesystem/EditWindow.svelte | 7 +- svelte/src/filesystem/FileStats.svelte | 93 +++++++++++++++++++++++++ svelte/src/filesystem/Navigator.svelte | 1 + svelte/src/filesystem/Toolbar.svelte | 3 + webcontroller/filesystem.go | 6 +- webcontroller/web_controller.go | 6 ++ 8 files changed, 133 insertions(+), 7 deletions(-) create mode 100644 res/template/403.html create mode 100644 svelte/src/filesystem/FileStats.svelte diff --git a/res/template/403.html b/res/template/403.html new file mode 100644 index 0000000..c1a4a70 --- /dev/null +++ b/res/template/403.html @@ -0,0 +1,23 @@ +{{define "403"}} + + + {{template "meta_tags" "Forbidden"}} + + + + {{template "page_top" .}} +
+

Forbidden

+
+
+
+

+ You do not have permission to access this resource. +

+
+
+ {{template "page_bottom" .}} + {{template "analytics"}} + + +{{end}} diff --git a/svelte/src/file_viewer/FileStats.svelte b/svelte/src/file_viewer/FileStats.svelte index 300d3be..cda3976 100644 --- a/svelte/src/file_viewer/FileStats.svelte +++ b/svelte/src/file_viewer/FileStats.svelte @@ -7,6 +7,7 @@ export let file = { size: 0, downloads: 0, bandwidth_used: 0, + bandwidth_used_paid: 0, } let views = 0 diff --git a/svelte/src/filesystem/EditWindow.svelte b/svelte/src/filesystem/EditWindow.svelte index 9e8351d..1a17e12 100644 --- a/svelte/src/filesystem/EditWindow.svelte +++ b/svelte/src/filesystem/EditWindow.svelte @@ -22,7 +22,6 @@ export const edit = (f, t = "file") => { shared = !(file.id === undefined || file.id === "") read_password = file.read_password ? file.read_password : "" write_password = file.write_password ? file.write_password : "" - mode = file.mode_octal visible = true } @@ -32,7 +31,6 @@ let file_name = "" let shared = false let read_password = "" let write_password = "" -let mode = "" const save = async () => { console.debug("Saving file", file.path) @@ -41,7 +39,6 @@ const save = async () => { bucket, file.path, { - mode: mode, shared: shared, read_password: read_password, write_password: write_password, @@ -95,8 +92,6 @@ const delete_file = async () => { File settings - - Delete

Delete this file or directory. If this is a directory then all @@ -133,7 +128,7 @@ const delete_file = async () => { diff --git a/svelte/src/filesystem/Navigator.svelte b/svelte/src/filesystem/Navigator.svelte index bbe8a34..39eb06d 100644 --- a/svelte/src/filesystem/Navigator.svelte +++ b/svelte/src/filesystem/Navigator.svelte @@ -37,6 +37,7 @@ export const navigate = async (path, push_history) => { let resp = await fs_get_node(state.root.id, path) open_node(resp, push_history) } catch (err) { + console.error(err) let errj = JSON.parse(err) if (errj.value === "path_not_found") { diff --git a/svelte/src/filesystem/Toolbar.svelte b/svelte/src/filesystem/Toolbar.svelte index d15f0a6..8d2903e 100644 --- a/svelte/src/filesystem/Toolbar.svelte +++ b/svelte/src/filesystem/Toolbar.svelte @@ -3,6 +3,7 @@ import { createEventDispatcher } from "svelte"; import Sharebar, { generate_share_url } from "./Sharebar.svelte"; import { formatDataVolume, formatThousands } from "../util/Formatting.svelte"; import { copy_text } from "../util/Util.svelte"; +import FileStats from "./FileStats.svelte"; let dispatch = createEventDispatcher() @@ -66,6 +67,8 @@ let share = async () => {

{#if state.base.type === "file"} + +
Size
{formatDataVolume(state.base.file_size, 3)}
{:else if state.base.type === "dir" || state.base.type === "bucket"} diff --git a/webcontroller/filesystem.go b/webcontroller/filesystem.go index 6207562..e8af73f 100644 --- a/webcontroller/filesystem.go +++ b/webcontroller/filesystem.go @@ -25,7 +25,11 @@ func (wc *WebController) serveDirectory(w http.ResponseWriter, r *http.Request, 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) + wc.serveNotFound(w, r) + return + } else if err.Error() == "forbidden" { + wc.serveForbidden(w, r) + return } else if err.Error() == "authentication_required" { http.Redirect(w, r, "/login", http.StatusSeeOther) } else { diff --git a/webcontroller/web_controller.go b/webcontroller/web_controller.go index f51fe13..0d97268 100644 --- a/webcontroller/web_controller.go +++ b/webcontroller/web_controller.go @@ -387,6 +387,12 @@ func (wc *WebController) serveForm( } } +func (wc *WebController) serveForbidden(w http.ResponseWriter, r *http.Request) { + log.Debug("Forbidden: %s", r.URL) + w.WriteHeader(http.StatusForbidden) + wc.templates.Get().ExecuteTemplate(w, "403", wc.newTemplateData(w, r)) +} + func (wc *WebController) serveNotFound(w http.ResponseWriter, r *http.Request) { log.Debug("Not Found: %s", r.URL) w.WriteHeader(http.StatusNotFound)