- Express + EJS + express-session stack (auth/navbar ported from minecraft_launcher)
- Public: main folder list, folder video grid, internal popup player (/player/:videoId)
- Admin (/op): login, folder CRUD with right-click context menu + add-folder modal
- Admin folder: video grid with right-click edit/rename/delete, "영상 추가" -> editor
- Video editor: drag-drop upload, file picker, YouTube URL probe (ETA + 5분 경고),
background yt-dlp download with progress polling, navbar title edit, trim controls,
save runs ffmpeg trim (original preserved)
- Filesystem storage under data/folders/<name>/<videoId>/{meta.json, original.<ext>, edited.<ext>}
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
20 lines
440 B
TypeScript
20 lines
440 B
TypeScript
import type { Request, Response, NextFunction } from 'express'
|
|
|
|
declare module 'express-session' {
|
|
interface SessionData {
|
|
userId?: string
|
|
}
|
|
}
|
|
|
|
export function requireAuth(req: Request, res: Response, next: NextFunction): void {
|
|
if (req.session?.userId) {
|
|
next()
|
|
return
|
|
}
|
|
if (req.method === 'GET') {
|
|
res.redirect('/op')
|
|
return
|
|
}
|
|
res.status(401).json({ ok: false, message: '인증이 필요합니다.' })
|
|
}
|