added nextcloud
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
import { Request } from "express";
|
||||
import { WebDAVClient } from "webdav";
|
||||
import { DIRS } from "./server";
|
||||
|
||||
|
||||
export async function statOne(fpath: string, client: WebDAVClient) {
|
||||
const parent = fpath.replace(/\/[^/]+$/, '') || '/',
|
||||
base = fpath.split('/').filter(Boolean).pop(),
|
||||
list = await client.getDirectoryContents(parent, { deep: false }),
|
||||
entry = Array.isArray(list) ? list.find((e: any) => e.basename === base) : undefined;
|
||||
|
||||
if (!entry) throw `not found: ${fpath}`;
|
||||
return { etag: entry.etag as string, size: Number(entry.size), mime: entry.mime as string | undefined };
|
||||
}
|
||||
|
||||
export const toRegExp = (spec: string): RegExp | null => {
|
||||
// slash-delimited form: /pattern/flags
|
||||
const m = spec.match(/^\/(.+)\/([a-z]*)$/i);
|
||||
try {
|
||||
if (m) {
|
||||
const [, source, flags] = m;
|
||||
return new RegExp(source, flags);
|
||||
}
|
||||
|
||||
// raw pattern form: "pattern"
|
||||
return new RegExp(spec);
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
export function checkIfHasPerms(req: Request) {
|
||||
if (!req.body) {
|
||||
return false;
|
||||
}
|
||||
const { fpath, obj_type, deep, usecache } = req.body,
|
||||
o = { fpath, obj_type, deep, usecache };
|
||||
|
||||
if (!fpath) return false;
|
||||
if (!DIRS) return o;
|
||||
if (fpath.includes('..')) return false;
|
||||
|
||||
return DIRS.find(r => fpath.match(r)) ? o : false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user