import express from 'express'; import * as http from 'http'; import * as dotenv from 'dotenv'; import swaggerUi from 'swagger-ui-express'; import swaggerJSDoc from 'swagger-jsdoc'; import logger from './src/middleware/logger'; // Router imports import {calendarRouter} from './src/models/calendar/Calendar.router'; let cors = require('cors'); dotenv.config(); if (!process.env.PORT) { logger.error('No port'); process.exit(1); } const port: number = parseInt(process.env.PORT, 10); const app: express.Application = express(); const server: http.Server = http.createServer(app); // here we are adding middleware to parse all incoming requests as JSON app.use(express.json()); // Configure CORS let allowedHosts = [ 'https://www.nachklang.art', 'https://calendar.nachklang.art', ]; app.use(cors({ origin: function (origin: any, callback: any) { // Allow requests with no origin if (!origin) return callback(null, true); // Block requests with wrong origin if (allowedHosts.indexOf(origin) === -1) { return callback(new Error('The CORS policy doesn\'t allow access for your origin.'), false); } // Allow all other requests return callback(null, true); } })); // Swagger documentation const swaggerDefinition = { openapi: '3.0.0', info: { title: 'Nachklang e.V. REST API', version: '0.1.0', license: { name: 'Licensed Under MIT', url: 'https://spdx.org/licenses/MIT.html' }, contact: { name: 'Nachklang e.V.', url: 'https://www.nachklang.art' } } }; const options = { swaggerDefinition, // Paths to files containing OpenAPI definitions apis: [ './src/models/**/*.router.ts' ] }; const swaggerSpec = swaggerJSDoc(options); app.use( '/docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec) ); // Add routers app.use('/calendar', calendarRouter); // this is a simple route to make sure everything is working properly app.get('/', (req: express.Request, res: express.Response) => { res.status(200).send('Welcome to the Nachklang e.V. REST API!'); }); server.listen(port, () => { logger.info('Server listening on Port ' + port); });