153 lines
4 KiB
Text
153 lines
4 KiB
Text
require('dotenv').config();
|
|
|
|
const express = require('express');
|
|
const path = require('path');
|
|
const config = require('./api_v1/config');
|
|
|
|
const db = require('./db/knex');
|
|
|
|
const { jwtMiddleware } = require('./middleware/jwt');
|
|
const staticMiddleware = require('./middleware/static');
|
|
const hlsMiddleware = require('./middleware/hls');
|
|
|
|
const authRouter = require('./routes/auth');
|
|
const configRouter = require('./routes/config');
|
|
const scanRouter = require('./routes/scan');
|
|
const autoScanRouter = require('./routes/autoScan');
|
|
const shareRouter = require('./routes/share');
|
|
const photosRouter = require('./routes/photos');
|
|
const activitiesRouter = require('./routes/activities');
|
|
const scanActivitiesRouter = require('./routes/scanActivities');
|
|
|
|
const server = express();
|
|
|
|
// statici pubblici
|
|
server.use(staticMiddleware);
|
|
server.use('/hls', hlsMiddleware);
|
|
|
|
// body parser
|
|
server.use(express.json());
|
|
server.use(express.urlencoded({ extended: true }));
|
|
|
|
// login pubblico
|
|
server.get('/login', (req, res) => {
|
|
res.sendFile(path.join(__dirname, 'public/login.html'));
|
|
});
|
|
|
|
// rotte pubbliche
|
|
server.use('/auth', authRouter);
|
|
server.use('/config', configRouter);
|
|
server.use('/share', shareRouter);
|
|
|
|
// JWT per tutto il resto
|
|
server.use(
|
|
/^(?!\/auth)(?!\/login)(?!\/login.html)(?!\/css)(?!\/js)(?!\/img)(?!\/fonts)(?!\/favicon).*$/,
|
|
jwtMiddleware
|
|
);
|
|
|
|
// =====================================================
|
|
// ADMIN — RESET COMPLETO DB ATTIVITÀ
|
|
// Chiamato dal frontend: POST /initActivitiesDB
|
|
// =====================================================
|
|
server.post('/initActivitiesDB', async (req, res) => {
|
|
try {
|
|
const loggedUser = req.user?.name;
|
|
|
|
if (loggedUser !== 'Admin') {
|
|
return res.status(403).json({
|
|
ok: false,
|
|
error: 'Forbidden'
|
|
});
|
|
}
|
|
|
|
console.log(`🧹 [ADMIN] Reset completo DB attività richiesto da=${loggedUser}`);
|
|
|
|
await db('activities').del();
|
|
await db('deleted_hard_activities').del();
|
|
await db('sync_done_activities').del();
|
|
|
|
res.json({
|
|
ok: true,
|
|
message: 'DB attività svuotato'
|
|
});
|
|
} catch (err) {
|
|
console.error('❌ Errore POST /initActivitiesDB:', err);
|
|
res.status(500).json({
|
|
ok: false,
|
|
error: err.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// =====================================================
|
|
// ADMIN — RESET DB ATTIVITÀ PER UTENTE
|
|
// Chiamato dal frontend: POST /initActivitiesDBuser
|
|
// Accetta user da body oppure query.
|
|
// =====================================================
|
|
server.post('/initActivitiesDBuser', async (req, res) => {
|
|
try {
|
|
const loggedUser = req.user?.name;
|
|
|
|
if (loggedUser !== 'Admin') {
|
|
return res.status(403).json({
|
|
ok: false,
|
|
error: 'Forbidden'
|
|
});
|
|
}
|
|
|
|
const targetUser =
|
|
req.body?.user ||
|
|
req.query?.user ||
|
|
req.body?.name ||
|
|
req.query?.name;
|
|
|
|
if (!targetUser) {
|
|
return res.status(400).json({
|
|
ok: false,
|
|
error: 'Missing user'
|
|
});
|
|
}
|
|
|
|
console.log(`🧹 [ADMIN] Reset DB attività user=${targetUser} richiesto da=${loggedUser}`);
|
|
|
|
await db('activities')
|
|
.where({ user: targetUser })
|
|
.del();
|
|
|
|
await db('deleted_hard_activities')
|
|
.where({ user: targetUser })
|
|
.del();
|
|
|
|
// sync_done_activities non ha colonna user nel tuo schema,
|
|
// quindi lo svuotiamo per forzare nuova sync pulita.
|
|
await db('sync_done_activities').del();
|
|
|
|
res.json({
|
|
ok: true,
|
|
user: targetUser,
|
|
message: `DB attività svuotato per user=${targetUser}`
|
|
});
|
|
} catch (err) {
|
|
console.error('❌ Errore POST /initActivitiesDBuser:', err);
|
|
res.status(500).json({
|
|
ok: false,
|
|
error: err.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// rotte protette
|
|
server.use('/photos', photosRouter);
|
|
server.use('/activities', activitiesRouter);
|
|
server.use('/scan', scanRouter);
|
|
server.use('/scanActivities', scanActivitiesRouter);
|
|
server.use('/api_v1/auto_scan', autoScanRouter);
|
|
|
|
// home
|
|
server.get('/', (req, res) => {
|
|
res.sendFile(path.resolve('public/index.html'));
|
|
});
|
|
|
|
server.listen(config.PORT, () => {
|
|
console.log(`Server running on port ${config.PORT}`);
|
|
});
|