import Route from "../route.js"; import initDb from "../db.js"; import { randomUUID } from 'node:crypto'; import { exec } from 'node:child_process'; import { promisify } from "node:util"; import auth from "../form/auth.js"; import captcha from "./captcha.js"; const execP = promisify(exec); let db = await initDb(); let main = new Route([auth, captcha], async function (req, res, input) { let { captchaMatch } = input; if (!captchaMatch) return { 'success': false, 'message': 'Captcha is incorrect' }; let { username } = input; let id = randomUUID(); let { title, desc } = req.body; if (!title || !desc || !req.file || username == '!nobody') return { 'success': false, 'message': 'Some fields are missing' }; let { path } = req.file; try { await execP(`ffmpeg -i ${path} videos/${id}.webm`); await execP(`ffmpeg -i videos/${id}.webm -frames:v 1 videos/${id}.png`); } catch (err) { return { 'success': false, 'message': 'Video is invalid' } } await db.run('INSERT INTO video (id, title, desc, username, date) VALUES (?, ?, ?, ?, ?)', [ id, title, desc, username, +new Date() ]); return { 'message': 'Video created', 'success': true, 'redirect': '/client/video?id=' + id }; }); export default main;