From 69121425b98308c58c5618bfe3c327fbbbee6060 Mon Sep 17 00:00:00 2001 From: Dominic Bosch Date: Sat, 22 Mar 2014 23:07:13 +0100 Subject: [PATCH] thoroughly dirty commit for syncing with laptop... --- coffee/persistence.coffee | 124 +-- js-coffee/components-manager.js | 291 +++--- js-coffee/config.js | 125 +-- js-coffee/dynamic-modules.js | 87 +- js-coffee/http-listener.js | 115 +-- js-coffee/logging.js | 101 +- js-coffee/persistence.js | 938 ++++++++++--------- js-coffee/request-handler.js | 231 ++--- js-coffee/webapi-eca.js | 195 ++-- testing/test_persistence.coffee | 905 +++++++++--------- webpages/handlers/js/admin.js | 2 +- webpages/handlers/js/error.js | 2 +- webpages/handlers/js/forge_action_invoker.js | 2 +- webpages/handlers/js/forge_event.js | 2 +- webpages/handlers/js/forge_event_poller.js | 2 +- webpages/handlers/js/forge_rule.js | 2 +- webpages/handlers/js/login.js | 2 +- 17 files changed, 1619 insertions(+), 1507 deletions(-) diff --git a/coffee/persistence.coffee b/coffee/persistence.coffee index b63b34e..6db986d 100644 --- a/coffee/persistence.coffee +++ b/coffee/persistence.coffee @@ -46,6 +46,7 @@ exports = module.exports = ( args ) => @db.on 'error', ( err ) => if err.message.indexOf( 'ECONNREFUSED' ) > -1 @connRefused = true + @log.error err, 'DB | Wrong port?' exports.eventPollers = new IndexedModules( 'event-poller', @db, @log ) exports.actionInvokers = new IndexedModules( 'action-invoker', @db, @log ) @@ -225,81 +226,77 @@ getSetRecords = ( set, fSingle, cb ) => # TODO remove specific functions and allow direct access to instances of this class class IndexedModules constructor: ( @setname, @db, @log ) -> - @log.info "DB | Instantiated indexed modules for '#{ @setname }'" + @log.info "DB | CALL: Instantiated indexed modules for '#{ @setname }'" storeModule: ( mId, userId, data ) => - @log.info "DB | storeModule(#{ @setname }): #{ mId }" + @log.info "DB | CALL: #{ @setname }.storeModule( #{ mId }, #{ userId }, data )" @db.sadd "#{ @setname }s", mId, - replyHandler "Storing '#{ @setname }' key '#{ mId }'" + replyHandler "sadd '#{ mId }' to '#{ @setname }'" @db.hmset "#{ @setname }:#{ mId }", 'code', data['code'], - replyHandler "Storing '#{ @setname }:#{ mId }'" + replyHandler "hmset 'code' in hash '#{ @setname }:#{ mId }'" @db.hmset "#{ @setname }:#{ mId }", 'reqparams', data['reqparams'], - replyHandler "Storing '#{ @setname }:#{ mId }'" + replyHandler "hmset 'reqparams' in hash '#{ @setname }:#{ mId }'" @linkModule mId, userId #TODO add testing linkModule: ( mId, userId ) => - @log.info "DB | linkModule(#{ @setname }): #{ mId } to #{ userId }" + @log.info "DB | CALL: #{ @setname }.linkModule( #{ mId }, #{ userId } )" @db.sadd "#{ @setname }:#{ mId }:users", userId, - replyHandler "Linking '#{ @setname }:#{ mId }:users' #{ userId }" + replyHandler "sadd #{ userId } to '#{ @setname }:#{ mId }:users'" @db.sadd "user:#{ userId }:#{ @setname }s", mId, - replyHandler "Linking 'user:#{ userId }:#{ @setname }s' #{ mId }" + replyHandler "sadd #{ mId } to 'user:#{ userId }:#{ @setname }s'" #TODO add testing unlinkModule: ( mId, userId ) => - @log.info "DB | unlinkModule(#{ @setname }): #{ mId } to #{ userId }" + @log.info "DB | CALL: #{ @setname }.unlinkModule( #{ mId }, #{ userId } )" @db.srem "#{ @setname }:#{ mId }:users", userId, - replyHandler "Unlinking '#{ @setname }:#{ mId }:users' #{ userId }" + replyHandler "srem #{ userId } from '#{ @setname }:#{ mId }:users'" @db.srem "user:#{ userId }:#{ @setname }s", mId, - replyHandler "Unlinking 'user:#{ userId }:#{ @setname }s' #{ mId }" + replyHandler "srem #{ mId } from 'user:#{ userId }:#{ @setname }s'" #TODO add testing publish: ( mId ) => - @log.info "DB | publish(#{ @setname }): #{ mId }" + @log.info "DB | CALL: #{ @setname }.publish( #{ mId } )" @db.sadd "public-#{ @setname }s", mId, - replyHandler "Publishing '#{ @setname }' key '#{ mId }'" + replyHandler "sadd '#{ mId }' to 'public-#{ @setname }s'" #TODO add testing unpublish: ( mId ) => - @log.info "DB | unpublish(#{ @setname }): #{ mId }" + @log.info "DB | CALL: #{ @setname }.unpublish( #{ mId } )" @db.srem "public-#{ @setname }s", mId, - replyHandler "Unpublishing '#{ @setname }' key '#{ mId }'" + replyHandler "srem '#{ mId }' from 'public-#{ @setname }s'" getModule: ( mId, cb ) => - @log.info "DB | getModule('#{ @setname }): #{ mId }'" + @log.info "DB | CALL: #{ @setname }.getModule( #{ mId } )" @db.hgetall "#{ @setname }:#{ mId }", cb #TODO add testing getModuleParams: ( mId, cb ) => - @log.info "DB | getModule('#{ @setname }): #{ mId }'" + @log.info "DB | CALL: #{ @setname }.getModule( #{ mId } )" @db.hget "#{ @setname }:#{ mId }", "params", cb #TODO add testing getAvailableModuleIds: ( userId, cb ) => - @log.info "DB | getPublicModuleIds(#{ @setname })" + @log.info "DB | CALL: #{ @setname }.getPublicModuleIds( #{ @suserId } )" @db.sunion "public-#{ @setname }s", "user:#{ userId }:#{ @setname }s", cb getModuleIds: ( cb ) => - @log.info "DB | getModuleIds(#{ @setname })" + @log.info "DB | CALL: #{ @setname }.getModuleIds()" @db.smembers "#{ @setname }s", cb getModules: ( cb ) => - @log.info "DB | getModules(#{ @setname })" + @log.info "DB | CALL: #{ @setname }.getModules()" getSetRecords "#{ @setname }s", @getModule, cb deleteModule: ( mId ) => - @log.info "DB | deleteModule(#{ @setname }): #{ mId }" + @log.info "DB | CALL: #{ @setname }.deleteModule( #{ mId } )" @db.srem "#{ @setname }s", mId, - replyHandler "Deleting '#{ @setname }' key '#{ mId }'" + replyHandler "srem '#{ mId }' from #{ @setname }s" @db.del "#{ @setname }:#{ mId }", - replyHandler "Deleting '#{ @setname }:#{ mId }'" + replyHandler "del of '#{ @setname }:#{ mId }'" @db.smembers "#{ @setname }:#{ mId }:users", ( err, obj ) => - fRemLinks = ( userId ) => - @db.srem "#{ @setname }:#{ mId }:users", userId, - replyHandler "Removing '#{ @setname }:#{ mId }' linked user '#{ userId }'" - @db.srem "user:#{ userId }:#{ @setname }s", mId, - replyHandler "Removing 'user:#{ userId }:#{ @setname }s' linked module '#{ mId }'" - fRemLinks user for user in obj + @unlinkModule mId, userId for userId in obj + #TODO check whether this unlink always fails! problems with db disconnect during testing... #TODO remove published ids # TODO remove from public modules # TODO remove parameters @@ -310,27 +307,27 @@ class IndexedModules # replyHandler "Linking 'user:#{ userId }:#{ @setname }s' #{ mId }" storeUserParams: ( mId, userId, data ) => - @log.info "DB | storeUserParams(#{ @setname }): '#{ mId }:#{ userId }'" + @log.info "DB | CALL: #{ @setname }.storeUserParams( #{ mId }, #{ userId }, data )" @db.sadd "#{ @setname }-params", "#{ mId }:#{ userId }", - replyHandler "Storing '#{ @setname }' module parameters key '#{ mId }'" + replyHandler "sadd '#{ mId }:#{ userId }' to '#{ @setname }-params'" @db.set "#{ @setname }-params:#{ mId }:#{ userId }", encrypt( data ), - replyHandler "Storing '#{ @setname }' module parameters '#{ mId }:#{ userId }'" + replyHandler "set user params in '#{ @setname }-params:#{ mId }:#{ userId }'" getUserParams: ( mId, userId, cb ) => - @log.info "DB | getUserParams(#{ @setname }): '#{ mId }:#{ userId }'" + @log.info "DB | CALL: #{ @setname }.getUserParams( #{ mId }, #{ userId } )" @db.get "#{ @setname }-params:#{ mId }:#{ userId }", ( err, data ) -> cb err, decrypt data getUserParamsIds: ( cb ) => - @log.info "DB | getUserParamsIds(#{ @setname })" + @log.info "DB | CALL: #{ @setname }.getUserParamsIds()" @db.smembers "#{ @setname }-params", cb deleteUserParams: ( mId, userId ) => - @log.info "DB | deleteUserParams(#{ @setname }): '#{ mId }:#{ userId }'" + @log.info "DB | CALL: #{ @setname }.deleteUserParams(#{ mId }, #{ userId } )" @db.srem "#{ @setname }-params", "#{ mId }:#{ userId }", - replyHandler "Deleting '#{ @setname }-params' key '#{ mId }:#{ userId }'" + replyHandler "srem '#{ mId }:#{ userId }' from '#{ @setname }-params'" @db.del "#{ @setname }-params:#{ mId }:#{ userId }", - replyHandler "Deleting '#{ @setname }-params:#{ mId }:#{ userId }'" + replyHandler "del '#{ @setname }-params:#{ mId }:#{ userId }'" ### @@ -376,6 +373,7 @@ Store a string representation of a rule in the DB. @param {String} data ### exports.storeRule = ( ruleId, data ) => + console.log "ready: #{ @db.ready }, connected: #{ @db.connected }" @log.info "DB | storeRule: '#{ ruleId }'" @db.sadd 'rules', "#{ ruleId }", replyHandler "storing rule key '#{ ruleId }'" @@ -586,35 +584,36 @@ Deletes a user and all his associated linked and active rules. ### exports.deleteUser = ( userId ) => @log.info "DB | deleteUser: '#{ userId }'" + console.log "ready: #{ @db.ready }, connected: #{ @db.connected }" @db.srem "users", userId, replyHandler "Deleting user key '#{ userId }'" @db.del "user:#{ userId }", replyHandler "Deleting user '#{ userId }'" - # We also need to delete all linked rules - @db.smembers "user:#{ userId }:rules", ( err, obj ) => - delLinkedRuleUser = ( ruleId ) => - @db.srem "rule:#{ ruleId }:users", userId, - replyHandler "Deleting user key '#{ userId }' in linked rule '#{ ruleId }'" - delLinkedRuleUser id for id in obj - @db.del "user:#{ userId }:rules", - replyHandler "Deleting user '#{ userId }' rules" + # # We also need to delete all linked rules + # @db.smembers "user:#{ userId }:rules", ( err, obj ) => + # delLinkedRuleUser = ( ruleId ) => + # @db.srem "rule:#{ ruleId }:users", userId, + # replyHandler "Deleting user key '#{ userId }' in linked rule '#{ ruleId }'" + # delLinkedRuleUser id for id in obj + # @db.del "user:#{ userId }:rules", + # replyHandler "Deleting user '#{ userId }' rules" - # We also need to delete all active rules - @db.smembers "user:#{ userId }:active-rules", ( err, obj ) => - delActivatedRuleUser = ( ruleId ) => - @db.srem "rule:#{ ruleId }:active-users", userId, - replyHandler "Deleting user key '#{ userId }' in active rule '#{ ruleId }'" - delActivatedRuleUser id for id in obj - @db.del "user:#{ userId }:active-rules", - replyHandler "Deleting user '#{ userId }' rules" + # # We also need to delete all active rules + # @db.smembers "user:#{ userId }:active-rules", ( err, obj ) => + # delActivatedRuleUser = ( ruleId ) => + # @db.srem "rule:#{ ruleId }:active-users", userId, + # replyHandler "Deleting user key '#{ userId }' in active rule '#{ ruleId }'" + # delActivatedRuleUser id for id in obj + # @db.del "user:#{ userId }:active-rules", + # replyHandler "Deleting user '#{ userId }' rules" - # We also need to delete all associated roles - @db.smembers "user:#{ userId }:roles", ( err, obj ) => - delRoleUser = ( roleId ) => - @db.srem "role:#{ roleId }:users", userId, - replyHandler "Deleting user key '#{ userId }' in role '#{ roleId }'" - delRoleUser id for id in obj - @db.del "user:#{ userId }:roles", - replyHandler "Deleting user '#{ userId }' roles" + # # We also need to delete all associated roles + # @db.smembers "user:#{ userId }:roles", ( err, obj ) => + # delRoleUser = ( roleId ) => + # @db.srem "role:#{ roleId }:users", userId, + # replyHandler "Deleting user key '#{ userId }' in role '#{ roleId }'" + # delRoleUser id for id in obj + # @db.del "user:#{ userId }:roles", + # replyHandler "Deleting user '#{ userId }' roles" ### Checks the credentials and on success returns the user object to the @@ -684,8 +683,11 @@ Fetch all users of a role and pass them to cb(err, obj). @param {function} cb ### exports.getRoleUsers = ( role, cb ) => + console.log role + console.log cb @log.info "DB | getRoleUsers: '#{ role }'" @db.smembers "role:#{ role }:users", cb + console.log 'command issued' ### Remove a role from a user. diff --git a/js-coffee/components-manager.js b/js-coffee/components-manager.js index 4b740ac..6278c4c 100644 --- a/js-coffee/components-manager.js +++ b/js-coffee/components-manager.js @@ -1,4 +1,5 @@ -// Generated by CoffeeScript 1.6.3 +// Generated by CoffeeScript 1.7.1 + /* Components Manager @@ -6,12 +7,10 @@ Components Manager > The components manager takes care of the dynamic JS modules and the rules. > Event Poller and Action Invoker modules are loaded as strings and stored in the database, > then compiled into node modules and rules and used in the engine and event poller. -*/ - + */ (function() { - var commandFunctions, db, dynmod, events, exports, fs, path, vm, - _this = this; + var commandFunctions, db, dynmod, events, exports, fs, path, vm; db = require('./persistence'); @@ -25,86 +24,94 @@ Components Manager events = require('events'); + /* Module call ----------- Initializes the HTTP listener and its request handler. @param {Object} args - */ + */ + exports = module.exports = (function(_this) { + return function(args) { + _this.log = args.logger; + _this.ee = new events.EventEmitter(); + db(args); + dynmod(args); + return module.exports; + }; + })(this); - exports = module.exports = function(args) { - _this.log = args.logger; - _this.ee = new events.EventEmitter(); - db(args); - dynmod(args); - return module.exports; - }; - - exports.addListener = function(evt, eh) { - _this.ee.addListener(evt, eh); - return db.getRules(function(err, obj) { - var id, rule, _results; - _results = []; - for (id in obj) { - rule = obj[id]; - _results.push(_this.ee.emit('init', rule)); - } - return _results; - }); - }; - - exports.processRequest = function(user, obj, cb) { - var answ; - if (commandFunctions[obj.command]) { - return answ = commandFunctions[obj.command](user, obj, cb); - } else { - return cb({ - code: 404, - message: 'Strange request!' + exports.addListener = (function(_this) { + return function(evt, eh) { + _this.ee.addListener(evt, eh); + return db.getRules(function(err, obj) { + var id, rule, _results; + _results = []; + for (id in obj) { + rule = obj[id]; + _results.push(_this.ee.emit('init', rule)); + } + return _results; }); - } - }; + }; + })(this); + + exports.processRequest = (function(_this) { + return function(user, obj, cb) { + var answ; + if (commandFunctions[obj.command]) { + return answ = commandFunctions[obj.command](user, obj, cb); + } else { + return cb({ + code: 404, + message: 'Strange request!' + }); + } + }; + })(this); commandFunctions = { - forge_event_poller: function(user, obj, cb) { - var answ; - answ = { - code: 200 - }; - return db.eventPollers.getModule(obj.id, function(err, mod) { - var cm, id, name, src, _ref; - if (mod) { - answ.code = 409; - answ.message = 'Event Poller module name already existing: ' + obj.id; - } else { - src = obj.data; - cm = dynmod.compileString(src, obj.id, {}, obj.lang); - answ = cm.answ; - if (answ.code === 200) { - events = []; - _ref = cm.module; - for (name in _ref) { - id = _ref[name]; - events.push(name); - } - _this.log.info("CM | Storing new eventpoller with events " + events); - answ.message = "Event Poller module successfully stored! Found following event(s): " + events; - db.eventPollers.storeModule(obj.id, user.username, { - code: obj.data, - lang: obj.lang, - params: obj.params, - events: events - }); - if (obj["public"] === 'true') { - db.eventPollers.publish(obj.id); + forge_event_poller: (function(_this) { + return function(user, obj, cb) { + var answ; + answ = { + code: 200 + }; + return db.eventPollers.getModule(obj.id, function(err, mod) { + var cm, id, name, src, _ref; + if (mod) { + answ.code = 409; + answ.message = 'Event Poller module name already existing: ' + obj.id; + } else { + src = obj.data; + cm = dynmod.compileString(src, obj.id, {}, obj.lang); + answ = cm.answ; + if (answ.code === 200) { + events = []; + _ref = cm.module; + for (name in _ref) { + id = _ref[name]; + events.push(name); + } + _this.log.info("CM | Storing new eventpoller with events " + events); + answ.message = "Event Poller module successfully stored! Found following event(s): " + events; + db.eventPollers.storeModule(obj.id, user.username, { + code: obj.data, + lang: obj.lang, + params: obj.params, + events: events + }); + if (obj["public"] === 'true') { + db.eventPollers.publish(obj.id); + } } } - } - return cb(answ); - }); - }, + return cb(answ); + }); + }; + })(this), get_event_pollers: function(user, obj, cb) { return db.eventPollers.getAvailableModuleIds(user.username, function(err, obj) { var fGetEvents, id, oRes, sem, _i, _len, _results; @@ -169,80 +176,84 @@ Components Manager }); }); }, - forge_action_invoker: function(user, obj, cb) { - var answ; - answ = { - code: 200 - }; - return db.actionInvokers.getModule(obj.id, function(err, mod) { - var actions, cm, id, name, src, _ref; - if (mod) { - answ.code = 409; - answ.message = 'Action Invoker module name already existing: ' + obj.id; - } else { - src = obj.data; - cm = dynmod.compileString(src, obj.id, {}, obj.lang); - answ = cm.answ; - if (answ.code === 200) { - actions = []; - _ref = cm.module; - for (name in _ref) { - id = _ref[name]; - actions.push(name); - } - _this.log.info("CM | Storing new eventpoller with actions " + actions); - answ.message = "Action Invoker module successfully stored! Found following action(s): " + actions; - db.actionInvokers.storeModule(obj.id, user.username, { - code: obj.data, - lang: obj.lang, - params: obj.params, - actions: actions - }); - if (obj["public"] === 'true') { - db.actionInvokers.publish(obj.id); + forge_action_invoker: (function(_this) { + return function(user, obj, cb) { + var answ; + answ = { + code: 200 + }; + return db.actionInvokers.getModule(obj.id, function(err, mod) { + var actions, cm, id, name, src, _ref; + if (mod) { + answ.code = 409; + answ.message = 'Action Invoker module name already existing: ' + obj.id; + } else { + src = obj.data; + cm = dynmod.compileString(src, obj.id, {}, obj.lang); + answ = cm.answ; + if (answ.code === 200) { + actions = []; + _ref = cm.module; + for (name in _ref) { + id = _ref[name]; + actions.push(name); + } + _this.log.info("CM | Storing new eventpoller with actions " + actions); + answ.message = "Action Invoker module successfully stored! Found following action(s): " + actions; + db.actionInvokers.storeModule(obj.id, user.username, { + code: obj.data, + lang: obj.lang, + params: obj.params, + actions: actions + }); + if (obj["public"] === 'true') { + db.actionInvokers.publish(obj.id); + } } } - } - return cb(answ); - }); - }, + return cb(answ); + }); + }; + })(this), get_rules: function(user, obj, cb) { return console.log('CM | Implement get_rules'); }, - forge_rule: function(user, obj, cb) { - obj.event = JSON.parse(obj.event); - return db.getRule(obj.id, function(err, objRule) { - var answ, id, modules, params, rule; - if (objRule !== null) { - answ = { - code: 409, - message: 'Rule name already existing!' - }; - } else { - answ = { - code: 200, - message: 'Rule stored and activated!' - }; - rule = { - id: obj.id, - event: "" + obj.event.module + " -> " + obj.event["function"], - conditions: JSON.parse(obj.conditions), - actions: JSON.parse(obj.actions) - }; - modules = JSON.parse(obj.action_params); - db.storeRule(rule.id, JSON.stringify(rule)); - db.linkRule(rule.id, user.username); - db.activateRule(rule.id, user.username); - db.eventPollers.storeUserParams(obj.event.module, user.username, obj.event_params); - for (id in modules) { - params = modules[id]; - db.actionInvokers.storeUserParams(id, user.username, JSON.stringify(params)); + forge_rule: (function(_this) { + return function(user, obj, cb) { + obj.event = JSON.parse(obj.event); + return db.getRule(obj.id, function(err, objRule) { + var answ, id, modules, params, rule; + if (objRule !== null) { + answ = { + code: 409, + message: 'Rule name already existing!' + }; + } else { + answ = { + code: 200, + message: 'Rule stored and activated!' + }; + rule = { + id: obj.id, + event: "" + obj.event.module + " -> " + obj.event["function"], + conditions: JSON.parse(obj.conditions), + actions: JSON.parse(obj.actions) + }; + modules = JSON.parse(obj.action_params); + db.storeRule(rule.id, JSON.stringify(rule)); + db.linkRule(rule.id, user.username); + db.activateRule(rule.id, user.username); + db.eventPollers.storeUserParams(obj.event.module, user.username, obj.event_params); + for (id in modules) { + params = modules[id]; + db.actionInvokers.storeUserParams(id, user.username, JSON.stringify(params)); + } + _this.ee.emit('newRule', JSON.stringify(rule)); } - _this.ee.emit('newRule', JSON.stringify(rule)); - } - return cb(answ); - }); - } + return cb(answ); + }); + }; + })(this) }; }).call(this); diff --git a/js-coffee/config.js b/js-coffee/config.js index 8777084..9a172f8 100644 --- a/js-coffee/config.js +++ b/js-coffee/config.js @@ -1,20 +1,20 @@ -// Generated by CoffeeScript 1.6.3 +// Generated by CoffeeScript 1.7.1 + /* Configuration ============= > Loads the configuration file and acts as an interface to it. -*/ - + */ (function() { - var exports, fetchProp, fs, loadConfigFile, path, - _this = this; + var exports, fetchProp, fs, loadConfigFile, path; fs = require('fs'); path = require('path'); + /* Module call ----------- @@ -24,21 +24,23 @@ Configuration be generated) and configPath for a custom configuration file path. @param {Object} args - */ + */ + exports = module.exports = (function(_this) { + return function(args) { + args = args != null ? args : {}; + if (args.nolog) { + _this.nolog = true; + } + if (args.configPath) { + loadConfigFile(args.configPath); + } else { + loadConfigFile(path.join('config', 'system.json')); + } + return module.exports; + }; + })(this); - exports = module.exports = function(args) { - args = args != null ? args : {}; - if (args.nolog) { - _this.nolog = true; - } - if (args.configPath) { - loadConfigFile(args.configPath); - } else { - loadConfigFile(path.join('config', 'system.json')); - } - return module.exports; - }; /* Tries to load a configuration file from the path relative to this module's parent folder. @@ -46,97 +48,102 @@ Configuration @private loadConfigFile @param {String} configPath - */ + */ - - loadConfigFile = function(configPath) { - var confProperties, e, prop, _i, _len; - _this.config = null; - confProperties = ['log', 'http-port', 'db-port']; - try { - _this.config = JSON.parse(fs.readFileSync(path.resolve(__dirname, '..', configPath))); - _this.isReady = true; - for (_i = 0, _len = confProperties.length; _i < _len; _i++) { - prop = confProperties[_i]; - if (!_this.config[prop]) { - _this.isReady = false; + loadConfigFile = (function(_this) { + return function(configPath) { + var confProperties, e, prop, _i, _len; + _this.config = null; + confProperties = ['log', 'http-port', 'db-port']; + try { + _this.config = JSON.parse(fs.readFileSync(path.resolve(__dirname, '..', configPath))); + _this.isReady = true; + for (_i = 0, _len = confProperties.length; _i < _len; _i++) { + prop = confProperties[_i]; + if (!_this.config[prop]) { + _this.isReady = false; + } + } + if (!_this.isReady && !_this.nolog) { + return console.error("Missing property in config file, requires:\n" + (" - " + (confProperties.join("\n - ")))); + } + } catch (_error) { + e = _error; + _this.isReady = false; + if (!_this.nolog) { + return console.error("Failed loading config file: " + e.message); } } - if (!_this.isReady && !_this.nolog) { - return console.error("Missing property in config file, requires:\n" + (" - " + (confProperties.join("\n - ")))); - } - } catch (_error) { - e = _error; - _this.isReady = false; - if (!_this.nolog) { - return console.error("Failed loading config file: " + e.message); - } - } - }; + }; + })(this); + /* Fetch a property from the configuration @private fetchProp( *prop* ) @param {String} prop - */ + */ + fetchProp = (function(_this) { + return function(prop) { + var _ref; + return (_ref = _this.config) != null ? _ref[prop] : void 0; + }; + })(this); - fetchProp = function(prop) { - var _ref; - return (_ref = _this.config) != null ? _ref[prop] : void 0; - }; /* ***Returns*** true if the config file is ready, else false @public isReady() - */ + */ + exports.isReady = (function(_this) { + return function() { + return _this.isReady; + }; + })(this); - exports.isReady = function() { - return _this.isReady; - }; /* ***Returns*** the HTTP port @public getHttpPort() - */ - + */ exports.getHttpPort = function() { return fetchProp('http-port'); }; + /* ***Returns*** the DB port* @public getDBPort() - */ - + */ exports.getDbPort = function() { return fetchProp('db-port'); }; + /* ***Returns*** the log conf object @public getLogConf() - */ - + */ exports.getLogConf = function() { return fetchProp('log'); }; + /* ***Returns*** the crypto key @public getCryptoKey() - */ - + */ exports.getCryptoKey = function() { return fetchProp('crypto-key'); diff --git a/js-coffee/dynamic-modules.js b/js-coffee/dynamic-modules.js index 27876fc..a826e61 100644 --- a/js-coffee/dynamic-modules.js +++ b/js-coffee/dynamic-modules.js @@ -1,16 +1,15 @@ -// Generated by CoffeeScript 1.6.3 +// Generated by CoffeeScript 1.7.1 + /* Dynamic Modules =============== > Compiles CoffeeScript modules and loads JS modules in a VM, together > with only a few allowed node.js modules. -*/ - + */ (function() { - var cs, exports, needle, vm, - _this = this; + var cs, exports, needle, vm; vm = require('vm'); @@ -18,19 +17,22 @@ Dynamic Modules cs = require('coffee-script'); + /* Module call ----------- Initializes the dynamic module handler. @param {Object} args - */ + */ + exports = module.exports = (function(_this) { + return function(args) { + _this.log = args.logger; + return module.exports; + }; + })(this); - exports = module.exports = function(args) { - _this.log = args.logger; - return module.exports; - }; /* Try to run a JS module from a string, together with the @@ -42,44 +44,45 @@ Dynamic Modules @param {String} id @param {Object} params @param {String} lang - */ + */ - - exports.compileString = function(src, id, params, lang) { - var answ, err, ret, sandbox; - answ = { - code: 200, - message: 'Successfully compiled' - }; - if (lang === '0') { + exports.compileString = (function(_this) { + return function(src, id, params, lang) { + var answ, err, ret, sandbox; + answ = { + code: 200, + message: 'Successfully compiled' + }; + if (lang === '0') { + try { + src = cs.compile(src); + } catch (_error) { + err = _error; + answ.code = 400; + answ.message = 'Compilation of CoffeeScript failed at line ' + err.location.first_line; + } + } + sandbox = { + id: id, + params: params, + needle: needle, + log: console.log, + exports: {} + }; try { - src = cs.compile(src); + vm.runInNewContext(src, sandbox, id + '.vm'); } catch (_error) { err = _error; + console.log(err); answ.code = 400; - answ.message = 'Compilation of CoffeeScript failed at line ' + err.location.first_line; + answ.message = 'Loading Module failed: ' + err.message; } - } - sandbox = { - id: id, - params: params, - needle: needle, - log: console.log, - exports: {} + ret = { + answ: answ, + module: sandbox.exports + }; + return ret; }; - try { - vm.runInNewContext(src, sandbox, id + '.vm'); - } catch (_error) { - err = _error; - console.log(err); - answ.code = 400; - answ.message = 'Loading Module failed: ' + err.message; - } - ret = { - answ: answ, - module: sandbox.exports - }; - return ret; - }; + })(this); }).call(this); diff --git a/js-coffee/http-listener.js b/js-coffee/http-listener.js index ba133cc..aa686b2 100644 --- a/js-coffee/http-listener.js +++ b/js-coffee/http-listener.js @@ -1,4 +1,5 @@ -// Generated by CoffeeScript 1.6.3 +// Generated by CoffeeScript 1.7.1 + /* HTTP Listener @@ -6,12 +7,10 @@ HTTP Listener > Receives the HTTP requests to the server at the given port. The requests > (bound to a method) are then redirected to the appropriate handler which > takes care of the request. -*/ - + */ (function() { - var app, exports, express, initRouting, path, qs, requestHandler, - _this = this; + var app, exports, express, initRouting, path, qs, requestHandler; requestHandler = require('./request-handler'); @@ -23,73 +22,77 @@ HTTP Listener app = express(); + /* Module call ----------- Initializes the HTTP listener and its request handler. @param {Object} args - */ + */ + exports = module.exports = (function(_this) { + return function(args) { + _this.log = args.logger; + _this.shutDownSystem = args['shutdown-function']; + requestHandler(args); + initRouting(args['http-port']); + return module.exports; + }; + })(this); - exports = module.exports = function(args) { - _this.log = args.logger; - _this.shutDownSystem = args['shutdown-function']; - requestHandler(args); - initRouting(args['http-port']); - return module.exports; - }; /* Initializes the request routing and starts listening on the given port. @param {int} port @private initRouting( *fShutDown* ) - */ + */ + initRouting = (function(_this) { + return function(port) { + var server, sess_sec; + app.use(express.cookieParser()); + sess_sec = "149u*y8C:@kmN/520Gt\\v'+KFBnQ!\\r<>5X/xRI`sT 'action-invokers' and then stored in the db with the key 'action-invoker:' + ID > (e.g. action-invoker:probinder). > -*/ - + */ (function() { var IndexedModules, crypto, decrypt, encrypt, exports, getSetRecords, hash, redis, replyHandler, - _this = this, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; crypto = require('crypto-js'); redis = require('redis'); + /* Module call ----------- Initializes the DB connection with the given `db-port` property in the `args` object. @param {Object} args - */ + */ - - exports = module.exports = function(args) { - var _ref; - _this.log = args.logger; - if ((_ref = _this.db) != null) { - _ref.quit(); - } - _this.crypto_key = "}f6y1y}B{.an$}2c$Yl.$mSnF\\HX149u*y8C:@kmN/520Gt\\v'+KFBnQ!\\r<>5X/xRI`sT -1) { - _this.connRefused = true; - return _this.log.error(err, 'DB | Wrong port?'); + exports = module.exports = (function(_this) { + return function(args) { + var _ref; + _this.log = args.logger; + if ((_ref = _this.db) != null) { + _ref.quit(); } - }); - exports.eventPollers = new IndexedModules('event-poller', _this.db, _this.log); - return exports.actionInvokers = new IndexedModules('action-invoker', _this.db, _this.log); - }; + _this.crypto_key = "}f6y1y}B{.an$}2c$Yl.$mSnF\\HX149u*y8C:@kmN/520Gt\\v'+KFBnQ!\\r<>5X/xRI`sT -1) { + _this.connRefused = true; + return _this.log.error(err, 'DB | Wrong port?'); + } + }); + exports.eventPollers = new IndexedModules('event-poller', _this.db, _this.log); + return exports.actionInvokers = new IndexedModules('action-invoker', _this.db, _this.log); + }; + })(this); + /* Checks whether the db is connected and passes either an error on failure after @@ -64,165 +66,181 @@ Persistence @public isConnected( *cb* ) @param {function} cb - */ + */ - - exports.isConnected = function(cb) { - var fCheckConnection, numAttempts; - if (_this.db.connected) { - return cb(); - } else { - numAttempts = 0; - fCheckConnection = function() { - if (_this.connRefused) { - return cb(new Error('DB | Connection refused! Wrong port?')); - } else { - if (_this.db.connected) { - _this.log.info('DB | Successfully connected to DB!'); - return cb(); - } else if (numAttempts++ < 10) { - return setTimeout(fCheckConnection, 100); + exports.isConnected = (function(_this) { + return function(cb) { + var fCheckConnection, numAttempts; + if (_this.db.connected) { + return cb(); + } else { + numAttempts = 0; + fCheckConnection = function() { + if (_this.connRefused) { + return cb(new Error('DB | Connection refused! Wrong port?')); } else { - return cb(new Error('DB | Connection to DB failed!')); + if (_this.db.connected) { + _this.log.info('DB | Successfully connected to DB!'); + return cb(); + } else if (numAttempts++ < 10) { + return setTimeout(fCheckConnection, 100); + } else { + return cb(new Error('DB | Connection to DB failed!')); + } } - } - }; - return setTimeout(fCheckConnection, 100); - } - }; + }; + return setTimeout(fCheckConnection, 100); + } + }; + })(this); + /* Abstracts logging for simple action replies from the DB. @private replyHandler( *action* ) @param {String} action - */ + */ - - replyHandler = function(action) { - return function(err, reply) { - if (err) { - return _this.log.warn(err, "during '" + action + "'"); - } else { - return _this.log.info("DB | " + action + ": " + reply); - } + replyHandler = (function(_this) { + return function(action) { + return function(err, reply) { + if (err) { + return _this.log.warn(err, "during '" + action + "'"); + } else { + return _this.log.info("DB | " + action + ": " + reply); + } + }; }; - }; + })(this); + /* Push an event into the event queue. @public pushEvent( *oEvent* ) @param {Object} oEvent - */ + */ + exports.pushEvent = (function(_this) { + return function(oEvent) { + if (oEvent) { + _this.log.info("DB | Event pushed into the queue: '" + oEvent.eventid + "'"); + return _this.db.rpush('event_queue', JSON.stringify(oEvent)); + } else { + return _this.log.warn('DB | Why would you give me an empty event...'); + } + }; + })(this); - exports.pushEvent = function(oEvent) { - if (oEvent) { - _this.log.info("DB | Event pushed into the queue: '" + oEvent.eventid + "'"); - return _this.db.rpush('event_queue', JSON.stringify(oEvent)); - } else { - return _this.log.warn('DB | Why would you give me an empty event...'); - } - }; /* Pop an event from the event queue and pass it to cb(err, obj). @public popEvent( *cb* ) @param {function} cb - */ + */ - - exports.popEvent = function(cb) { - var makeObj; - makeObj = function(pcb) { - return function(err, obj) { - return pcb(err, JSON.parse(obj)); + exports.popEvent = (function(_this) { + return function(cb) { + var makeObj; + makeObj = function(pcb) { + return function(err, obj) { + return pcb(err, JSON.parse(obj)); + }; }; + return _this.db.lpop('event_queue', makeObj(cb)); }; - return _this.db.lpop('event_queue', makeObj(cb)); - }; + })(this); + /* Purge the event queue. @public purgeEventQueue() - */ + */ + exports.purgeEventQueue = (function(_this) { + return function() { + return _this.db.del('event_queue', replyHandler('purging event queue')); + }; + })(this); - exports.purgeEventQueue = function() { - return _this.db.del('event_queue', replyHandler('purging event queue')); - }; /* Hashes a string based on SHA-3-512. @private hash( *plainText* ) @param {String} plainText - */ + */ + hash = (function(_this) { + return function(plainText) { + var err; + if (plainText == null) { + return null; + } + try { + return (crypto.SHA3(plainText, { + outputLength: 512 + })).toString(); + } catch (_error) { + err = _error; + _this.log.warn(err, 'DB | during hashing'); + return null; + } + }; + })(this); - hash = function(plainText) { - var err; - if (plainText == null) { - return null; - } - try { - return (crypto.SHA3(plainText, { - outputLength: 512 - })).toString(); - } catch (_error) { - err = _error; - _this.log.warn(err, 'DB | during hashing'); - return null; - } - }; /* Encrypts a string using the crypto key from the config file, based on aes-256-cbc. @private encrypt( *plainText* ) @param {String} plainText - */ + */ + encrypt = (function(_this) { + return function(plainText) { + var err; + if (plainText == null) { + return null; + } + try { + return crypto.AES.encrypt(plainText, _this.crypto_key); + } catch (_error) { + err = _error; + _this.log.warn(err, 'DB | during encryption'); + return null; + } + }; + })(this); - encrypt = function(plainText) { - var err; - if (plainText == null) { - return null; - } - try { - return crypto.AES.encrypt(plainText, _this.crypto_key); - } catch (_error) { - err = _error; - _this.log.warn(err, 'DB | during encryption'); - return null; - } - }; /* Decrypts an encrypted string and hands it back on success or null. @private decrypt( *crypticText* ) @param {String} crypticText - */ + */ + decrypt = (function(_this) { + return function(crypticText) { + var dec, err; + if (crypticText == null) { + return null; + } + try { + dec = crypto.AES.decrypt(crypticText, _this.crypto_key); + return dec.toString(crypto.enc.Utf8); + } catch (_error) { + err = _error; + _this.log.warn(err, 'DB | during decryption'); + return null; + } + }; + })(this); - decrypt = function(crypticText) { - var dec, err; - if (crypticText == null) { - return null; - } - try { - dec = crypto.AES.decrypt(crypticText, _this.crypto_key); - return dec.toString(crypto.enc.Utf8); - } catch (_error) { - err = _error; - _this.log.warn(err, 'DB | during decryption'); - return null; - } - }; /* Fetches all linked data set keys from a linking set, fetches the single @@ -234,50 +252,51 @@ Persistence per set entry @param {function} cb the callback(err, obj) function that receives all the retrieved data or an error - */ + */ - - getSetRecords = function(set, fSingle, cb) { - _this.log.info("DB | Fetching set records: '" + set + "'"); - return _this.db.smembers(set, function(err, arrReply) { - var fCallback, objReplies, reply, semaphore, _i, _len, _results; - if (err) { - _this.log.warn(err, "DB | fetching '" + set + "'"); - return cb(err); - } else if (arrReply.length === 0) { - return cb(); - } else { - semaphore = arrReply.length; - objReplies = {}; - setTimeout(function() { - if (semaphore > 0) { - return cb(new Error("Timeout fetching '" + set + "'")); - } - }, 2000); - fCallback = function(prop) { - return function(err, data) { - --semaphore; - if (err) { - _this.log.warn(err, "DB | fetching single element: '" + prop + "'"); - } else if (!data) { - _this.log.warn(new Error("Empty key in DB: '" + prop + "'")); - } else { - objReplies[prop] = data; - } - if (semaphore === 0) { - return cb(null, objReplies); + getSetRecords = (function(_this) { + return function(set, fSingle, cb) { + _this.log.info("DB | Fetching set records: '" + set + "'"); + return _this.db.smembers(set, function(err, arrReply) { + var fCallback, objReplies, reply, semaphore, _i, _len, _results; + if (err) { + _this.log.warn(err, "DB | fetching '" + set + "'"); + return cb(err); + } else if (arrReply.length === 0) { + return cb(); + } else { + semaphore = arrReply.length; + objReplies = {}; + setTimeout(function() { + if (semaphore > 0) { + return cb(new Error("Timeout fetching '" + set + "'")); } + }, 2000); + fCallback = function(prop) { + return function(err, data) { + --semaphore; + if (err) { + _this.log.warn(err, "DB | fetching single element: '" + prop + "'"); + } else if (!data) { + _this.log.warn(new Error("Empty key in DB: '" + prop + "'")); + } else { + objReplies[prop] = data; + } + if (semaphore === 0) { + return cb(null, objReplies); + } + }; }; - }; - _results = []; - for (_i = 0, _len = arrReply.length; _i < _len; _i++) { - reply = arrReply[_i]; - _results.push(fSingle(reply, fCallback(reply))); + _results = []; + for (_i = 0, _len = arrReply.length; _i < _len; _i++) { + reply = arrReply[_i]; + _results.push(fSingle(reply, fCallback(reply))); + } + return _results; } - return _results; - } - }); - }; + }); + }; + })(this); IndexedModules = (function() { function IndexedModules(setname, db, log) { @@ -299,115 +318,113 @@ Persistence this.unlinkModule = __bind(this.unlinkModule, this); this.linkModule = __bind(this.linkModule, this); this.storeModule = __bind(this.storeModule, this); - this.log.info("DB | Instantiated indexed modules for '" + this.setname + "'"); + this.log.info("DB | CALL: Instantiated indexed modules for '" + this.setname + "'"); } IndexedModules.prototype.storeModule = function(mId, userId, data) { - this.log.info("DB | storeModule(" + this.setname + "): " + mId); - this.db.sadd("" + this.setname + "s", mId, replyHandler("Storing '" + this.setname + "' key '" + mId + "'")); - this.db.hmset("" + this.setname + ":" + mId, 'code', data['code'], replyHandler("Storing '" + this.setname + ":" + mId + "'")); - this.db.hmset("" + this.setname + ":" + mId, 'reqparams', data['reqparams'], replyHandler("Storing '" + this.setname + ":" + mId + "'")); + this.log.info("DB | CALL: " + this.setname + ".storeModule( " + mId + ", " + userId + ", data )"); + this.db.sadd("" + this.setname + "s", mId, replyHandler("sadd '" + mId + "' to '" + this.setname + "'")); + this.db.hmset("" + this.setname + ":" + mId, 'code', data['code'], replyHandler("hmset 'code' in hash '" + this.setname + ":" + mId + "'")); + this.db.hmset("" + this.setname + ":" + mId, 'reqparams', data['reqparams'], replyHandler("hmset 'reqparams' in hash '" + this.setname + ":" + mId + "'")); return this.linkModule(mId, userId); }; IndexedModules.prototype.linkModule = function(mId, userId) { - this.log.info("DB | linkModule(" + this.setname + "): " + mId + " to " + userId); - this.db.sadd("" + this.setname + ":" + mId + ":users", userId, replyHandler("Linking '" + this.setname + ":" + mId + ":users' " + userId)); - return this.db.sadd("user:" + userId + ":" + this.setname + "s", mId, replyHandler("Linking 'user:" + userId + ":" + this.setname + "s' " + mId)); + this.log.info("DB | CALL: " + this.setname + ".linkModule( " + mId + ", " + userId + " )"); + this.db.sadd("" + this.setname + ":" + mId + ":users", userId, replyHandler("sadd " + userId + " to '" + this.setname + ":" + mId + ":users'")); + return this.db.sadd("user:" + userId + ":" + this.setname + "s", mId, replyHandler("sadd " + mId + " to 'user:" + userId + ":" + this.setname + "s'")); }; IndexedModules.prototype.unlinkModule = function(mId, userId) { - this.log.info("DB | unlinkModule(" + this.setname + "): " + mId + " to " + userId); - this.db.srem("" + this.setname + ":" + mId + ":users", userId, replyHandler("Unlinking '" + this.setname + ":" + mId + ":users' " + userId)); - return this.db.srem("user:" + userId + ":" + this.setname + "s", mId, replyHandler("Unlinking 'user:" + userId + ":" + this.setname + "s' " + mId)); + this.log.info("DB | CALL: " + this.setname + ".unlinkModule( " + mId + ", " + userId + " )"); + this.db.srem("" + this.setname + ":" + mId + ":users", userId, replyHandler("srem " + userId + " from '" + this.setname + ":" + mId + ":users'")); + return this.db.srem("user:" + userId + ":" + this.setname + "s", mId, replyHandler("srem " + mId + " from 'user:" + userId + ":" + this.setname + "s'")); }; IndexedModules.prototype.publish = function(mId) { - this.log.info("DB | publish(" + this.setname + "): " + mId); - return this.db.sadd("public-" + this.setname + "s", mId, replyHandler("Publishing '" + this.setname + "' key '" + mId + "'")); + this.log.info("DB | CALL: " + this.setname + ".publish( " + mId + " )"); + return this.db.sadd("public-" + this.setname + "s", mId, replyHandler("sadd '" + mId + "' to 'public-" + this.setname + "s'")); }; IndexedModules.prototype.unpublish = function(mId) { - this.log.info("DB | unpublish(" + this.setname + "): " + mId); - return this.db.srem("public-" + this.setname + "s", mId, replyHandler("Unpublishing '" + this.setname + "' key '" + mId + "'")); + this.log.info("DB | CALL: " + this.setname + ".unpublish( " + mId + " )"); + return this.db.srem("public-" + this.setname + "s", mId, replyHandler("srem '" + mId + "' from 'public-" + this.setname + "s'")); }; IndexedModules.prototype.getModule = function(mId, cb) { - this.log.info("DB | getModule('" + this.setname + "): " + mId + "'"); + this.log.info("DB | CALL: " + this.setname + ".getModule( " + mId + " )"); return this.db.hgetall("" + this.setname + ":" + mId, cb); }; IndexedModules.prototype.getModuleParams = function(mId, cb) { - this.log.info("DB | getModule('" + this.setname + "): " + mId + "'"); + this.log.info("DB | CALL: " + this.setname + ".getModule( " + mId + " )"); return this.db.hget("" + this.setname + ":" + mId, "params", cb); }; IndexedModules.prototype.getAvailableModuleIds = function(userId, cb) { - this.log.info("DB | getPublicModuleIds(" + this.setname + ")"); + this.log.info("DB | CALL: " + this.setname + ".getPublicModuleIds( " + this.suserId + " )"); return this.db.sunion("public-" + this.setname + "s", "user:" + userId + ":" + this.setname + "s", cb); }; IndexedModules.prototype.getModuleIds = function(cb) { - this.log.info("DB | getModuleIds(" + this.setname + ")"); + this.log.info("DB | CALL: " + this.setname + ".getModuleIds()"); return this.db.smembers("" + this.setname + "s", cb); }; IndexedModules.prototype.getModules = function(cb) { - this.log.info("DB | getModules(" + this.setname + ")"); + this.log.info("DB | CALL: " + this.setname + ".getModules()"); return getSetRecords("" + this.setname + "s", this.getModule, cb); }; IndexedModules.prototype.deleteModule = function(mId) { - var _this = this; - this.log.info("DB | deleteModule(" + this.setname + "): " + mId); - this.db.srem("" + this.setname + "s", mId, replyHandler("Deleting '" + this.setname + "' key '" + mId + "'")); - this.db.del("" + this.setname + ":" + mId, replyHandler("Deleting '" + this.setname + ":" + mId + "'")); - return this.db.smembers("" + this.setname + ":" + mId + ":users", function(err, obj) { - var fRemLinks, user, _i, _len, _results; - fRemLinks = function(userId) { - _this.db.srem("" + _this.setname + ":" + mId + ":users", userId, replyHandler("Removing '" + _this.setname + ":" + mId + "' linked user '" + userId + "'")); - return _this.db.srem("user:" + userId + ":" + _this.setname + "s", mId, replyHandler("Removing 'user:" + userId + ":" + _this.setname + "s' linked module '" + mId + "'")); + this.log.info("DB | CALL: " + this.setname + ".deleteModule( " + mId + " )"); + this.db.srem("" + this.setname + "s", mId, replyHandler("srem '" + mId + "' from " + this.setname + "s")); + this.db.del("" + this.setname + ":" + mId, replyHandler("del of '" + this.setname + ":" + mId + "'")); + return this.db.smembers("" + this.setname + ":" + mId + ":users", (function(_this) { + return function(err, obj) { + var userId, _i, _len, _results; + _results = []; + for (_i = 0, _len = obj.length; _i < _len; _i++) { + userId = obj[_i]; + _results.push(_this.unlinkModule(mId, userId)); + } + return _results; }; - _results = []; - for (_i = 0, _len = obj.length; _i < _len; _i++) { - user = obj[_i]; - _results.push(fRemLinks(user)); - } - return _results; - }); + })(this)); }; IndexedModules.prototype.storeUserParams = function(mId, userId, data) { - this.log.info("DB | storeUserParams(" + this.setname + "): '" + mId + ":" + userId + "'"); - this.db.sadd("" + this.setname + "-params", "" + mId + ":" + userId, replyHandler("Storing '" + this.setname + "' module parameters key '" + mId + "'")); - return this.db.set("" + this.setname + "-params:" + mId + ":" + userId, encrypt(data), replyHandler("Storing '" + this.setname + "' module parameters '" + mId + ":" + userId + "'")); + this.log.info("DB | CALL: " + this.setname + ".storeUserParams( " + mId + ", " + userId + ", data )"); + this.db.sadd("" + this.setname + "-params", "" + mId + ":" + userId, replyHandler("sadd '" + mId + ":" + userId + "' to '" + this.setname + "-params'")); + return this.db.set("" + this.setname + "-params:" + mId + ":" + userId, encrypt(data), replyHandler("set user params in '" + this.setname + "-params:" + mId + ":" + userId + "'")); }; IndexedModules.prototype.getUserParams = function(mId, userId, cb) { - this.log.info("DB | getUserParams(" + this.setname + "): '" + mId + ":" + userId + "'"); + this.log.info("DB | CALL: " + this.setname + ".getUserParams( " + mId + ", " + userId + " )"); return this.db.get("" + this.setname + "-params:" + mId + ":" + userId, function(err, data) { return cb(err, decrypt(data)); }); }; IndexedModules.prototype.getUserParamsIds = function(cb) { - this.log.info("DB | getUserParamsIds(" + this.setname + ")"); + this.log.info("DB | CALL: " + this.setname + ".getUserParamsIds()"); return this.db.smembers("" + this.setname + "-params", cb); }; IndexedModules.prototype.deleteUserParams = function(mId, userId) { - this.log.info("DB | deleteUserParams(" + this.setname + "): '" + mId + ":" + userId + "'"); - this.db.srem("" + this.setname + "-params", "" + mId + ":" + userId, replyHandler("Deleting '" + this.setname + "-params' key '" + mId + ":" + userId + "'")); - return this.db.del("" + this.setname + "-params:" + mId + ":" + userId, replyHandler("Deleting '" + this.setname + "-params:" + mId + ":" + userId + "'")); + this.log.info("DB | CALL: " + this.setname + ".deleteUserParams(" + mId + ", " + userId + " )"); + this.db.srem("" + this.setname + "-params", "" + mId + ":" + userId, replyHandler("srem '" + mId + ":" + userId + "' from '" + this.setname + "-params'")); + return this.db.del("" + this.setname + "-params:" + mId + ":" + userId, replyHandler("del '" + this.setname + "-params:" + mId + ":" + userId + "'")); }; return IndexedModules; })(); + /* - ## Rules - */ + *# Rules + */ /* @@ -416,39 +433,45 @@ Persistence @public getRule( *ruleId, cb* ) @param {String} ruleId @param {function} cb - */ + */ + exports.getRule = (function(_this) { + return function(ruleId, cb) { + _this.log.info("DB | getRule: '" + ruleId + "'"); + return _this.db.get("rule:" + ruleId, cb); + }; + })(this); - exports.getRule = function(ruleId, cb) { - _this.log.info("DB | getRule: '" + ruleId + "'"); - return _this.db.get("rule:" + ruleId, cb); - }; /* Fetch all rules and pass them to cb(err, obj). @public getRules( *cb* ) @param {function} cb - */ + */ + exports.getRules = (function(_this) { + return function(cb) { + _this.log.info('DB | Fetching all Rules'); + return getSetRecords('rules', exports.getRule, cb); + }; + })(this); - exports.getRules = function(cb) { - _this.log.info('DB | Fetching all Rules'); - return getSetRecords('rules', exports.getRule, cb); - }; /* Fetch all rule IDs and hand it to cb(err, obj). @public getRuleIds( *cb* ) @param {function} cb - */ + */ + exports.getRuleIds = (function(_this) { + return function(cb) { + _this.log.info('DB | Fetching all Rule IDs'); + return _this.db.smembers('rules', cb); + }; + })(this); - exports.getRuleIds = function(cb) { - _this.log.info('DB | Fetching all Rule IDs'); - return _this.db.smembers('rules', cb); - }; /* Store a string representation of a rule in the DB. @@ -456,14 +479,17 @@ Persistence @public storeRule( *ruleId, data* ) @param {String} ruleId @param {String} data - */ + */ + exports.storeRule = (function(_this) { + return function(ruleId, data) { + console.log("ready: " + _this.db.ready + ", connected: " + _this.db.connected); + _this.log.info("DB | storeRule: '" + ruleId + "'"); + _this.db.sadd('rules', "" + ruleId, replyHandler("storing rule key '" + ruleId + "'")); + return _this.db.set("rule:" + ruleId, data, replyHandler("storing rule '" + ruleId + "'")); + }; + })(this); - exports.storeRule = function(ruleId, data) { - _this.log.info("DB | storeRule: '" + ruleId + "'"); - _this.db.sadd('rules', "" + ruleId, replyHandler("storing rule key '" + ruleId + "'")); - return _this.db.set("rule:" + ruleId, data, replyHandler("storing rule '" + ruleId + "'")); - }; /* Delete a string representation of a rule. @@ -471,40 +497,42 @@ Persistence @public deleteRule( *ruleId, userId* ) @param {String} ruleId @param {String} userId - */ + */ + exports.deleteRule = (function(_this) { + return function(ruleId) { + _this.log.info("DB | deleteRule: '" + ruleId + "'"); + _this.db.srem("rules", ruleId, replyHandler("Deleting rule key '" + ruleId + "'")); + _this.db.del("rule:" + ruleId, replyHandler("Deleting rule '" + ruleId + "'")); + _this.db.smembers("rule:" + ruleId + ":users", function(err, obj) { + var delLinkedUserRule, id, _i, _len, _results; + delLinkedUserRule = function(userId) { + return _this.db.srem("user:" + userId + ":rules", ruleId, replyHandler("Deleting rule key '" + ruleId + "' in linked user '" + userId + "'")); + }; + _results = []; + for (_i = 0, _len = obj.length; _i < _len; _i++) { + id = obj[_i]; + _results.push(delLinkedUserRule(id)); + } + return _results; + }); + _this.db.del("rule:" + ruleId + ":users", replyHandler("Deleting rule '" + ruleId + "' users")); + _this.db.smembers("rule:" + ruleId + ":active-users", function(err, obj) { + var delActiveUserRule, id, _i, _len, _results; + delActiveUserRule = function(userId) { + return _this.db.srem("user:" + userId + ":active-rules", ruleId, replyHandler("Deleting rule key '" + ruleId + "' in active user '" + userId + "'")); + }; + _results = []; + for (_i = 0, _len = obj.length; _i < _len; _i++) { + id = obj[_i]; + _results.push(delActiveUserRule(id)); + } + return _results; + }); + return _this.db.del("rule:" + ruleId + ":active-users", replyHandler("Deleting rule '" + ruleId + "' active users")); + }; + })(this); - exports.deleteRule = function(ruleId) { - _this.log.info("DB | deleteRule: '" + ruleId + "'"); - _this.db.srem("rules", ruleId, replyHandler("Deleting rule key '" + ruleId + "'")); - _this.db.del("rule:" + ruleId, replyHandler("Deleting rule '" + ruleId + "'")); - _this.db.smembers("rule:" + ruleId + ":users", function(err, obj) { - var delLinkedUserRule, id, _i, _len, _results; - delLinkedUserRule = function(userId) { - return _this.db.srem("user:" + userId + ":rules", ruleId, replyHandler("Deleting rule key '" + ruleId + "' in linked user '" + userId + "'")); - }; - _results = []; - for (_i = 0, _len = obj.length; _i < _len; _i++) { - id = obj[_i]; - _results.push(delLinkedUserRule(id)); - } - return _results; - }); - _this.db.del("rule:" + ruleId + ":users", replyHandler("Deleting rule '" + ruleId + "' users")); - _this.db.smembers("rule:" + ruleId + ":active-users", function(err, obj) { - var delActiveUserRule, id, _i, _len, _results; - delActiveUserRule = function(userId) { - return _this.db.srem("user:" + userId + ":active-rules", ruleId, replyHandler("Deleting rule key '" + ruleId + "' in active user '" + userId + "'")); - }; - _results = []; - for (_i = 0, _len = obj.length; _i < _len; _i++) { - id = obj[_i]; - _results.push(delActiveUserRule(id)); - } - return _results; - }); - return _this.db.del("rule:" + ruleId + ":active-users", replyHandler("Deleting rule '" + ruleId + "' active users")); - }; /* Associate a rule to a user. @@ -512,14 +540,16 @@ Persistence @public linkRule( *ruleId, userId* ) @param {String} ruleId @param {String} userId - */ + */ + exports.linkRule = (function(_this) { + return function(ruleId, userId) { + _this.log.info("DB | linkRule: '" + ruleId + "' for user '" + userId + "'"); + _this.db.sadd("rule:" + ruleId + ":users", userId, replyHandler("storing user '" + userId + "' for rule key '" + ruleId + "'")); + return _this.db.sadd("user:" + userId + ":rules", ruleId, replyHandler("storing rule key '" + ruleId + "' for user '" + userId + "'")); + }; + })(this); - exports.linkRule = function(ruleId, userId) { - _this.log.info("DB | linkRule: '" + ruleId + "' for user '" + userId + "'"); - _this.db.sadd("rule:" + ruleId + ":users", userId, replyHandler("storing user '" + userId + "' for rule key '" + ruleId + "'")); - return _this.db.sadd("user:" + userId + ":rules", ruleId, replyHandler("storing rule key '" + ruleId + "' for user '" + userId + "'")); - }; /* Get rules linked to a user and hand it to cb(err, obj). @@ -527,13 +557,15 @@ Persistence @public getUserLinkRule( *userId, cb* ) @param {String} userId @param {function} cb - */ + */ + exports.getUserLinkedRules = (function(_this) { + return function(userId, cb) { + _this.log.info("DB | getUserLinkedRules: for user '" + userId + "'"); + return _this.db.smembers("user:" + userId + ":rules", cb); + }; + })(this); - exports.getUserLinkedRules = function(userId, cb) { - _this.log.info("DB | getUserLinkedRules: for user '" + userId + "'"); - return _this.db.smembers("user:" + userId + ":rules", cb); - }; /* Get users linked to a rule and hand it to cb(err, obj). @@ -541,13 +573,15 @@ Persistence @public getRuleLinkedUsers( *ruleId, cb* ) @param {String} ruleId @param {function} cb - */ + */ + exports.getRuleLinkedUsers = (function(_this) { + return function(ruleId, cb) { + _this.log.info("DB | getRuleLinkedUsers: for rule '" + ruleId + "'"); + return _this.db.smembers("rule:" + ruleId + ":users", cb); + }; + })(this); - exports.getRuleLinkedUsers = function(ruleId, cb) { - _this.log.info("DB | getRuleLinkedUsers: for rule '" + ruleId + "'"); - return _this.db.smembers("rule:" + ruleId + ":users", cb); - }; /* Delete an association of a rule to a user. @@ -555,14 +589,16 @@ Persistence @public unlinkRule( *ruleId, userId* ) @param {String} ruleId @param {String} userId - */ + */ + exports.unlinkRule = (function(_this) { + return function(ruleId, userId) { + _this.log.info("DB | unlinkRule: '" + ruleId + ":" + userId + "'"); + _this.db.srem("rule:" + ruleId + ":users", userId, replyHandler("removing user '" + userId + "' for rule key '" + ruleId + "'")); + return _this.db.srem("user:" + userId + ":rules", ruleId, replyHandler("removing rule key '" + ruleId + "' for user '" + userId + "'")); + }; + })(this); - exports.unlinkRule = function(ruleId, userId) { - _this.log.info("DB | unlinkRule: '" + ruleId + ":" + userId + "'"); - _this.db.srem("rule:" + ruleId + ":users", userId, replyHandler("removing user '" + userId + "' for rule key '" + ruleId + "'")); - return _this.db.srem("user:" + userId + ":rules", ruleId, replyHandler("removing rule key '" + ruleId + "' for user '" + userId + "'")); - }; /* Activate a rule. @@ -570,14 +606,16 @@ Persistence @public activateRule( *ruleId, userId* ) @param {String} ruleId @param {String} userId - */ + */ + exports.activateRule = (function(_this) { + return function(ruleId, userId) { + _this.log.info("DB | activateRule: '" + ruleId + "' for '" + userId + "'"); + _this.db.sadd("rule:" + ruleId + ":active-users", userId, replyHandler("storing activated user '" + userId + "' in rule '" + ruleId + "'")); + return _this.db.sadd("user:" + userId + ":active-rules", ruleId, replyHandler("storing activated rule '" + ruleId + "' in user '" + userId + "'")); + }; + })(this); - exports.activateRule = function(ruleId, userId) { - _this.log.info("DB | activateRule: '" + ruleId + "' for '" + userId + "'"); - _this.db.sadd("rule:" + ruleId + ":active-users", userId, replyHandler("storing activated user '" + userId + "' in rule '" + ruleId + "'")); - return _this.db.sadd("user:" + userId + ":active-rules", ruleId, replyHandler("storing activated rule '" + ruleId + "' in user '" + userId + "'")); - }; /* Get rules activated for a user and hand it to cb(err, obj). @@ -585,13 +623,15 @@ Persistence @public getUserLinkRule( *userId, cb* ) @param {String} userId @param {function} cb - */ + */ + exports.getUserActivatedRules = (function(_this) { + return function(userId, cb) { + _this.log.info("DB | getUserActivatedRules: for user '" + userId + "'"); + return _this.db.smembers("user:" + userId + ":active-rules", cb); + }; + })(this); - exports.getUserActivatedRules = function(userId, cb) { - _this.log.info("DB | getUserActivatedRules: for user '" + userId + "'"); - return _this.db.smembers("user:" + userId + ":active-rules", cb); - }; /* Get users activated for a rule and hand it to cb(err, obj). @@ -599,13 +639,15 @@ Persistence @public getRuleActivatedUsers ( *ruleId, cb* ) @param {String} ruleId @param {function} cb - */ + */ + exports.getRuleActivatedUsers = (function(_this) { + return function(ruleId, cb) { + _this.log.info("DB | getRuleActivatedUsers: for rule '" + ruleId + "'"); + return _this.db.smembers("rule:" + ruleId + ":active-users", cb); + }; + })(this); - exports.getRuleActivatedUsers = function(ruleId, cb) { - _this.log.info("DB | getRuleActivatedUsers: for rule '" + ruleId + "'"); - return _this.db.smembers("rule:" + ruleId + ":active-users", cb); - }; /* Deactivate a rule. @@ -613,55 +655,59 @@ Persistence @public deactivateRule( *ruleId, userId* ) @param {String} ruleId @param {String} userId - */ + */ + exports.deactivateRule = (function(_this) { + return function(ruleId, userId) { + _this.log.info("DB | deactivateRule: '" + ruleId + "' for '" + userId + "'"); + _this.db.srem("rule:" + ruleId + ":active-users", userId, replyHandler("removing activated user '" + userId + "' in rule '" + ruleId + "'")); + return _this.db.srem("user:" + userId + ":active-rules", ruleId, replyHandler("removing activated rule '" + ruleId + "' in user '" + userId + "'")); + }; + })(this); - exports.deactivateRule = function(ruleId, userId) { - _this.log.info("DB | deactivateRule: '" + ruleId + "' for '" + userId + "'"); - _this.db.srem("rule:" + ruleId + ":active-users", userId, replyHandler("removing activated user '" + userId + "' in rule '" + ruleId + "'")); - return _this.db.srem("user:" + userId + ":active-rules", ruleId, replyHandler("removing activated rule '" + ruleId + "' in user '" + userId + "'")); - }; /* Fetch all active ruleIds and pass them to cb(err, obj). @public getAllActivatedRuleIds( *cb* ) @param {function} cb - */ + */ - - exports.getAllActivatedRuleIdsPerUser = function(cb) { - _this.log.info("DB | Fetching all active rules"); - return _this.db.smembers('users', function(err, obj) { - var fFetchActiveUserRules, result, semaphore, user, _i, _len, _results; - result = {}; - if (obj.length === 0) { - return cb(null, result); - } else { - semaphore = obj.length; - fFetchActiveUserRules = function(userId) { - return _this.db.smembers("user:" + user + ":active-rules", function(err, obj) { - if (obj.length > 0) { - result[userId] = obj; - } - if (--semaphore === 0) { - return cb(null, result); - } - }); - }; - _results = []; - for (_i = 0, _len = obj.length; _i < _len; _i++) { - user = obj[_i]; - _results.push(fFetchActiveUserRules(user)); + exports.getAllActivatedRuleIdsPerUser = (function(_this) { + return function(cb) { + _this.log.info("DB | Fetching all active rules"); + return _this.db.smembers('users', function(err, obj) { + var fFetchActiveUserRules, result, semaphore, user, _i, _len, _results; + result = {}; + if (obj.length === 0) { + return cb(null, result); + } else { + semaphore = obj.length; + fFetchActiveUserRules = function(userId) { + return _this.db.smembers("user:" + user + ":active-rules", function(err, obj) { + if (obj.length > 0) { + result[userId] = obj; + } + if (--semaphore === 0) { + return cb(null, result); + } + }); + }; + _results = []; + for (_i = 0, _len = obj.length; _i < _len; _i++) { + user = obj[_i]; + _results.push(fFetchActiveUserRules(user)); + } + return _results; } - return _results; - } - }); - }; + }); + }; + })(this); + /* - ## Users - */ + *# Users + */ /* @@ -670,32 +716,36 @@ Persistence @public storeUser( *objUser* ) @param {Object} objUser - */ + */ + exports.storeUser = (function(_this) { + return function(objUser) { + _this.log.info("DB | storeUser: '" + objUser.username + "'"); + if (objUser && objUser.username && objUser.password) { + _this.db.sadd('users', objUser.username, replyHandler("storing user key '" + objUser.username + "'")); + objUser.password = objUser.password; + return _this.db.hmset("user:" + objUser.username, objUser, replyHandler("storing user properties '" + objUser.username + "'")); + } else { + return _this.log.warn(new Error('DB | username or password was missing')); + } + }; + })(this); - exports.storeUser = function(objUser) { - _this.log.info("DB | storeUser: '" + objUser.username + "'"); - if (objUser && objUser.username && objUser.password) { - _this.db.sadd('users', objUser.username, replyHandler("storing user key '" + objUser.username + "'")); - objUser.password = objUser.password; - return _this.db.hmset("user:" + objUser.username, objUser, replyHandler("storing user properties '" + objUser.username + "'")); - } else { - return _this.log.warn(new Error('DB | username or password was missing')); - } - }; /* Fetch all user IDs and pass them to cb(err, obj). @public getUserIds( *cb* ) @param {function} cb - */ + */ + exports.getUserIds = (function(_this) { + return function(cb) { + _this.log.info("DB | getUserIds"); + return _this.db.smembers("users", cb); + }; + })(this); - exports.getUserIds = function(cb) { - _this.log.info("DB | getUserIds"); - return _this.db.smembers("users", cb); - }; /* Fetch a user by id and pass it to cb(err, obj). @@ -703,66 +753,32 @@ Persistence @public getUser( *userId, cb* ) @param {String} userId @param {function} cb - */ + */ + exports.getUser = (function(_this) { + return function(userId, cb) { + _this.log.info("DB | getUser: '" + userId + "'"); + return _this.db.hgetall("user:" + userId, cb); + }; + })(this); - exports.getUser = function(userId, cb) { - _this.log.info("DB | getUser: '" + userId + "'"); - return _this.db.hgetall("user:" + userId, cb); - }; /* Deletes a user and all his associated linked and active rules. @public deleteUser( *userId* ) @param {String} userId - */ + */ + exports.deleteUser = (function(_this) { + return function(userId) { + _this.log.info("DB | deleteUser: '" + userId + "'"); + console.log("ready: " + _this.db.ready + ", connected: " + _this.db.connected); + _this.db.srem("users", userId, replyHandler("Deleting user key '" + userId + "'")); + return _this.db.del("user:" + userId, replyHandler("Deleting user '" + userId + "'")); + }; + })(this); - exports.deleteUser = function(userId) { - _this.log.info("DB | deleteUser: '" + userId + "'"); - _this.db.srem("users", userId, replyHandler("Deleting user key '" + userId + "'")); - _this.db.del("user:" + userId, replyHandler("Deleting user '" + userId + "'")); - _this.db.smembers("user:" + userId + ":rules", function(err, obj) { - var delLinkedRuleUser, id, _i, _len, _results; - delLinkedRuleUser = function(ruleId) { - return _this.db.srem("rule:" + ruleId + ":users", userId, replyHandler("Deleting user key '" + userId + "' in linked rule '" + ruleId + "'")); - }; - _results = []; - for (_i = 0, _len = obj.length; _i < _len; _i++) { - id = obj[_i]; - _results.push(delLinkedRuleUser(id)); - } - return _results; - }); - _this.db.del("user:" + userId + ":rules", replyHandler("Deleting user '" + userId + "' rules")); - _this.db.smembers("user:" + userId + ":active-rules", function(err, obj) { - var delActivatedRuleUser, id, _i, _len, _results; - delActivatedRuleUser = function(ruleId) { - return _this.db.srem("rule:" + ruleId + ":active-users", userId, replyHandler("Deleting user key '" + userId + "' in active rule '" + ruleId + "'")); - }; - _results = []; - for (_i = 0, _len = obj.length; _i < _len; _i++) { - id = obj[_i]; - _results.push(delActivatedRuleUser(id)); - } - return _results; - }); - _this.db.del("user:" + userId + ":active-rules", replyHandler("Deleting user '" + userId + "' rules")); - _this.db.smembers("user:" + userId + ":roles", function(err, obj) { - var delRoleUser, id, _i, _len, _results; - delRoleUser = function(roleId) { - return _this.db.srem("role:" + roleId + ":users", userId, replyHandler("Deleting user key '" + userId + "' in role '" + roleId + "'")); - }; - _results = []; - for (_i = 0, _len = obj.length; _i < _len; _i++) { - id = obj[_i]; - _results.push(delRoleUser(id)); - } - return _results; - }); - return _this.db.del("user:" + userId + ":roles", replyHandler("Deleting user '" + userId + "' roles")); - }; /* Checks the credentials and on success returns the user object to the @@ -774,34 +790,36 @@ Persistence @param {String} userId @param {String} password @param {function} cb - */ + */ - - exports.loginUser = function(userId, password, cb) { - var fCheck; - _this.log.info("DB | User '" + userId + "' tries to log in"); - fCheck = function(pw) { - return function(err, obj) { - if (err) { - return cb(err, null); - } else if (obj && obj.password) { - if (pw === obj.password) { - _this.log.info("DB | User '" + obj.username + "' logged in!"); - return cb(null, obj); + exports.loginUser = (function(_this) { + return function(userId, password, cb) { + var fCheck; + _this.log.info("DB | User '" + userId + "' tries to log in"); + fCheck = function(pw) { + return function(err, obj) { + if (err) { + return cb(err, null); + } else if (obj && obj.password) { + if (pw === obj.password) { + _this.log.info("DB | User '" + obj.username + "' logged in!"); + return cb(null, obj); + } else { + return cb(new Error('Wrong credentials!'), null); + } } else { - return cb(new Error('Wrong credentials!'), null); + return cb(new Error('User not found!'), null); } - } else { - return cb(new Error('User not found!'), null); - } + }; }; + return _this.db.hgetall("user:" + userId, fCheck(password)); }; - return _this.db.hgetall("user:" + userId, fCheck(password)); - }; + })(this); + /* - ## User Roles - */ + *# User Roles + */ /* @@ -810,15 +828,17 @@ Persistence @public storeUserRole( *userId, role* ) @param {String} userId @param {String} role - */ + */ + exports.storeUserRole = (function(_this) { + return function(userId, role) { + _this.log.info("DB | storeUserRole: '" + userId + ":" + role + "'"); + _this.db.sadd('roles', role, replyHandler("adding role '" + role + "' to role index set")); + _this.db.sadd("user:" + userId + ":roles", role, replyHandler("adding role '" + role + "' to user '" + userId + "'")); + return _this.db.sadd("role:" + role + ":users", userId, replyHandler("adding user '" + userId + "' to role '" + role + "'")); + }; + })(this); - exports.storeUserRole = function(userId, role) { - _this.log.info("DB | storeUserRole: '" + userId + ":" + role + "'"); - _this.db.sadd('roles', role, replyHandler("adding role '" + role + "' to role index set")); - _this.db.sadd("user:" + userId + ":roles", role, replyHandler("adding role '" + role + "' to user '" + userId + "'")); - return _this.db.sadd("role:" + role + ":users", userId, replyHandler("adding user '" + userId + "' to role '" + role + "'")); - }; /* Fetch all roles of a user and pass them to cb(err, obj). @@ -826,13 +846,15 @@ Persistence @public getUserRoles( *userId* ) @param {String} userId @param {function} cb - */ + */ + exports.getUserRoles = (function(_this) { + return function(userId, cb) { + _this.log.info("DB | getUserRoles: '" + userId + "'"); + return _this.db.smembers("user:" + userId + ":roles", cb); + }; + })(this); - exports.getUserRoles = function(userId, cb) { - _this.log.info("DB | getUserRoles: '" + userId + "'"); - return _this.db.smembers("user:" + userId + ":roles", cb); - }; /* Fetch all users of a role and pass them to cb(err, obj). @@ -840,13 +862,18 @@ Persistence @public getUserRoles( *role* ) @param {String} role @param {function} cb - */ + */ + exports.getRoleUsers = (function(_this) { + return function(role, cb) { + console.log(role); + console.log(cb); + _this.log.info("DB | getRoleUsers: '" + role + "'"); + _this.db.smembers("role:" + role + ":users", cb); + return console.log('command issued'); + }; + })(this); - exports.getRoleUsers = function(role, cb) { - _this.log.info("DB | getRoleUsers: '" + role + "'"); - return _this.db.smembers("role:" + role + ":users", cb); - }; /* Remove a role from a user. @@ -854,25 +881,28 @@ Persistence @public removeRoleFromUser( *role, userId* ) @param {String} role @param {String} userId - */ + */ + exports.removeUserRole = (function(_this) { + return function(userId, role) { + _this.log.info("DB | removeRoleFromUser: role '" + role + "', user '" + userId + "'"); + _this.db.srem("user:" + userId + ":roles", role, replyHandler("Removing role '" + role + "' from user '" + userId + "'")); + return _this.db.srem("role:" + role + ":users", userId, replyHandler("Removing user '" + userId + "' from role '" + role + "'")); + }; + })(this); - exports.removeUserRole = function(userId, role) { - _this.log.info("DB | removeRoleFromUser: role '" + role + "', user '" + userId + "'"); - _this.db.srem("user:" + userId + ":roles", role, replyHandler("Removing role '" + role + "' from user '" + userId + "'")); - return _this.db.srem("role:" + role + ":users", userId, replyHandler("Removing user '" + userId + "' from role '" + role + "'")); - }; /* Shuts down the db link. @public shutDown() - */ + */ - - exports.shutDown = function() { - var _ref; - return (_ref = _this.db) != null ? _ref.quit() : void 0; - }; + exports.shutDown = (function(_this) { + return function() { + var _ref; + return (_ref = _this.db) != null ? _ref.quit() : void 0; + }; + })(this); }).call(this); diff --git a/js-coffee/request-handler.js b/js-coffee/request-handler.js index a3634b1..3557ce4 100644 --- a/js-coffee/request-handler.js +++ b/js-coffee/request-handler.js @@ -1,4 +1,5 @@ -// Generated by CoffeeScript 1.6.3 +// Generated by CoffeeScript 1.7.1 + /* Request Handler @@ -7,12 +8,10 @@ Request Handler > the [HTTP Listener](http-listener.html). It will handle user requests for > pages as well as POST requests such as user login, module storing, event > invocation and also admin commands. -*/ - + */ (function() { - var crypto, db, dirHandlers, exports, fs, getHandlerPath, getRemoteScripts, getScript, getTemplate, mustache, path, qs, renderPage, - _this = this; + var crypto, db, dirHandlers, exports, fs, getHandlerPath, getRemoteScripts, getScript, getTemplate, mustache, path, qs, renderPage; db = require('./persistence'); @@ -28,29 +27,32 @@ Request Handler dirHandlers = path.resolve(__dirname, '..', 'webpages', 'handlers'); - exports = module.exports = function(args) { - var user, users, _i, _len; - _this.log = args.logger; - _this.userRequestHandler = args['request-service']; - _this.objAdminCmds = { - shutdown: function(obj, cb) { - var data; - data = { - code: 200, - message: 'Shutting down... BYE!' - }; - setTimeout(args['shutdown-function'], 500); - return cb(null, data); + exports = module.exports = (function(_this) { + return function(args) { + var user, users, _i, _len; + _this.log = args.logger; + _this.userRequestHandler = args['request-service']; + _this.objAdminCmds = { + shutdown: function(obj, cb) { + var data; + data = { + code: 200, + message: 'Shutting down... BYE!' + }; + setTimeout(args['shutdown-function'], 500); + return cb(null, data); + } + }; + db(args); + users = JSON.parse(fs.readFileSync(path.resolve(__dirname, '..', 'config', 'users.json'))); + for (_i = 0, _len = users.length; _i < _len; _i++) { + user = users[_i]; + db.storeUser(user); } + return module.exports; }; - db(args); - users = JSON.parse(fs.readFileSync(path.resolve(__dirname, '..', 'config', 'users.json'))); - for (_i = 0, _len = users.length; _i < _len; _i++) { - user = users[_i]; - db.storeUser(user); - } - return module.exports; - }; + })(this); + /* Handles possible events that were posted to this server and pushes them into the @@ -62,8 +64,7 @@ Request Handler objects.* @public handleEvent( *req, resp* ) - */ - + */ exports.handleEvent = function(req, resp) { var body; @@ -94,6 +95,7 @@ Request Handler }); }; + /* Associates the user object with the session if login is successful. @@ -103,32 +105,34 @@ Request Handler objects.* @public handleLogin( *req, resp* ) - */ + */ - - exports.handleLogin = function(req, resp) { - var body; - body = ''; - req.on('data', function(data) { - return body += data; - }); - return req.on('end', function() { - var obj; - obj = qs.parse(body); - return db.loginUser(obj.username, obj.password, function(err, usr) { - if (err) { - _this.log.warn("RH | AUTH-UH-OH ( " + obj.username + " ): " + err.message); - } else { - req.session.user = usr; - } - if (req.session.user) { - return resp.send('OK!'); - } else { - return resp.send(401, 'NO!'); - } + exports.handleLogin = (function(_this) { + return function(req, resp) { + var body; + body = ''; + req.on('data', function(data) { + return body += data; }); - }); - }; + return req.on('end', function() { + var obj; + obj = qs.parse(body); + return db.loginUser(obj.username, obj.password, function(err, usr) { + if (err) { + _this.log.warn("RH | AUTH-UH-OH ( " + obj.username + " ): " + err.message); + } else { + req.session.user = usr; + } + if (req.session.user) { + return resp.send('OK!'); + } else { + return resp.send(401, 'NO!'); + } + }); + }); + }; + })(this); + /* A post request retrieved on this handler causes the user object to be @@ -140,8 +144,7 @@ Request Handler objects.* @public handleLogout( *req, resp* ) - */ - + */ exports.handleLogout = function(req, resp) { if (req.session) { @@ -150,25 +153,25 @@ Request Handler } }; + /* Resolves the path to a handler webpage. @private getHandlerPath( *name* ) @param {String} name - */ - + */ getHandlerPath = function(name) { return path.join(dirHandlers, name + '.html'); }; + /* Fetches a template. @private getTemplate( *name* ) @param {String} name - */ - + */ getTemplate = function(name) { var pth; @@ -176,13 +179,13 @@ Request Handler return fs.readFileSync(pth, 'utf8'); }; + /* Fetches a script. @private getScript( *name* ) @param {String} name - */ - + */ getScript = function(name) { var pth; @@ -190,13 +193,13 @@ Request Handler return fs.readFileSync(pth, 'utf8'); }; + /* Fetches remote scripts snippets. @private getRemoteScripts( *name* ) @param {String} name - */ - + */ getRemoteScripts = function(name) { var pth; @@ -204,6 +207,7 @@ Request Handler return fs.readFileSync(pth, 'utf8'); }; + /* Renders a page, with helps of mustache, depending on the user session and returns it. @@ -211,8 +215,7 @@ Request Handler @param {String} name @param {Object} sess @param {Object} msg - */ - + */ renderPage = function(name, req, resp, msg) { var code, content, data, err, menubar, page, pageElements, pathSkel, remote_scripts, script, skeleton; @@ -251,6 +254,7 @@ Request Handler return resp.send(code, mustache.render(page, data)); }; + /* Present the desired forge page to the user. @@ -260,8 +264,7 @@ Request Handler objects.* @public handleForge( *req, resp* ) - */ - + */ exports.handleForge = function(req, resp) { var page; @@ -272,6 +275,7 @@ Request Handler return renderPage(page, req, resp); }; + /* Handles the user command requests. @@ -281,27 +285,29 @@ Request Handler objects.* @public handleUser( *req, resp* ) - */ + */ - - exports.handleUserCommand = function(req, resp) { - var body; - if (req.session && req.session.user) { - body = ''; - req.on('data', function(data) { - return body += data; - }); - return req.on('end', function() { - var obj; - obj = qs.parse(body); - return _this.userRequestHandler(req.session.user, obj, function(obj) { - return resp.send(obj.code, obj); + exports.handleUserCommand = (function(_this) { + return function(req, resp) { + var body; + if (req.session && req.session.user) { + body = ''; + req.on('data', function(data) { + return body += data; }); - }); - } else { - return resp.send(401, 'Login first!'); - } - }; + return req.on('end', function() { + var obj; + obj = qs.parse(body); + return _this.userRequestHandler(req.session.user, obj, function(obj) { + return resp.send(obj.code, obj); + }); + }); + } else { + return resp.send(401, 'Login first!'); + } + }; + })(this); + /* Present the admin console to the user if he's allowed to see it. @@ -312,8 +318,7 @@ Request Handler objects.* @public handleForge( *req, resp* ) - */ - + */ exports.handleAdmin = function(req, resp) { var msg, page; @@ -328,6 +333,7 @@ Request Handler return renderPage(page, req, resp, msg); }; + /* Handles the admin command requests. @@ -337,31 +343,32 @@ Request Handler objects.* @public handleAdminCommand( *req, resp* ) - */ + */ - - exports.handleAdminCommand = function(req, resp) { - var body; - if (req.session && req.session.user && req.session.user.isAdmin === "true") { - body = ''; - req.on('data', function(data) { - return body += data; - }); - return req.on('end', function() { - var obj; - obj = qs.parse(body); - _this.log.info('RH | Received admin request: ' + obj.command); - if (obj.command && _this.objAdminCmds[obj.command]) { - return _this.objAdminCmds[obj.command](obj, function(err, obj) { - return resp.send(obj.code, obj); - }); - } else { - return resp.send(404, 'Command unknown!'); - } - }); - } else { - return resp.send(401, 'You need to be logged in as admin!'); - } - }; + exports.handleAdminCommand = (function(_this) { + return function(req, resp) { + var body; + if (req.session && req.session.user && req.session.user.isAdmin === "true") { + body = ''; + req.on('data', function(data) { + return body += data; + }); + return req.on('end', function() { + var obj; + obj = qs.parse(body); + _this.log.info('RH | Received admin request: ' + obj.command); + if (obj.command && _this.objAdminCmds[obj.command]) { + return _this.objAdminCmds[obj.command](obj, function(err, obj) { + return resp.send(obj.code, obj); + }); + } else { + return resp.send(404, 'Command unknown!'); + } + }); + } else { + return resp.send(401, 'You need to be logged in as admin!'); + } + }; + })(this); }).call(this); diff --git a/js-coffee/webapi-eca.js b/js-coffee/webapi-eca.js index 76f78a2..5286c7f 100644 --- a/js-coffee/webapi-eca.js +++ b/js-coffee/webapi-eca.js @@ -1,4 +1,5 @@ -// Generated by CoffeeScript 1.6.3 +// Generated by CoffeeScript 1.7.1 + /* WebAPI-ECA Engine @@ -9,12 +10,10 @@ WebAPI-ECA Engine > node webapi-eca [opt] > > See below in the optimist CLI preparation for allowed optional parameters `[opt]`. -*/ - + */ (function() { - var argv, cm, conf, cp, db, engine, fs, http, init, logger, nameEP, opt, optimist, path, procCmds, shutDown, usage, - _this = this; + var argv, cm, conf, cp, db, engine, fs, http, init, logger, nameEP, opt, optimist, path, procCmds, shutDown, usage; logger = require('./logging'); @@ -40,10 +39,10 @@ WebAPI-ECA Engine procCmds = {}; + /* Let's prepare the optimist CLI optional arguments `[opt]`: - */ - + */ usage = 'This runs your webapi-based ECA engine'; @@ -93,113 +92,117 @@ WebAPI-ECA Engine process.exit(); } + /* This function is invoked right after the module is loaded and starts the server. @private init() - */ + */ - - init = function() { - var args, logconf; - conf(argv.c); - if (!conf.isReady()) { - console.error('FAIL: Config file not ready! Shutting down...'); - process.exit(); - } - logconf = conf.getLogConf(); - if (argv.m) { - logconf['mode'] = argv.m; - } - if (argv.i) { - logconf['io-level'] = argv.i; - } - if (argv.f) { - logconf['file-level'] = argv.f; - } - if (argv.p) { - logconf['file-path'] = argv.p; - } - if (argv.n) { - logconf['nolog'] = argv.n; - } - try { - fs.unlinkSync(path.resolve(__dirname, '..', 'logs', logconf['file-path'])); - } catch (_error) {} - _this.log = logger.getLogger(logconf); - _this.log.info('RS | STARTING SERVER'); - args = { - logger: _this.log, - logconf: logconf - }; - args['http-port'] = parseInt(argv.w || conf.getHttpPort()); - args['db-port'] = parseInt(argv.d || conf.getDbPort()); - _this.log.info('RS | Initialzing DB'); - db(args); - return db.isConnected(function(err) { - var cliArgs, poller; - if (err) { - _this.log.error('RS | No DB connection, shutting down system!'); - return shutDown(); - } else { - _this.log.info('RS | Initialzing engine'); - engine(args); - _this.log.info('RS | Forking a child process for the event poller'); - cliArgs = [args.logconf['mode'], args.logconf['io-level'], args.logconf['file-level'], args.logconf['file-path'], args.logconf['nolog']]; - poller = cp.fork(path.resolve(__dirname, nameEP), cliArgs); - _this.log.info('RS | Initialzing module manager'); - cm(args); - cm.addListener('init', function(evt) { - return poller.send({ - event: 'init', - data: evt - }); - }); - cm.addListener('newRule', function(evt) { - return poller.send({ - event: 'newRule', - data: evt - }); - }); - cm.addListener('init', function(evt) { - return engine.internalEvent('init', evt); - }); - cm.addListener('newRule', function(evt) { - return engine.internalEvent('newRule', evt); - }); - _this.log.info('RS | Initialzing http listener'); - args['request-service'] = cm.processRequest; - args['shutdown-function'] = shutDown; - return http(args); + init = (function(_this) { + return function() { + var args, logconf; + conf(argv.c); + if (!conf.isReady()) { + console.error('FAIL: Config file not ready! Shutting down...'); + process.exit(); } - }); - }; + logconf = conf.getLogConf(); + if (argv.m) { + logconf['mode'] = argv.m; + } + if (argv.i) { + logconf['io-level'] = argv.i; + } + if (argv.f) { + logconf['file-level'] = argv.f; + } + if (argv.p) { + logconf['file-path'] = argv.p; + } + if (argv.n) { + logconf['nolog'] = argv.n; + } + try { + fs.unlinkSync(path.resolve(__dirname, '..', 'logs', logconf['file-path'])); + } catch (_error) {} + _this.log = logger.getLogger(logconf); + _this.log.info('RS | STARTING SERVER'); + args = { + logger: _this.log, + logconf: logconf + }; + args['http-port'] = parseInt(argv.w || conf.getHttpPort()); + args['db-port'] = parseInt(argv.d || conf.getDbPort()); + _this.log.info('RS | Initialzing DB'); + db(args); + return db.isConnected(function(err) { + var cliArgs, poller; + if (err) { + _this.log.error('RS | No DB connection, shutting down system!'); + return shutDown(); + } else { + _this.log.info('RS | Initialzing engine'); + engine(args); + _this.log.info('RS | Forking a child process for the event poller'); + cliArgs = [args.logconf['mode'], args.logconf['io-level'], args.logconf['file-level'], args.logconf['file-path'], args.logconf['nolog']]; + poller = cp.fork(path.resolve(__dirname, nameEP), cliArgs); + _this.log.info('RS | Initialzing module manager'); + cm(args); + cm.addListener('init', function(evt) { + return poller.send({ + event: 'init', + data: evt + }); + }); + cm.addListener('newRule', function(evt) { + return poller.send({ + event: 'newRule', + data: evt + }); + }); + cm.addListener('init', function(evt) { + return engine.internalEvent('init', evt); + }); + cm.addListener('newRule', function(evt) { + return engine.internalEvent('newRule', evt); + }); + _this.log.info('RS | Initialzing http listener'); + args['request-service'] = cm.processRequest; + args['shutdown-function'] = shutDown; + return http(args); + } + }); + }; + })(this); + /* Shuts down the server. @private shutDown() - */ + */ + shutDown = (function(_this) { + return function() { + _this.log.warn('RS | Received shut down command!'); + if (db != null) { + db.shutDown(); + } + if (engine != null) { + engine.shutDown(); + } + return process.exit(); + }; + })(this); - shutDown = function() { - _this.log.warn('RS | Received shut down command!'); - if (db != null) { - db.shutDown(); - } - if (engine != null) { - engine.shutDown(); - } - return process.exit(); - }; /* - ## Process Commands + *# Process Commands When the server is run as a child process, this function handles messages from the parent process (e.g. the testing suite) - */ - + */ process.on('message', function(cmd) { return typeof procCmds[cmd] === "function" ? procCmds[cmd]() : void 0; diff --git a/testing/test_persistence.coffee b/testing/test_persistence.coffee index c12e014..d7b62d8 100644 --- a/testing/test_persistence.coffee +++ b/testing/test_persistence.coffee @@ -6,13 +6,12 @@ dbs = [] i = 0 getDBInstance = () -> - n = i++ - dbs[n] = require path.join '..', 'js-coffee', 'persistence' + dbs[++i] = require path.join '..', 'js-coffee', 'persistence' opts = logger: log opts[ 'db-port' ] = 6379 - dbs[n] opts - dbs[n] + dbs[i] opts + dbs[i] # ### # # Test AVAILABILITY @@ -167,11 +166,12 @@ exports.EventPoller = cb() tearDown: ( cb ) => - n = i++ - dbs[n] = getDBInstance() - dbs[n].eventPollers.deleteModule @event1id - dbs[n].eventPollers.deleteModule @event2id - setTimeout dbs[n].shutDown(), 500 + db = getDBInstance() + db.eventPollers.unlinkModule @event1id, @userId + db.eventPollers.deleteModule @event1id + db.eventPollers.unlinkModule @event2id, @userId + db.eventPollers.deleteModule @event2id + setTimeout db.shutDown, 500 cb() testCreateAndRead: ( test ) => @@ -193,6 +193,7 @@ exports.EventPoller = db.eventPollers.getModules ( err , obj ) => test.deepEqual @event1, obj[@event1id], 'Event Poller ist not in result set' + db.shutDown() test.done() @@ -216,529 +217,573 @@ exports.EventPoller = db.shutDown() test.done() -# testDelete: ( test ) => -# test.expect 2 + testDelete: ( test ) => + test.expect 2 -# db = getDBInstance() -# # store an entry to start with -# db.eventPollers.storeModule @event1id, @userId, @event1 + db = getDBInstance() + # store an entry to start with + db.eventPollers.storeModule @event1id, @userId, @event1 -# # Ensure the event poller has been deleted -# db.eventPollers.deleteModule @event1id -# db.eventPollers.getModule @event1id, ( err , obj ) => -# test.strictEqual obj, null, -# 'Event Poller still exists' + # Ensure the event poller has been deleted + db.eventPollers.deleteModule @event1id + db.eventPollers.getModule @event1id, ( err , obj ) => + test.strictEqual obj, null, + 'Event Poller still exists' -# # Ensure the ID has been removed from the set -# db.eventPollers.getModuleIds ( err , obj ) => -# test.ok @event1id not in obj, -# 'Event Poller key still exists in set' -# db.shutDown() -# test.done() + # Ensure the ID has been removed from the set + db.eventPollers.getModuleIds ( err , obj ) => + test.ok @event1id not in obj, + 'Event Poller key still exists in set' + db.shutDown() + test.done() -# testFetchSeveral: ( test ) => -# test.expect 3 + testFetchSeveral: ( test ) => + test.expect 3 -# semaphore = 2 + semaphore = 2 -# fCheckInvoker = ( modname, mod ) => -# myTest = test -# forkEnds = () -> -# if --semaphore is 0 -# db.shutDown() -# myTest.done() -# ( err, obj ) => -# myTest.deepEqual mod, obj, -# "Invoker #{ modname } does not equal the expected one" -# forkEnds() + fCheckInvoker = ( modname, mod ) => + myTest = test + forkEnds = () -> + if --semaphore is 0 + db.shutDown() + myTest.done() + ( err, obj ) => + myTest.deepEqual mod, obj, + "Invoker #{ modname } does not equal the expected one" + forkEnds() -# db = getDBInstance() -# db.eventPollers.storeModule @event1id, @userId, @event1 -# db.eventPollers.storeModule @event2id, @userId, @event2 -# db.eventPollers.getModuleIds ( err, obj ) => -# test.ok @event1id in obj and @event2id in obj, -# 'Not all event poller Ids in set' -# db.eventPollers.getModule @event1id, fCheckInvoker @event1id, @event1 -# db.eventPollers.getModule @event2id, fCheckInvoker @event2id, @event2 + db = getDBInstance() + db.eventPollers.storeModule @event1id, @userId, @event1 + db.eventPollers.storeModule @event2id, @userId, @event2 + db.eventPollers.getModuleIds ( err, obj ) => + test.ok @event1id in obj and @event2id in obj, + 'Not all event poller Ids in set' + db.eventPollers.getModule @event1id, fCheckInvoker @event1id, @event1 + db.eventPollers.getModule @event2id, fCheckInvoker @event2id, @event2 -# # ## -# # Test EVENT POLLER PARAMS -# # ## -# exports.EventPollerParams = -# testCreateAndRead: ( test ) => -# test.expect 0 +### +# Test EVENT POLLER PARAMS +### +exports.EventPollerParams = + testCreateAndRead: ( test ) => + test.expect 2 -# userId = 'tester1' -# eventId = 'test-event-poller_1' -# params = 'shouldn\'t this be an object?' + userId = 'tester1' + eventId = 'test-event-poller_1' + params = 'shouldn\'t this be an object?' -# db = getDBInstance() -# test.done() - # # store an entry to start with - # db.eventPollers.storeUserParams eventId, userId, params + db = getDBInstance() + # store an entry to start with + db.eventPollers.storeUserParams eventId, userId, params - # # test that the ID shows up in the set - # db.eventPollers.getUserParamsIds ( err, obj ) => - # test.ok eventId+':'+userId in obj, - # 'Expected key not in event-params set' + # test that the ID shows up in the set + db.eventPollers.getUserParamsIds ( err, obj ) => + test.ok eventId+':'+userId in obj, + 'Expected key not in event-params set' - # # the retrieved object really is the one we expected - # db.eventPollers.getUserParams eventId, userId, ( err, obj ) => - # test.strictEqual obj, params, - # 'Retrieved event params is not what we expected' - # db.eventPollers.deleteUserParams eventId, userId - # setTimeout db.shutDown, 500 - # test.done() + # the retrieved object really is the one we expected + db.eventPollers.getUserParams eventId, userId, ( err, obj ) => + test.strictEqual obj, params, + 'Retrieved event params is not what we expected' + db.eventPollers.deleteUserParams eventId, userId + setTimeout db.shutDown, 500 + test.done() - # testUpdate: ( test ) => - # test.expect 1 + testUpdate: ( test ) => + test.expect 1 - # userId = 'tester1' - # eventId = 'test-event-poller_1' - # params = 'shouldn\'t this be an object?' - # paramsNew = 'shouldn\'t this be a new object?' + userId = 'tester1' + eventId = 'test-event-poller_1' + params = 'shouldn\'t this be an object?' + paramsNew = 'shouldn\'t this be a new object?' - # db = getDBInstance() - # # store an entry to start with - # db.eventPollers.storeUserParams eventId, userId, params - # db.eventPollers.storeUserParams eventId, userId, paramsNew + db = getDBInstance() + # store an entry to start with + db.eventPollers.storeUserParams eventId, userId, params + db.eventPollers.storeUserParams eventId, userId, paramsNew - # # the retrieved object really is the one we expected - # db.eventPollers.getUserParams eventId, userId, ( err, obj ) => - # test.strictEqual obj, paramsNew, - # 'Retrieved event params is not what we expected' - # db.eventPollers.deleteUserParams eventId, userId - # db.shutDown() - # test.done() + # the retrieved object really is the one we expected + db.eventPollers.getUserParams eventId, userId, ( err, obj ) => + test.strictEqual obj, paramsNew, + 'Retrieved event params is not what we expected' + db.eventPollers.deleteUserParams eventId, userId + db.shutDown() + test.done() - # testDelete: ( test ) => - # test.expect 2 + testDelete: ( test ) => + test.expect 2 - # userId = 'tester1' - # eventId = 'test-event-poller_1' - # params = 'shouldn\'t this be an object?' + userId = 'tester1' + eventId = 'test-event-poller_1' + params = 'shouldn\'t this be an object?' - # db = getDBInstance() - # # store an entry to start with and delete it right away - # db.eventPollers.storeUserParams eventId, userId, params - # db.eventPollers.deleteUserParams eventId, userId + db = getDBInstance() + # store an entry to start with and delete it right away + db.eventPollers.storeUserParams eventId, userId, params + db.eventPollers.deleteUserParams eventId, userId - # # Ensure the event params have been deleted - # db.eventPollers.getUserParams eventId, userId, ( err, obj ) => - # test.strictEqual obj, null, - # 'Event params still exists' - # # Ensure the ID has been removed from the set - # db.eventPollers.getUserParamsIds ( err, obj ) => - # test.ok eventId+':'+userId not in obj, - # 'Event Params key still exists in set' - # db.shutDown() - # test.done() + # Ensure the event params have been deleted + db.eventPollers.getUserParams eventId, userId, ( err, obj ) => + test.strictEqual obj, null, + 'Event params still exists' + # Ensure the ID has been removed from the set + db.eventPollers.getUserParamsIds ( err, obj ) => + test.ok eventId+':'+userId not in obj, + 'Event Params key still exists in set' + db.shutDown() + test.done() -# ### -# # Test RULES -# ### -# exports.Rules = -# setUp: ( cb ) => -# # @db logType: 1 -# @userId = 'tester-1' -# @ruleId = 'test-rule_1' -# @rule = -# "id": "rule_id", -# "event": "custom", -# "condition": -# "property": "yourValue", -# "actions": [] -# @ruleNew = -# "id": "rule_new", -# "event": "custom", -# "condition": -# "property": "yourValue", -# "actions": [] -# cb() +### +# Test RULES +### +exports.Rules = + setUp: ( cb ) => + # @db logType: 1 + @userId = 'tester-1' + @ruleId = 'test-rule_1' + @rule = + "id": "rule_id", + "event": "custom", + "condition": + "property": "yourValue", + "actions": [] + @ruleNew = + "id": "rule_new", + "event": "custom", + "condition": + "property": "yourValue", + "actions": [] + cb() -# tearDown: ( cb ) => -# @db.deleteRule @ruleId -# cb() + tearDown: ( cb ) => + db = getDBInstance() + db.deleteRule @ruleId + setTimeout db.shutDown, 500 + cb() -# testCreateAndRead: ( test ) => -# test.expect 3 + testCreateAndRead: ( test ) => + test.expect 3 -# # store an entry to start with -# @db.storeRule @ruleId, JSON.stringify(@rule) + db = getDBInstance() + # store an entry to start with + db.storeRule @ruleId, JSON.stringify(@rule) -# # test that the ID shows up in the set -# @db.getRuleIds ( err, obj ) => -# test.ok @ruleId in obj, -# 'Expected key not in rule key set' + # test that the ID shows up in the set + db.getRuleIds ( err, obj ) => + test.ok @ruleId in obj, + 'Expected key not in rule key set' -# # the retrieved object really is the one we expected -# @db.getRule @ruleId, ( err, obj ) => -# test.deepEqual JSON.parse(obj), @rule, -# 'Retrieved rule is not what we expected' + # the retrieved object really is the one we expected + db.getRule @ruleId, ( err, obj ) => + test.deepEqual JSON.parse(obj), @rule, + 'Retrieved rule is not what we expected' -# # Ensure the rule is in the list of all existing ones -# @db.getRules ( err , obj ) => -# test.deepEqual @rule, JSON.parse(obj[@ruleId]), -# 'Rule not in result set' -# @db.deleteRule @ruleId -# test.done() + # Ensure the rule is in the list of all existing ones + db.getRules ( err , obj ) => + test.deepEqual @rule, JSON.parse(obj[@ruleId]), + 'Rule not in result set' + db.shutDown() + test.done() -# testUpdate: ( test ) => -# test.expect 1 + testUpdate: ( test ) => + test.expect 1 -# # store an entry to start with -# @db.storeRule @ruleId, JSON.stringify(@rule) -# @db.storeRule @ruleId, JSON.stringify(@ruleNew) + db = getDBInstance() + # store an entry to start with + db.storeRule @ruleId, JSON.stringify(@rule) + db.storeRule @ruleId, JSON.stringify(@ruleNew) -# # the retrieved object really is the one we expected -# @db.getRule @ruleId, ( err, obj ) => -# test.deepEqual JSON.parse(obj), @ruleNew, -# 'Retrieved rule is not what we expected' -# @db.deleteRule @ruleId -# test.done() + # the retrieved object really is the one we expected + db.getRule @ruleId, ( err, obj ) => + test.deepEqual JSON.parse(obj), @ruleNew, + 'Retrieved rule is not what we expected' + db.shutDown() + test.done() -# testDelete: ( test ) => -# test.expect 2 + testDelete: ( test ) => + test.expect 2 -# # store an entry to start with and delete it right away -# @db.storeRule @ruleId, JSON.stringify(@rule) -# @db.deleteRule @ruleId + db = getDBInstance() + # store an entry to start with and delete it right away + db.storeRule @ruleId, JSON.stringify(@rule) + db.deleteRule @ruleId -# # Ensure the event params have been deleted -# @db.getRule @ruleId, ( err, obj ) => -# test.strictEqual obj, null, -# 'Rule still exists' + # Ensure the event params have been deleted + db.getRule @ruleId, ( err, obj ) => + test.strictEqual obj, null, + 'Rule still exists' -# # Ensure the ID has been removed from the set -# @db.getRuleIds ( err, obj ) => -# test.ok @ruleId not in obj, -# 'Rule key still exists in set' -# test.done() + # Ensure the ID has been removed from the set + db.getRuleIds ( err, obj ) => + test.ok @ruleId not in obj, + 'Rule key still exists in set' + db.shutDown() + test.done() -# testLink: ( test ) => -# test.expect 2 + testLink: ( test ) => + test.expect 2 -# # link a rule to the user -# @db.linkRule @ruleId, @userId + db = getDBInstance() + # link a rule to the user + db.linkRule @ruleId, @userId -# # Ensure the user is linked to the rule -# @db.getRuleLinkedUsers @ruleId, ( err, obj ) => -# test.ok @userId in obj, -# "Rule not linked to user #{ @userId }" + # Ensure the user is linked to the rule + db.getRuleLinkedUsers @ruleId, ( err, obj ) => + test.ok @userId in obj, + "Rule not linked to user #{ @userId }" -# # Ensure the rule is linked to the user -# @db.getUserLinkedRules @userId, ( err, obj ) => -# test.ok @ruleId in obj, -# "User not linked to rule #{ @ruleId }" -# test.done() + # Ensure the rule is linked to the user + db.getUserLinkedRules @userId, ( err, obj ) => + test.ok @ruleId in obj, + "User not linked to rule #{ @ruleId }" + db.shutDown() + test.done() -# testUnlink: ( test ) => -# test.expect 2 + testUnlink: ( test ) => + test.expect 2 -# # link and unlink immediately afterwards -# @db.linkRule @ruleId, @userId -# @db.unlinkRule @ruleId, @userId + db = getDBInstance() + # link and unlink immediately afterwards + db.linkRule @ruleId, @userId + db.unlinkRule @ruleId, @userId -# # Ensure the user is linked to the rule -# @db.getRuleLinkedUsers @ruleId, ( err, obj ) => -# test.ok @userId not in obj, -# "Rule still linked to user #{ @userId }" + # Ensure the user is linked to the rule + db.getRuleLinkedUsers @ruleId, ( err, obj ) => + test.ok @userId not in obj, + "Rule still linked to user #{ @userId }" -# # Ensure the rule is linked to the user -# @db.getUserLinkedRules @userId, ( err, obj ) => -# test.ok @ruleId not in obj, -# "User still linked to rule #{ @ruleId }" -# test.done() + # Ensure the rule is linked to the user + db.getUserLinkedRules @userId, ( err, obj ) => + test.ok @ruleId not in obj, + "User still linked to rule #{ @ruleId }" + db.shutDown() + test.done() -# testActivate: ( test ) => -# test.expect 4 + testActivate: ( test ) => + test.expect 4 -# usr = -# username: "tester-1" -# password: "tester-1" -# @db.storeUser usr -# @db.activateRule @ruleId, @userId -# # activate a rule for a user + usr = + username: "tester-1" + password: "tester-1" + db = getDBInstance() + db.storeUser usr + db.activateRule @ruleId, @userId + # activate a rule for a user -# # Ensure the user is activated to the rule -# @db.getRuleActivatedUsers @ruleId, ( err, obj ) => -# test.ok @userId in obj, -# "Rule not activated for user #{ @userId }" + # Ensure the user is activated to the rule + db.getRuleActivatedUsers @ruleId, ( err, obj ) => + test.ok @userId in obj, + "Rule not activated for user #{ @userId }" -# # Ensure the rule is linked to the user -# @db.getUserActivatedRules @userId, ( err, obj ) => -# test.ok @ruleId in obj, -# "User not activated for rule #{ @ruleId }" + # Ensure the rule is linked to the user + db.getUserActivatedRules @userId, ( err, obj ) => + test.ok @ruleId in obj, + "User not activated for rule #{ @ruleId }" -# # Ensure the rule is showing up in all active rules -# @db.getAllActivatedRuleIdsPerUser ( err, obj ) => -# test.notStrictEqual obj[@userId], undefined, -# "User #{ @userId } not in activated rules set" -# if obj[@userId] -# test.ok @ruleId in obj[@userId], -# "Rule #{ @ruleId } not in activated rules set" -# # else -# # test.ok true, -# # "Dummy so we meet the expected num of tests" -# test.done() + # Ensure the rule is showing up in all active rules + db.getAllActivatedRuleIdsPerUser ( err, obj ) => + test.notStrictEqual obj[@userId], undefined, + "User #{ @userId } not in activated rules set" + if obj[@userId] + test.ok @ruleId in obj[@userId], + "Rule #{ @ruleId } not in activated rules set" + # else + # test.ok true, + # "Dummy so we meet the expected num of tests" + db.shutDown() + test.done() -# testDeactivate: ( test ) => -# test.expect 3 + testDeactivate: ( test ) => + test.expect 3 -# # store an entry to start with and link it to te user -# @db.activateRule @ruleId, @userId -# @db.deactivateRule @ruleId, @userId + db = getDBInstance() + # store an entry to start with and link it to te user + db.activateRule @ruleId, @userId + db.deactivateRule @ruleId, @userId -# # Ensure the user is linked to the rule -# @db.getRuleActivatedUsers @ruleId, ( err, obj ) => -# test.ok @userId not in obj, -# "Rule still activated for user #{ @userId }" + # Ensure the user is linked to the rule + db.getRuleActivatedUsers @ruleId, ( err, obj ) => + test.ok @userId not in obj, + "Rule still activated for user #{ @userId }" -# # Ensure the rule is linked to the user -# @db.getUserActivatedRules @userId, ( err, obj ) => -# test.ok @ruleId not in obj, -# "User still activated for rule #{ @ruleId }" + # Ensure the rule is linked to the user + db.getUserActivatedRules @userId, ( err, obj ) => + test.ok @ruleId not in obj, + "User still activated for rule #{ @ruleId }" -# # Ensure the rule is showing up in all active rules -# @db.getAllActivatedRuleIdsPerUser ( err, obj ) => -# if obj[@userId] -# test.ok @ruleId not in obj[@userId], -# "Rule #{ @ruleId } still in activated rules set" -# else -# test.ok true, -# "We are fine since there are no entries for this user anymore" -# test.done() + # Ensure the rule is showing up in all active rules + db.getAllActivatedRuleIdsPerUser ( err, obj ) => + if obj[@userId] + test.ok @ruleId not in obj[@userId], + "Rule #{ @ruleId } still in activated rules set" + else + test.ok true, + "We are fine since there are no entries for this user anymore" + db.shutDown() + test.done() -# testUnlinkAndDeactivateAfterDeletion: ( test ) => -# test.expect 2 + testUnlinkAndDeactivateAfterDeletion: ( test ) => + test.expect 2 -# # store an entry to start with and link it to te user -# @db.storeRule @ruleId, JSON.stringify(@rule) -# @db.linkRule @ruleId, @userId -# @db.activateRule @ruleId, @userId + db = getDBInstance() + # store an entry to start with and link it to te user + db.storeRule @ruleId, JSON.stringify(@rule) + db.linkRule @ruleId, @userId + db.activateRule @ruleId, @userId -# # We need to wait here and there since these calls are asynchronous -# fWaitForTest = () => + # We need to wait here and there since these calls are asynchronous + fWaitForTest = () => -# # Ensure the user is unlinked to the rule -# @db.getUserLinkedRules @userId, ( err, obj ) => -# test.ok @ruleId not in obj, -# "Rule #{ @ruleId } still linked to user #{ @userId }" + # Ensure the user is unlinked to the rule + db.getUserLinkedRules @userId, ( err, obj ) => + test.ok @ruleId not in obj, + "Rule #{ @ruleId } still linked to user #{ @userId }" -# # Ensure the rule is deactivated for the user -# @db.getUserActivatedRules @userId, ( err, obj ) => -# test.ok @ruleId not in obj, -# "Rule #{ @ruleId } still activated for user #{ @userId }" -# test.done() + # Ensure the rule is deactivated for the user + db.getUserActivatedRules @userId, ( err, obj ) => + test.ok @ruleId not in obj, + "Rule #{ @ruleId } still activated for user #{ @userId }" + db.shutDown() + test.done() -# fWaitForDeletion = () => -# @db.deleteRule @ruleId -# setTimeout fWaitForTest, 100 + fWaitForDeletion = () => + db.deleteRule @ruleId + setTimeout fWaitForTest, 100 -# setTimeout fWaitForDeletion, 100 + setTimeout fWaitForDeletion, 100 -# ### -# # Test USER -# ### -# exports.User = -# setUp: ( cb ) => -# @oUser = -# username: "tester-1" -# password: "password" -# cb() -# tearDown: ( cb ) => -# @db.deleteUser @oUser.username -# cb() +### +# Test USER +### +exports.User = + setUp: ( cb ) => + @oUser = + username: "tester-1" + password: "password" + cb() + tearDown: ( cb ) => + db = getDBInstance() + console.log 'tearDown' + # db.deleteUser @oUser.username + setTimeout db.shutDown, 500 + cb() -# testCreateInvalid: ( test ) => -# test.expect 4 + testCreateInvalid: ( test ) => + test.expect 4 -# oUserInvOne = -# username: "tester-1-invalid" -# oUserInvTwo = -# password: "password" + oUserInvOne = + username: "tester-1-invalid" + oUserInvTwo = + password: "password" -# # try to store invalid users, ensure they weren't -# @db.storeUser oUserInvOne -# @db.storeUser oUserInvTwo + db = getDBInstance() + # try to store invalid users, ensure they weren't + db.storeUser oUserInvOne + db.storeUser oUserInvTwo -# @db.getUser oUserInvOne.username, ( err, obj ) => -# test.strictEqual obj, null, -# 'User One was stored!?' + db.getUser oUserInvOne.username, ( err, obj ) => + test.strictEqual obj, null, + 'User One was stored!?' -# @db.getUser oUserInvTwo.username, ( err, obj ) => -# test.strictEqual obj, null, -# 'User Two was stored!?' + db.getUser oUserInvTwo.username, ( err, obj ) => + test.strictEqual obj, null, + 'User Two was stored!?' -# @db.getUserIds ( err, obj ) => -# test.ok oUserInvOne.username not in obj, -# 'User key was stored!?' -# test.ok oUserInvTwo.username not in obj, -# 'User key was stored!?' -# test.done() + db.getUserIds ( err, obj ) => + test.ok oUserInvOne.username not in obj, + 'User key was stored!?' + test.ok oUserInvTwo.username not in obj, + 'User key was stored!?' + db.shutDown() + test.done() -# testDelete: ( test ) => -# test.expect 2 + testDelete: ( test ) => + test.expect 2 -# # Store the user -# @db.storeUser @oUser + db = getDBInstance() + # Store the user + db.storeUser @oUser -# @db.getUser @oUser.username, ( err, obj ) => -# test.deepEqual obj, @oUser, -# "User #{ @oUser.username } is not what we expect!" + db.getUser @oUser.username, ( err, obj ) => + test.deepEqual obj, @oUser, + "User #{ @oUser.username } is not what we expect!" -# @db.getUserIds ( err, obj ) => -# test.ok @oUser.username in obj, -# 'User key was not stored!?' -# test.done() + db.getUserIds ( err, obj ) => + test.ok @oUser.username in obj, + 'User key was not stored!?' + db.shutDown() + test.done() -# testUpdate: ( test ) => -# test.expect 2 + testUpdate: ( test ) => + test.expect 2 -# oUserOne = -# username: "tester-1-update" -# password: "password" + oUserOne = + username: "tester-1-update" + password: "password" -# # Store the user -# @db.storeUser oUserOne -# oUserOne.password = "password-update" -# @db.storeUser oUserOne + db = getDBInstance() + # Store the user + db.storeUser oUserOne + oUserOne.password = "password-update" + db.storeUser oUserOne -# @db.getUser oUserOne.username, ( err, obj ) => -# test.deepEqual obj, oUserOne, -# "User #{ @oUser.username } is not what we expect!" + db.getUser oUserOne.username, ( err, obj ) => + test.deepEqual obj, oUserOne, + "User #{ @oUser.username } is not what we expect!" -# @db.getUserIds ( err, obj ) => -# test.ok oUserOne.username in obj, -# 'User key was not stored!?' -# @db.deleteUser oUserOne.username -# test.done() + db.getUserIds ( err, obj ) => + test.ok oUserOne.username in obj, + 'User key was not stored!?' + db.deleteUser oUserOne.username + setTimeout db.shutDown, 500 + test.done() -# testDelete: ( test ) => -# test.expect 2 + testDelete: ( test ) => + test.expect 2 -# # Wait until the user and his rules and roles are deleted -# fWaitForDeletion = () => -# @db.getUserIds ( err, obj ) => -# test.ok @oUser.username not in obj, -# 'User key still in set!' + db = getDBInstance() + # Wait until the user and his rules and roles are deleted + fWaitForDeletion = () => + db.getUserIds ( err, obj ) => + test.ok @oUser.username not in obj, + 'User key still in set!' -# @db.getUser @oUser.username, ( err, obj ) => -# test.strictEqual obj, null, -# 'User key still exists!' -# test.done() + db.getUser @oUser.username, ( err, obj ) => + test.strictEqual obj, null, + 'User key still exists!' + test.done() -# # Store the user and make some links -# @db.storeUser @oUser -# @db.deleteUser @oUser.username -# setTimeout fWaitForDeletion, 100 + # Store the user and make some links + db.storeUser @oUser + db.deleteUser @oUser.username + setTimeout fWaitForDeletion, 100 -# testDeleteLinks: ( test ) => -# test.expect 4 + testDeleteLinks: ( test ) => + test.expect 4 -# # Wait until the user and his rules and roles are stored -# fWaitForPersistence = () => -# @db.deleteUser @oUser.username -# setTimeout fWaitForDeletion, 200 + db = getDBInstance() -# # Wait until the user and his rules and roles are deleted -# fWaitForDeletion = () => -# @db.getRoleUsers 'tester', ( err, obj ) => -# test.ok @oUser.username not in obj, -# 'User key still in role tester!' + # Wait until the user and his rules and roles are stored + fWaitForPersistence = () => + console.log 'fWaitForPer' + # db.deleteUser @oUser.username + db.getRoleUsers 'tester', (err, obj) -> + console.log 'getRoleUsers tester' + console.log err + console.log obj + # setTimeout fWaitForDeletion, 200 -# @db.getUserRoles @oUser.username, ( err, obj ) => -# test.ok obj.length is 0, -# 'User still associated to roles!' + # # Wait until the user and his rules and roles are deleted + # fWaitForDeletion = () => + # console.log 'fWaitForDel' + # db.getRoleUsers 'tester', ( err, obj ) => + # # db.getUserRoles @oUser.username, ( err, obj ) => + # console.log 'got users: ' + # console.log obj + # test.ok @oUser.username not in obj, + # 'User key still in role tester!' + + # console.log '21' + # db.getUserRoles @oUser.username, ( err, obj ) => + # test.ok obj.length is 0, + # 'User still associated to roles!' -# @db.getUserLinkedRules @oUser.username, ( err, obj ) => -# test.ok obj.length is 0, -# 'User still associated to rules!' - -# @db.getUserActivatedRules @oUser.username, ( err, obj ) => -# test.ok obj.length is 0, -# 'User still associated to activated rules!' -# test.done() + # console.log '22' + # db.getUserLinkedRules @oUser.username, ( err, obj ) => + # test.ok obj.length is 0, + # 'User still associated to rules!' + # console.log '23' + # db.getUserActivatedRules @oUser.username, ( err, obj ) => + # test.ok obj.length is 0, + # 'User still associated to activated rules!' + # db.shutDown() + # test.done() -# # Store the user and make some links -# @db.storeUser @oUser -# @db.linkRule 'rule-1', @oUser.username -# @db.linkRule 'rule-2', @oUser.username -# @db.linkRule 'rule-3', @oUser.username -# @db.activateRule 'rule-1', @oUser.username -# @db.storeUserRole @oUser.username, 'tester' -# setTimeout fWaitForPersistence, 100 + # # Store the user and make some links + # db.storeUser @oUser + # db.linkRule 'rule-1', @oUser.username + # db.linkRule 'rule-2', @oUser.username + # db.linkRule 'rule-3', @oUser.username + # db.activateRule 'rule-1', @oUser.username + # db.storeUserRole @oUser.username, 'tester' + + setTimeout fWaitForPersistence, 100 -# testLogin: ( test ) => -# test.expect 3 + testLogin: ( test ) => + test.expect 3 -# # Store the user and make some links -# @db.storeUser @oUser -# @db.loginUser @oUser.username, @oUser.password, ( err, obj ) => -# test.deepEqual obj, @oUser, -# 'User not logged in!' + db = getDBInstance() + # Store the user and make some links + db.storeUser @oUser + db.loginUser @oUser.username, @oUser.password, ( err, obj ) => + test.deepEqual obj, @oUser, + 'User not logged in!' -# @db.loginUser 'dummyname', @oUser.password, ( err, obj ) => -# test.strictEqual obj, null, -# 'User logged in?!' + db.loginUser 'dummyname', @oUser.password, ( err, obj ) => + test.strictEqual obj, null, + 'User logged in?!' -# @db.loginUser @oUser.username, 'wrongpass', ( err, obj ) => -# test.strictEqual obj, null, -# 'User logged in?!' -# test.done() + db.loginUser @oUser.username, 'wrongpass', ( err, obj ) => + test.strictEqual obj, null, + 'User logged in?!' + db.shutDown() + test.done() -# ### -# # Test ROLES -# ### -# exports.Roles = -# setUp: ( cb ) => -# @db -# logger: log -# @oUser = -# username: "tester-1" -# password: "password" -# cb() -# tearDown: ( cb ) => -# @db.deleteUser @oUser.username -# cb() +### +# Test ROLES +### +exports.Roles = + setUp: ( cb ) => + @oUser = + username: "tester-1" + password: "password" + cb() + tearDown: ( cb ) => + db = getDBInstance() + db.deleteUser @oUser.username + setTimeout db.shutDown, 500 + cb() -# testStore: ( test ) => -# test.expect 2 + testStore: ( test ) => + test.expect 2 -# @db.storeUser @oUser -# @db.storeUserRole @oUser.username, 'tester' + db = getDBInstance() + db.storeUser @oUser + db.storeUserRole @oUser.username, 'tester' -# @db.getUserRoles @oUser.username, ( err, obj ) => -# test.ok 'tester' in obj, -# 'User role tester not stored!' + db.getUserRoles @oUser.username, ( err, obj ) => + test.ok 'tester' in obj, + 'User role tester not stored!' -# @db.getRoleUsers 'tester', ( err, obj ) => -# test.ok @oUser.username in obj, -# "User #{ @oUser.username } not stored in role tester!" + db.getRoleUsers 'tester', ( err, obj ) => + test.ok @oUser.username in obj, + "User #{ @oUser.username } not stored in role tester!" + db.shutDown() + test.done() -# test.done() + testDelete: ( test ) => + test.expect 2 -# testDelete: ( test ) => -# test.expect 2 + db = getDBInstance() + db.storeUser @oUser + db.storeUserRole @oUser.username, 'tester' + db.removeUserRole @oUser.username, 'tester' -# @db.storeUser @oUser -# @db.storeUserRole @oUser.username, 'tester' -# @db.removeUserRole @oUser.username, 'tester' + db.getUserRoles @oUser.username, ( err, obj ) => + test.ok 'tester' not in obj, + 'User role tester not stored!' -# @db.getUserRoles @oUser.username, ( err, obj ) => -# test.ok 'tester' not in obj, -# 'User role tester not stored!' - -# @db.getRoleUsers 'tester', ( err, obj ) => -# test.ok @oUser.username not in obj, -# "User #{ @oUser.username } not stored in role tester!" - -# test.done() -# # store an entry to start with + db.getRoleUsers 'tester', ( err, obj ) => + test.ok @oUser.username not in obj, + "User #{ @oUser.username } not stored in role tester!" + db.shutDown() + test.done() + # store an entry to start with diff --git a/webpages/handlers/js/admin.js b/webpages/handlers/js/admin.js index d133294..8d7b0aa 100644 --- a/webpages/handlers/js/admin.js +++ b/webpages/handlers/js/admin.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.6.3 +// Generated by CoffeeScript 1.7.1 (function() { var fOnLoad; diff --git a/webpages/handlers/js/error.js b/webpages/handlers/js/error.js index 2bb94fc..c97b3f0 100644 --- a/webpages/handlers/js/error.js +++ b/webpages/handlers/js/error.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.6.3 +// Generated by CoffeeScript 1.7.1 (function() { var fOnLoad; diff --git a/webpages/handlers/js/forge_action_invoker.js b/webpages/handlers/js/forge_action_invoker.js index 7eb1c05..9b1832e 100644 --- a/webpages/handlers/js/forge_action_invoker.js +++ b/webpages/handlers/js/forge_action_invoker.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.6.3 +// Generated by CoffeeScript 1.7.1 (function() { var fOnLoad; diff --git a/webpages/handlers/js/forge_event.js b/webpages/handlers/js/forge_event.js index 90e5936..4951d18 100644 --- a/webpages/handlers/js/forge_event.js +++ b/webpages/handlers/js/forge_event.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.6.3 +// Generated by CoffeeScript 1.7.1 (function() { var fOnLoad; diff --git a/webpages/handlers/js/forge_event_poller.js b/webpages/handlers/js/forge_event_poller.js index c971148..533d9ae 100644 --- a/webpages/handlers/js/forge_event_poller.js +++ b/webpages/handlers/js/forge_event_poller.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.6.3 +// Generated by CoffeeScript 1.7.1 (function() { var fOnLoad; diff --git a/webpages/handlers/js/forge_rule.js b/webpages/handlers/js/forge_rule.js index 57398f4..f43a0a0 100644 --- a/webpages/handlers/js/forge_rule.js +++ b/webpages/handlers/js/forge_rule.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.6.3 +// Generated by CoffeeScript 1.7.1 (function() { var fOnLoad; diff --git a/webpages/handlers/js/login.js b/webpages/handlers/js/login.js index 0f62b66..348fc68 100644 --- a/webpages/handlers/js/login.js +++ b/webpages/handlers/js/login.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.6.3 +// Generated by CoffeeScript 1.7.1 (function() { var fOnLoad;