-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.js
84 lines (69 loc) · 1.86 KB
/
app.js
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
const express = require('express');
const cookieSession = require('cookie-session');
const expressHandlebars = require('express-handlebars');
const bunyan = require('bunyan');
const passport = require('./config/passport-oauth2');
const keys = require('./config/keys');
const app = express();
// create log files
const log = bunyan.createLogger({
name: 'app',
streams: [{
path: 'logs/app.log',
}],
});
const analytics = bunyan.createLogger({
name: 'analytics',
streams: [{
path: 'logs/analytics.log',
}],
});
// set static routes
app.use('/assets', express.static('assets'));
// set view engine
app.engine('handlebars', expressHandlebars({ defaultLayout: 'main' }));
app.set('view engine', 'handlebars');
// set up session cookies
app.use(cookieSession({
maxAge: 24 * 60 * 60 * 1000,
keys: [keys.session.cookieKey],
}));
// initialize passport
app.use(passport.initialize());
app.use(passport.session());
// read post body
app.use(express.json());
// user routes
app.get('/', (req, res) => {
if (req.query.code) {
log.info(`callback code=${req.query.code}`);
res.redirect(`/auth/callback?code=${req.query.code}`);
} else if (req.user && req.user.id) {
res.redirect('/profile');
} else {
res.render('home');
}
});
app.get('/profile', (req, res) => {
if (!req.user || !req.user.id) {
return res.redirect('/');
}
return res.render('profile', { user: req.user });
});
app.get('/logout', (req, res) => {
req.logout();
res.redirect('/');
});
app.post('/analytics', (req, res) => {
analytics.info(req.body);
res.json({});
});
// auth routes
app.get('/auth', passport.authenticate('oauth2'));
app.get('/auth/callback', passport.authenticate('oauth2', { failureRedirect: '/' }), (req, res) => {
res.redirect('/profile');
});
// start server
app.listen(3000, () => {
log.info('app now listening for requests on port 3000');
});