app.ts 2.7 KB
Newer Older
Rosanny Sihombing's avatar
Rosanny Sihombing committed
1
2
3
4
5
6
7
8
9
10
11
import express from 'express'
import path from 'path'
//import passport from 'passport'
import morgan from 'morgan'
import cookieParser from 'cookie-parser'
import bodyParser from 'body-parser'
//import session from 'express-session'
//import flash from 'express-flash'
//import fileUpload from 'express-fileupload'
import helmet from 'helmet'
import compression from 'compression'
Rosanny Sihombing's avatar
Rosanny Sihombing committed
12

Rosanny Sihombing's avatar
Rosanny Sihombing committed
13
var env = process.env.NODE_ENV || 'testing'
Rosanny Sihombing's avatar
Rosanny Sihombing committed
14
const config = require('./config/config')[env]
Rosanny Sihombing's avatar
Rosanny Sihombing committed
15
const lang = 'DE';
Rosanny Sihombing's avatar
Rosanny Sihombing committed
16
17
18
19

var app = express()
app.set('port', config.app.port)
app.set('views', __dirname + '/views')
Rosanny Sihombing's avatar
Rosanny Sihombing committed
20
21
app.set('view engine', 'pug')

Rosanny Sihombing's avatar
add CSP    
Rosanny Sihombing committed
22
23
24
25
26
27
28
29
30
31
32
33
34
app.use(
    helmet.contentSecurityPolicy({
        useDefaults: true,
        directives: {
            "font-src": ["'self'", "https://use.fontawesome.com"],
            "img-src": ["'self'", "https://transfer.hft-stuttgart.de"],
            "script-src": ["'self'", "https://code.jquery.com/jquery-3.3.1.min.js", "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"],
            "style-src": ["'self'", "https://use.fontawesome.com/releases/v5.8.2/css/all.css"],
            "frame-src": ["'self'"]
        },
        reportOnly: true,
    })
);
Rosanny Sihombing's avatar
Rosanny Sihombing committed
35
app.use(compression())
Rosanny Sihombing's avatar
Rosanny Sihombing committed
36
37
38
39
40
app.use(morgan('combined'))
app.use(cookieParser())
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: false}))
app.use(express.static(path.join(__dirname, 'public')))
Rosanny Sihombing's avatar
Rosanny Sihombing committed
41
/*app.use(session(
Rosanny Sihombing's avatar
Rosanny Sihombing committed
42
43
44
    {
        resave: true,
        saveUninitialized: true,
Rosanny Sihombing's avatar
Rosanny Sihombing committed
45
46
        //secret: config.app.sessionSecret
        secret: 'thisisasecret-thisisasecret-thisisasecret'
Rosanny Sihombing's avatar
Rosanny Sihombing committed
47
48
    }
))
49
app.use(passport.initialize())
Rosanny Sihombing's avatar
Rosanny Sihombing committed
50
51
app.use(passport.session()) */
/*app.use(flash())
Rosanny Sihombing's avatar
Rosanny Sihombing committed
52
53
54
55
app.use((req, res, next) => {
    res.locals.errors = req.flash("error")
    res.locals.successes = req.flash("success")
    next()
Rosanny Sihombing's avatar
Rosanny Sihombing committed
56
}) */
57
// enable files upload
Rosanny Sihombing's avatar
Rosanny Sihombing committed
58
/*app.use(fileUpload({
59
60
61
62
    createParentPath: true,
    limits: { 
      fileSize: 1000000 // 1 MB max. file size
    }
Rosanny Sihombing's avatar
Rosanny Sihombing committed
63
})) */
Rosanny Sihombing's avatar
Rosanny Sihombing committed
64
65
66
67
68
69
70
// caching disabled for every route
// NOTE: Works in Firefox and Opera. Does not work in Edge
app.use(function(req, res, next) {
    res.set('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0')
    next()
})
  
Rosanny Sihombing's avatar
Rosanny Sihombing committed
71
require('./routes/project')(app, lang)
Rosanny Sihombing's avatar
Rosanny Sihombing committed
72
73
  
// Handle 404
Rosanny Sihombing's avatar
Rosanny Sihombing committed
74
75
app.use(function (req:any, res:any) {
    res.status(404).render(lang+'/404')
Rosanny Sihombing's avatar
Rosanny Sihombing committed
76
77
78
})
  
// Handle 500 - any server error
Rosanny Sihombing's avatar
Rosanny Sihombing committed
79
app.use(function (err:any, req:any, res:any, next:any) {
Rosanny Sihombing's avatar
Rosanny Sihombing committed
80
    console.error(err.stack)
Rosanny Sihombing's avatar
Rosanny Sihombing committed
81
    res.status(500).render(lang+'/500', {
Rosanny Sihombing's avatar
Rosanny Sihombing committed
82
83
84
85
86
87
88
89
      error: err
    })
})
  
app.listen(app.get('port'), function () {
    console.log('Project Page listening on port ' + app.get('port'))
    console.log(__dirname)
})