mirror of
https://github.com/mollersuite/monofile.git
synced 2024-11-24 22:56:26 -08:00
ok so small few changes
This commit is contained in:
parent
eb53609e79
commit
b029dc9e12
|
@ -14,6 +14,7 @@ import * as Accounts from "./lib/accounts"
|
||||||
|
|
||||||
import { authRoutes, auth_setFilesObj } from "./routes/authRoutes";
|
import { authRoutes, auth_setFilesObj } from "./routes/authRoutes";
|
||||||
import { fileApiRoutes, setFilesObj } from "./routes/fileApiRoutes";
|
import { fileApiRoutes, setFilesObj } from "./routes/fileApiRoutes";
|
||||||
|
import { adminRoutes, admin_setFilesObj } from "./routes/adminRoutes";
|
||||||
|
|
||||||
require("dotenv").config()
|
require("dotenv").config()
|
||||||
|
|
||||||
|
@ -50,6 +51,7 @@ let files = new Files(client,config)
|
||||||
|
|
||||||
setFilesObj(files)
|
setFilesObj(files)
|
||||||
auth_setFilesObj(files)
|
auth_setFilesObj(files)
|
||||||
|
admin_setFilesObj(files)
|
||||||
|
|
||||||
// routes (could probably make these use routers)
|
// routes (could probably make these use routers)
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,8 @@ export interface FilePointer {
|
||||||
owner?:string,
|
owner?:string,
|
||||||
sizeInBytes?:number,
|
sizeInBytes?:number,
|
||||||
tag?:string,
|
tag?:string,
|
||||||
visibility?:FileVisibility
|
visibility?:FileVisibility,
|
||||||
|
reserved?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface StatusCodeError {
|
export interface StatusCodeError {
|
||||||
|
@ -140,7 +141,8 @@ export default class Files {
|
||||||
sizeInBytes:0,
|
sizeInBytes:0,
|
||||||
|
|
||||||
owner:settings.owner,
|
owner:settings.owner,
|
||||||
visibility: settings.owner ? "private" : "public"
|
visibility: settings.owner ? "private" : "public",
|
||||||
|
reserved: true
|
||||||
}
|
}
|
||||||
|
|
||||||
// get buffer
|
// get buffer
|
||||||
|
@ -196,6 +198,18 @@ export default class Files {
|
||||||
files.index(settings.owner,uploadId)
|
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(
|
resolve(await this.writeFile(
|
||||||
uploadId,
|
uploadId,
|
||||||
{
|
{
|
||||||
|
@ -205,7 +219,14 @@ export default class Files {
|
||||||
sizeInBytes:fBuffer.byteLength,
|
sizeInBytes:fBuffer.byteLength,
|
||||||
|
|
||||||
owner:settings.owner,
|
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) {
|
if (tmp.owner) {
|
||||||
files.deindex(tmp.owner,uploadId)
|
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];
|
delete this.files[uploadId];
|
||||||
writeFile(process.cwd()+"/.data/files.json",JSON.stringify(this.files),(err) => {
|
writeFile(process.cwd()+"/.data/files.json",JSON.stringify(this.files),(err) => {
|
||||||
if (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()
|
reject()
|
||||||
} else {
|
} else {
|
||||||
resolve()
|
resolve()
|
||||||
|
|
36
src/server/routes/adminRoutes.ts
Normal file
36
src/server/routes/adminRoutes.ts
Normal file
|
@ -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
|
||||||
|
|
||||||
|
})
|
|
@ -62,6 +62,15 @@ fileApiRoutes.post("/manage", parser, (req,res) => {
|
||||||
req.body.target.forEach((e:string) => {
|
req.body.target.forEach((e:string) => {
|
||||||
if (!acc.files.includes(e)) return
|
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 ) {
|
switch( req.body.action ) {
|
||||||
case "delete":
|
case "delete":
|
||||||
files.unlink(e)
|
files.unlink(e)
|
||||||
|
|
|
@ -165,6 +165,14 @@ export function fileOptions(optPicker,file) {
|
||||||
|
|
||||||
case "tag":
|
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)",[
|
optPicker.picker("Enter a tag (max 30char)",[
|
||||||
{
|
{
|
||||||
name: "Tag name",
|
name: "Tag name",
|
||||||
|
@ -175,20 +183,13 @@ export function fileOptions(optPicker,file) {
|
||||||
{
|
{
|
||||||
name: "OK",
|
name: "OK",
|
||||||
icon: "/static/assets/icons/update.svg",
|
icon: "/static/assets/icons/update.svg",
|
||||||
|
description: "",
|
||||||
id: true
|
id: true
|
||||||
}
|
}
|
||||||
]).then((exp) => {
|
]).then((exp) => {
|
||||||
|
|
||||||
if (exp && exp.selected) {
|
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({
|
fetch(`/files/manage`, {method: "POST", body: JSON.stringify({
|
||||||
target: [ file.id ],
|
target: [ file.id ],
|
||||||
action: "setTag",
|
action: "setTag",
|
||||||
|
|
|
@ -37,6 +37,11 @@
|
||||||
<p class="detail">
|
<p class="detail">
|
||||||
<img src="/static/assets/icons/{file.visibility || "public"}.svg" alt={file.visibility||"public"} />
|
<img src="/static/assets/icons/{file.visibility || "public"}.svg" alt={file.visibility||"public"} />
|
||||||
<span class="number">{file.id}</span> — <span class="number">{file.mime.split(";")[0]}</span>
|
<span class="number">{file.id}</span> — <span class="number">{file.mime.split(";")[0]}</span>
|
||||||
|
{#if file.reserved}
|
||||||
|
<br />
|
||||||
|
<img src="/static/assets/icons/update.svg" alt="uploading"/>
|
||||||
|
This file is currently being uploaded. Please wait.
|
||||||
|
{/if}
|
||||||
{#if file.tag}
|
{#if file.tag}
|
||||||
<br />
|
<br />
|
||||||
<img src="/static/assets/icons/tag.svg" alt="tag"/>
|
<img src="/static/assets/icons/tag.svg" alt="tag"/>
|
||||||
|
|
Loading…
Reference in a new issue