server.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /* eslint-disable no-unused-vars */
  2. import express, { NextFunction, Request, Response } from 'express';
  3. import compression from 'compression';
  4. // import suExec from 'su-exec';
  5. import helmet from 'helmet';
  6. import cors from 'cors';
  7. import { isProd } from './constants/constants';
  8. import appsRoutes from './modules/apps/apps.routes';
  9. import systemRoutes from './modules/system/system.routes';
  10. import authRoutes from './modules/auth/auth.routes';
  11. import { tradeTokenForUser } from './modules/auth/auth.helpers';
  12. import cookieParser from 'cookie-parser';
  13. // suExec.init();
  14. const app = express();
  15. const port = 3001;
  16. app.use(express.json());
  17. app.use(cookieParser());
  18. if (isProd) {
  19. app.use(compression());
  20. app.use(helmet());
  21. }
  22. app.use(cors());
  23. // Get user from token
  24. app.use((req, res, next) => {
  25. let user = null;
  26. if (req?.cookies?.tipi_token) {
  27. user = tradeTokenForUser(req.cookies.tipi_token);
  28. if (user) req.user = user;
  29. }
  30. next();
  31. });
  32. const restrict = (req: Request, res: Response, next: NextFunction) => {
  33. if (!req.user) {
  34. res.status(401).json({ error: 'Unauthorized' });
  35. } else {
  36. next();
  37. }
  38. };
  39. app.use('/auth', authRoutes);
  40. app.use('/system', restrict, systemRoutes);
  41. app.use('/apps', restrict, appsRoutes);
  42. // eslint-disable-next-line @typescript-eslint/no-unused-vars
  43. app.use((err: Error, req: Request, res: Response, _: NextFunction) => {
  44. res.status(200).json({ error: err.message });
  45. });
  46. app.listen(port, () => {
  47. console.log(`System API listening on port ${port}`);
  48. });