Files
pulse-signage/src/web/routes/register.js
T
lzstealth 98f969ca0f
Publish Docker Image / build-and-push-existing-registry (./build/Dockerfile, web, pulse-signage-web) (push) Successful in 1m47s
Publish Docker Image / build-and-push-existing-registry (./build/Dockerfile.player, player, pulse-signage-player) (push) Successful in 31s
Release v2.11.1
2026-09-04 15:43:55 +01:00

337 lines
13 KiB
JavaScript

// Compose the primary web route registrations.
const registerAuthRoutes = require('./auth');
const registerPagesRoutes = require('./admin/pages');
const registerAccountRoutes = require('./admin/account');
const registerUsersRoutes = require('./admin/users');
const registerPlaylistRoutes = require('./admin/playlists');
const registerManageRoutes = require('./admin/manage');
const registerScreenCommandRoutes = require('./admin/client-commands');
const registerAnnouncementRoutes = require('./signage/announcements/routes');
const registerContentRoutes = require('./admin/content');
const registerRootDataSourceRoutes = require('./admin/data-sources');
const registerApiSourceRoutes = require('./data-sources/api-sources/routes');
const registerRssFeedRoutes = require('./data-sources/rss-feeds/routes');
const registerTimetableRoutes = require('./data-sources/timetables/routes');
const registerWeatherRoutes = require('./data-sources/weather');
const registerSettingsRoutes = require('./settings/background-tasks');
const registerFontRoutes = require('./settings/fonts');
const registerSettingsPageRoutes = require('./settings/routes');
const registerAuditLogRoutes = require('./settings/audit-log');
const registerAboutRoutes = require('./settings/about/routes');
const registerInternalSyncRoutes = require('./internal/sync');
const registerScreensRoutes = require('./signage/screens/routes');
const registerOnboardingRoutes = require('./onboarding');
const { PERMISSIONS, normalizePermissionKeys } = require('#src/rbac');
function registerRoutes(app, deps) {
// Group routes by the dependency bundle they need.
registerAuthAndAccountRoutes(app, deps);
registerOnboardingRoutes(app, {
pool: deps.pool,
playerInternalBaseUrl: deps.playerInternalBaseUrl,
requirePermission: deps.requirePermission
});
registerSignageRoutes(app, deps);
registerSettingsAndContentRoutes(app, deps);
registerSettingsPageRoutes(app, {
pool: deps.pool,
pages: deps.pages,
mediaDir: deps.mediaDir,
requirePermission: deps.requirePermission,
recordRequestAuditEvent: deps.recordRequestAuditEvent
,sendAccountEmail: deps.sendAccountEmail
,createOneTimeToken: deps.createOneTimeToken
});
registerAuditLogRoutes(app, {
pool: deps.pool,
formatDashboardDate: deps.formatDashboardDate,
setAuthMessageCookie: deps.setAuthMessageCookie
});
registerAboutRoutes(app, deps);
registerInternalSyncRoutes(app, {
backgroundTaskQueue: deps.backgroundTaskQueue,
uploadSyncService: deps.uploadSyncService,
mediaDir: deps.mediaDir
});
registerScreensRoutes(app, {
pool: deps.pool,
common: deps.common,
pages: deps.pages,
mediaDir: deps.mediaDir,
formatDashboardDate: deps.formatDashboardDate,
buildDashboardState: deps.buildDashboardState,
fetchScreensByPlaylistId: deps.fetchScreensByPlaylistId,
requirePermission: deps.requirePermission,
getScreenDeleteBlockMessage: deps.playerActionService.getScreenDeleteBlockMessage,
getScreenConnections: deps.playerActionService.getScreenConnections,
});
}
function registerAuthAndAccountRoutes(app, deps) {
// Auth, profile, and user management routes share the same session helpers.
registerAuthRoutes(app, {
pool: deps.pool,
pages: deps.pages,
createUserSession: deps.createUserSession,
setSessionCookie: deps.setSessionCookie,
getSessionMaxAgeMs: deps.getSessionMaxAgeMs,
getConfiguredMaxActiveSessions: deps.getConfiguredMaxActiveSessions,
clearSessionCookie: deps.clearSessionCookie,
setAuthMessageCookie: deps.setAuthMessageCookie,
consumeAuthMessageCookie: deps.consumeAuthMessageCookie,
parseCookies: deps.parseCookies,
hashSessionToken: deps.hashSessionToken,
verifyPassword: deps.verifyPassword,
hashPassword: deps.hashPassword,
validatePasswordStrength: deps.validatePasswordStrength,
sessionCookieName: deps.sessionCookieName,
recordRequestAuditEvent: deps.recordRequestAuditEvent
,sendAccountEmail: deps.sendAccountEmail
,createOneTimeToken: deps.createOneTimeToken
,getConnection: deps.pool.getConnection ? deps.pool.getConnection.bind(deps.pool) : null
,rbacData: deps.rbacData
});
registerPagesRoutes(app, {
pool: deps.pool,
common: deps.common,
pages: deps.pages,
requirePermission: deps.requirePermission,
buildDashboardState: deps.buildDashboardState,
fetchScreensByPlaylistId: deps.fetchScreensByPlaylistId,
getScreenDeleteBlockMessage: deps.playerActionService.getScreenDeleteBlockMessage,
getScreenConnections: deps.playerActionService.getScreenConnections,
});
registerAccountRoutes(app, {
pool: deps.pool,
common: deps.common,
pages: deps.pages,
formatDashboardDate: deps.formatDashboardDate,
getAuditUserId: deps.getAuditUserId,
verifyPassword: deps.verifyPassword,
hashPassword: deps.hashPassword,
validatePasswordStrength: deps.validatePasswordStrength,
createUserSession: deps.createUserSession,
setSessionCookie: deps.setSessionCookie,
getSessionMaxAgeMs: deps.getSessionMaxAgeMs,
parseCookies: deps.parseCookies,
hashSessionToken: deps.hashSessionToken,
sessionCookieName: deps.sessionCookieName,
recordRequestAuditEvent: deps.recordRequestAuditEvent
,sendAccountEmail: deps.sendAccountEmail
,createOneTimeToken: deps.createOneTimeToken
});
registerUsersRoutes(app, {
pool: deps.pool,
common: deps.common,
pages: deps.pages,
formatDashboardDate: deps.formatDashboardDate,
getAuditUserId: deps.getAuditUserId,
hashPassword: deps.hashPassword,
validatePasswordStrength: deps.validatePasswordStrength,
readArrayField: deps.readArrayField,
rbacData: deps.rbacData,
requirePermission: deps.requirePermission,
recordRequestAuditEvent: deps.recordRequestAuditEvent
,sendAccountEmail: deps.sendAccountEmail
,createOneTimeToken: deps.createOneTimeToken
,hashSessionToken: deps.hashSessionToken
,getRequestOrigin: deps.getRequestOrigin
});
}
function registerSignageRoutes(app, deps) {
// Screen, playlist, and command routes share the player-facing wiring.
registerPlaylistRoutes(app, {
pool: deps.pool,
common: deps.common,
pages: deps.pages,
fetchOrderedPlaylistSlides: deps.fetchOrderedPlaylistSlides,
fetchScreensByPlaylistId: deps.fetchScreensByPlaylistId,
fetchPlaylistCanvasId: deps.fetchPlaylistCanvasId,
readArrayField: deps.readArrayField,
getAuditUserId: deps.getAuditUserId,
redirectAfterSave: deps.redirectAfterSave,
notifyPlayerScreens: deps.notifyPlayerScreens,
broadcastDashboardState: deps.broadcastDashboardState,
getPlaylistDeleteBlockMessage: deps.playerActionService.getPlaylistDeleteBlockMessage,
requirePermission: deps.requirePermission,
recordRequestAuditEvent: deps.recordRequestAuditEvent
});
registerManageRoutes(app, {
pool: deps.pool,
common: deps.common,
pages: deps.pages,
getAuditUserId: deps.getAuditUserId,
redirectAfterSave: deps.redirectAfterSave,
notifyPlayerScreens: deps.notifyPlayerScreens,
broadcastDashboardState: deps.broadcastDashboardState,
getScreenDeleteBlockMessage: deps.playerActionService.getScreenDeleteBlockMessage,
getScreenConnections: deps.playerActionService.getScreenConnections,
forwardPlayerCommand: deps.playerActionService.forwardPlayerCommand,
forwardPlayerCommandToBaseUrl: deps.playerActionService.forwardPlayerCommandToBaseUrl,
forwardPlayerCommandToDevice: deps.playerActionService.forwardPlayerCommandToDevice,
requirePermission: deps.requirePermission,
recordRequestAuditEvent: deps.recordRequestAuditEvent
});
registerAnnouncementRoutes(app, {
pool: deps.pool,
common: deps.common,
pages: deps.pages,
forwardAnnouncementRefresh: deps.playerActionService.forwardAnnouncementRefresh,
getAuditUserId: deps.getAuditUserId,
redirectAfterSave: deps.redirectAfterSave,
requirePermission: deps.requirePermission
});
registerScreenCommandRoutes(app, {
pool: deps.pool,
common: deps.common,
forwardPlayerCommand: deps.playerActionService.forwardPlayerCommand,
forwardPlayerCommandToBaseUrl: deps.playerActionService.forwardPlayerCommandToBaseUrl,
forwardPlayerCommandToDevice: deps.playerActionService.forwardPlayerCommandToDevice,
getScreenConnections: deps.playerActionService.getScreenConnections,
isClientNameAvailable: deps.isClientNameAvailable,
findAvailableClientName: deps.findAvailableClientName,
withClientNameReservation: deps.withClientNameReservation,
broadcastDashboardState: deps.broadcastDashboardState,
recordRequestAuditEvent: deps.recordRequestAuditEvent,
requirePermission: deps.requirePermission
});
}
function registerSettingsAndContentRoutes(app, deps) {
// Content, data-source, RBAC, and settings routes share the admin-side services.
const registerRbacRoutes = require('./admin/rbac');
registerRbacRoutes(app, {
pool: deps.pool,
common: deps.common,
pages: deps.pages,
getAuditUserId: deps.getAuditUserId,
rbacData: deps.rbacData,
readArrayField: deps.readArrayField,
permissions: PERMISSIONS,
normalizePermissionKeys: normalizePermissionKeys,
requirePermission: deps.requirePermission,
recordRequestAuditEvent: deps.recordRequestAuditEvent
});
registerContentRoutes(app, {
pool: deps.pool,
common: deps.common,
pages: deps.pages,
upload: deps.upload,
uploadDir: deps.uploadDir,
fetchScreensBySlideId: deps.fetchScreensBySlideId,
fetchScreensByTemplateId: deps.fetchScreensByTemplateId,
collectUploadReferencesFromSlide: deps.collectUploadReferencesFromSlide,
collectUploadReferencesFromTemplate: deps.collectUploadReferencesFromTemplate,
collectUploadReferencesFromPayload: deps.collectUploadReferencesFromPayload,
removeUnusedUploadFiles: deps.removeUnusedUploadFiles,
syncPlaylistUploadsOnChange: deps.syncPlaylistUploadsOnChange,
getAuditUserId: deps.getAuditUserId,
redirectAfterSave: deps.redirectAfterSave,
notifyPlayerScreens: deps.notifyPlayerScreens,
broadcastDashboardState: deps.broadcastDashboardState,
backgroundTaskQueue: deps.backgroundTaskQueue,
hasAnyPermission: deps.hasAnyPermission,
setAuthMessageCookie: deps.setAuthMessageCookie,
getSlideDeleteBlockMessage: deps.playerActionService.getSlideDeleteBlockMessage,
getTemplateDeleteBlockMessage: deps.playerActionService.getTemplateDeleteBlockMessage,
getCanvasSizeDeleteBlockMessage: deps.playerActionService.getCanvasSizeDeleteBlockMessage,
requirePermission: deps.requirePermission,
recordRequestAuditEvent: deps.recordRequestAuditEvent
});
registerRootDataSourceRoutes(app, {
pool: deps.pool,
common: deps.common,
pages: deps.pages,
formatDashboardDate: deps.formatDashboardDate,
getAuditUserId: deps.getAuditUserId,
redirectAfterSave: deps.redirectAfterSave,
parseDateTimeLocal: deps.parseDateTimeLocal,
backgroundTaskQueue: deps.backgroundTaskQueue,
dataSourceTasks: deps.dataSourceTasks,
setAuthMessageCookie: deps.setAuthMessageCookie,
requirePermission: deps.requirePermission,
section: 'root'
});
registerApiSourceRoutes(app, {
pool: deps.pool,
common: deps.common,
pages: deps.pages,
formatDashboardDate: deps.formatDashboardDate,
getAuditUserId: deps.getAuditUserId,
redirectAfterSave: deps.redirectAfterSave,
parseDateTimeLocal: deps.parseDateTimeLocal,
backgroundTaskQueue: deps.backgroundTaskQueue,
dataSourceTasks: deps.dataSourceTasks,
setAuthMessageCookie: deps.setAuthMessageCookie,
requirePermission: deps.requirePermission
});
registerRssFeedRoutes(app, {
pool: deps.pool,
common: deps.common,
pages: deps.pages,
formatDashboardDate: deps.formatDashboardDate,
getAuditUserId: deps.getAuditUserId,
redirectAfterSave: deps.redirectAfterSave,
parseDateTimeLocal: deps.parseDateTimeLocal,
backgroundTaskQueue: deps.backgroundTaskQueue,
dataSourceTasks: deps.dataSourceTasks,
setAuthMessageCookie: deps.setAuthMessageCookie,
requirePermission: deps.requirePermission
});
registerTimetableRoutes(app, {
pool: deps.pool,
common: deps.common,
pages: deps.pages,
formatDashboardDate: deps.formatDashboardDate,
getAuditUserId: deps.getAuditUserId,
redirectAfterSave: deps.redirectAfterSave,
parseDateTimeLocal: deps.parseDateTimeLocal,
backgroundTaskQueue: deps.backgroundTaskQueue,
dataSourceTasks: deps.dataSourceTasks,
setAuthMessageCookie: deps.setAuthMessageCookie,
requirePermission: deps.requirePermission
});
registerWeatherRoutes(app, {
pool: deps.pool,
common: deps.common,
getAuditUserId: deps.getAuditUserId,
redirectAfterSave: deps.redirectAfterSave,
dataSourceTasks: deps.dataSourceTasks,
backgroundTaskQueue: deps.backgroundTaskQueue,
recordRequestAuditEvent: deps.recordRequestAuditEvent,
requirePermission: deps.requirePermission
});
registerSettingsRoutes(app, {
pages: deps.pages,
backgroundTaskQueue: deps.backgroundTaskQueue,
setAuthMessageCookie: deps.setAuthMessageCookie
});
registerFontRoutes(app, {
pool: deps.pool,
pages: deps.pages,
upload: deps.upload,
uploadDir: deps.uploadDir,
backgroundTaskQueue: deps.backgroundTaskQueue,
setAuthMessageCookie: deps.setAuthMessageCookie,
requirePermission: deps.requirePermission
});
}
module.exports = { registerRoutes };