2012-07-03 23:30:40 +02:00
var hooks = require ( "ep_etherpad-lite/static/js/pluginfw/hooks" ) ;
var express = require ( 'express' ) ;
var settings = require ( '../utils/Settings' ) ;
var fs = require ( 'fs' ) ;
var path = require ( 'path' ) ;
2012-07-08 11:37:24 +02:00
var npm = require ( "npm/lib/npm.js" ) ;
2012-07-03 23:30:40 +02:00
var _ = require ( "underscore" ) ;
var server ;
var serverName ;
exports . createServer = function ( ) {
2012-11-22 01:12:30 +01:00
console . log ( "Report bugs at https://github.com/ether/etherpad-lite/issues" )
2012-07-03 23:30:40 +02:00
2018-08-27 01:29:37 +02:00
serverName = ` Etherpad ${ settings . getGitCommit ( ) } (http://etherpad.org) ` ;
2015-04-11 00:13:04 +02:00
2018-08-27 01:29:37 +02:00
console . log ( ` Your Etherpad version is ${ settings . getEpVersion ( ) } ( ${ settings . getGitCommit ( ) } ) ` ) ;
2012-07-03 23:30:40 +02:00
exports . restartServer ( ) ;
2018-08-27 01:29:37 +02:00
console . log ( ` You can access your Etherpad instance at http:// ${ settings . ip } : ${ settings . port } / ` ) ;
2012-07-03 23:30:40 +02:00
if ( ! _ . isEmpty ( settings . users ) ) {
2018-08-27 01:29:37 +02:00
console . log ( ` The plugin admin page is at http:// ${ settings . ip } : ${ settings . port } /admin/plugins ` ) ;
2012-07-03 23:30:40 +02:00
}
else {
console . warn ( "Admin username and password not set in settings.json. To access admin please uncomment and edit 'users' in settings.json" ) ;
}
2018-04-03 11:59:10 +02:00
var env = process . env . NODE _ENV || 'development' ;
if ( env !== 'production' ) {
console . warn ( "Etherpad is running in Development mode. This mode is slower for users and less secure than production mode. You should set the NODE_ENV environment variable to production by using: export NODE_ENV=production" ) ;
}
2012-07-03 23:30:40 +02:00
}
exports . restartServer = function ( ) {
2012-09-12 20:38:53 +02:00
2012-07-03 23:30:40 +02:00
if ( server ) {
console . log ( "Restarting express server" ) ;
server . close ( ) ;
}
2012-09-21 17:12:22 +02:00
var app = express ( ) ; // New syntax for express v3
2012-11-22 10:12:58 +01:00
if ( settings . ssl ) {
2018-08-27 01:29:37 +02:00
console . log ( "SSL -- enabled" ) ;
console . log ( ` SSL -- server key file: ${ settings . ssl . key } ` ) ;
console . log ( ` SSL -- Certificate Authority's certificate file: ${ settings . ssl . cert } ` ) ;
2012-11-22 10:12:58 +01:00
2014-12-14 22:01:28 +01:00
var options = {
2012-11-22 10:12:58 +01:00
key : fs . readFileSync ( settings . ssl . key ) ,
cert : fs . readFileSync ( settings . ssl . cert )
} ;
2015-04-22 20:29:19 +02:00
if ( settings . ssl . ca ) {
options . ca = [ ] ;
for ( var i = 0 ; i < settings . ssl . ca . length ; i ++ ) {
var caFileName = settings . ssl . ca [ i ] ;
options . ca . push ( fs . readFileSync ( caFileName ) ) ;
}
}
2012-11-22 10:12:58 +01:00
var https = require ( 'https' ) ;
server = https . createServer ( options , app ) ;
} else {
var http = require ( 'http' ) ;
server = http . createServer ( app ) ;
}
2012-07-03 23:30:40 +02:00
2012-09-21 17:12:22 +02:00
app . use ( function ( req , res , next ) {
2014-06-17 13:21:38 +02:00
// res.header("X-Frame-Options", "deny"); // breaks embedded pads
2013-03-14 23:03:20 +01:00
if ( settings . ssl ) { // if we use SSL
2014-06-17 13:21:38 +02:00
res . header ( "Strict-Transport-Security" , "max-age=31536000; includeSubDomains" ) ;
2013-03-14 23:03:20 +01:00
}
2015-04-24 15:17:49 +02:00
// Stop IE going into compatability mode
// https://github.com/ether/etherpad-lite/issues/2547
res . header ( "X-UA-Compatible" , "IE=Edge,chrome=1" ) ;
2012-07-03 23:30:40 +02:00
res . header ( "Server" , serverName ) ;
next ( ) ;
} ) ;
2013-04-24 12:19:41 +02:00
if ( settings . trustProxy ) {
app . enable ( 'trust proxy' ) ;
}
2015-04-07 14:55:05 +02:00
hooks . callAll ( "expressConfigure" , { "app" : app } ) ;
2012-09-21 17:12:22 +02:00
hooks . callAll ( "expressCreateServer" , { "app" : app , "server" : server } ) ;
2012-07-03 23:30:40 +02:00
server . listen ( settings . port , settings . ip ) ;
2012-09-12 20:38:53 +02:00
}