2025-12-11 10:40:55 +01:00
|
|
|
/*
|
|
|
|
|
* Copyright (c) 2025 by Christian Kellner.
|
|
|
|
|
* Licensed under Apache-2.0 with Commons Clause and Attribution/Naming Clause
|
|
|
|
|
*/
|
|
|
|
|
|
2023-03-13 13:42:43 +01:00
|
|
|
import { notificationAdapterRouter } from './routes/notificationAdapterRouter.js';
|
|
|
|
|
import { authInterceptor, cookieSession, adminInterceptor } from './security.js';
|
|
|
|
|
import { generalSettingsRouter } from './routes/generalSettingsRoute.js';
|
|
|
|
|
import { providerRouter } from './routes/providerRouter.js';
|
2025-09-25 15:03:47 +02:00
|
|
|
import { versionRouter } from './routes/versionRouter.js';
|
2023-03-13 13:42:43 +01:00
|
|
|
import { loginRouter } from './routes/loginRoute.js';
|
|
|
|
|
import { userRouter } from './routes/userRoute.js';
|
|
|
|
|
import { jobRouter } from './routes/jobRouter.js';
|
|
|
|
|
import bodyParser from 'body-parser';
|
|
|
|
|
import restana from 'restana';
|
|
|
|
|
import files from 'serve-static';
|
|
|
|
|
import path from 'path';
|
|
|
|
|
import { getDirName } from '../utils.js';
|
2025-07-23 08:47:26 +02:00
|
|
|
import { demoRouter } from './routes/demoRouter.js';
|
2025-09-13 18:57:56 +02:00
|
|
|
import logger from '../services/logger.js';
|
2025-09-25 15:03:47 +02:00
|
|
|
import { listingsRouter } from './routes/listingsRouter.js';
|
2025-12-09 13:56:46 +01:00
|
|
|
import { getSettings } from '../services/storage/settingsStorage.js';
|
|
|
|
|
import { featureRouter } from './routes/featureRouter.js';
|
2025-12-14 12:23:59 +01:00
|
|
|
import { dashboardRouter } from './routes/dashboardRouter.js';
|
2023-03-13 13:42:43 +01:00
|
|
|
const service = restana();
|
2023-03-20 15:08:06 +01:00
|
|
|
const staticService = files(path.join(getDirName(), '../ui/public'));
|
2025-12-09 13:56:46 +01:00
|
|
|
const PORT = (await getSettings()).port || 9998;
|
2020-07-20 16:21:11 +02:00
|
|
|
|
2020-02-26 09:05:20 +01:00
|
|
|
service.use(bodyParser.json());
|
2021-01-21 16:09:23 +01:00
|
|
|
service.use(cookieSession());
|
|
|
|
|
service.use(staticService);
|
|
|
|
|
service.use('/api/admin', authInterceptor());
|
|
|
|
|
service.use('/api/jobs', authInterceptor());
|
2025-09-20 19:37:27 +02:00
|
|
|
service.use('/api/version', authInterceptor());
|
2025-09-25 15:03:47 +02:00
|
|
|
service.use('/api/listings', authInterceptor());
|
2025-12-14 12:23:59 +01:00
|
|
|
service.use('/api/dashboard', authInterceptor());
|
|
|
|
|
service.use('/api/features', authInterceptor());
|
2025-09-25 15:03:47 +02:00
|
|
|
|
2021-01-21 16:09:23 +01:00
|
|
|
// /admin can only be accessed when user is having admin permissions
|
|
|
|
|
service.use('/api/admin', adminInterceptor());
|
|
|
|
|
service.use('/api/jobs/notificationAdapter', notificationAdapterRouter);
|
2021-05-30 09:37:45 +02:00
|
|
|
service.use('/api/admin/generalSettings', generalSettingsRouter);
|
2021-01-21 16:09:23 +01:00
|
|
|
service.use('/api/jobs/provider', providerRouter);
|
|
|
|
|
service.use('/api/admin/users', userRouter);
|
2025-09-20 19:37:27 +02:00
|
|
|
service.use('/api/version', versionRouter);
|
2021-01-21 16:09:23 +01:00
|
|
|
service.use('/api/jobs', jobRouter);
|
|
|
|
|
service.use('/api/login', loginRouter);
|
2025-09-25 15:03:47 +02:00
|
|
|
service.use('/api/listings', listingsRouter);
|
2025-12-09 13:56:46 +01:00
|
|
|
service.use('/api/features', featureRouter);
|
2025-12-14 12:23:59 +01:00
|
|
|
service.use('/api/dashboard', dashboardRouter);
|
2024-11-22 09:11:10 +01:00
|
|
|
//this route is unsecured intentionally as it is being queried from the login page
|
|
|
|
|
service.use('/api/demo', demoRouter);
|
|
|
|
|
|
2021-01-21 16:09:23 +01:00
|
|
|
service.start(PORT).then(() => {
|
2025-09-13 18:57:56 +02:00
|
|
|
logger.debug(`Started API service on port ${PORT}`);
|
2021-01-21 16:09:23 +01:00
|
|
|
});
|