diff --git a/ExpressAPI/src/express/API.ts b/ExpressAPI/src/express/API.ts new file mode 100644 index 0000000000000000000000000000000000000000..be90d0238b450065ad8199623846832dab8c84b0 --- /dev/null +++ b/ExpressAPI/src/express/API.ts @@ -0,0 +1,50 @@ +import { Express } from 'express-serve-static-core'; +import cors from 'cors'; +import morganMiddleware from '../logging/MorganMiddleware'; +import { AddressInfo } from 'net'; +import http from 'http'; +import helmet from 'helmet'; +import express from 'express'; +import WorkerTask from '../process/WorkerTask'; +import multer from 'multer'; +import SessionMiddleware from '../middlewares/SessionMiddleware'; +import Config from '../config/Config'; +import logger from '../shared/logging/WinstonLogger'; +import ParamsCallbackManager from '../middlewares/ParamsCallbackManager'; +import ApiRoutesManager from '../routes/ApiRoutesManager'; + + +class API implements WorkerTask { + private readonly backend: Express; + private server: http.Server; + + constructor() { + this.backend = express(); + + this.backend.use(multer({ + limits: { fieldSize: 100 * 1024 * 1024 } + }).none()); //Used for extract params from body with format "form-data", The none is for say that we do not wait a file in params + this.backend.use(morganMiddleware); //Log API accesses + this.backend.use(helmet()); //Help to secure express, https://helmetjs.github.io/ + this.backend.use(cors()); //Allow CORS requests + + ParamsCallbackManager.register(this.backend); + + this.backend.use(SessionMiddleware.register()); + + ApiRoutesManager.registerOnBackend(this.backend); + } + + run() { + this.server = this.backend.listen(Config.api.port, '0.0.0.0', () => { + const { + port, + address + } = this.server.address() as AddressInfo; + logger.info(`Server started on http://${ address }:${ port }`); + }); + } +} + + +export default API;