338 lines
13 KiB
JavaScript
338 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, {
|
|
pool: deps.pool,
|
|
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 }; |