Newer
Older
const path = require( 'path' );
const express = require('express');
const cors = require('cors');
const helmet = require('helmet');
const dbClientInstance_ = require('./db/mongo.js');
const todoRoutes = require('./routes/todo');
const userRoutes = require('./routes/user');
const errorRoutes = require('./routes/error');
const envRoute = require('./routes/env.js');
const healthRoute = require('./routes/health.js');
let cookieParser = require('cookie-parser');
const app = express();

Lucendio
committed
const whitelist = [`http://localhost:${ port }`, `http://freefalk.tk`]

Lucendio
committed
const corsOptions = {
credentials: true,
origin: function(origin, callback){
// allow requests with no origin
if(!origin) return callback(null, true);
if(whitelist.indexOf(origin) === -1){
var message = "The CORS policy for this origin doesn't " +
`allow access from the particular origin. (Origin: ${origin})`;
return callback(new Error(message), false);
}
return callback(null, true);
}

Lucendio
committed
app.use(express.json());
app.use(cors(corsOptions));

Lucendio
committed
app.use(cookieParser());

Lucendio
committed
app.use(helmet());

Lucendio
committed
app.use(helmet.contentSecurityPolicy({
directives: {
defaultSrc: ["'self'"],
styleSrc: ["'self' 'unsafe-inline' 'https://font.googleapis.com'"],
scriptSrc: ["'self' 'unsafe-inline' 'unsafe-eval'"]

Lucendio
committed
}
}));

Lucendio
committed
app.use(todoRoutes);
app.use(userRoutes);
app.use('/', express.static(path.resolve(__dirname, `./public`)));
// IMPORTANT: Educational purpose only! Possibly exposes sensitive data.
app.use(envRoute);
// NOTE: must be last one, because is uses a wildcard (!) that behaves aa
// fallback and catches everything else
app.use(errorRoutes);
(async function main(){
try{
await new Promise( (__ful, rej__ )=>{
app.listen(port, function(){
console.log(`todo-app-backend is up on port ${ port }`);
__ful();
}).on( 'error', rej__);
});
process.on( 'SIGINT', ()=>{
process.exit( 2 );
});
}catch( err ){
console.error( err );
process.exit( 1 );
}
})();