aquavox/src/routes/api/database/song/[id]/+server.ts
eternal-flame-AD 6b65fda69d
implement safe path handling
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-07-24 12:59:48 -05:00

43 lines
1.3 KiB
TypeScript

import { safePath } from '$lib/server/safePath';
import { getCurrentFormattedDateTime } from '$lib/songUpdateTime';
import { json, error } from '@sveltejs/kit';
import fs from 'fs';
import path from 'path';
export async function GET({ params }) {
const filePath = safePath(`${params.id}.json`, { base: './data/song' });
if (!filePath) {
return error(404, {
message: "No correspoding song."
});
}
let data;
try { data = fs.readFileSync(filePath); } catch (e) {
return error(404, {
message: "No correspoding song."
});
}
return json(JSON.parse(data.toString()));
}
export async function POST({ params, request }) {
const timeStamp = new Date().getTime();
try {
if (!fs.existsSync("./data/pending/")) {
fs.mkdirSync("./data/pending", { mode: 0o755 });
}
const filePath = `./data/pending/${params.id}-${timeStamp}.json`;
const data: MusicMetadata = await request.json();
data.updateTime = getCurrentFormattedDateTime();
fs.writeFileSync(filePath, JSON.stringify(data, null, 4), { mode: 0o644 });
return json({
"message": "successfully created"
}, {
status: 201
});
} catch (e) {
return error(500, {
message: "Internal server error."
});
}
}