This repository has been archived by the owner on Jul 16, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 99
/
app.js
125 lines (104 loc) · 3.38 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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
if ( process.env.NEW_RELIC_HOME ) {
require( 'newrelic' );
}
var express = require( "express" ),
habitat = require( "habitat" ),
helmet = require( "helmet" ),
nunjucks = require( "nunjucks" ),
path = require( "path" ),
persona = require( "express-persona" ),
route = require( "./routes" ),
lessMiddleWare = require( "less-middleware" ),
makeAPI = require( "./lib/makeapi-webmaker" );
habitat.load();
var app = express(),
env = new habitat(),
nunjucksEnv = new nunjucks.Environment( new nunjucks.FileSystemLoader( path.join( __dirname, 'views' ))),
make = makeAPI({
apiURL: env.get( "MAKE_ENDPOINT" ),
auth: env.get( "MAKE_AUTH" )
}),
routes = route( make ),
NODE_ENV = env.get( "NODE_ENV" ),
WWW_ROOT = path.resolve( __dirname, "public" );
nunjucksEnv.express( app );
app.disable( "x-powered-by" );
app.use( express.logger( NODE_ENV === "development" ? "dev" : "" ) );
if ( !!env.get( "FORCE_SSL" ) ) {
app.use( helmet.hsts() );
app.enable( "trust proxy" );
}
app.use( express.compress() );
app.use( express.static( path.join( __dirname, "public" )));
app.use( express.bodyParser() );
app.use( express.cookieParser() );
app.use( express.cookieSession({
key: "webmaker.sid",
secret: env.get( "SESSION_SECRET" ),
cookie: {
maxAge: 2678400000, // 31 days. Persona saves session data for 1 month
secure: !!env.get( "FORCE_SSL" )
},
proxy: true
}));
app.use( express.csrf() );
app.locals({
makeEndpoint: env.get( "MAKE_ENDPOINT" ),
personaSSO: env.get( "AUDIENCE" ),
loginAPI: env.get( "LOGIN" ),
ga_account: env.get( "GA_ACCOUNT" ),
ga_domain: env.get( "GA_DOMAIN" )
});
app.use(function( req, res, next ) {
res.locals({
email: req.session.email || '',
webmakerID: req.session.webmakerid || '',
csrf: req.session._csrf
});
next();
});
require( "webmaker-events" ).init( app, nunjucksEnv, lessMiddleWare, __dirname );
app.use( app.router );
var optimize = NODE_ENV !== "development",
tmpDir = path.join( require( "os" ).tmpDir(), "mozilla.webmaker.org" );
app.use( lessMiddleWare({
once: optimize,
debug: !optimize,
dest: tmpDir,
src: WWW_ROOT,
compress: optimize,
yuicompress: optimize,
optimization: optimize ? 0 : 2
}));
app.use( express.static( tmpDir ) );
app.get( "/healthcheck", routes.api.healthcheck );
app.get( "/", routes.page( "index" ) );
app.get( "/about", routes.page( "about" ) );
app.get( "/learn", routes.page( "learn" ) );
app.get( "/teach", routes.page( "teach" ) );
app.get( "/party", routes.page( "party" ) );
app.get( "/tools", routes.page( "tools" ) );
app.get( "/mentor", routes.page( "mentor" ) );
app.get( "/getinvolved", routes.page( "getinvolved" ) );
app.get( "/search", routes.search );
app.get( "/details/:id", routes.details );
app.get( "/me", routes.me );
// Old
app.get( "/myprojects", routes.me );
app.post( "/remove", routes.remove );
app.get( "/t/:tag", routes.tag );
app.get( "/u/:user", routes.user );
app.get( "/template", routes.page( "template" ) );
app.get( "/sso/include.js", routes.includejs( env.get( "HOSTNAME" ) ) );
/**
* WEBMAKER SSO
*/
// LoginAPI helper Module
var loginAPI = require( "webmaker-loginapi" )( app, env.get( "LOGINAPI" ) );
persona(app, { audience: env.get( "AUDIENCE" ) } );
/**
* END WEBMAKER SSO
*/
app.listen( env.get( "PORT" ), function() {
console.log( "Server listening ( http://localhost:%d )", env.get( "PORT" ));
});