Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
86ea510182
Switch branches/tags
Go to file
 
 
Cannot retrieve contributors at this time
196 lines (166 sloc) 5.33 KB
if ( process.env.NEW_RELIC_HOME ) {
require( 'newrelic' );
}
var express = require( "express" ),
habitat = require( "habitat" ),
helmet = require( "helmet" ),
nunjucks = require( "nunjucks" ),
path = require( "path" ),
lessMiddleWare = require( "less-middleware" ),
i18n = require( "i18n-abide" );
habitat.load();
var app = express(),
env = new habitat(),
nunjucksEnv = new nunjucks.Environment( new nunjucks.FileSystemLoader( path.join( __dirname, 'views' )), {
autoescape: true
}),
NODE_ENV = env.get( "NODE_ENV" ),
WWW_ROOT = path.resolve( __dirname, "public" );
nunjucksEnv.addFilter("instantiate", function(input) {
var tmpl = new nunjucks.Template(input);
return tmpl.render(this.getVariables());
});
if ( !( env.get( "MAKE_ENDPOINT" ) && env.get( "MAKE_PRIVATEKEY" ) && env.get( "MAKE_PUBLICKEY" ) ) ) {
throw new Error( "MakeAPI Config setting invalid or missing!" );
}
// Initialize make client so it is available to other modules
require("./lib/makeapi")({
apiURL: env.get( "MAKE_ENDPOINT" ),
hawk: {
key: env.get( "MAKE_PRIVATEKEY" ),
id: env.get( "MAKE_PUBLICKEY" ),
algorithm: "sha256"
}
});
var routes = require("./routes");
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" )));
// Setup locales with i18n
app.use( i18n.abide({
supported_languages: [
'en-US'
],
default_lang: "en-US",
translation_type: "key-value-json",
translation_directory: "locale",
locale_on_url: true
}));
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 || '',
username: req.session.username|| '',
csrf: req.session._csrf
});
next();
});
require( "webmaker-events" ).init( app, nunjucksEnv, lessMiddleWare, __dirname );
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 ) );
// Nunjucks
// This just uses nunjucks-dev for now -- middleware to handle compiling templates in progress
app.use( "/views", express.static(path.join( __dirname, "views" ) ) );
app.get( "/ext/js/nunjucks.js", function( req, res ) {
res.sendfile( path.resolve( __dirname, "node_modules/nunjucks/browser/nunjucks-dev.js"));
});
app.use( app.router );
app.use( function( err, req, res, next) {
if ( !err.status ) {
err.status = 500;
}
res.status( err.status );
res.render( 'error.html', { message: err.message, code: err.status });
});
app.use( function( req, res, next ) {
res.status( 404 );
res.render( 'error.html', { code: 404 });
});
require( "./lib/loginapi" )( app, {
loginURL: env.get( "LOGINAPI" ),
audience: env.get( "AUDIENCE" )
});
var middleware = require( "./lib/middleware" );
app.get( "/healthcheck", routes.api.healthcheck );
app.get( "/", routes.gallery({
layout: "index",
prefix: "p"
}));
app.get( "/editor", middleware.checkAdmin, routes.gallery({
page: "editor"
}));
app.get( "/about", routes.page( "about" ) );
app.get( "/teach", routes.gallery({
layout: "teach",
prefix: "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( "/event-guides", routes.page( "event-guides" ) );
app.get( "/search", routes.search );
app.get( "/details", routes.details );
// Old
app.get( "/details/:id", function(req,res) {
res.redirect("/details?id=" + req.params.id);
});
app.get( "/me", routes.me );
// Old
app.get( "/myprojects", routes.me );
app.post( "/remove", routes.remove );
// Account
app.get( "/login", routes.user.login );
app.get( "/new", routes.user.newaccount );
app.get( "/t/:tag", routes.tag );
app.get( "/u/:user", routes.usersearch );
app.get( "/terms", routes.page( "terms" ) );
app.get( "/privacy", routes.page( "privacy" ) );
app.get( "/sso/include.js", routes.includejs( env.get( "HOSTNAME" ) ) );
app.get( "/sso/include.html", routes.include() );
app.get( "/sso/include-transparent.html", routes.include("transparent" ));
app.get( "/sitemap.xml", routes.sitemap);
app.get( "/js/make-api.js", function( req, res ) {
res.sendfile( path.resolve( __dirname, "node_modules/makeapi-client/src/make-api.js" ) );
});
/**
* Legacy Webmaker Redirects
*/
require( "./routes/redirect" )( app );
app.listen( env.get( "PORT" ), function() {
console.log( "Server listening ( http://localhost:%d )", env.get( "PORT" ));
});