diff --git a/public/language/en_GB/pages.json b/public/language/en_GB/pages.json index 3d444963e1..c28853c5c4 100644 --- a/public/language/en_GB/pages.json +++ b/public/language/en_GB/pages.json @@ -12,5 +12,8 @@ "user.posts": "Posts made by %1", "user.topics": "Topics created by %1", "user.favourites": "%1's Favourite Posts", - "user.settings": "User Settings" + "user.settings": "User Settings", + + "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", + "maintenance.messageIntro": "Additionally, the administator has left this message:" } \ No newline at end of file diff --git a/src/database/postgres.js b/src/database/postgres.js new file mode 100644 index 0000000000..c0374aee9a --- /dev/null +++ b/src/database/postgres.js @@ -0,0 +1,94 @@ + +'use strict'; + +(function(module) { + + var winston = require('winston'), + async = require('async'), + nconf = require('nconf'), + session = require('express-session'), + db, pg; + + module.questions = [ + { + name: 'postgres:host', + description: 'Host IP or address of your PostgreSQL instance', + 'default': nconf.get('postgres:host') || '127.0.0.1' + }, + { + name: 'postgres:port', + description: 'Host port of your MongoDB instance', + 'default': nconf.get('postgres:port') || 5432 + }, + { + name: 'postgres:role', + description: 'PostgreSQL Role name' + }, + // { + // name: 'postgres:password', + // description: 'Password of your MongoDB database', + // hidden: true + // }, + { + name: "postgres:database", + description: "Which database to use", + 'default': nconf.get('postgres:database') || 'nodebb' + } + ]; + + module.init = function(callback) { + try { + var sessionStore; + pg = require('pg'); + + if (!nconf.get('redis')) { + sessionStore = require('connect-pg-simple')(session); + } else { + sessionStore = require('connect-redis')(session); + } + } catch (err) { + winston.error('Unable to initialize PostgreSQL! Is PostgreSQL installed? Error :' + err.message); + process.exit(0); + } + + if (!nconf.get('postgres:password') { + winston.warn('You have no PostgreSQL password setup!'); + } + + var connString = 'postgres://' + nconf.get('postgres:role') + ':' + nconf.get('postgres:password') + '@' + nconf.get('mongopostgres:host') + ':' + nconf.get('postgres:port') + '/' + nconf.get('postgres:database'); + mongoClient.connect(connString, function(err, _db, done) { + if(err) { + winston.error("NodeBB could not connect to your PostgreSQL database. PostgreSQL returned the following error: " + err.message); + process.exit(0); + } + + db = _db; + module.client = db; + + if (!nconf.get('redis')) { + module.sessionStore = new sessionStore({ + pg: pg, + conString: conString, + tableName: 'user_sessions' + }); + } else { + module.sessionStore = new sessionStore({ + client: require('./redis').connect(), + ttl: 60 * 60 * 24 * 14 + }); + } + + require('./postgres/main')(db, module, done); + require('./postgres/hash')(db, module, done); + require('./postgres/sets')(db, module, done); + require('./postgres/sorted')(db, module, done); + require('./postgres/list')(db, module, done); + }); + }; + + module.close = function() { + db.close(); + }; + +}(exports)); + diff --git a/src/middleware/middleware.js b/src/middleware/middleware.js index 3f044075d2..93080ea221 100644 --- a/src/middleware/middleware.js +++ b/src/middleware/middleware.js @@ -355,6 +355,7 @@ middleware.renderHeader = function(req, res, callback) { templateValues.user = results.user; templateValues.customCSS = results.customCSS; templateValues.customJS = results.customJS; + templateValues.maintenanceHeader = meta.config.maintenanceMode === '1' ^ !!results.isAdmin app.render('header', templateValues, callback); }); @@ -443,13 +444,19 @@ middleware.addExpiresHeaders = function(req, res, next) { }; middleware.maintenanceMode = function(req, res, next) { - var render = function() { - res.render('maintenance', { - site_title: meta.config.site_title || 'NodeBB' - }); - }; + var allowedRoutes = [ + '/login' + ], + render = function() { + middleware.buildHeader(req, res, function() { + res.render('maintenance', { + site_title: meta.config.site_title || 'NodeBB', + message: meta.config.maintenanceModeMessage + }); + }); + }; - if (meta.config.maintenanceMode === '1') { + if (meta.config.maintenanceMode === '1' && allowedRoutes.indexOf(req.url) === -1) { if (!req.user) { return render(); } else { diff --git a/src/views/admin/settings/advanced.tpl b/src/views/admin/settings/advanced.tpl index b7b288d458..89a7efed79 100644 --- a/src/views/admin/settings/advanced.tpl +++ b/src/views/admin/settings/advanced.tpl @@ -13,6 +13,10 @@ When the forum is in maintenance mode, all requests will be redirected to a static holding page. Administrators are exempt from this redirection, and are able to access the site normally.

+
+ + +
diff --git a/src/views/maintenance.tpl b/src/views/maintenance.tpl index f5222cd00f..5bd60e430d 100644 --- a/src/views/maintenance.tpl +++ b/src/views/maintenance.tpl @@ -1,9 +1,12 @@ - - - - {site_title} is currently in Maintenance Mode - - -

This site is in maintenance mode. Try again later.

- - \ No newline at end of file +

[[pages:maintenance.text, {site_title}]]

+

+ +
+
+

[[pages:maintenance.messageIntro]]

+
+ {message} +
+
+
+ \ No newline at end of file