text: 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');
  var npm = require("npm/lib/npm.js");
  var  _ = require("underscore");
  
  var server;
  var serverName;
  
  exports.createServer = function () {
    console.log("Report bugs at https://github.com/ether/etherpad-lite/issues")
  
    serverName = `Etherpad ${settings.getGitCommit()} (http://etherpad.org)`;
    
    console.log(`Your Etherpad version is ${settings.getEpVersion()} (${settings.getGitCommit()})`);
  
    exports.restartServer();
  
    console.log(`You can access your Etherpad instance at http://${settings.ip}:${settings.port}/`);
    if(!_.isEmpty(settings.users)){
      console.log(`The plugin admin page is at http://${settings.ip}:${settings.port}/admin/plugins`);
    }
    else{
      console.warn("Admin username and password not set in settings.json.  To access admin please uncomment and edit 'users' in settings.json");
    }
    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");
    }
  }
  
  exports.restartServer = function () {
  
    if (server) {
      console.log("Restarting express server");
      server.close();
    }
  
    var app = express(); // New syntax for express v3
  
    if (settings.ssl) {
  
      console.log("SSL -- enabled");
      console.log(`SSL -- server key file: ${settings.ssl.key}`);
      console.log(`SSL -- Certificate Authority's certificate file: ${settings.ssl.cert}`);
      
      var options = {
        key: fs.readFileSync( settings.ssl.key ),
        cert: fs.readFileSync( settings.ssl.cert )
      };
      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));
        }
      }
      
      var https = require('https');
      server = https.createServer(options, app);
  
    } else {
  
      var http = require('http');
      server = http.createServer(app);
    }
  
    app.use(function (req, res, next) {
      // res.header("X-Frame-Options", "deny"); // breaks embedded pads
      if(settings.ssl){ // if we use SSL
        res.header("Strict-Transport-Security", "max-age=31536000; includeSubDomains");
      }
  
      // Stop IE going into compatability mode
      // https://github.com/ether/etherpad-lite/issues/2547
      res.header("X-UA-Compatible", "IE=Edge,chrome=1");
      res.header("Server", serverName);
      next();
    });
  
    if(settings.trustProxy){
      app.enable('trust proxy');
    }
  
    hooks.callAll("expressConfigure", {"app": app});
    hooks.callAll("expressCreateServer", {"app": app, "server": server});
  
    server.listen(settings.port, settings.ip);
  }
  