i dont know what to do

ill figure it out later
This commit is contained in:
split / May 2024-05-01 20:09:11 -07:00
parent 459c40bece
commit 17db90898f
4 changed files with 45 additions and 7 deletions

View file

@ -149,7 +149,7 @@ export namespace files {
* @param fileId The target file's ID * @param fileId The target file's ID
* @returns Promise that resolves after accounts.json finishes writing * @returns Promise that resolves after accounts.json finishes writing
*/ */
export function index(accountId:string,fileId:string) { export function index(accountId:string,fileId:string,noWrite:boolean = false) {
// maybe replace with a obj like // maybe replace with a obj like
// { x:true } // { x:true }
// for faster lookups? not sure if it would be faster // for faster lookups? not sure if it would be faster
@ -158,7 +158,7 @@ export namespace files {
if (acc.files.find(e => e == fileId)) return if (acc.files.find(e => e == fileId)) return
acc.files.push(fileId) acc.files.push(fileId)
return save() if (!noWrite) return save()
} }
/** /**

View file

@ -11,6 +11,7 @@ import * as Accounts from "./accounts.js"
import { z } from "zod" import { z } from "zod"
import * as schemas from "./schemas/files.js" import * as schemas from "./schemas/files.js"
import { issuesToMessage } from "./middleware.js" import { issuesToMessage } from "./middleware.js"
import file from "../routes/api/v1/file/index.js"
export let alphanum = Array.from( export let alphanum = Array.from(
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
@ -695,8 +696,41 @@ export default class Files {
delete this.files[uploadId] delete this.files[uploadId]
if (!noWrite) if (!noWrite)
this.write().catch((err) => { return this.write()
throw err }
})
async chown(uploadId: string, newOwner?: string, noWrite: boolean = false) {
let target = this.files[uploadId]
if (target.owner) {
let i = files.deindex(target.owner, uploadId, Boolean(newOwner && noWrite))
if (i) await i
}
target.owner = newOwner
if (newOwner) {
let i = files.index(newOwner, uploadId, noWrite)
if (i) await i
}
if (!noWrite)
return this.write()
}
async mv(uploadId: string, newId: string, noWrite: boolean = false) {
let target = this.files[uploadId]
if (target.owner) {
let owner = Accounts.getFromId(target.owner)
if (owner) {
owner.files.splice(owner.files.indexOf(uploadId), 1, newId)
if (!noWrite)
await Accounts.save()
}
}
this.files[newId] = target
delete this.files[uploadId]
if (!noWrite)
return this.write()
} }
} }

View file

@ -103,6 +103,7 @@ export const issuesToMessage = function(issues: z.ZodIssue[]) {
export const scheme = function(scheme: z.ZodTypeAny): RequestHandler { export const scheme = function(scheme: z.ZodTypeAny): RequestHandler {
return async function(ctx, next) { return async function(ctx, next) {
let chk = scheme.safeParse(await ctx.req.json()) let chk = scheme.safeParse(await ctx.req.json())
ctx.set("parsedScheme", chk.data)
if (chk.success) return next() if (chk.success) return next()
else return ServeError(ctx, 400, issuesToMessage(chk.error.issues)) else return ServeError(ctx, 400, issuesToMessage(chk.error.issues))
} }

View file

@ -4,17 +4,20 @@ import * as auth from "../../../../lib/auth.js"
import RangeParser, { type Range } from "range-parser" import RangeParser, { type Range } from "range-parser"
import ServeError from "../../../../lib/errors.js" import ServeError from "../../../../lib/errors.js"
import Files, { WebError } from "../../../../lib/files.js" import Files, { WebError } from "../../../../lib/files.js"
import { getAccount, requiresPermissions } from "../../../../lib/middleware.js" import { getAccount, requiresAccount, requiresPermissions, scheme } from "../../../../lib/middleware.js"
import {Readable} from "node:stream" import {Readable} from "node:stream"
import type {ReadableStream as StreamWebReadable} from "node:stream/web" import type {ReadableStream as StreamWebReadable} from "node:stream/web"
import formidable from "formidable" import formidable from "formidable"
import { HttpBindings } from "@hono/node-server" import { HttpBindings } from "@hono/node-server"
import pkg from "../../../../../../package.json" assert {type: "json"} import pkg from "../../../../../../package.json" assert {type: "json"}
import { type StatusCode } from "hono/utils/http-status" import { type StatusCode } from "hono/utils/http-status"
import { z } from "zod"
import { FileSchemas } from "../../../../lib/schemas/index.js"
const router = new Hono<{ const router = new Hono<{
Variables: { Variables: {
account: Accounts.Account account: Accounts.Account,
parsedSchema: any
}, },
Bindings: HttpBindings Bindings: HttpBindings
}>() }>()