| import express from 'express'; |
| import { db } from './db'; |
|
|
| export const adminRouter = express.Router(); |
|
|
| adminRouter.use((req, res, next) => { |
| const user = (req.session as any).user; |
| if (!user || !user.isAdmin) { |
| return res.status(403).render('message', { title: 'Access Denied', message: 'You must be an administrator to view this page.', backUrl: '/' }); |
| } |
| next(); |
| }); |
|
|
| adminRouter.get('/', (req, res) => { |
| const categories = db.prepare('SELECT * FROM categories ORDER BY pos ASC').all(); |
| const albums = db.prepare('SELECT * FROM albums ORDER BY aid DESC').all(); |
| const users = db.prepare('SELECT u.*, g.group_name FROM users u LEFT JOIN usergroups g ON u.user_group = g.group_id').all(); |
| const configs = db.prepare('SELECT * FROM config').all(); |
|
|
| res.render('admin', { |
| title: 'Admin Control Panel', |
| categories, |
| albums, |
| users, |
| configs, |
| user: (req.session as any).user |
| }); |
| }); |
|
|
| adminRouter.post('/category/add', (req, res) => { |
| const { name, description, parent } = req.body; |
| if (name && name.trim()) { |
| db.prepare('INSERT INTO categories (name, description, parent) VALUES (?, ?, ?)').run(name.trim(), description || '', Number(parent) || 0); |
| } |
| res.redirect('/admin'); |
| }); |
|
|
| adminRouter.post('/category/delete/:cid', (req, res) => { |
| const cid = Number(req.params.cid); |
| db.prepare('DELETE FROM categories WHERE cid = ?').run(cid); |
| res.redirect('/admin'); |
| }); |
|
|
| adminRouter.post('/album/add', (req, res) => { |
| const { title, description, category, uploads } = req.body; |
| if (title && title.trim()) { |
| db.prepare('INSERT INTO albums (title, description, category, uploads) VALUES (?, ?, ?, ?)').run( |
| title.trim(), |
| description || '', |
| Number(category) || 0, |
| uploads === 'YES' ? 'YES' : 'NO' |
| ); |
| } |
| res.redirect('/admin'); |
| }); |
|
|
| adminRouter.post('/album/delete/:aid', (req, res) => { |
| const aid = Number(req.params.aid); |
| db.prepare('DELETE FROM pictures WHERE aid = ?').run(aid); |
| db.prepare('DELETE FROM albums WHERE aid = ?').run(aid); |
| res.redirect('/admin'); |
| }); |
|
|
| adminRouter.post('/config/update', (req, res) => { |
| const stmt = db.prepare('INSERT OR REPLACE INTO config (name, value) VALUES (?, ?)'); |
| for (const [key, val] of Object.entries(req.body)) { |
| if (typeof val === 'string') { |
| stmt.run(key, val); |
| } |
| } |
| res.redirect('/admin'); |
| }); |
|
|