-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
66 lines (55 loc) · 2 KB
/
server.js
File metadata and controls
66 lines (55 loc) · 2 KB
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
const express = require('express');
const path = require('path');
const fs = require('fs');
const basicAuth = require('express-basic-auth');
const multer = require('multer');
const app = express();
// 0) CSP header (no inline/eval)
app.use((req, res, next) => {
res.setHeader('Content-Security-Policy',
"default-src 'self'; " +
"script-src 'self' https://w.soundcloud.com https://cdn.jsdelivr.net; " +
"frame-src https://w.soundcloud.com; " +
"connect-src 'self' https://api.soundcloud.com; " +
"style-src 'self';"
);
next();
});
// 1) Body parsing
app.use(express.urlencoded({ extended: true }));
// 2) File uploads
const UPLOAD_DIR = path.join(__dirname, 'uploads');
if (!fs.existsSync(UPLOAD_DIR)) fs.mkdirSync(UPLOAD_DIR);
const upload = multer({ dest: UPLOAD_DIR });
// 3) Admin Basic Auth
app.use(['/admin','/admin.html'], basicAuth({
users: { 'WYRMWorld': 'Bigcbigc33' },
challenge: true,
realm: 'WYRMWorldAdmin'
}));
app.get('/admin', (req, res) => {
res.sendFile(path.join(__dirname, 'public', 'admin.html'));
});
// 4) Submission endpoint
let submissions = [];
app.post('/submit', upload.single('track'), (req, res) => {
const { name, type } = req.body;
const originalName = req.file?.originalname || '';
const storedName = req.file?.filename || '';
submissions.push({ name, originalName, storedName, type });
res.redirect('/submit.html');
});
// 5) Submissions API
app.get('/submissions', (req, res) => {
res.json(submissions);
});
// 6) Listen routes
app.get('/listen', (req, res) => res.sendFile(path.join(__dirname, 'public', 'listen.html')));
app.get('/listen.html', (req, res) => res.sendFile(path.join(__dirname, 'public', 'listen.html')));
// 7) Serve uploads
app.use('/uploads', express.static(UPLOAD_DIR));
// 8) Serve static assets
app.use(express.static(path.join(__dirname, 'public')));
// 9) Start
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`Server listening on port ${PORT}`));