2017-02-18 01:56:23 -07:00
|
|
|
'use strict';
|
2013-12-02 15:45:15 -05:00
|
|
|
|
2021-02-04 00:06:15 -07:00
|
|
|
const nconf = require('nconf');
|
2021-02-03 23:53:16 -07:00
|
|
|
|
2021-02-04 00:06:15 -07:00
|
|
|
const databaseName = nconf.get('database');
|
|
|
|
|
const winston = require('winston');
|
2014-04-14 13:29:21 -04:00
|
|
|
|
2015-12-21 12:02:10 +02:00
|
|
|
if (!databaseName) {
|
2016-10-14 21:48:38 +03:00
|
|
|
winston.error(new Error('Database type not set! Run ./nodebb setup'));
|
2013-12-06 17:46:03 -05:00
|
|
|
process.exit();
|
|
|
|
|
}
|
2013-12-06 14:22:31 -05:00
|
|
|
|
2021-02-03 23:59:08 -07:00
|
|
|
const primaryDB = require(`./${databaseName}`);
|
2013-12-02 15:45:15 -05:00
|
|
|
|
2018-10-25 19:58:01 -04:00
|
|
|
primaryDB.parseIntFields = function (data, intFields, requestedFields) {
|
2019-08-13 14:36:15 -04:00
|
|
|
intFields.forEach((field) => {
|
2022-02-03 09:48:14 -05:00
|
|
|
if (!requestedFields || !requestedFields.length || requestedFields.includes(field)) {
|
2018-10-25 19:58:01 -04:00
|
|
|
data[field] = parseInt(data[field], 10) || 0;
|
|
|
|
|
}
|
|
|
|
|
});
|
2018-10-20 16:31:16 -04:00
|
|
|
};
|
|
|
|
|
|
2019-10-05 17:05:52 -04:00
|
|
|
primaryDB.initSessionStore = async function () {
|
2018-11-24 23:02:22 -05:00
|
|
|
const sessionStoreConfig = nconf.get('session_store') || nconf.get('redis') || nconf.get(databaseName);
|
|
|
|
|
let sessionStoreDB = primaryDB;
|
|
|
|
|
|
|
|
|
|
if (nconf.get('session_store')) {
|
2021-02-03 23:59:08 -07:00
|
|
|
sessionStoreDB = require(`./${sessionStoreConfig.name}`);
|
2018-11-24 23:02:22 -05:00
|
|
|
} else if (nconf.get('redis')) {
|
|
|
|
|
// if redis is specified, use it as session store over others
|
|
|
|
|
sessionStoreDB = require('./redis');
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-05 17:05:52 -04:00
|
|
|
primaryDB.sessionStore = await sessionStoreDB.createSessionStore(sessionStoreConfig);
|
2018-11-24 23:02:22 -05:00
|
|
|
};
|
|
|
|
|
|
2023-11-28 20:58:07 -05:00
|
|
|
function promisifySessionStoreMethod(method, sid) {
|
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
|
if (!primaryDB.sessionStore) {
|
|
|
|
|
resolve(method === 'get' ? null : undefined);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
primaryDB.sessionStore[method](sid, (err, result) => {
|
|
|
|
|
if (err) reject(err);
|
|
|
|
|
else resolve(method === 'get' ? result || null : undefined);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
primaryDB.sessionStoreGet = function (sid) {
|
|
|
|
|
return promisifySessionStoreMethod('get', sid);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
primaryDB.sessionStoreDestroy = function (sid) {
|
|
|
|
|
return promisifySessionStoreMethod('destroy', sid);
|
|
|
|
|
};
|
|
|
|
|
|
2017-02-18 02:30:48 -07:00
|
|
|
module.exports = primaryDB;
|