From 74f96dacfb992c0e2d00683c84d8b2409b5f12bd Mon Sep 17 00:00:00 2001
From: bill bittner <bittner.w@gmail.com>
Date: Thu, 8 Mar 2018 21:49:59 -0800
Subject: [PATCH] turned the server into a class

---
 routes/api-routes.js |  2 +-
 server.js            | 75 ++++++++++++++++++++++----------------------
 2 files changed, 38 insertions(+), 39 deletions(-)

diff --git a/routes/api-routes.js b/routes/api-routes.js
index 2461c316..e65d0a1c 100644
--- a/routes/api-routes.js
+++ b/routes/api-routes.js
@@ -14,7 +14,7 @@ const { getChannelData, getChannelClaims, getClaimId } = require('../controllers
 const NO_CHANNEL = 'NO_CHANNEL';
 const NO_CLAIM = 'NO_CLAIM';
 
-module.exports = (app, siteConfig) => {
+module.exports = (app) => {
   // route to check whether site has published to a channel
   app.get('/api/channel/availability/:name', ({ ip, originalUrl, params }, res) => {
     checkChannelAvailability(params.name)
diff --git a/server.js b/server.js
index 1492f94a..d3918adc 100644
--- a/server.js
+++ b/server.js
@@ -7,7 +7,6 @@ const { populateLocalsDotUser, serializeSpeechUser, deserializeSpeechUser } = re
 const { logging: { logLevel } } = require('./config/speechConfig.js');
 const logger = require('winston');
 const helmet = require('helmet');
-const PORT = 3000; // set port
 const app = express(); // create an Express application
 const passport = require('passport');
 const cookieSession = require('cookie-session');
@@ -16,20 +15,13 @@ const cookieSession = require('cookie-session');
 require('./config/loggerConfig.js')(logger, logLevel);
 require('./config/slackConfig.js')(logger);
 
-module.exports = {
-  speak (something) {
-    console.log(something);
-  },
-  start (config) {
-    // parse config parameter
-    const { mysqlConfig, siteConfig, lbrynetConfig } = config;
-
-    // get models
-    const db = require('./models')(mysqlConfig);
-
-    // check for global config variables
-    require('./helpers/configVarCheck.js')(config);
-
+function SpeechServer (config) {
+  this.mysqlConfig = config.mysql;
+  this.siteConfig = config.siteConfig;
+  this.lbrynetConfig = config.lbrynetConfig;
+  this.db = require('./models')(this.mysqlConfig);
+  this.PORT = 3000;
+  this.app = (function () {
     // trust the proxy to get ip address for us
     app.enable('trust proxy');
 
@@ -46,14 +38,14 @@ module.exports = {
     // configure passport
     passport.serializeUser(serializeSpeechUser);
     passport.deserializeUser(deserializeSpeechUser);
-    const localSignupStrategy = require('./passport/local-signup.js')(db);
-    const localLoginStrategy = require('./passport/local-login.js')(db);
+    const localSignupStrategy = require('./passport/local-signup.js')(this.db);
+    const localLoginStrategy = require('./passport/local-login.js')(this.db);
     passport.use('local-signup', localSignupStrategy);
     passport.use('local-login', localLoginStrategy);
     // initialize passport
     app.use(cookieSession({
       name  : 'session',
-      keys  : [siteConfig.session.sessionKey],
+      keys  : [this.siteConfig.session.sessionKey],
       maxAge: 24 * 60 * 60 * 1000, // i.e. 24 hours
     }));
     app.use(passport.initialize());
@@ -70,32 +62,39 @@ module.exports = {
     // middleware to pass user info back to client (for handlebars access), if user is logged in
     app.use(populateLocalsDotUser);  // note: I don't think I need this any more?
 
-    // start the server
-    module.exports.startServer(db, app, siteConfig, lbrynetConfig);
-  },
-  startServer (db, app, siteConfig, lbrynetConfig) {
-    db.sequelize
+    // set the routes on the app
+    require('./routes/auth-routes.js')(app);
+    require('./routes/api-routes.js')(app);
+    require('./routes/page-routes.js')(app);
+    require('./routes/serve-routes.js')(app);
+    require('./routes/fallback-routes.js')(app);
+
+    return app;
+  }());
+  this.server = (function () {
+    const http = require('http');
+    return http.Server(this.app);
+  })();
+  this.speak = (something) => {
+    console.log(something);
+  };
+  this.start = () => {
+    // print config variables
+    require('./helpers/configVarCheck.js')(this.config);
+    this.db.sequelize
     // sync sequelize
       .sync()
-      // require routes
-      .then(() => {
-        require('./routes/auth-routes.js')(app, siteConfig, lbrynetConfig);
-        require('./routes/api-routes.js')(app, siteConfig, lbrynetConfig);
-        require('./routes/page-routes.js')(app, siteConfig, lbrynetConfig);
-        require('./routes/serve-routes.js')(app, siteConfig, lbrynetConfig);
-        require('./routes/fallback-routes.js')(app, siteConfig, lbrynetConfig);
-        const http = require('http');
-        return http.Server(app);
-      })
       // start the server
-      .then(server => {
-        server.listen(PORT, () => {
-          logger.info('Trusting proxy?', app.get('trust proxy'));
-          logger.info(`Server is listening on PORT ${PORT}`);
+      .then(() => {
+        this.server.listen(this.PORT, () => {
+          logger.info('Trusting proxy?', this.app.get('trust proxy'));
+          logger.info(`Server is listening on PORT ${this.PORT}`);
         });
       })
       .catch((error) => {
         logger.error(`Startup Error:`, error);
       });
-  },
+  };
 };
+
+module.exports = SpeechServer;