44 lines
1.5 KiB
TypeScript
44 lines
1.5 KiB
TypeScript
import * as express from 'express';
|
|
import * as crypto from 'crypto';
|
|
import { Request, Response } from 'express';
|
|
|
|
import { OpenViduService } from '../services/OpenViduService';
|
|
import { ADMIN_SECRET } from '../config';
|
|
|
|
export const app = express.Router({
|
|
strict: true
|
|
});
|
|
|
|
const openviduService = OpenViduService.getInstance();
|
|
|
|
app.post('/login', async (req: Request, res: Response) => {
|
|
const password = req.body.password;
|
|
const isAdminTokenValid = openviduService.adminTokens.includes(req['session']?.token);
|
|
const isAuthValid = password === ADMIN_SECRET || isAdminTokenValid;
|
|
if (isAuthValid) {
|
|
try {
|
|
if (!req['session']?.token || !openviduService.adminTokens.includes(req['session']?.token)) {
|
|
// Save session token
|
|
const token = crypto.randomBytes(32).toString('hex');
|
|
res.cookie(openviduService.ADMIN_TOKEN_NAME, token);
|
|
req['session'] = { token };
|
|
openviduService.adminTokens.push(token);
|
|
}
|
|
const recordings = await openviduService.listAllRecordings();
|
|
console.log(`${recordings.length} recordings found`);
|
|
res.status(200).send(JSON.stringify({ recordings }));
|
|
} catch (error) {
|
|
console.error(error);
|
|
res.status(500).send('Unexpected error getting recordings');
|
|
}
|
|
} else {
|
|
res.status(403).send('Permissions denied');
|
|
}
|
|
});
|
|
|
|
app.post('/logout', async (req: Request, res: Response) => {
|
|
openviduService.adminTokens = openviduService.adminTokens.filter((token) => token !== req['session'].token);
|
|
req['session'] = {};
|
|
});
|
|
|