You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
3.3 KiB
JavaScript
103 lines
3.3 KiB
JavaScript
/* jshint esversion: 6 */
|
|
const WebSocketServer = require('ws').Server;
|
|
const NetfluxSrv = require('chainpad-server');
|
|
const Decrees = require("./decrees");
|
|
|
|
const nThen = require("nthen");
|
|
|
|
module.exports.create = function (Env) {
|
|
var log = Env.Log;
|
|
|
|
nThen(function (w) {
|
|
Decrees.load(Env, w(function (err) {
|
|
Env.flushCache();
|
|
|
|
if (err) {
|
|
log.error('DECREES_LOADING', {
|
|
error: err.code || err,
|
|
message: err.message,
|
|
});
|
|
console.error(err);
|
|
}
|
|
|
|
var stats = {
|
|
restrictRegistration: Env.restrictRegistration,
|
|
supportMailbox: Env.supportMailbox,
|
|
|
|
defaultStorageLimit: Env.defaultStorageLimit,
|
|
maxUploadSize: Env.maxUploadSize,
|
|
premiumUploadSize: Env.premiumUploadSize,
|
|
|
|
adminEmail: Env.adminEmail,
|
|
inactiveTime: Env.inactiveTime,
|
|
|
|
accountRetentionTime: Env.accountRetentionTime,
|
|
archiveRetentionTime: Env.archiveRetentionTime,
|
|
|
|
httpUnsafeOrigin: Env.httpUnsafeOrigin,
|
|
httpSafeOrigin: Env.httpSafeOrigin,
|
|
|
|
adminKeys: Env.admins,
|
|
|
|
consentToContact: Env.consentToContact,
|
|
listMyInstance: Env.listMyInstance,
|
|
provideAggregateStatistics: Env.provideAggregateStatistics,
|
|
|
|
removeDonateButton: Env.removeDonateButton,
|
|
blockDailyCheck: Env.blockDailyCheck,
|
|
};
|
|
|
|
console.log(stats);
|
|
|
|
}));
|
|
}).nThen(function () {
|
|
// asynchronously create a historyKeeper and RPC together
|
|
require('./historyKeeper.js').create(Env, function (err, historyKeeper) {
|
|
if (err) { throw err; }
|
|
|
|
|
|
var noop = function () {};
|
|
|
|
var special_errors = {};
|
|
['EPIPE', 'ECONNRESET'].forEach(function (k) { special_errors[k] = noop; });
|
|
special_errors.NF_ENOENT = function (error, label, info) {
|
|
delete info.stack;
|
|
log.error(label, {
|
|
info: info,
|
|
});
|
|
};
|
|
|
|
// spawn ws server and attach netflux event handlers
|
|
NetfluxSrv.create(new WebSocketServer({ server: Env.httpServer}))
|
|
.on('channelClose', historyKeeper.channelClose)
|
|
.on('channelMessage', historyKeeper.channelMessage)
|
|
.on('channelOpen', historyKeeper.channelOpen)
|
|
.on('sessionClose', historyKeeper.sessionClose)
|
|
.on('error', function (error, label, info) {
|
|
if (!error) { return; }
|
|
var code = error && (error.code || error.message);
|
|
if (code) {
|
|
/* EPIPE,ECONNERESET, NF_ENOENT */
|
|
if (typeof(special_errors[code]) === 'function') {
|
|
return void special_errors[code](error, label, info);
|
|
}
|
|
}
|
|
|
|
/* labels:
|
|
SEND_MESSAGE_FAIL, SEND_MESSAGE_FAIL_2, FAIL_TO_DISCONNECT,
|
|
FAIL_TO_TERMINATE, HANDLE_CHANNEL_LEAVE, NETFLUX_BAD_MESSAGE,
|
|
NETFLUX_WEBSOCKET_ERROR
|
|
*/
|
|
log.error(label, {
|
|
code: error.code,
|
|
message: error.message,
|
|
stack: error.stack,
|
|
info: info,
|
|
});
|
|
})
|
|
.register(historyKeeper.id, historyKeeper.directMessage);
|
|
});
|
|
});
|
|
|
|
};
|