lhdn_api_simulation/server/index.js

123 lines
3.8 KiB
JavaScript

var cors = require('cors')
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const multer = require('multer');
const config = require('../common/config/env.config.js');
const AuthorizationRouter = require('../authorization/routes.config');
const UsersRouter = require('../src/users/routes.config');
const EndpointsRouter = require('../src/endpoints/routes.config');
const ProjectRouter = require('../src/project/routes.config');
const HeadersRouter = require('../src/headers/routes.config');
const ItemsRouter = require('../src/items/routes.config');
const LogingRouter = require('../src/loging/routes.config');
const swaggerUI = require("swagger-ui-express");
const swaggerJsDoc = require("swagger-jsdoc");
const PORT = config.port || 8080;
const path = require('path');
app.use(function (req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Credentials', 'true');
res.header('Access-Control-Allow-Methods', 'GET,HEAD,PUT,PATCH,POST,DELETE');
res.header('Access-Control-Expose-Headers', 'Content-Length');
res.header('Access-Control-Allow-Headers', 'Accept, Authorization, Content-Type, X-Requested-With, Range');
if (req.method === 'OPTIONS') {
return res.send(200);
} else {
return next();
}
});
app.use(cors({
origin:['http://localhost:8080'],
credentials:true
}));
app.use(function (req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Credentials', 'true');
res.header('Access-Control-Allow-Methods', 'GET,HEAD,PUT,PATCH,POST,DELETE');
res.header('Access-Control-Expose-Headers', 'Content-Length');
res.header('Access-Control-Allow-Headers', 'Accept, Authorization, Content-Type, X-Requested-With, Range');
if (req.method === 'OPTIONS') {
return res.sendStatus(200);
} else {
return next();
}
});
const options = {
definition: {
openapi: "3.0.0",
info: {
title: "LHDN API Simulation API",
version: "1.0.1",
description: "LHDN API Simulation API",
},
servers: [
{
url: "http://localhost:"+PORT,
},
],
},
apis: ["./docs/*.yaml"],
};
const specs = swaggerJsDoc(options);
app.use("/apidocs", swaggerUI.serve, swaggerUI.setup(specs));
app.use(bodyParser.json())
function postTrimmer(req, res, next) {
if (req.method === 'POST' || req.method === 'PATCH') {
for (const [key, value] of Object.entries(req.body)) {
if (typeof(value) === 'string')
req.body[key] = value.trim();
}
}
if (req.method === 'GET') {
for (const [key, value] of Object.entries(req.query)) {
if (typeof(value) === 'string')
req.query[key] = value.trim();
}
}
next();
}
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads')
},
filename: function (req, file, cb) {
const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9)
cb(null, uniqueSuffix+'.'+file.originalname)
}
})
const multerMid = multer({
storage: storage,
// dest: 'files/',
limits: {
// no larger than 5mb.
fileSize: 2 * 1024 * 1024,
},
});
app.use('/download', express.static(path.join(__dirname, '../download')));
app.use(multerMid.single('uploadFile'));
app.use(postTrimmer);
//app.use(express.static('uploads'))
app.use(express.static('../download'))
//console.log(path.join(__dirname, '../download'))
//
AuthorizationRouter.routesConfig(app);
UsersRouter.routesConfig(app);
EndpointsRouter.routesConfig(app);
ProjectRouter.routesConfig(app);
HeadersRouter.routesConfig(app);
ItemsRouter.routesConfig(app);
LogingRouter.routesConfig(app);
module.exports = app;