const Logger = require('../Logger') const { toNumber } = require('../utils/index') class SessionController { constructor() { } async findOne(req, res) { return res.json(req.session) } async getAllWithUserData(req, res) { if (!req.user.isAdminOrUp) { Logger.error(`[SessionController] getAllWithUserData: Non-admin user requested all session data ${req.user.id}/"${req.user.username}"`) return res.sendStatus(404) } var listeningSessions = [] if (req.query.user) { listeningSessions = await this.getUserListeningSessionsHelper(req.query.user) } else { listeningSessions = await this.getAllSessionsWithUserData() } const itemsPerPage = toNumber(req.query.itemsPerPage, 10) || 10 const page = toNumber(req.query.page, 0) const start = page * itemsPerPage const sessions = listeningSessions.slice(start, start + itemsPerPage) const payload = { total: listeningSessions.length, numPages: Math.ceil(listeningSessions.length / itemsPerPage), page, itemsPerPage, sessions } if (req.query.user) { payload.userFilter = req.query.user } res.json(payload) } getSession(req, res) { var libraryItem = this.db.getLibraryItem(req.session.libraryItemId) var sessionForClient = req.session.toJSONForClient(libraryItem) res.json(sessionForClient) } // POST: api/session/:id/sync sync(req, res) { this.playbackSessionManager.syncSessionRequest(req.user, req.session, req.body, res) } // POST: api/session/:id/close close(req, res) { this.playbackSessionManager.closeSessionRequest(req.user, req.session, req.body, res) } // POST: api/session/local syncLocal(req, res) { this.playbackSessionManager.syncLocalSessionRequest(req.user, req.body, res) } middleware(req, res, next) { var playbackSession = this.playbackSessionManager.getSession(req.params.id) if (!playbackSession) return res.sendStatus(404) if (playbackSession.userId !== req.user.id) { Logger.error(`[SessionController] User "${req.user.username}" attempting to access session belonging to another user "${req.params.id}"`) return res.sendStatus(404) } req.session = playbackSession next() } } module.exports = new SessionController()