From 78de4764bc79b61eae79a1433988553d17d1eaba Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Thu, 11 May 2023 17:59:49 -0700 Subject: [PATCH] custom css...hopefully --- assets/icons/paint.svg | 1 + pages/download.html | 5 +++ pages/error.html | 5 +++ pages/index.html | 5 +++ src/server/index.ts | 2 ++ src/server/lib/accounts.ts | 1 + src/server/lib/files.ts | 5 +++ src/server/routes/authRoutes.ts | 42 +++++++++++++++++++++-- src/server/routes/fileApiRoutes.ts | 3 -- src/svelte/elem/prompts/account.js | 30 ++++++++++++++++ src/svelte/elem/pulldowns/Accounts.svelte | 13 +++++-- src/svelte/elem/pulldowns/Files.svelte | 2 +- 12 files changed, 106 insertions(+), 8 deletions(-) create mode 100644 assets/icons/paint.svg diff --git a/assets/icons/paint.svg b/assets/icons/paint.svg new file mode 100644 index 0000000..8df3929 --- /dev/null +++ b/assets/icons/paint.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pages/download.html b/pages/download.html index fe4e29b..1bb749a 100644 --- a/pages/download.html +++ b/pages/download.html @@ -17,6 +17,11 @@ href="/static/style/downloads.css" > + + + + + + { ServeError(res,err.status,err.message) }) + } else { + ServeError(res, 404, "file not found") } diff --git a/src/server/lib/accounts.ts b/src/server/lib/accounts.ts index 99ec14c..ab40d8e 100644 --- a/src/server/lib/accounts.ts +++ b/src/server/lib/accounts.ts @@ -18,6 +18,7 @@ export interface Account { files : string[] admin : boolean defaultFileVisibility : FileVisibility + customCSS? : string } export function create(username:string,pwd:string,admin:boolean=false):Promise { diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index 9992638..fc20b0a 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -119,6 +119,11 @@ export default class Files { return } + if (this.files[uploadId] && this.files[uploadId].reserved) { + reject({status:400,message:"already uploading this file. if your file is stuck in this state, contact an administrator"}); + return + } + if (settings.name.length > 128) { reject({status:400,message:"name too long"}); return diff --git a/src/server/routes/authRoutes.ts b/src/server/routes/authRoutes.ts index 5fe84e8..d2cd0a4 100644 --- a/src/server/routes/authRoutes.ts +++ b/src/server/routes/authRoutes.ts @@ -4,7 +4,7 @@ import * as Accounts from "../lib/accounts"; import * as auth from "../lib/auth"; import ServeError from "../lib/errors"; -import Files, { FileVisibility } from "../lib/files"; +import Files, { FileVisibility, id_check_regex } from "../lib/files"; let parser = bodyParser.json({ type: ["text/plain","application/json"] @@ -124,7 +124,7 @@ authRoutes.post("/dfv", parser, (req,res) => { return } - if (['public','private','anonymous'].find(e => e == req.body.defaultFileVisibility)) { + if (['public','private','anonymous'].includes(req.body.defaultFileVisibility)) { acc.defaultFileVisibility = req.body.defaultFileVisibility Accounts.save() res.send(`dfv has been set to ${acc.defaultFileVisibility}`) @@ -134,6 +134,26 @@ authRoutes.post("/dfv", parser, (req,res) => { } }) +authRoutes.post("/customcss", parser, (req,res) => { + let acc = Accounts.getFromToken(req.cookies.auth) + if (!acc) { + ServeError(res, 401, "not logged in") + return + } + + if (typeof req.body.fileId != "string") return + + if (id_check_regex.test(req.body.fileId) && req.body.fileId.length <= config.maxUploadIdLength) { + acc.customCSS = req.body.fileId + if (!req.body.fileId) delete acc.customCSS + Accounts.save() + res.send(`custom css saved`) + } else { + res.status(400) + res.send("invalid fileid") + } +}) + authRoutes.post("/delete_account", parser, (req,res) => { let acc = Accounts.getFromToken(req.cookies.auth) if (!acc) { @@ -243,4 +263,22 @@ authRoutes.get("/me", (req,res) => { sessionExpires: auth.AuthTokens.find(e => e.token == req.cookies.auth)?.expire }) } +}) + +authRoutes.get("/customCSS", (req,res) => { + if (!auth.validate(req.cookies.auth)) { + ServeError(res, 401, "not logged in") + return + } + + // lazy rn so + + let acc = Accounts.getFromToken(req.cookies.auth) + if (acc) { + if (acc.customCSS) { + res.redirect(`/file/${acc.customCSS}`) + } else { + res.send("") + } + } else res.send("") }) \ No newline at end of file diff --git a/src/server/routes/fileApiRoutes.ts b/src/server/routes/fileApiRoutes.ts index 78e8720..15d56f2 100644 --- a/src/server/routes/fileApiRoutes.ts +++ b/src/server/routes/fileApiRoutes.ts @@ -65,9 +65,6 @@ fileApiRoutes.post("/manage", parser, (req,res) => { let fp = files.getFilePointer(e) if (fp.reserved) { - if (req.body.target.length == 1) { - ServeError(res, 400, `cannot modify a file that is being uploaded, please contact an administrator if your file is stuck in this state.`) - } return } diff --git a/src/svelte/elem/prompts/account.js b/src/svelte/elem/prompts/account.js index 35428af..79fe285 100644 --- a/src/svelte/elem/prompts/account.js +++ b/src/svelte/elem/prompts/account.js @@ -112,6 +112,36 @@ export function pwdChng(optPicker) { optPicker.picker(`${response.status} ${response.statusText}`,[]) } + fetchAccountData() + }) + } + }) +} + +export function customcss(optPicker) { + optPicker.picker("Set custom CSS",[ + { + name: "Enter a file ID", + icon: "/static/assets/icons/file.svg", + id: "fileid", + inputSettings: {} + }, + { + name: "OK", + icon: "/static/assets/icons/update.svg", + description: "Refresh to apply changes", + id: true + } + ]).then((exp) => { + if (exp && exp.selected) { + fetch(`/auth/customcss`,{method:"POST", body:JSON.stringify({ + fileId:exp.fileid + })}).then((response) => { + + if (response.status != 200) { + optPicker.picker(`${response.status} ${response.statusText}`,[]) + } + fetchAccountData() }) } diff --git a/src/svelte/elem/pulldowns/Accounts.svelte b/src/svelte/elem/pulldowns/Accounts.svelte index 1135ef9..e91f775 100644 --- a/src/svelte/elem/pulldowns/Accounts.svelte +++ b/src/svelte/elem/pulldowns/Accounts.svelte @@ -140,7 +140,7 @@

Uploads

- + - + +
+

Customization

+
+ + + {#if $account.admin}
diff --git a/src/svelte/elem/pulldowns/Files.svelte b/src/svelte/elem/pulldowns/Files.svelte index 820b16a..f7998b0 100644 --- a/src/svelte/elem/pulldowns/Files.svelte +++ b/src/svelte/elem/pulldowns/Files.svelte @@ -40,7 +40,7 @@ {#if file.reserved}
uploading  - This file is currently being uploaded. Please wait. + Uploading... {/if} {#if file.tag}