-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.ts
More file actions
52 lines (44 loc) · 1.5 KB
/
server.ts
File metadata and controls
52 lines (44 loc) · 1.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// tslint:disable:no-expression-statement
import Koa = require('koa')
const cors = require('@koa/cors')
import * as Router from 'koa-router'
import bodyParser = require('koa-body')
import session = require('koa-session')
import cookieParser = require('koa-cookie')
import * as errorHandling from './errorHandling'
import sessionStore from './auth/sessionStore'
import passport from './auth/passport'
import { createRouter } from './router'
export function createServer(withRouter?: (router: Router) => Router): Koa {
const server = errorHandling.configureServer(new Koa())
server.proxy = true
server.keys = [process.env.SESSION_KEY || 'keyboard-cat']
// https://stackoverflow.com/questions/7185074/heroku-nodejs-http-to-https-ssl-forced-redirect
if (process.env.NODE_ENV === 'prod') {
server.use((ctx, next) => {
if (ctx.request.headers['x-forwarded-proto'] !== 'https') {
return ctx.redirect(['https://', ctx.request.get('Host'), ctx.request.url].join(''))
}
return next()
})
}
server.use(cors())
server.use(bodyParser({ multipart: true, jsonLimit: '50mb' }))
server.use((cookieParser as any).default())
server.use(
session(
{
secure: process.env.NODE_ENV !== 'test',
sameSite: 'none',
store: sessionStore,
},
server
)
)
server.use(passport.initialize())
server.use(passport.session())
const router = createRouter(withRouter)
server.use(router.routes())
server.use(router.allowedMethods())
return server
}