const express = require('express') const bodyParser = require('body-parser') const session = require('express-session') const FileStore = require('session-file-store')(session) const next = require('next') const admin = require('firebase-admin') const port = parseInt(process.env.PORT, 10) || 3000 const dev = process.env.NODE_ENV !== 'production' const app = next({ dev }) const handle = app.getRequestHandler() const firebase = admin.initializeApp( { credential: admin.credential.cert(require('./credentials/server')), databaseURL: '' // TODO database URL goes here }, 'server' ) app.prepare().then(() => { const server = express() server.use(bodyParser.json()) server.use( session({ secret: 'geheimnis', saveUninitialized: true, store: new FileStore({ path: '/tmp/sessions', secret: 'geheimnis' }), resave: false, rolling: true, httpOnly: true, cookie: { maxAge: 604800000 } // week }) ) server.use((req, res, next) => { req.firebaseServer = firebase next() }) server.post('/api/login', (req, res) => { if (!req.body) return res.sendStatus(400) const token = req.body.token firebase .auth() .verifyIdToken(token) .then(decodedToken => { req.session.decodedToken = decodedToken return decodedToken }) .then(decodedToken => res.json({ status: true, decodedToken })) .catch(error => res.json({ error })) }) server.post('/api/logout', (req, res) => { req.session.decodedToken = null res.json({ status: true }) }) server.get('*', (req, res) => { return handle(req, res) }) server.listen(port, err => { if (err) throw err console.log(`> Ready on http://localhost:${port}`) }) })