silex-website-builder-goodevent
Version:
Free and easy website builder for everyone.
88 lines (75 loc) • 2.93 kB
text/typescript
//////////////////////////////////////////////////
// Silex, live web creation
// http://projects.silexlabs.org/?/silex/
//
// Copyright (c) 2012 Silex Labs
// http://www.silexlabs.org/
//
// Silex is available under the GPL license
// http://www.silexlabs.org/silex/silex-licensing/
//////////////////////////////////////////////////
// node modules
import * as bodyParser from 'body-parser';
import * as compression from 'compression';
import * as cookieParser from 'cookie-parser';
import * as session from 'cookie-session';
import * as express from 'express';
import * as Path from 'path';
import CloudExplorerRouter from './router/CloudExplorerRouter';
import PublishRouter from './router/PublishRouter';
import SslRouter from './router/SslRouter';
import StaticRouter from './router/StaticRouter';
import WebsiteRouter from './router/WebsiteRouter';
import { Config } from './ServerConfig';
function noCache(req, res, next) {
res.header('Cache-Control', 'private,no-cache,no-store,must-revalidate,proxy-revalidate');
res.header('Expires', '-1');
res.header('Pragma', 'no-cache');
next();
}
function withCache(req, res, next) {
res.header('Cache-Control', 'public,max-age=86400,immutable'); // 24h
next();
}
export default function SilexServer(config: Config) {
if (config.serverOptions.debug) {
require('source-map-support').install();
}
this.config = config;
this.app = express();
// compress gzip when possible
this.app.use(compression());
// cookie & session
this.app.use(bodyParser.json({limit: '1mb'}));
this.app.use(bodyParser.text({limit: '10mb'}));
this.app.use(cookieParser());
this.app.use(session({
name: 'silex-session',
secret: this.config.serverOptions.sessionSecret,
}));
// create the routes for unifile/CloudExplorer
// and for Silex tasks
this.staticRouter = StaticRouter(this.config.staticOptions);
this.ceRouter = CloudExplorerRouter(this.config.ceOptions);
this.websiteRouter = WebsiteRouter(this.config.serverOptions, this.ceRouter.unifile);
this.publishRouter = PublishRouter(this.config.publisherOptions, this.ceRouter.unifile);
this.sslRouter = SslRouter(this.config.sslOptions, this.app);
this.unifile = this.ceRouter.unifile; // for access by third party
}
SilexServer.prototype.start = function(cbk) {
// use routers
this.app.use(this.config.serverOptions.cePath, this.ceRouter); // CE handles cache headers
this.app.use(withCache, this.staticRouter);
this.app.use(noCache, this.websiteRouter);
this.app.use(noCache, this.publishRouter);
this.app.use(this.sslRouter);
// Start Silex as an Electron app
if (this.config.electronOptions.enabled) {
require(Path.join(__dirname, 'silex_electron'));
}
// server 'loop'
this.app.listen(this.config.serverOptions.port, () => {
console.info(`\nI'm ready, listening to port ${this.config.serverOptions.port}\n`);
if (cbk) { cbk(); }
});
};