From b029dc9e12a8d83f436f38ff74166be461803c55 Mon Sep 17 00:00:00 2001 From: stringsplit <77242831+nbitzz@users.noreply.github.com> Date: Thu, 11 May 2023 20:42:24 +0000 Subject: [PATCH] ok so small few changes --- src/server/index.ts | 2 ++ src/server/lib/files.ts | 41 +++++++++++++++++++++++--- src/server/routes/adminRoutes.ts | 36 ++++++++++++++++++++++ src/server/routes/fileApiRoutes.ts | 9 ++++++ src/svelte/elem/prompts/uploads.js | 17 ++++++----- src/svelte/elem/pulldowns/Files.svelte | 5 ++++ 6 files changed, 98 insertions(+), 12 deletions(-) create mode 100644 src/server/routes/adminRoutes.ts diff --git a/src/server/index.ts b/src/server/index.ts index 7544241..9d11014 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -14,6 +14,7 @@ import * as Accounts from "./lib/accounts" import { authRoutes, auth_setFilesObj } from "./routes/authRoutes"; import { fileApiRoutes, setFilesObj } from "./routes/fileApiRoutes"; +import { adminRoutes, admin_setFilesObj } from "./routes/adminRoutes"; require("dotenv").config() @@ -50,6 +51,7 @@ let files = new Files(client,config) setFilesObj(files) auth_setFilesObj(files) +admin_setFilesObj(files) // routes (could probably make these use routers) diff --git a/src/server/lib/files.ts b/src/server/lib/files.ts index ac54dbe..567d6d1 100644 --- a/src/server/lib/files.ts +++ b/src/server/lib/files.ts @@ -49,7 +49,8 @@ export interface FilePointer { owner?:string, sizeInBytes?:number, tag?:string, - visibility?:FileVisibility + visibility?:FileVisibility, + reserved?: boolean } export interface StatusCodeError { @@ -140,7 +141,8 @@ export default class Files { sizeInBytes:0, owner:settings.owner, - visibility: settings.owner ? "private" : "public" + visibility: settings.owner ? "private" : "public", + reserved: true } // get buffer @@ -196,6 +198,18 @@ export default class Files { files.index(settings.owner,uploadId) } + // this code deletes the files from discord, btw + // if need be, replace with job queue system + + if (!this.uploadChannel) {reject(); return} + for (let x of ogf.messageids) { + this.uploadChannel.messages.fetch(x).then((m) => { + m.delete() + }).catch((e) => { + console.error(e) + }) + } + resolve(await this.writeFile( uploadId, { @@ -205,7 +219,14 @@ export default class Files { sizeInBytes:fBuffer.byteLength, owner:settings.owner, - visibility: settings.owner ? Accounts.getFromId(settings.owner)?.defaultFileVisibility : undefined + visibility: ogf ? ogf.visibility + : ( + settings.owner + ? Accounts.getFromId(settings.owner)?.defaultFileVisibility + : undefined + ), + // so that json.stringify doesnt include tag:undefined + ...(ogf.tag ? {tag:ogf.tag} : {}) } )) }) @@ -286,10 +307,22 @@ export default class Files { if (tmp.owner) { files.deindex(tmp.owner,uploadId) } + // this code deletes the files from discord, btw + // if need be, replace with job queue system + + if (!this.uploadChannel) {reject(); return} + for (let x of tmp.messageids) { + this.uploadChannel.messages.fetch(x).then((m) => { + m.delete() + }).catch((e) => { + console.error(e) + }) + } + delete this.files[uploadId]; writeFile(process.cwd()+"/.data/files.json",JSON.stringify(this.files),(err) => { if (err) { - this.files[uploadId] = tmp + this.files[uploadId] = tmp // !! this may not work, since tmp is a link to this.files[uploadId]? reject() } else { resolve() diff --git a/src/server/routes/adminRoutes.ts b/src/server/routes/adminRoutes.ts new file mode 100644 index 0000000..8697905 --- /dev/null +++ b/src/server/routes/adminRoutes.ts @@ -0,0 +1,36 @@ +import bodyParser from "body-parser"; +import { Router } from "express"; +import * as Accounts from "../lib/accounts"; +import * as auth from "../lib/auth"; +import bytes from "bytes" +import {writeFile} from "fs"; + +import ServeError from "../lib/errors"; +import Files from "../lib/files"; + +let parser = bodyParser.json({ + type: ["text/plain","application/json"] +}) + +export let adminRoutes = Router(); +let files:Files + +export function admin_setFilesObj(newFiles:Files) { + files = newFiles +} + +let config = require(`${process.cwd()}/config.json`) + +adminRoutes.post("/manage", parser, (req,res) => { + + if (!auth.validate(req.cookies.auth)) { + ServeError(res, 401, "not logged in") + return + } + + let acc = Accounts.getFromToken(req.cookies.auth) as Accounts.Account + + if (!acc) return + if (!acc.admin) return + +}) \ No newline at end of file diff --git a/src/server/routes/fileApiRoutes.ts b/src/server/routes/fileApiRoutes.ts index c262738..78e8720 100644 --- a/src/server/routes/fileApiRoutes.ts +++ b/src/server/routes/fileApiRoutes.ts @@ -62,6 +62,15 @@ fileApiRoutes.post("/manage", parser, (req,res) => { req.body.target.forEach((e:string) => { if (!acc.files.includes(e)) return + 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 + } + switch( req.body.action ) { case "delete": files.unlink(e) diff --git a/src/svelte/elem/prompts/uploads.js b/src/svelte/elem/prompts/uploads.js index 0592a6b..295adf5 100644 --- a/src/svelte/elem/prompts/uploads.js +++ b/src/svelte/elem/prompts/uploads.js @@ -165,6 +165,14 @@ export function fileOptions(optPicker,file) { case "tag": + if (file.tag) { + fetch(`/files/manage`, {method: "POST", body: JSON.stringify({ + target: [ file.id ], + action: "setTag" + })}).then(fetchFilePointers) + return + } + optPicker.picker("Enter a tag (max 30char)",[ { name: "Tag name", @@ -175,20 +183,13 @@ export function fileOptions(optPicker,file) { { name: "OK", icon: "/static/assets/icons/update.svg", + description: "", id: true } ]).then((exp) => { if (exp && exp.selected) { - if (file.tag) { - fetch(`/files/manage`, {method: "POST", body: JSON.stringify({ - target: [ file.id ], - action: "setTag" - })}).then(fetchFilePointers) - return - } - fetch(`/files/manage`, {method: "POST", body: JSON.stringify({ target: [ file.id ], action: "setTag", diff --git a/src/svelte/elem/pulldowns/Files.svelte b/src/svelte/elem/pulldowns/Files.svelte index e69cf10..820b16a 100644 --- a/src/svelte/elem/pulldowns/Files.svelte +++ b/src/svelte/elem/pulldowns/Files.svelte @@ -37,6 +37,11 @@

{file.visibility||"public"}  {file.id}  —  {file.mime.split(";")[0]} + {#if file.reserved} +
+ uploading  + This file is currently being uploaded. Please wait. + {/if} {#if file.tag}
tag