mirror of
https://github.com/lifegpc/eh-downloader.git
synced 2026-06-06 05:38:44 +08:00
Add new API
This commit is contained in:
@@ -17,6 +17,7 @@ import * as $api_file_upload from "./routes/api/file/upload.ts";
|
|||||||
import * as $api_filemeta from "./routes/api/filemeta.ts";
|
import * as $api_filemeta from "./routes/api/filemeta.ts";
|
||||||
import * as $api_filemeta_token_ from "./routes/api/filemeta/[token].ts";
|
import * as $api_filemeta_token_ from "./routes/api/filemeta/[token].ts";
|
||||||
import * as $api_files_token_ from "./routes/api/files/[token].ts";
|
import * as $api_files_token_ from "./routes/api/files/[token].ts";
|
||||||
|
import * as $api_fs_list from "./routes/api/fs/list.ts";
|
||||||
import * as $api_gallery_gid_ from "./routes/api/gallery/[gid].ts";
|
import * as $api_gallery_gid_ from "./routes/api/gallery/[gid].ts";
|
||||||
import * as $api_gallery_list from "./routes/api/gallery/list.ts";
|
import * as $api_gallery_list from "./routes/api/gallery/list.ts";
|
||||||
import * as $api_gallery_meta_gids_ from "./routes/api/gallery/meta/[gids].ts";
|
import * as $api_gallery_meta_gids_ from "./routes/api/gallery/meta/[gids].ts";
|
||||||
@@ -62,6 +63,7 @@ const manifest = {
|
|||||||
"./routes/api/filemeta.ts": $api_filemeta,
|
"./routes/api/filemeta.ts": $api_filemeta,
|
||||||
"./routes/api/filemeta/[token].ts": $api_filemeta_token_,
|
"./routes/api/filemeta/[token].ts": $api_filemeta_token_,
|
||||||
"./routes/api/files/[token].ts": $api_files_token_,
|
"./routes/api/files/[token].ts": $api_files_token_,
|
||||||
|
"./routes/api/fs/list.ts": $api_fs_list,
|
||||||
"./routes/api/gallery/[gid].ts": $api_gallery_gid_,
|
"./routes/api/gallery/[gid].ts": $api_gallery_gid_,
|
||||||
"./routes/api/gallery/list.ts": $api_gallery_list,
|
"./routes/api/gallery/list.ts": $api_gallery_list,
|
||||||
"./routes/api/gallery/meta/[gids].ts": $api_gallery_meta_gids_,
|
"./routes/api/gallery/meta/[gids].ts": $api_gallery_meta_gids_,
|
||||||
|
|||||||
54
routes/api/fs/list.ts
Normal file
54
routes/api/fs/list.ts
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
import { Handlers } from "$fresh/server.ts";
|
||||||
|
import { User, UserPermission } from "../../../db.ts";
|
||||||
|
import { get_task_manager } from "../../../server.ts";
|
||||||
|
import { parse_bool } from "../../../server/parse_form.ts";
|
||||||
|
import { return_data, return_error } from "../../../server/utils.ts";
|
||||||
|
import { walk } from "@std/fs/walk";
|
||||||
|
import { isAbsolute } from "@std/path";
|
||||||
|
|
||||||
|
type _File = {
|
||||||
|
name: string;
|
||||||
|
dir: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type FileList = {
|
||||||
|
current: string;
|
||||||
|
list: _File[];
|
||||||
|
};
|
||||||
|
|
||||||
|
export const handler: Handlers = {
|
||||||
|
async GET(req, ctx) {
|
||||||
|
const user = <User | undefined> ctx.state.user;
|
||||||
|
if (
|
||||||
|
user && !user.is_admin &&
|
||||||
|
!(user.permissions & UserPermission.ManageTasks)
|
||||||
|
) {
|
||||||
|
return return_error(403, "Permission denied.");
|
||||||
|
}
|
||||||
|
const u = new URL(req.url);
|
||||||
|
const dir = await parse_bool(u.searchParams.get("dir"), true);
|
||||||
|
const file = await parse_bool(u.searchParams.get("file"), true);
|
||||||
|
let path = u.searchParams.get("path");
|
||||||
|
const m = get_task_manager();
|
||||||
|
if (!path) {
|
||||||
|
path = m.cfg.base;
|
||||||
|
}
|
||||||
|
if (!isAbsolute(path)) {
|
||||||
|
path = await Deno.realPath(path);
|
||||||
|
}
|
||||||
|
const list: _File[] = [];
|
||||||
|
for await (
|
||||||
|
const i of walk(path, {
|
||||||
|
maxDepth: 1,
|
||||||
|
includeDirs: dir,
|
||||||
|
includeFiles: file,
|
||||||
|
followSymlinks: true,
|
||||||
|
})
|
||||||
|
) {
|
||||||
|
if (i.path != path) {
|
||||||
|
list.push({ name: i.name, dir: i.isDirectory });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return return_data<FileList>({ current: path, list });
|
||||||
|
},
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user