File size: 2,361 Bytes
7235cc7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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');
});