import path from 'path' import bodyParser from 'body-parser' import express from 'express' import mongoose from 'mongoose' import AdminTagController from './controllers/AdminTagController' import AdminOrganizationController from './controllers/AdminOrganizationController' import DefaultController from './controllers/DefaultController' import MediaController from './controllers/MediaController' import dotenv from 'dotenv' import DelegateController from './controllers/DelegateController' import AdminAuthMiddleware from './middlewares/AdminAuthMiddleware' import DelegateAuthMiddleware from './middlewares/DelegateAuthMiddleware' import PublicController from './controllers/PublicController' import cors from 'cors' import twig from 'twig' import EmailService from './EmailService' import ErrorController from './controllers/ErrorController' import { createProxyMiddleware, Filter, Options, RequestHandler } from 'http-proxy-middleware'; process.on('unhandledRejection', (err) => { console.error(err) console.log('unhandledRejection!') process.exit() }) dotenv.config({ path: __dirname + '/../.env' }) const app: express.Application = express() const host: string = process.env.HOST === undefined ? '127.0.0.1' : process.env.HOST const port: number = 8001 twig.cache(false) let main = async () => { EmailService.init() mongoose.connection.on('error', err => { console.error(err) }) mongoose.connect( process.env.MONGO_URI === undefined ? 'mongodb://root:root@localhost:27017/forumvirt' : process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true } ).then(() => { console.log('> App: Connected to mongodb') }) app.set("twig options", { allow_async: true, strict_variables: false }) app.use(cors()) app.use(bodyParser.json()) app.get('/', PublicController.home) app.get('/association/:slug', PublicController.organization) app.get('/a-propos', PublicController.about) app.get('/mentions-legales', PublicController.legals) app.get('/icon/:id', DefaultController.viewIcon) app.get('/email', DefaultController.sendEmail) app.use('/admin', express.Router() .use(AdminAuthMiddleware.handle) .get('/', DefaultController.success) .use('/tags', express.Router() .get('/', AdminTagController.getMany) .post('/', AdminTagController.store) .put('/:id', AdminTagController.update) .delete('/:id', AdminTagController.destroy) ) .use('/organizations', express.Router() .post('/import', AdminOrganizationController.import) .get('/', AdminOrganizationController.getMany) .get('/:id', AdminOrganizationController.getOne) .post('', AdminOrganizationController.store) .put('/:id', AdminOrganizationController.update) .delete('/:id', AdminOrganizationController.destroy) .post('/:id/reset-token', AdminOrganizationController.resetToken) .post('/:id/send-email-token', AdminOrganizationController.sendEmailToken) .post('/:id/approve', AdminOrganizationController.approve) .post('/:id/reject', AdminOrganizationController.reject) ) ) app.use('/delegate', express.Router() .use(DelegateAuthMiddleware.handle) .get('/', DelegateController.get) .get('/size', DelegateController.getCurrentSize) //.post('/test', DelegateController.test) .put('/', DelegateController.update) .post('/submit', DelegateController.submit) .post('/thumbnail', DelegateController.uploadThumbnail()) .post('/cover', DelegateController.uploadCover()) .post('/medias', DelegateController.uploadMedias()) .delete('/', DelegateController.destroy) ) app.use('/proxy-s3', createProxyMiddleware({ target: 'https://fva-condorcet.s3.fr-par.scw.cloud', changeOrigin: true, pathRewrite: { '^/proxy-s3/': '/' }, })) /* .put('/tags/:id', AdminTagController.update) .put('/tags/:id', AdminTagController.destroy) .use('/organizations', () => express.Router() .get('/', AdminOrganizationController.getMany) ) */ //app.post('/api/media', MediaController.uploadRoute()) //app.delete('/api/media/:key', MediaController.delete) const assetsPath: string = process.env.ASSETS_PATH === undefined ? './assets/development' : process.env.ASSETS_PATH app.use(express.static(path.resolve(assetsPath))) app.get('/500', ErrorController.internalError) app.use(ErrorController.handleServerError) app.use(ErrorController.notFoundHandler()) app.listen(port, host, () => { console.log(`> App: API listening on ${host}:${port}`) }) } main()