-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathindex.js
96 lines (84 loc) · 2.99 KB
/
index.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
85
86
87
88
89
90
91
92
93
94
95
96
// Concurrency
const throng = require('throng');
const WORKERS = process.env.WEB_CONCURRENCY || 1;
const port = process.env.PORT || 3000;
throng({
workers: WORKERS,
lifetime: Infinity
}, start)
function start() {
// NPM dependencies
const helmet = require('helmet');
const express = require('express')
const exphbs = require('express-handlebars')
const handlebars = require('handlebars')
const groupBy = require('handlebars-group-by')
const dotenv = require('dotenv')
// Run before other code to make sure variables from .env are available
dotenv.config()
// Local dependencies
const spreadsheet = require('./lib/spreadsheet.js')
const cache = require('./lib/cache.js');
// Config
const app = express();
app.use(helmet({
dnsPrefetchControl: { allow: true }
}));
app.use(express.static('assets'))
groupBy.register(handlebars);
const hbs = exphbs.create({
handlebars: handlebars,
defaultLayout: 'main',
helpers: require('handlebars-helpers')()
})
app.engine('handlebars', hbs.engine)
app.set('view engine', 'handlebars')
// Default .env variables
var cacheTimeout = process.env.CACHE_TIMEOUT;
if (!cacheTimeout) {
cacheTimeout = '5';
}
var unconfName = process.env.UNCONF_NAME;
if (!unconfName) {
unconfName = 'Unconference name';
}
var logoUrl = process.env.LOGO_URL;
// Default title
var metaTitle = 'Sessions for ' + unconfName;
// Routes
app.get('/', function (req, res) {
spreadsheet.getCachedSessions( function(sessions, error) {
metaTitle = 'Sessions for ' + unconfName;
res.render('session_listing', { sessions, error, unconfName, logoUrl, metaTitle })
});
});
app.get('/partials/sessions', function (req, res) {
spreadsheet.getCachedSessions( function(sessions, error) {
res.render('session_listing', { sessions, error, unconfName, logoUrl, metaTitle, layout: false })
});
});
app.get('/sessions/:sessionID', function (req, res) {
spreadsheet.getCachedSession(req.params.sessionID, function(session, error) {
if(session == null) {
res.status(404).send("That session can't be found. Head back to the <a href='/'>listing page</a> and try again.");
return;
}
metaTitle = session.title + ' at ' + unconfName;
res.render('full_session', { session, error, unconfName, metaTitle, logoUrl })
});
});
app.get('/sessions.json', cache(cacheTimeout), function (req, res, error) {
spreadsheet.getSessions( function(sessions, error) {
res.send(sessions);
});
});
// Warm the cache and then wait for requests
spreadsheet.initCachedSessions(function() {
app.listen(port, (err) => {
console.log('Listening on', port);
if (err) {
throw err;
}
});
});
}