mirror of
https://github.com/Hopiu/webapi-eca.git
synced 2026-03-16 22:10:31 +00:00
examples updated to new dynamic module sandbox. UI improvements
This commit is contained in:
parent
2c3ac8d24d
commit
a68b27c0c7
24 changed files with 385 additions and 345 deletions
|
|
@ -318,12 +318,13 @@ commandFunctions =
|
|||
|
||||
# if action module params were send, store them
|
||||
oParams = oPayload.action_params
|
||||
db.actionInvokers.storeUserParams id, user.username, JSON.stringify params for id, params of oParams
|
||||
for id, params of oParams
|
||||
db.actionInvokers.storeUserParams id, user.username, JSON.stringify params
|
||||
oParams = oPayload.action_functions
|
||||
# if action function arguments were send, store them
|
||||
for id, params of oParams
|
||||
arr = id.split ' -> '
|
||||
db.actionInvokers.storeUserArguments arr[ 0 ], arr[ 1 ], user.username, JSON.stringify params
|
||||
db.actionInvokers.storeUserArguments user.username, rule.id, arr[ 0 ], arr[ 1 ], JSON.stringify params
|
||||
|
||||
# Initialize the rule log
|
||||
db.resetLog user.username, rule.id
|
||||
|
|
|
|||
|
|
@ -153,13 +153,14 @@ fTryToLoadModule = ( userId, ruleId, modId, src, dbMod, params, cb ) =>
|
|||
oFuncArgs = {}
|
||||
|
||||
for func of oFuncParams
|
||||
dbMod.getUserArguments modId, func, userId, ( err, obj ) =>
|
||||
dbMod.getUserArguments userId, ruleId, modId, func, ( err, obj ) =>
|
||||
if obj
|
||||
try
|
||||
oDecrypted = cryptico.decrypt obj, @oPrivateRSAkey
|
||||
oFuncArgs[ func ] = JSON.parse oDecrypted.plaintext
|
||||
@log.info "DM | Found and attached user-specific arguments to #{ userId }, #{ ruleId }, #{ modId }"
|
||||
catch err
|
||||
@log.warn "DM | Error during parsing of user defined params for #{ userId }, #{ ruleId }, #{ modId }"
|
||||
@log.warn "DM | Error during parsing of user-specific arguments for #{ userId }, #{ ruleId }, #{ modId }"
|
||||
@log.warn err
|
||||
cb
|
||||
answ: answ
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ process.on 'disconnect', () ->
|
|||
|
||||
# If the process receives a message it is concerning the rules
|
||||
process.on 'message', ( msg ) ->
|
||||
log.info "EP | Got info about new rule: #{ msg.event }"
|
||||
|
||||
# Let's split the event string to find module and function in an array
|
||||
|
||||
|
|
@ -87,17 +88,17 @@ fLoadModule = ( msg ) ->
|
|||
if not listUserModules[msg.user]
|
||||
listUserModules[msg.user] = {}
|
||||
|
||||
iv = msg.rule.interval * 60 * 1000
|
||||
iv = msg.rule.event_interval * 60 * 1000
|
||||
# We open up a new object for the rule it
|
||||
listUserModules[msg.user][msg.rule.id] =
|
||||
id: msg.rule.event
|
||||
pollfunc: arrName[1]
|
||||
interval: iv
|
||||
event_interval: iv
|
||||
module: result.module
|
||||
logger: result.logger
|
||||
|
||||
log.info "EP | New event module '#{ arrName[0] }' loaded for user #{ msg.user },
|
||||
in rule #{ msg.rule.id }, polling every #{ iv } minutes"
|
||||
in rule #{ msg.rule.id }, polling every #{ msg.rule.event_interval } minutes"
|
||||
setTimeout fCheckAndRun( msg.user, msg.rule.id ), iv
|
||||
|
||||
if msg.event is 'new' or
|
||||
|
|
@ -107,12 +108,13 @@ fLoadModule = ( msg ) ->
|
|||
|
||||
fCheckAndRun = ( userId, ruleId ) ->
|
||||
() ->
|
||||
log.info "EP | Check and run user #{ userId }, rule #{ ruleId }"
|
||||
if isRunning and
|
||||
listUserModules[userId] and
|
||||
listUserModules[userId][ruleId]
|
||||
oRule = listUserModules[userId][ruleId]
|
||||
fCallFunction userId, ruleId, oRule
|
||||
setTimeout fCheckAndRun( userId, ruleId ), oRule.interval
|
||||
setTimeout fCheckAndRun( userId, ruleId ), oRule.event_interval
|
||||
|
||||
# We have to register the poll function in belows anonymous function
|
||||
# because we're fast iterating through the listUserModules and references will
|
||||
|
|
@ -127,26 +129,30 @@ fCallFunction = ( userId, ruleId, oRule ) ->
|
|||
catch err
|
||||
log.info "EP | ERROR in module when polled: #{ oRule.id } #{ userId }: #{err.message}"
|
||||
oRule.logger err.message
|
||||
# ###
|
||||
# This function will loop infinitely every 10 seconds until isRunning is set to false
|
||||
###
|
||||
This function will loop infinitely every 10 seconds until isRunning is set to false
|
||||
|
||||
# @private pollLoop()
|
||||
# ###
|
||||
# pollLoop = () ->
|
||||
# # We only loop if we're running
|
||||
# if isRunning
|
||||
@private pollLoop()
|
||||
###
|
||||
pollLoop = () ->
|
||||
# We only loop if we're running
|
||||
if isRunning
|
||||
|
||||
# # Go through all users
|
||||
# for userName, oRules of listUserModules
|
||||
|
||||
# # Go through each of the users modules
|
||||
# for ruleName, myRule of oRules
|
||||
|
||||
# # Call the event poller module function
|
||||
# fCallFunction myRule, ruleName, userName
|
||||
|
||||
# setTimeout pollLoop, 10000
|
||||
#FIXME a scheduler should go here because we are limited in setTimeout
|
||||
# to an integer value -> ~24 days at maximum!
|
||||
|
||||
|
||||
# # Finally if everything initialized we start polling for new events
|
||||
# pollLoop()
|
||||
# # Go through all users
|
||||
# for userName, oRules of listUserModules
|
||||
|
||||
# # Go through each of the users modules
|
||||
# for ruleName, myRule of oRules
|
||||
|
||||
# # Call the event poller module function
|
||||
# fCallFunction myRule, ruleName, userName
|
||||
|
||||
setTimeout pollLoop, 10000
|
||||
|
||||
|
||||
# Finally if everything initialized we start polling for new events
|
||||
pollLoop()
|
||||
|
|
@ -217,45 +217,45 @@ class IndexedModules
|
|||
storeModule: ( userId, oModule ) =>
|
||||
@log.info "DB | (IdxedMods) #{ @setname }.storeModule( #{ userId }, oModule )"
|
||||
@db.sadd "#{ @setname }s", oModule.id,
|
||||
replyHandler "sadd '#{ oModule.id }' to '#{ @setname }'"
|
||||
replyHandler "sadd '#{ @setname }s' -> '#{ oModule.id }'"
|
||||
@db.hmset "#{ @setname }:#{ oModule.id }", oModule,
|
||||
replyHandler "hmset properties in hash '#{ @setname }:#{ oModule.id }'"
|
||||
replyHandler "hmset '#{ @setname }:#{ oModule.id }' -> [oModule]"
|
||||
@linkModule oModule.id, userId
|
||||
|
||||
#TODO add testing
|
||||
linkModule: ( mId, userId ) =>
|
||||
@log.info "DB | (IdxedMods) #{ @setname }.linkModule( #{ mId }, #{ userId } )"
|
||||
@db.sadd "#{ @setname }:#{ mId }:users", userId,
|
||||
replyHandler "sadd #{ userId } to '#{ @setname }:#{ mId }:users'"
|
||||
replyHandler "sadd '#{ @setname }:#{ mId }:users' -> '#{ userId }'"
|
||||
@db.sadd "user:#{ userId }:#{ @setname }s", mId,
|
||||
replyHandler "sadd #{ mId } to 'user:#{ userId }:#{ @setname }s'"
|
||||
replyHandler "sadd 'user:#{ userId }:#{ @setname }s' -> #{ mId }"
|
||||
|
||||
#TODO add testing
|
||||
unlinkModule: ( mId, userId ) =>
|
||||
@log.info "DB | (IdxedMods) #{ @setname }.unlinkModule( #{ mId }, #{ userId } )"
|
||||
@db.srem "#{ @setname }:#{ mId }:users", userId,
|
||||
replyHandler "srem #{ userId } from '#{ @setname }:#{ mId }:users'"
|
||||
replyHandler "srem '#{ @setname }:#{ mId }:users' -> #{ userId }"
|
||||
@db.srem "user:#{ userId }:#{ @setname }s", mId,
|
||||
replyHandler "srem #{ mId } from 'user:#{ userId }:#{ @setname }s'"
|
||||
replyHandler "srem 'user:#{ userId }:#{ @setname }s' -> #{ mId }"
|
||||
|
||||
#TODO add testing
|
||||
publish: ( mId ) =>
|
||||
@log.info "DB | (IdxedMods) #{ @setname }.publish( #{ mId } )"
|
||||
@db.sadd "public-#{ @setname }s", mId,
|
||||
replyHandler "sadd '#{ mId }' to 'public-#{ @setname }s'"
|
||||
replyHandler "sadd 'public-#{ @setname }s' -> '#{ mId }'"
|
||||
|
||||
#TODO add testing
|
||||
unpublish: ( mId ) =>
|
||||
@log.info "DB | (IdxedMods) #{ @setname }.unpublish( #{ mId } )"
|
||||
@db.srem "public-#{ @setname }s", mId,
|
||||
replyHandler "srem '#{ mId }' from 'public-#{ @setname }s'"
|
||||
replyHandler "srem 'public-#{ @setname }s' -> '#{ mId }'"
|
||||
|
||||
getModule: ( mId, cb ) =>
|
||||
@log.info "DB | (IdxedMods) #{ @setname }.getModule( #{ mId } )"
|
||||
@db.hgetall "#{ @setname }:#{ mId }", cb
|
||||
|
||||
getModuleField: ( mId, field, cb ) =>
|
||||
@log.info "DB | (IdxedMods) #{ @setname }.getModule( #{ mId } )"
|
||||
@log.info "DB | (IdxedMods) #{ @setname }.getModuleField( #{ mId }, #{ field } )"
|
||||
@db.hget "#{ @setname }:#{ mId }", field, cb
|
||||
|
||||
#TODO add testing
|
||||
|
|
@ -265,7 +265,7 @@ class IndexedModules
|
|||
|
||||
#TODO add testing
|
||||
getAvailableModuleIds: ( userId, cb ) =>
|
||||
@log.info "DB | (IdxedMods) #{ @setname }.getPublicModuleIds( #{ userId } )"
|
||||
@log.info "DB | (IdxedMods) #{ @setname }.getAvailableModuleIds( #{ userId } )"
|
||||
@db.sunion "public-#{ @setname }s", "user:#{ userId }:#{ @setname }s", cb
|
||||
|
||||
getModuleIds: ( cb ) =>
|
||||
|
|
@ -279,14 +279,18 @@ class IndexedModules
|
|||
deleteModule: ( mId ) =>
|
||||
@log.info "DB | (IdxedMods) #{ @setname }.deleteModule( #{ mId } )"
|
||||
@db.srem "#{ @setname }s", mId,
|
||||
replyHandler "srem '#{ mId }' from #{ @setname }s"
|
||||
replyHandler "srem '#{ @setname }s' -> '#{ mId }'"
|
||||
@db.del "#{ @setname }:#{ mId }",
|
||||
replyHandler "del of '#{ @setname }:#{ mId }'"
|
||||
replyHandler "del '#{ @setname }:#{ mId }'"
|
||||
@unpublish mId
|
||||
@db.smembers "#{ @setname }:#{ mId }:users", ( err, obj ) =>
|
||||
@unlinkModule mId, userId for userId in obj
|
||||
@deleteUserParams mId, userId for userId in obj
|
||||
@deleteUserArguments mId, userId for userId in obj
|
||||
for userId in obj
|
||||
@unlinkModule mId, userId
|
||||
@deleteUserParams mId, userId
|
||||
exports.getUserLinkedRules userId, ( err, obj ) =>
|
||||
for rule in obj
|
||||
@getUserArgumentsFunctions userId, rule, mId, ( err, obj ) =>
|
||||
@deleteUserArguments userId, rule, mId
|
||||
|
||||
###
|
||||
Stores user params for a module. They are expected to be RSA encrypted with helps of
|
||||
|
|
@ -300,9 +304,9 @@ class IndexedModules
|
|||
storeUserParams: ( mId, userId, encData ) =>
|
||||
@log.info "DB | (IdxedMods) #{ @setname }.storeUserParams( #{ mId }, #{ userId }, encData )"
|
||||
@db.sadd "#{ @setname }-params", "#{ mId }:#{ userId }",
|
||||
replyHandler "sadd '#{ mId }:#{ userId }' to '#{ @setname }-params'"
|
||||
replyHandler "sadd '#{ @setname }-params' -> '#{ mId }:#{ userId }'"
|
||||
@db.set "#{ @setname }-params:#{ mId }:#{ userId }", encData,
|
||||
replyHandler "set user params in '#{ @setname }-params:#{ mId }:#{ userId }'"
|
||||
replyHandler "set '#{ @setname }-params:#{ mId }:#{ userId }' -> [encData]"
|
||||
|
||||
getUserParams: ( mId, userId, cb ) =>
|
||||
@log.info "DB | (IdxedMods) #{ @setname }.getUserParams( #{ mId }, #{ userId } )"
|
||||
|
|
@ -313,9 +317,9 @@ class IndexedModules
|
|||
@db.smembers "#{ @setname }-params", cb
|
||||
|
||||
deleteUserParams: ( mId, userId ) =>
|
||||
@log.info "DB | (IdxedMods) #{ @setname }.deleteUserParams(#{ mId }, #{ userId } )"
|
||||
@log.info "DB | (IdxedMods) #{ @setname }.deleteUserParams( #{ mId }, #{ userId } )"
|
||||
@db.srem "#{ @setname }-params", "#{ mId }:#{ userId }",
|
||||
replyHandler "srem '#{ mId }:#{ userId }' from '#{ @setname }-params'"
|
||||
replyHandler "srem '#{ @setname }-params' -> '#{ mId }:#{ userId }'"
|
||||
@db.del "#{ @setname }-params:#{ mId }:#{ userId }",
|
||||
replyHandler "del '#{ @setname }-params:#{ mId }:#{ userId }'"
|
||||
|
||||
|
|
@ -323,28 +327,34 @@ class IndexedModules
|
|||
Stores user arguments for a function within a module. They are expected to be RSA encrypted with helps of
|
||||
the provided cryptico JS library and will only be decrypted right before the module is loaded!
|
||||
|
||||
@private storeUserArguments( *mId, userId, encData* )
|
||||
@param {String} mId
|
||||
@private storeUserArguments( *userId, ruleId, mId, funcId, encData* )
|
||||
@param {String} userId
|
||||
@param {String} ruleId
|
||||
@param {String} mId
|
||||
@param {String} funcId
|
||||
@param {object} encData
|
||||
###
|
||||
storeUserArguments: ( mId, funcId, userId, encData ) =>
|
||||
@log.info "DB | (IdxedMods) #{ @setname }.storeUserArguments( #{ mId }, #{ funcId }, #{ userId }, encData )"
|
||||
@db.sadd "#{ @setname }:#{ mId }:#{ userId }:functions", funcId,
|
||||
replyHandler "sadd '#{ funcId }' to '#{ @setname }:#{ mId }:#{ userId }:functions'"
|
||||
@db.set "#{ @setname }:#{ mId }:#{ userId }:function:#{ funcId }", encData,
|
||||
replyHandler "set user params in '#{ @setname }:#{ mId }:#{ userId }:function:#{ func }'"
|
||||
storeUserArguments: ( userId, ruleId, mId, funcId, encData ) =>
|
||||
@log.info "DB | (IdxedMods) #{ @setname }.storeUserArguments( #{ userId }, #{ ruleId }, #{ mId }, #{ funcId }, encData )"
|
||||
@db.sadd "#{ @setname }:#{ userId }:#{ ruleId }:#{ mId }:functions", funcId,
|
||||
replyHandler "sadd '#{ @setname }:#{ userId }:#{ ruleId }:#{ mId }:functions' -> '#{ funcId }'"
|
||||
@db.set "#{ @setname }:#{ userId }:#{ ruleId }:#{ mId }:function:#{ funcId }", encData,
|
||||
replyHandler "set '#{ @setname }:#{ userId }:#{ ruleId }:#{ mId }:function:#{ funcId }' -> [encData]"
|
||||
|
||||
getUserArguments: ( mId, funcId, userId, cb ) =>
|
||||
@log.info "DB | (IdxedMods) #{ @setname }.getUserArguments( #{ mId }, #{ funcId }, #{ userId } )"
|
||||
@db.get "#{ @setname }:#{ mId }:#{ userId }:function:#{ funcId }", cb
|
||||
getUserArgumentsFunctions: ( userId, ruleId, mId, cb ) =>
|
||||
@log.info "DB | (IdxedMods) #{ @setname }.getUserArgumentsFunctions( #{ userId }, #{ ruleId }, #{ mId } )"
|
||||
@db.get "#{ @setname }:#{ userId }:#{ ruleId }:#{ mId }:functions", cb
|
||||
|
||||
deleteUserArguments: ( mId, userId ) =>
|
||||
@log.info "DB | (IdxedMods) #{ @setname }.deleteUserArguments(#{ mId }, #{ userId } )"
|
||||
@db.smembers "#{ @setname }:#{ mId }:#{ userId }:functions", ( err, obj ) =>
|
||||
getUserArguments: ( userId, ruleId, mId, funcId, cb ) =>
|
||||
@log.info "DB | (IdxedMods) #{ @setname }.getUserArguments( #{ userId }, #{ ruleId }, #{ mId }, #{ funcId } )"
|
||||
@db.get "#{ @setname }:#{ userId }:#{ ruleId }:#{ mId }:function:#{ funcId }", cb
|
||||
|
||||
deleteUserArguments: ( userId, ruleId, mId ) =>
|
||||
@log.info "DB | (IdxedMods) #{ @setname }.deleteUserArguments( #{ userId }, #{ ruleId }, #{ mId } )"
|
||||
@db.smembers "#{ @setname }:#{ userId }:#{ ruleId }:#{ mId }:functions", ( err, obj ) =>
|
||||
for func in obj
|
||||
@db.del "#{ @setname }:#{ mId }:#{ userId }:function:#{ func }",
|
||||
replyHandler "del '#{ @setname }:#{ mId }:#{ userId }:function:#{ func }'"
|
||||
@db.del "#{ @setname }:#{ userId }:#{ ruleId }:#{ mId }:function:#{ func }",
|
||||
replyHandler "del '#{ @setname }:#{ userId }:#{ ruleId }:#{ mId }:function:#{ func }'"
|
||||
|
||||
|
||||
###
|
||||
|
|
@ -394,7 +404,7 @@ Query the DB for a rule and pass it to cb(err, obj).
|
|||
@param {function} cb
|
||||
###
|
||||
exports.getRule = ( ruleId, cb ) =>
|
||||
@log.info "DB | get: 'rule:#{ ruleId }'"
|
||||
@log.info "DB | getRule( '#{ ruleId }' )"
|
||||
@db.get "rule:#{ ruleId }", cb
|
||||
|
||||
###
|
||||
|
|
@ -425,11 +435,11 @@ Store a string representation of a rule in the DB.
|
|||
@param {String} data
|
||||
###
|
||||
exports.storeRule = ( ruleId, data ) =>
|
||||
@log.info "DB | storeRule: '#{ ruleId }'"
|
||||
@log.info "DB | storeRule( '#{ ruleId }' )"
|
||||
@db.sadd 'rules', "#{ ruleId }",
|
||||
replyHandler "sadd rules: '#{ ruleId }'"
|
||||
replyHandler "sadd 'rules' -> '#{ ruleId }'"
|
||||
@db.set "rule:#{ ruleId }", data,
|
||||
replyHandler "set 'rule:#{ ruleId }': data"
|
||||
replyHandler "set 'rule:#{ ruleId }' -> [data]"
|
||||
|
||||
###
|
||||
Delete a string representation of a rule.
|
||||
|
|
@ -439,26 +449,27 @@ Delete a string representation of a rule.
|
|||
@param {String} userId
|
||||
###
|
||||
exports.deleteRule = ( ruleId ) =>
|
||||
@log.info "DB | deleteRule: '#{ ruleId }'"
|
||||
@db.srem "rules", ruleId, replyHandler "srem 'rules': '#{ ruleId }'"
|
||||
@db.del "rule:#{ ruleId }", replyHandler "del: 'rule:#{ ruleId }'"
|
||||
@log.info "DB | deleteRule( '#{ ruleId }' )"
|
||||
@db.srem "rules", ruleId, replyHandler "srem 'rules' -> '#{ ruleId }'"
|
||||
@db.del "rule:#{ ruleId }", replyHandler "del 'rule:#{ ruleId }'"
|
||||
|
||||
# We also need to delete all references in linked and active users
|
||||
@db.smembers "rule:#{ ruleId }:users", ( err, obj ) =>
|
||||
delLinkedUserRule = ( userId ) =>
|
||||
exports.resetLog userId, ruleId
|
||||
@db.srem "user:#{ userId }:rules", ruleId,
|
||||
replyHandler "srem 'user:#{ userId }:rules': '#{ ruleId }'"
|
||||
replyHandler "srem 'user:#{ userId }:rules' -> '#{ ruleId }'"
|
||||
delLinkedUserRule id for id in obj
|
||||
@db.del "rule:#{ ruleId }:users", replyHandler "del 'rule:#{ ruleId }:users'"
|
||||
|
||||
@db.smembers "rule:#{ ruleId }:active-users", ( err, obj ) =>
|
||||
delActiveUserRule = ( userId ) =>
|
||||
@db.srem "user:#{ userId }:active-rules", ruleId,
|
||||
replyHandler "srem 'user:#{ userId }:active-rules': '#{ ruleId }'"
|
||||
replyHandler "srem 'user:#{ userId }:active-rules' -> '#{ ruleId }'"
|
||||
delActiveUserRule id for id in obj
|
||||
@db.del "rule:#{ ruleId }:active-users",
|
||||
replyHandler "del 'rule:#{ ruleId }:active-users'"
|
||||
#TODO remove module links and params and arguments
|
||||
|
||||
###
|
||||
Associate a rule to a user.
|
||||
|
|
@ -470,9 +481,9 @@ Associate a rule to a user.
|
|||
exports.linkRule = ( ruleId, userId ) =>
|
||||
@log.info "DB | linkRule: '#{ ruleId }' to user '#{ userId }'"
|
||||
@db.sadd "rule:#{ ruleId }:users", userId,
|
||||
replyHandler "sadd 'rule:#{ ruleId }:users': '#{ userId }'"
|
||||
replyHandler "sadd 'rule:#{ ruleId }:users' -> '#{ userId }'"
|
||||
@db.sadd "user:#{ userId }:rules", ruleId,
|
||||
replyHandler "sadd 'user:#{ userId }:rules': '#{ ruleId }'"
|
||||
replyHandler "sadd 'user:#{ userId }:rules' -> '#{ ruleId }'"
|
||||
|
||||
###
|
||||
Get rules linked to a user and hand it to cb(err, obj).
|
||||
|
|
@ -482,7 +493,7 @@ Get rules linked to a user and hand it to cb(err, obj).
|
|||
@param {function} cb
|
||||
###
|
||||
exports.getUserLinkedRules = ( userId, cb ) =>
|
||||
@log.info "DB | getUserLinkedRules: 'user:#{ userId }:rules'"
|
||||
@log.info "DB | getUserLinkedRules: smembers 'user:#{ userId }:rules'"
|
||||
@db.smembers "user:#{ userId }:rules", cb
|
||||
|
||||
###
|
||||
|
|
@ -493,7 +504,7 @@ Get users linked to a rule and hand it to cb(err, obj).
|
|||
@param {function} cb
|
||||
###
|
||||
exports.getRuleLinkedUsers = ( ruleId, cb ) =>
|
||||
@log.info "DB | getRuleLinkedUsers: 'rule:#{ ruleId }:users'"
|
||||
@log.info "DB | getRuleLinkedUsers: smembers 'rule:#{ ruleId }:users'"
|
||||
@db.smembers "rule:#{ ruleId }:users", cb
|
||||
|
||||
###
|
||||
|
|
@ -506,9 +517,9 @@ Delete an association of a rule to a user.
|
|||
exports.unlinkRule = ( ruleId, userId ) =>
|
||||
@log.info "DB | unlinkRule: '#{ ruleId }:#{ userId }'"
|
||||
@db.srem "rule:#{ ruleId }:users", userId,
|
||||
replyHandler "srem 'rule:#{ ruleId }:users': '#{ userId }'"
|
||||
replyHandler "srem 'rule:#{ ruleId }:users' -> '#{ userId }'"
|
||||
@db.srem "user:#{ userId }:rules", ruleId,
|
||||
replyHandler "srem 'user:#{ userId }:rules': '#{ ruleId }'"
|
||||
replyHandler "srem 'user:#{ userId }:rules' -> '#{ ruleId }'"
|
||||
|
||||
###
|
||||
Activate a rule.
|
||||
|
|
@ -520,9 +531,9 @@ Activate a rule.
|
|||
exports.activateRule = ( ruleId, userId ) =>
|
||||
@log.info "DB | activateRule: '#{ ruleId }' for '#{ userId }'"
|
||||
@db.sadd "rule:#{ ruleId }:active-users", userId,
|
||||
replyHandler "sadd 'rule:#{ ruleId }:active-users': '#{ userId }'"
|
||||
replyHandler "sadd 'rule:#{ ruleId }:active-users' -> '#{ userId }'"
|
||||
@db.sadd "user:#{ userId }:active-rules", ruleId,
|
||||
replyHandler "sadd 'user:#{ userId }:active-rules': '#{ ruleId }'"
|
||||
replyHandler "sadd 'user:#{ userId }:active-rules' -> '#{ ruleId }'"
|
||||
|
||||
###
|
||||
Get rules activated for a user and hand it to cb(err, obj).
|
||||
|
|
@ -556,7 +567,7 @@ Deactivate a rule.
|
|||
exports.deactivateRule = ( ruleId, userId ) =>
|
||||
@log.info "DB | deactivateRule: '#{ ruleId }' for '#{ userId }'"
|
||||
@db.srem "rule:#{ ruleId }:active-users", userId,
|
||||
replyHandler "srem 'rule:#{ ruleId }:active-users': '#{ userId }'"
|
||||
replyHandler "srem 'rule:#{ ruleId }:active-users' -> '#{ userId }'"
|
||||
@db.srem "user:#{ userId }:active-rules", ruleId,
|
||||
replyHandler "srem 'user:#{ userId }:active-rules' '#{ ruleId }'"
|
||||
|
||||
|
|
@ -598,10 +609,10 @@ exports.storeUser = ( objUser ) =>
|
|||
@log.info "DB | storeUser: '#{ objUser.username }'"
|
||||
if objUser and objUser.username and objUser.password
|
||||
@db.sadd 'users', objUser.username,
|
||||
replyHandler "storing user key '#{ objUser.username }'"
|
||||
replyHandler "sadd 'users' -> '#{ objUser.username }'"
|
||||
objUser.password = objUser.password
|
||||
@db.hmset "user:#{ objUser.username }", objUser,
|
||||
replyHandler "storing user properties '#{ objUser.username }'"
|
||||
replyHandler "hmset 'user:#{ objUser.username }' -> [objUser]"
|
||||
else
|
||||
@log.warn new Error 'DB | username or password was missing'
|
||||
|
||||
|
|
@ -634,35 +645,34 @@ Deletes a user and all his associated linked and active rules.
|
|||
###
|
||||
exports.deleteUser = ( userId ) =>
|
||||
@log.info "DB | deleteUser: '#{ userId }'"
|
||||
@db.srem "users", userId, replyHandler "Deleting user key '#{ userId }'"
|
||||
@db.del "user:#{ userId }", replyHandler "Deleting user '#{ userId }'"
|
||||
@db.srem "users", userId, replyHandler "srem 'users' -> '#{ userId }'"
|
||||
@db.del "user:#{ userId }", replyHandler "del '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 }'"
|
||||
replyHandler "srem 'rule:#{ ruleId }:users' -> '#{ userId }'"
|
||||
delLinkedRuleUser id for id in obj
|
||||
@db.del "user:#{ userId }:rules",
|
||||
replyHandler "Deleting user '#{ userId }' rules"
|
||||
replyHandler "del '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 }'"
|
||||
replyHandler "srem 'rule:#{ ruleId }:active-users' -> '#{ userId }'"
|
||||
delActivatedRuleUser id for id in obj
|
||||
@db.del "user:#{ userId }:active-rules",
|
||||
replyHandler "Deleting user '#{ userId }' rules"
|
||||
replyHandler "del user:#{ userId }:active-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 }'"
|
||||
replyHandler "srem 'role:#{ roleId }:users' -> '#{ userId }'"
|
||||
delRoleUser id for id in obj
|
||||
@db.del "user:#{ userId }:roles",
|
||||
replyHandler "Deleting user '#{ userId }' roles"
|
||||
@db.del "user:#{ userId }:roles", replyHandler "del 'user:#{ userId }:roles'"
|
||||
|
||||
###
|
||||
Checks the credentials and on success returns the user object to the
|
||||
|
|
@ -707,11 +717,28 @@ Associate a role with a user.
|
|||
###
|
||||
exports.storeUserRole = ( userId, role ) =>
|
||||
@log.info "DB | storeUserRole: '#{ userId }:#{ role }'"
|
||||
@db.sadd 'roles', role, replyHandler "adding role '#{ role }' to role index set"
|
||||
@db.sadd 'roles', role, replyHandler "sadd '#{ role }' to 'roles'"
|
||||
@db.sadd "user:#{ userId }:roles", role,
|
||||
replyHandler "adding role '#{ role }' to user '#{ userId }'"
|
||||
replyHandler "sadd 'user:#{ userId }:roles' -> '#{ role }'"
|
||||
@db.sadd "role:#{ role }:users", userId,
|
||||
replyHandler "adding user '#{ userId }' to role '#{ role }'"
|
||||
replyHandler "sadd 'role:#{ role }:users' -> '#{ userId }'"
|
||||
|
||||
###
|
||||
Associate a role with a user.
|
||||
|
||||
@public storeUserRole( *userId, role* )
|
||||
@param {String} userId
|
||||
@param {String} role
|
||||
###
|
||||
exports.deleteRole = ( role ) =>
|
||||
@log.info "DB | deleteRole: '#{ role }'"
|
||||
@db.smembers "role:#{ role }:users", ( err, obj ) =>
|
||||
delUserRole = ( userId ) =>
|
||||
@db.srem "user:#{ userId }:roles", role,
|
||||
replyHandler "srem 'user:#{ userId }:roles' -> '#{ role }'"
|
||||
delUserRole id for id in obj
|
||||
@db.srem "roles", role,
|
||||
replyHandler "srem 'roles' -> '#{ role }'"
|
||||
|
||||
###
|
||||
Fetch all roles of a user and pass them to cb(err, obj).
|
||||
|
|
@ -745,9 +772,9 @@ Remove a role from a user.
|
|||
exports.removeUserRole = ( userId, role ) =>
|
||||
@log.info "DB | removeRoleFromUser: role '#{ role }', user '#{ userId }'"
|
||||
@db.srem "user:#{ userId }:roles", role,
|
||||
replyHandler "Removing role '#{ role }' from user '#{ userId }'"
|
||||
replyHandler "srem 'user:#{ userId }:roles' -> '#{ role }'"
|
||||
@db.srem "role:#{ role }:users", userId,
|
||||
replyHandler "Removing user '#{ userId }' from role '#{ role }'"
|
||||
replyHandler "srem 'role:#{ role }:users' -> '#{ userId }'"
|
||||
|
||||
|
||||
###
|
||||
|
|
|
|||
|
|
@ -37,5 +37,5 @@ exports.sendMail = ( sender, receipient, subject, content ) ->
|
|||
ToAddress: receipient
|
||||
Subject: subject
|
||||
TextBody: content
|
||||
needlereq 'post', url, data, json: true, standardCallback 'sendMail'
|
||||
needle.request 'post', url, data, json: true, standardCallback 'sendMail'
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ exports.newMail = ( pushEvent ) ->
|
|||
#
|
||||
# Syntax: needle.request method, url, data, [options], callback
|
||||
#
|
||||
needlereq 'get', url, null, null, ( err, resp, body ) ->
|
||||
needle.request 'get', url, null, null, ( err, resp, body ) ->
|
||||
if err
|
||||
log 'Error in EmailYak EM newMail: ' + err.message
|
||||
else
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ callService = ( args ) ->
|
|||
if not args.callback
|
||||
args.callback = standardCallback 'call'
|
||||
url = urlService + args.service + '/' + args.method
|
||||
needlereq 'post', url, args.data, credentials, args.callback
|
||||
needle.request 'post', url, args.data, credentials, args.callback
|
||||
|
||||
###
|
||||
Calls the user's unread content service.
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ Fetches the temperature
|
|||
###
|
||||
getTemperature = ( cb ) ->
|
||||
url = urlService + '?APPID=' + params.openweatherKey + '&q=' + params.city
|
||||
needlereq 'get', url, null, null, cb
|
||||
needle.request 'get', url, null, null, cb
|
||||
|
||||
###
|
||||
Emits one event per day if the temperature today raises above user defined threshold
|
||||
|
|
|
|||
|
|
@ -411,7 +411,7 @@ Components Manager
|
|||
for (id in oParams) {
|
||||
params = oParams[id];
|
||||
arr = id.split(' -> ');
|
||||
db.actionInvokers.storeUserArguments(arr[0], arr[1], user.username, JSON.stringify(params));
|
||||
db.actionInvokers.storeUserArguments(user.username, rule.id, arr[0], arr[1], JSON.stringify(params));
|
||||
}
|
||||
db.resetLog(user.username, rule.id);
|
||||
db.appendLog(user.username, rule.id, "INIT", "Rule '" + rule.id + "' initialized");
|
||||
|
|
|
|||
|
|
@ -173,15 +173,16 @@ Dynamic Modules
|
|||
if (dbMod) {
|
||||
oFuncArgs = {};
|
||||
for (func in oFuncParams) {
|
||||
dbMod.getUserArguments(modId, func, userId, function(err, obj) {
|
||||
dbMod.getUserArguments(userId, ruleId, modId, func, function(err, obj) {
|
||||
var oDecrypted;
|
||||
if (obj) {
|
||||
try {
|
||||
oDecrypted = cryptico.decrypt(obj, _this.oPrivateRSAkey);
|
||||
return oFuncArgs[func] = JSON.parse(oDecrypted.plaintext);
|
||||
oFuncArgs[func] = JSON.parse(oDecrypted.plaintext);
|
||||
return _this.log.info("DM | Found and attached user-specific arguments to " + userId + ", " + ruleId + ", " + modId);
|
||||
} catch (_error) {
|
||||
err = _error;
|
||||
_this.log.warn("DM | Error during parsing of user defined params for " + userId + ", " + ruleId + ", " + modId);
|
||||
_this.log.warn("DM | Error during parsing of user-specific arguments for " + userId + ", " + ruleId + ", " + modId);
|
||||
return _this.log.warn(err);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ Dynamic Modules
|
|||
*/
|
||||
|
||||
(function() {
|
||||
var db, dynmod, fCallFunction, fCheckAndRun, fLoadModule, isRunning, listUserModules, log, logconf, logger;
|
||||
var db, dynmod, fCallFunction, fCheckAndRun, fLoadModule, isRunning, listUserModules, log, logconf, logger, pollLoop;
|
||||
|
||||
logger = require('./logging');
|
||||
|
||||
|
|
@ -57,6 +57,7 @@ Dynamic Modules
|
|||
});
|
||||
|
||||
process.on('message', function(msg) {
|
||||
log.info("EP | Got info about new rule: " + msg.event);
|
||||
if (msg.event === 'new' || msg.event === 'init') {
|
||||
fLoadModule(msg);
|
||||
}
|
||||
|
|
@ -84,15 +85,15 @@ Dynamic Modules
|
|||
if (!listUserModules[msg.user]) {
|
||||
listUserModules[msg.user] = {};
|
||||
}
|
||||
iv = msg.rule.interval * 60 * 1000;
|
||||
iv = msg.rule.event_interval * 60 * 1000;
|
||||
listUserModules[msg.user][msg.rule.id] = {
|
||||
id: msg.rule.event,
|
||||
pollfunc: arrName[1],
|
||||
interval: iv,
|
||||
event_interval: iv,
|
||||
module: result.module,
|
||||
logger: result.logger
|
||||
};
|
||||
log.info("EP | New event module '" + arrName[0] + "' loaded for user " + msg.user + ", in rule " + msg.rule.id + ", polling every " + iv + " minutes");
|
||||
log.info("EP | New event module '" + arrName[0] + "' loaded for user " + msg.user + ", in rule " + msg.rule.id + ", polling every " + msg.rule.event_interval + " minutes");
|
||||
return setTimeout(fCheckAndRun(msg.user, msg.rule.id), iv);
|
||||
});
|
||||
}
|
||||
|
|
@ -106,10 +107,11 @@ Dynamic Modules
|
|||
fCheckAndRun = function(userId, ruleId) {
|
||||
return function() {
|
||||
var oRule;
|
||||
log.info("EP | Check and run user " + userId + ", rule " + ruleId);
|
||||
if (isRunning && listUserModules[userId] && listUserModules[userId][ruleId]) {
|
||||
oRule = listUserModules[userId][ruleId];
|
||||
fCallFunction(userId, ruleId, oRule);
|
||||
return setTimeout(fCheckAndRun(userId, ruleId), oRule.interval);
|
||||
return setTimeout(fCheckAndRun(userId, ruleId), oRule.event_interval);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
|
@ -131,4 +133,19 @@ Dynamic Modules
|
|||
}
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
This function will loop infinitely every 10 seconds until isRunning is set to false
|
||||
|
||||
@private pollLoop()
|
||||
*/
|
||||
|
||||
pollLoop = function() {
|
||||
if (isRunning) {
|
||||
return setTimeout(pollLoop, 10000);
|
||||
}
|
||||
};
|
||||
|
||||
pollLoop();
|
||||
|
||||
}).call(this);
|
||||
|
|
|
|||
|
|
@ -257,6 +257,7 @@ Persistence
|
|||
this.log = log;
|
||||
this.deleteUserArguments = __bind(this.deleteUserArguments, this);
|
||||
this.getUserArguments = __bind(this.getUserArguments, this);
|
||||
this.getUserArgumentsFunctions = __bind(this.getUserArgumentsFunctions, this);
|
||||
this.storeUserArguments = __bind(this.storeUserArguments, this);
|
||||
this.deleteUserParams = __bind(this.deleteUserParams, this);
|
||||
this.getUserParamsIds = __bind(this.getUserParamsIds, this);
|
||||
|
|
@ -293,31 +294,31 @@ Persistence
|
|||
|
||||
IndexedModules.prototype.storeModule = function(userId, oModule) {
|
||||
this.log.info("DB | (IdxedMods) " + this.setname + ".storeModule( " + userId + ", oModule )");
|
||||
this.db.sadd("" + this.setname + "s", oModule.id, replyHandler("sadd '" + oModule.id + "' to '" + this.setname + "'"));
|
||||
this.db.hmset("" + this.setname + ":" + oModule.id, oModule, replyHandler("hmset properties in hash '" + this.setname + ":" + oModule.id + "'"));
|
||||
this.db.sadd("" + this.setname + "s", oModule.id, replyHandler("sadd '" + this.setname + "s' -> '" + oModule.id + "'"));
|
||||
this.db.hmset("" + this.setname + ":" + oModule.id, oModule, replyHandler("hmset '" + this.setname + ":" + oModule.id + "' -> [oModule]"));
|
||||
return this.linkModule(oModule.id, userId);
|
||||
};
|
||||
|
||||
IndexedModules.prototype.linkModule = function(mId, userId) {
|
||||
this.log.info("DB | (IdxedMods) " + 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'"));
|
||||
this.db.sadd("" + this.setname + ":" + mId + ":users", userId, replyHandler("sadd '" + this.setname + ":" + mId + ":users' -> '" + userId + "'"));
|
||||
return this.db.sadd("user:" + userId + ":" + this.setname + "s", mId, replyHandler("sadd 'user:" + userId + ":" + this.setname + "s' -> " + mId));
|
||||
};
|
||||
|
||||
IndexedModules.prototype.unlinkModule = function(mId, userId) {
|
||||
this.log.info("DB | (IdxedMods) " + 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'"));
|
||||
this.db.srem("" + this.setname + ":" + mId + ":users", userId, replyHandler("srem '" + this.setname + ":" + mId + ":users' -> " + userId));
|
||||
return this.db.srem("user:" + userId + ":" + this.setname + "s", mId, replyHandler("srem 'user:" + userId + ":" + this.setname + "s' -> " + mId));
|
||||
};
|
||||
|
||||
IndexedModules.prototype.publish = function(mId) {
|
||||
this.log.info("DB | (IdxedMods) " + this.setname + ".publish( " + mId + " )");
|
||||
return this.db.sadd("public-" + this.setname + "s", mId, replyHandler("sadd '" + mId + "' to 'public-" + this.setname + "s'"));
|
||||
return this.db.sadd("public-" + this.setname + "s", mId, replyHandler("sadd 'public-" + this.setname + "s' -> '" + mId + "'"));
|
||||
};
|
||||
|
||||
IndexedModules.prototype.unpublish = function(mId) {
|
||||
this.log.info("DB | (IdxedMods) " + this.setname + ".unpublish( " + mId + " )");
|
||||
return this.db.srem("public-" + this.setname + "s", mId, replyHandler("srem '" + mId + "' from 'public-" + this.setname + "s'"));
|
||||
return this.db.srem("public-" + this.setname + "s", mId, replyHandler("srem 'public-" + this.setname + "s' -> '" + mId + "'"));
|
||||
};
|
||||
|
||||
IndexedModules.prototype.getModule = function(mId, cb) {
|
||||
|
|
@ -326,7 +327,7 @@ Persistence
|
|||
};
|
||||
|
||||
IndexedModules.prototype.getModuleField = function(mId, field, cb) {
|
||||
this.log.info("DB | (IdxedMods) " + this.setname + ".getModule( " + mId + " )");
|
||||
this.log.info("DB | (IdxedMods) " + this.setname + ".getModuleField( " + mId + ", " + field + " )");
|
||||
return this.db.hget("" + this.setname + ":" + mId, field, cb);
|
||||
};
|
||||
|
||||
|
|
@ -336,7 +337,7 @@ Persistence
|
|||
};
|
||||
|
||||
IndexedModules.prototype.getAvailableModuleIds = function(userId, cb) {
|
||||
this.log.info("DB | (IdxedMods) " + this.setname + ".getPublicModuleIds( " + userId + " )");
|
||||
this.log.info("DB | (IdxedMods) " + this.setname + ".getAvailableModuleIds( " + userId + " )");
|
||||
return this.db.sunion("public-" + this.setname + "s", "user:" + userId + ":" + this.setname + "s", cb);
|
||||
};
|
||||
|
||||
|
|
@ -352,24 +353,28 @@ Persistence
|
|||
|
||||
IndexedModules.prototype.deleteModule = function(mId) {
|
||||
this.log.info("DB | (IdxedMods) " + 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 + "'"));
|
||||
this.db.srem("" + this.setname + "s", mId, replyHandler("srem '" + this.setname + "s' -> '" + mId + "'"));
|
||||
this.db.del("" + this.setname + ":" + mId, replyHandler("del '" + this.setname + ":" + mId + "'"));
|
||||
this.unpublish(mId);
|
||||
return this.db.smembers("" + this.setname + ":" + mId + ":users", (function(_this) {
|
||||
return function(err, obj) {
|
||||
var userId, _i, _j, _k, _len, _len1, _len2, _results;
|
||||
var userId, _i, _len, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = obj.length; _i < _len; _i++) {
|
||||
userId = obj[_i];
|
||||
_this.unlinkModule(mId, userId);
|
||||
}
|
||||
for (_j = 0, _len1 = obj.length; _j < _len1; _j++) {
|
||||
userId = obj[_j];
|
||||
_this.deleteUserParams(mId, userId);
|
||||
}
|
||||
_results = [];
|
||||
for (_k = 0, _len2 = obj.length; _k < _len2; _k++) {
|
||||
userId = obj[_k];
|
||||
_results.push(_this.deleteUserArguments(mId, userId));
|
||||
_results.push(exports.getUserLinkedRules(userId, function(err, obj) {
|
||||
var rule, _j, _len1, _results1;
|
||||
_results1 = [];
|
||||
for (_j = 0, _len1 = obj.length; _j < _len1; _j++) {
|
||||
rule = obj[_j];
|
||||
_results1.push(_this.getUserArgumentsFunctions(userId, rule, mId, function(err, obj) {
|
||||
return _this.deleteUserArguments(userId, rule, mId);
|
||||
}));
|
||||
}
|
||||
return _results1;
|
||||
}));
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
|
|
@ -389,8 +394,8 @@ Persistence
|
|||
|
||||
IndexedModules.prototype.storeUserParams = function(mId, userId, encData) {
|
||||
this.log.info("DB | (IdxedMods) " + this.setname + ".storeUserParams( " + mId + ", " + userId + ", encData )");
|
||||
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, encData, replyHandler("set user params in '" + this.setname + "-params:" + mId + ":" + userId + "'"));
|
||||
this.db.sadd("" + this.setname + "-params", "" + mId + ":" + userId, replyHandler("sadd '" + this.setname + "-params' -> '" + mId + ":" + userId + "'"));
|
||||
return this.db.set("" + this.setname + "-params:" + mId + ":" + userId, encData, replyHandler("set '" + this.setname + "-params:" + mId + ":" + userId + "' -> [encData]"));
|
||||
};
|
||||
|
||||
IndexedModules.prototype.getUserParams = function(mId, userId, cb) {
|
||||
|
|
@ -404,8 +409,8 @@ Persistence
|
|||
};
|
||||
|
||||
IndexedModules.prototype.deleteUserParams = function(mId, userId) {
|
||||
this.log.info("DB | (IdxedMods) " + this.setname + ".deleteUserParams(" + mId + ", " + userId + " )");
|
||||
this.db.srem("" + this.setname + "-params", "" + mId + ":" + userId, replyHandler("srem '" + mId + ":" + userId + "' from '" + this.setname + "-params'"));
|
||||
this.log.info("DB | (IdxedMods) " + this.setname + ".deleteUserParams( " + mId + ", " + userId + " )");
|
||||
this.db.srem("" + this.setname + "-params", "" + mId + ":" + userId, replyHandler("srem '" + this.setname + "-params' -> '" + mId + ":" + userId + "'"));
|
||||
return this.db.del("" + this.setname + "-params:" + mId + ":" + userId, replyHandler("del '" + this.setname + "-params:" + mId + ":" + userId + "'"));
|
||||
};
|
||||
|
||||
|
|
@ -414,32 +419,39 @@ Persistence
|
|||
Stores user arguments for a function within a module. They are expected to be RSA encrypted with helps of
|
||||
the provided cryptico JS library and will only be decrypted right before the module is loaded!
|
||||
|
||||
@private storeUserArguments( *mId, userId, encData* )
|
||||
@param {String} mId
|
||||
@private storeUserArguments( *userId, ruleId, mId, funcId, encData* )
|
||||
@param {String} userId
|
||||
@param {String} ruleId
|
||||
@param {String} mId
|
||||
@param {String} funcId
|
||||
@param {object} encData
|
||||
*/
|
||||
|
||||
IndexedModules.prototype.storeUserArguments = function(mId, funcId, userId, encData) {
|
||||
this.log.info("DB | (IdxedMods) " + this.setname + ".storeUserArguments( " + mId + ", " + funcId + ", " + userId + ", encData )");
|
||||
this.db.sadd("" + this.setname + ":" + mId + ":" + userId + ":functions", funcId, replyHandler("sadd '" + funcId + "' to '" + this.setname + ":" + mId + ":" + userId + ":functions'"));
|
||||
return this.db.set("" + this.setname + ":" + mId + ":" + userId + ":function:" + funcId, encData, replyHandler("set user params in '" + this.setname + ":" + mId + ":" + userId + ":function:" + func + "'"));
|
||||
IndexedModules.prototype.storeUserArguments = function(userId, ruleId, mId, funcId, encData) {
|
||||
this.log.info("DB | (IdxedMods) " + this.setname + ".storeUserArguments( " + userId + ", " + ruleId + ", " + mId + ", " + funcId + ", encData )");
|
||||
this.db.sadd("" + this.setname + ":" + userId + ":" + ruleId + ":" + mId + ":functions", funcId, replyHandler("sadd '" + this.setname + ":" + userId + ":" + ruleId + ":" + mId + ":functions' -> '" + funcId + "'"));
|
||||
return this.db.set("" + this.setname + ":" + userId + ":" + ruleId + ":" + mId + ":function:" + funcId, encData, replyHandler("set '" + this.setname + ":" + userId + ":" + ruleId + ":" + mId + ":function:" + funcId + "' -> [encData]"));
|
||||
};
|
||||
|
||||
IndexedModules.prototype.getUserArguments = function(mId, funcId, userId, cb) {
|
||||
this.log.info("DB | (IdxedMods) " + this.setname + ".getUserArguments( " + mId + ", " + funcId + ", " + userId + " )");
|
||||
return this.db.get("" + this.setname + ":" + mId + ":" + userId + ":function:" + funcId, cb);
|
||||
IndexedModules.prototype.getUserArgumentsFunctions = function(userId, ruleId, mId, cb) {
|
||||
this.log.info("DB | (IdxedMods) " + this.setname + ".getUserArgumentsFunctions( " + userId + ", " + ruleId + ", " + mId + " )");
|
||||
return this.db.get("" + this.setname + ":" + userId + ":" + ruleId + ":" + mId + ":functions", cb);
|
||||
};
|
||||
|
||||
IndexedModules.prototype.deleteUserArguments = function(mId, userId) {
|
||||
this.log.info("DB | (IdxedMods) " + this.setname + ".deleteUserArguments(" + mId + ", " + userId + " )");
|
||||
return this.db.smembers("" + this.setname + ":" + mId + ":" + userId + ":functions", (function(_this) {
|
||||
IndexedModules.prototype.getUserArguments = function(userId, ruleId, mId, funcId, cb) {
|
||||
this.log.info("DB | (IdxedMods) " + this.setname + ".getUserArguments( " + userId + ", " + ruleId + ", " + mId + ", " + funcId + " )");
|
||||
return this.db.get("" + this.setname + ":" + userId + ":" + ruleId + ":" + mId + ":function:" + funcId, cb);
|
||||
};
|
||||
|
||||
IndexedModules.prototype.deleteUserArguments = function(userId, ruleId, mId) {
|
||||
this.log.info("DB | (IdxedMods) " + this.setname + ".deleteUserArguments( " + userId + ", " + ruleId + ", " + mId + " )");
|
||||
return this.db.smembers("" + this.setname + ":" + userId + ":" + ruleId + ":" + mId + ":functions", (function(_this) {
|
||||
return function(err, obj) {
|
||||
var func, _i, _len, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = obj.length; _i < _len; _i++) {
|
||||
func = obj[_i];
|
||||
_results.push(_this.db.del("" + _this.setname + ":" + mId + ":" + userId + ":function:" + func, replyHandler("del '" + _this.setname + ":" + mId + ":" + userId + ":function:" + func + "'")));
|
||||
_results.push(_this.db.del("" + _this.setname + ":" + userId + ":" + ruleId + ":" + mId + ":function:" + func, replyHandler("del '" + _this.setname + ":" + userId + ":" + ruleId + ":" + mId + ":function:" + func + "'")));
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
|
|
@ -513,7 +525,7 @@ Persistence
|
|||
|
||||
exports.getRule = (function(_this) {
|
||||
return function(ruleId, cb) {
|
||||
_this.log.info("DB | get: 'rule:" + ruleId + "'");
|
||||
_this.log.info("DB | getRule( '" + ruleId + "' )");
|
||||
return _this.db.get("rule:" + ruleId, cb);
|
||||
};
|
||||
})(this);
|
||||
|
|
@ -559,9 +571,9 @@ Persistence
|
|||
|
||||
exports.storeRule = (function(_this) {
|
||||
return function(ruleId, data) {
|
||||
_this.log.info("DB | storeRule: '" + ruleId + "'");
|
||||
_this.db.sadd('rules', "" + ruleId, replyHandler("sadd rules: '" + ruleId + "'"));
|
||||
return _this.db.set("rule:" + ruleId, data, replyHandler("set 'rule:" + ruleId + "': data"));
|
||||
_this.log.info("DB | storeRule( '" + ruleId + "' )");
|
||||
_this.db.sadd('rules', "" + ruleId, replyHandler("sadd 'rules' -> '" + ruleId + "'"));
|
||||
return _this.db.set("rule:" + ruleId, data, replyHandler("set 'rule:" + ruleId + "' -> [data]"));
|
||||
};
|
||||
})(this);
|
||||
|
||||
|
|
@ -576,14 +588,14 @@ Persistence
|
|||
|
||||
exports.deleteRule = (function(_this) {
|
||||
return function(ruleId) {
|
||||
_this.log.info("DB | deleteRule: '" + ruleId + "'");
|
||||
_this.db.srem("rules", ruleId, replyHandler("srem 'rules': '" + ruleId + "'"));
|
||||
_this.db.del("rule:" + ruleId, replyHandler("del: 'rule:" + ruleId + "'"));
|
||||
_this.log.info("DB | deleteRule( '" + ruleId + "' )");
|
||||
_this.db.srem("rules", ruleId, replyHandler("srem 'rules' -> '" + ruleId + "'"));
|
||||
_this.db.del("rule:" + ruleId, replyHandler("del 'rule:" + ruleId + "'"));
|
||||
_this.db.smembers("rule:" + ruleId + ":users", function(err, obj) {
|
||||
var delLinkedUserRule, id, _i, _len, _results;
|
||||
delLinkedUserRule = function(userId) {
|
||||
exports.resetLog(userId, ruleId);
|
||||
return _this.db.srem("user:" + userId + ":rules", ruleId, replyHandler("srem 'user:" + userId + ":rules': '" + ruleId + "'"));
|
||||
return _this.db.srem("user:" + userId + ":rules", ruleId, replyHandler("srem 'user:" + userId + ":rules' -> '" + ruleId + "'"));
|
||||
};
|
||||
_results = [];
|
||||
for (_i = 0, _len = obj.length; _i < _len; _i++) {
|
||||
|
|
@ -596,7 +608,7 @@ Persistence
|
|||
_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("srem 'user:" + userId + ":active-rules': '" + ruleId + "'"));
|
||||
return _this.db.srem("user:" + userId + ":active-rules", ruleId, replyHandler("srem 'user:" + userId + ":active-rules' -> '" + ruleId + "'"));
|
||||
};
|
||||
_results = [];
|
||||
for (_i = 0, _len = obj.length; _i < _len; _i++) {
|
||||
|
|
@ -621,8 +633,8 @@ Persistence
|
|||
exports.linkRule = (function(_this) {
|
||||
return function(ruleId, userId) {
|
||||
_this.log.info("DB | linkRule: '" + ruleId + "' to user '" + userId + "'");
|
||||
_this.db.sadd("rule:" + ruleId + ":users", userId, replyHandler("sadd 'rule:" + ruleId + ":users': '" + userId + "'"));
|
||||
return _this.db.sadd("user:" + userId + ":rules", ruleId, replyHandler("sadd 'user:" + userId + ":rules': '" + ruleId + "'"));
|
||||
_this.db.sadd("rule:" + ruleId + ":users", userId, replyHandler("sadd 'rule:" + ruleId + ":users' -> '" + userId + "'"));
|
||||
return _this.db.sadd("user:" + userId + ":rules", ruleId, replyHandler("sadd 'user:" + userId + ":rules' -> '" + ruleId + "'"));
|
||||
};
|
||||
})(this);
|
||||
|
||||
|
|
@ -637,7 +649,7 @@ Persistence
|
|||
|
||||
exports.getUserLinkedRules = (function(_this) {
|
||||
return function(userId, cb) {
|
||||
_this.log.info("DB | getUserLinkedRules: 'user:" + userId + ":rules'");
|
||||
_this.log.info("DB | getUserLinkedRules: smembers 'user:" + userId + ":rules'");
|
||||
return _this.db.smembers("user:" + userId + ":rules", cb);
|
||||
};
|
||||
})(this);
|
||||
|
|
@ -653,7 +665,7 @@ Persistence
|
|||
|
||||
exports.getRuleLinkedUsers = (function(_this) {
|
||||
return function(ruleId, cb) {
|
||||
_this.log.info("DB | getRuleLinkedUsers: 'rule:" + ruleId + ":users'");
|
||||
_this.log.info("DB | getRuleLinkedUsers: smembers 'rule:" + ruleId + ":users'");
|
||||
return _this.db.smembers("rule:" + ruleId + ":users", cb);
|
||||
};
|
||||
})(this);
|
||||
|
|
@ -670,8 +682,8 @@ Persistence
|
|||
exports.unlinkRule = (function(_this) {
|
||||
return function(ruleId, userId) {
|
||||
_this.log.info("DB | unlinkRule: '" + ruleId + ":" + userId + "'");
|
||||
_this.db.srem("rule:" + ruleId + ":users", userId, replyHandler("srem 'rule:" + ruleId + ":users': '" + userId + "'"));
|
||||
return _this.db.srem("user:" + userId + ":rules", ruleId, replyHandler("srem 'user:" + userId + ":rules': '" + ruleId + "'"));
|
||||
_this.db.srem("rule:" + ruleId + ":users", userId, replyHandler("srem 'rule:" + ruleId + ":users' -> '" + userId + "'"));
|
||||
return _this.db.srem("user:" + userId + ":rules", ruleId, replyHandler("srem 'user:" + userId + ":rules' -> '" + ruleId + "'"));
|
||||
};
|
||||
})(this);
|
||||
|
||||
|
|
@ -687,8 +699,8 @@ Persistence
|
|||
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("sadd 'rule:" + ruleId + ":active-users': '" + userId + "'"));
|
||||
return _this.db.sadd("user:" + userId + ":active-rules", ruleId, replyHandler("sadd 'user:" + userId + ":active-rules': '" + ruleId + "'"));
|
||||
_this.db.sadd("rule:" + ruleId + ":active-users", userId, replyHandler("sadd 'rule:" + ruleId + ":active-users' -> '" + userId + "'"));
|
||||
return _this.db.sadd("user:" + userId + ":active-rules", ruleId, replyHandler("sadd 'user:" + userId + ":active-rules' -> '" + ruleId + "'"));
|
||||
};
|
||||
})(this);
|
||||
|
||||
|
|
@ -736,7 +748,7 @@ Persistence
|
|||
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("srem 'rule:" + ruleId + ":active-users': '" + userId + "'"));
|
||||
_this.db.srem("rule:" + ruleId + ":active-users", userId, replyHandler("srem 'rule:" + ruleId + ":active-users' -> '" + userId + "'"));
|
||||
return _this.db.srem("user:" + userId + ":active-rules", ruleId, replyHandler("srem 'user:" + userId + ":active-rules' '" + ruleId + "'"));
|
||||
};
|
||||
})(this);
|
||||
|
|
@ -798,9 +810,9 @@ Persistence
|
|||
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 + "'"));
|
||||
_this.db.sadd('users', objUser.username, replyHandler("sadd 'users' -> '" + objUser.username + "'"));
|
||||
objUser.password = objUser.password;
|
||||
return _this.db.hmset("user:" + objUser.username, objUser, replyHandler("storing user properties '" + objUser.username + "'"));
|
||||
return _this.db.hmset("user:" + objUser.username, objUser, replyHandler("hmset 'user:" + objUser.username + "' -> [objUser]"));
|
||||
} else {
|
||||
return _this.log.warn(new Error('DB | username or password was missing'));
|
||||
}
|
||||
|
|
@ -849,12 +861,12 @@ Persistence
|
|||
exports.deleteUser = (function(_this) {
|
||||
return 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.srem("users", userId, replyHandler("srem 'users' -> '" + userId + "'"));
|
||||
_this.db.del("user:" + userId, replyHandler("del '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 + "'"));
|
||||
return _this.db.srem("rule:" + ruleId + ":users", userId, replyHandler("srem 'rule:" + ruleId + ":users' -> '" + userId + "'"));
|
||||
};
|
||||
_results = [];
|
||||
for (_i = 0, _len = obj.length; _i < _len; _i++) {
|
||||
|
|
@ -863,11 +875,11 @@ Persistence
|
|||
}
|
||||
return _results;
|
||||
});
|
||||
_this.db.del("user:" + userId + ":rules", replyHandler("Deleting user '" + userId + "' rules"));
|
||||
_this.db.del("user:" + userId + ":rules", replyHandler("del '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 + "'"));
|
||||
return _this.db.srem("rule:" + ruleId + ":active-users", userId, replyHandler("srem 'rule:" + ruleId + ":active-users' -> '" + userId + "'"));
|
||||
};
|
||||
_results = [];
|
||||
for (_i = 0, _len = obj.length; _i < _len; _i++) {
|
||||
|
|
@ -876,11 +888,11 @@ Persistence
|
|||
}
|
||||
return _results;
|
||||
});
|
||||
_this.db.del("user:" + userId + ":active-rules", replyHandler("Deleting user '" + userId + "' rules"));
|
||||
_this.db.del("user:" + userId + ":active-rules", replyHandler("del user:" + userId + ":active-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 + "'"));
|
||||
return _this.db.srem("role:" + roleId + ":users", userId, replyHandler("srem 'role:" + roleId + ":users' -> '" + userId + "'"));
|
||||
};
|
||||
_results = [];
|
||||
for (_i = 0, _len = obj.length; _i < _len; _i++) {
|
||||
|
|
@ -889,7 +901,7 @@ Persistence
|
|||
}
|
||||
return _results;
|
||||
});
|
||||
return _this.db.del("user:" + userId + ":roles", replyHandler("Deleting user '" + userId + "' roles"));
|
||||
return _this.db.del("user:" + userId + ":roles", replyHandler("del 'user:" + userId + ":roles'"));
|
||||
};
|
||||
})(this);
|
||||
|
||||
|
|
@ -947,9 +959,37 @@ Persistence
|
|||
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.db.sadd('roles', role, replyHandler("sadd '" + role + "' to 'roles'"));
|
||||
_this.db.sadd("user:" + userId + ":roles", role, replyHandler("sadd 'user:" + userId + ":roles' -> '" + role + "'"));
|
||||
return _this.db.sadd("role:" + role + ":users", userId, replyHandler("sadd 'role:" + role + ":users' -> '" + userId + "'"));
|
||||
};
|
||||
})(this);
|
||||
|
||||
|
||||
/*
|
||||
Associate a role with a user.
|
||||
|
||||
@public storeUserRole( *userId, role* )
|
||||
@param {String} userId
|
||||
@param {String} role
|
||||
*/
|
||||
|
||||
exports.deleteRole = (function(_this) {
|
||||
return function(role) {
|
||||
_this.log.info("DB | deleteRole: '" + role + "'");
|
||||
_this.db.smembers("role:" + role + ":users", function(err, obj) {
|
||||
var delUserRole, id, _i, _len, _results;
|
||||
delUserRole = function(userId) {
|
||||
return _this.db.srem("user:" + userId + ":roles", role, replyHandler("srem 'user:" + userId + ":roles' -> '" + role + "'"));
|
||||
};
|
||||
_results = [];
|
||||
for (_i = 0, _len = obj.length; _i < _len; _i++) {
|
||||
id = obj[_i];
|
||||
_results.push(delUserRole(id));
|
||||
}
|
||||
return _results;
|
||||
});
|
||||
return _this.db.srem("roles", role, replyHandler("srem 'roles' -> '" + role + "'"));
|
||||
};
|
||||
})(this);
|
||||
|
||||
|
|
@ -997,8 +1037,8 @@ Persistence
|
|||
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.db.srem("user:" + userId + ":roles", role, replyHandler("srem 'user:" + userId + ":roles' -> '" + role + "'"));
|
||||
return _this.db.srem("role:" + role + ":users", userId, replyHandler("srem 'role:" + role + ":users' -> '" + userId + "'"));
|
||||
};
|
||||
})(this);
|
||||
|
||||
|
|
|
|||
|
|
@ -272,3 +272,5 @@ exports.ruleForge =
|
|||
setTimeout fWaitAgain, 200
|
||||
|
||||
setTimeout fWaitForPersistence, 200
|
||||
|
||||
# TODO we have to implement a lot of extensive testing for the component manager since it is a core feature
|
||||
|
|
@ -29,11 +29,12 @@ oRuleTwo = objects.rules.ruleTwo
|
|||
|
||||
exports.tearDown = ( cb ) ->
|
||||
db.deleteUser oUser.username
|
||||
db.deleteRole 'tester'
|
||||
setTimeout cb, 100
|
||||
|
||||
# ###
|
||||
# # Test AVAILABILITY
|
||||
# ###
|
||||
###
|
||||
# Test AVAILABILITY
|
||||
###
|
||||
exports.Availability =
|
||||
testRequire: ( test ) ->
|
||||
test.expect 1
|
||||
|
|
@ -607,6 +608,7 @@ exports.User =
|
|||
db.getUserActivatedRules oUser.username, ( err, obj ) ->
|
||||
test.ok obj.length is 0,
|
||||
'User still associated to activated rules!'
|
||||
db.deleteRole 'tester'
|
||||
test.done()
|
||||
|
||||
# Store the user and make some links
|
||||
|
|
@ -616,6 +618,7 @@ exports.User =
|
|||
db.linkRule 'rule-3', oUser.username
|
||||
db.activateRule 'rule-1', oUser.username
|
||||
db.storeUserRole oUser.username, 'tester'
|
||||
# Verify role is deleted
|
||||
|
||||
setTimeout fWaitForPersistence, 100
|
||||
|
||||
|
|
@ -644,7 +647,6 @@ exports.User =
|
|||
# Test ROLES
|
||||
###
|
||||
exports.Roles =
|
||||
|
||||
testStore: ( test ) ->
|
||||
test.expect 2
|
||||
|
||||
|
|
|
|||
|
|
@ -71,6 +71,7 @@ exports.session =
|
|||
|
||||
tearDown: ( cb ) =>
|
||||
db.deleteUser @oUsr.username
|
||||
db.purgeEventQueue()
|
||||
cb()
|
||||
|
||||
testLoginAndOut: ( test ) =>
|
||||
|
|
@ -173,34 +174,34 @@ exports.events =
|
|||
setTimeout fPopEvent, 200 # try to fetch the db entry
|
||||
|
||||
exports.testLoginOrPage = ( test ) ->
|
||||
test.expect 3
|
||||
test.expect 3
|
||||
|
||||
req = createRequest()
|
||||
req = createRequest()
|
||||
req.query =
|
||||
page: 'forge_event'
|
||||
resp = createResponse ( code, msg ) ->
|
||||
|
||||
# Ensure we have to login first
|
||||
test.ok msg.indexOf( 'document.title = \'Login\'' ) > 0, 'Didn\'t get login page?'
|
||||
req = createLoggedInRequest()
|
||||
req.query =
|
||||
page: 'forge_event'
|
||||
resp = createResponse ( code, msg ) ->
|
||||
|
||||
# Ensure we have to login first
|
||||
test.ok msg.indexOf( 'document.title = \'Login\'' ) > 0, 'Didn\'t get login page?'
|
||||
|
||||
# After being logged in we should get the expected page
|
||||
test.ok msg.indexOf( 'document.title = \'Event Forge!\'' ) > 0, 'Didn\' get forge page?'
|
||||
req = createLoggedInRequest()
|
||||
req.query =
|
||||
page: 'forge_event'
|
||||
page: 'wrongpage'
|
||||
resp = createResponse ( code, msg ) ->
|
||||
|
||||
# After being logged in we should get the expected page
|
||||
test.ok msg.indexOf( 'document.title = \'Event Forge!\'' ) > 0, 'Didn\' get forge page?'
|
||||
req = createLoggedInRequest()
|
||||
req.query =
|
||||
page: 'wrongpage'
|
||||
resp = createResponse ( code, msg ) ->
|
||||
# A wrong page request should give back an error page
|
||||
test.ok msg.indexOf( 'document.title = \'Error!\'' ) > 0, 'Didn\' get forge page?'
|
||||
test.done()
|
||||
|
||||
# A wrong page request should give back an error page
|
||||
test.ok msg.indexOf( 'document.title = \'Error!\'' ) > 0, 'Didn\' get forge page?'
|
||||
test.done()
|
||||
|
||||
rh.handleForge req, resp # set the handler to listening
|
||||
rh.handleForge req, resp # set the handler to listening
|
||||
rh.handleForge req, resp # set the handler to listening
|
||||
rh.handleForge req, resp # set the handler to listening
|
||||
|
||||
|
||||
exports.testUserCommandsNoLogin = ( test ) ->
|
||||
|
|
|
|||
|
|
@ -3,38 +3,25 @@ fOnLoad = () ->
|
|||
document.title = 'Edit Modules'
|
||||
$( '#pagetitle' ).text "{{{user.username}}}, edit your Modules!"
|
||||
|
||||
moduleType = $( '#module_type' ).val()
|
||||
$( '#module_type' ).change () ->
|
||||
moduleType = $( this ).val()
|
||||
console.log moduleType
|
||||
fFetchModules()
|
||||
|
||||
editor = ace.edit "editor"
|
||||
editor.setTheme "ace/theme/monokai"
|
||||
editor.setReadOnly true
|
||||
editor.setShowPrintMargin false
|
||||
|
||||
fErrHandler = ( errMsg ) ->
|
||||
( err ) ->
|
||||
if err.status is 401
|
||||
window.location.href = 'forge?page=edit_modules'
|
||||
else
|
||||
$( '#moduleName' ).html "<h2> </h2>"
|
||||
$( '#moduleLanguage' ).html "<b> </b>"
|
||||
editor.setValue ""
|
||||
fDelayed = () ->
|
||||
if err.responseText is ''
|
||||
msg = 'No Response from Server!'
|
||||
else
|
||||
try
|
||||
oErr = JSON.parse err.responseText
|
||||
msg = oErr.message
|
||||
$( '#info' ).text errMsg + msg
|
||||
$( '#info' ).attr 'class', 'error'
|
||||
setTimeout fDelayed, 500
|
||||
if err.responseText is ''
|
||||
msg = 'No Response from Server!'
|
||||
else
|
||||
try
|
||||
oErr = JSON.parse err.responseText
|
||||
msg = oErr.message
|
||||
$( '#info' ).text errMsg + msg
|
||||
$( '#info' ).attr 'class', 'error'
|
||||
|
||||
fFetchModules = () ->
|
||||
if moduleType is 'Event Poller'
|
||||
if $( '#module_type' ).val() is 'Event Poller'
|
||||
cmd = 'get_event_pollers'
|
||||
else
|
||||
cmd = 'get_action_invokers'
|
||||
|
|
@ -63,10 +50,7 @@ fOnLoad = () ->
|
|||
modName = $( 'div', $( this ).closest( 'tr' )).text()
|
||||
if confirm "Do you really want to delete the Module '#{ modName }'?
|
||||
The module might still be active in some of your rules!"
|
||||
$( '#moduleName' ).html "<h2> </h2>"
|
||||
$( '#moduleLanguage' ).html "<b> </b>"
|
||||
editor.setValue ""
|
||||
if moduleType is 'Event Poller'
|
||||
if $( '#module_type' ).val() is 'Event Poller'
|
||||
cmd = 'delete_event_poller'
|
||||
else
|
||||
cmd = 'delete_action_invoker'
|
||||
|
|
@ -80,32 +64,10 @@ fOnLoad = () ->
|
|||
.fail fErrHandler 'Could not delete module! '
|
||||
|
||||
$( '#tableModules' ).on 'click', 'img.log', () ->
|
||||
modName = $( 'div', $( this ).closest( 'tr' )).text()
|
||||
if moduleType is 'Event Poller'
|
||||
cmd = 'get_full_event_poller'
|
||||
modName = encodeURIComponent $( 'div', $( this ).closest( 'tr' )).text()
|
||||
if $( '#module_type' ).val() is 'Event Poller'
|
||||
window.location.href = 'forge?page=forge_event_poller&id=' + modName
|
||||
else
|
||||
cmd = 'get_full_action_invoker'
|
||||
data =
|
||||
command: cmd
|
||||
payload:
|
||||
id: modName
|
||||
data.payload = JSON.stringify data.payload
|
||||
$.post( '/usercommand', data )
|
||||
.done ( data ) ->
|
||||
try
|
||||
oMod = JSON.parse data.message
|
||||
catch err
|
||||
fErrHandler err.message
|
||||
if oMod.lang is 'CoffeeScript'
|
||||
editor.getSession().setMode "ace/mode/coffee"
|
||||
else
|
||||
editor.getSession().setMode "ace/mode/javascript"
|
||||
editor.setValue oMod.data
|
||||
editor.gotoLine 1, 1
|
||||
editor.scrollToRow 1
|
||||
$( '#moduleName' ).html "<h2>#{ oMod.id }</h2>"
|
||||
$( '#moduleLanguage' ).html "<b>#{ oMod.lang }</b>"
|
||||
|
||||
.fail fErrHandler 'Could not get module! '
|
||||
window.location.href = 'forge?page=forge_action_invoker&id=' + modName
|
||||
|
||||
window.addEventListener 'load', fOnLoad, true
|
||||
|
|
|
|||
|
|
@ -1,15 +1,3 @@
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# encodeURIComponent(url); -> Rule Name to be passed to forge_rule
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
fOnLoad = () ->
|
||||
document.title = 'Edit Rules'
|
||||
|
|
|
|||
|
|
@ -92,4 +92,19 @@ fOnLoad = () ->
|
|||
$( '#info' ).attr 'class', 'error'
|
||||
setTimeout fDelayed, 500
|
||||
|
||||
|
||||
# EDIT MODULES
|
||||
|
||||
arrParams = window.location.search.substring(1).split '&'
|
||||
id = ''
|
||||
for param in arrParams
|
||||
arrKV = param.split '='
|
||||
if arrKV[ 0 ] is 'id'
|
||||
id = decodeURIComponent arrKV[ 1 ]
|
||||
if id isnt ''
|
||||
# TODO we have an idea so we want to edit this module!
|
||||
console.log id
|
||||
|
||||
|
||||
|
||||
window.addEventListener 'load', fOnLoad, true
|
||||
|
|
|
|||
|
|
@ -257,7 +257,8 @@ fOnLoad = () ->
|
|||
argument: $( 'div.funcarg', this ).val()
|
||||
value: $( 'input[type=text]', this ).val()
|
||||
regexp: $( 'input[type=checkbox]', this ).is( ':checked' )
|
||||
actParams[ actionName ] = cryptico.encrypt JSON.stringify( tmp ), strPublicKey
|
||||
tmp = cryptico.encrypt JSON.stringify( tmp ), strPublicKey
|
||||
actParams[ actionName ] = tmp.cipher
|
||||
|
||||
try
|
||||
conds = JSON.parse editor.getValue()
|
||||
|
|
@ -271,7 +272,7 @@ fOnLoad = () ->
|
|||
fParseTime = ( str, hasDay ) ->
|
||||
arrTime = str.split ':'
|
||||
# If there's only one entry, this is the amount of minutes
|
||||
if arrTime.length = 1
|
||||
if arrTime.length is 1
|
||||
time = parseInt( str ) || 10
|
||||
if hasDay
|
||||
time * 60
|
||||
|
|
@ -282,14 +283,18 @@ fOnLoad = () ->
|
|||
h * 60 + ( parseInt( arrTime[ 1 ] ) || 10 )
|
||||
|
||||
|
||||
arrInp = $( '#event_interval' ).text().split ' '
|
||||
txtInterval = $( '#event_interval' ).val()
|
||||
arrInp = txtInterval.split ' '
|
||||
# There's only one string entered, either day or hour
|
||||
if arrInp.length = 1
|
||||
mins = fParseTime arrInp[ 0 ]
|
||||
if arrInp.length is 1
|
||||
mins = fParseTime txtInterval
|
||||
else
|
||||
d = parseInt( arrInp[ 0 ] ) || 0
|
||||
mins = d * 24 * 60 + fParseTime arrInp[ 1 ], true
|
||||
|
||||
# We have to limit this to 24 days because setTimeout only takes integer values
|
||||
# until we implement a scheduler that deals with larger intervals
|
||||
mins = Math.min mins, 35700
|
||||
encryptedParams = cryptico.encrypt JSON.stringify( ep ), strPublicKey
|
||||
obj =
|
||||
command: 'forge_rule'
|
||||
|
|
|
|||
|
|
@ -3,48 +3,34 @@
|
|||
var fOnLoad;
|
||||
|
||||
fOnLoad = function() {
|
||||
var editor, fErrHandler, fFetchModules, fUpdateModuleList, moduleType;
|
||||
var fErrHandler, fFetchModules, fUpdateModuleList;
|
||||
document.title = 'Edit Modules';
|
||||
$('#pagetitle').text("{{{user.username}}}, edit your Modules!");
|
||||
moduleType = $('#module_type').val();
|
||||
$('#module_type').change(function() {
|
||||
moduleType = $(this).val();
|
||||
console.log(moduleType);
|
||||
return fFetchModules();
|
||||
});
|
||||
editor = ace.edit("editor");
|
||||
editor.setTheme("ace/theme/monokai");
|
||||
editor.setReadOnly(true);
|
||||
editor.setShowPrintMargin(false);
|
||||
fErrHandler = function(errMsg) {
|
||||
return function(err) {
|
||||
var fDelayed;
|
||||
var msg, oErr;
|
||||
if (err.status === 401) {
|
||||
return window.location.href = 'forge?page=edit_modules';
|
||||
} else {
|
||||
$('#moduleName').html("<h2> </h2>");
|
||||
$('#moduleLanguage').html("<b> </b>");
|
||||
editor.setValue("");
|
||||
fDelayed = function() {
|
||||
var msg, oErr;
|
||||
if (err.responseText === '') {
|
||||
msg = 'No Response from Server!';
|
||||
} else {
|
||||
try {
|
||||
oErr = JSON.parse(err.responseText);
|
||||
msg = oErr.message;
|
||||
} catch (_error) {}
|
||||
}
|
||||
$('#info').text(errMsg + msg);
|
||||
return $('#info').attr('class', 'error');
|
||||
};
|
||||
return setTimeout(fDelayed, 500);
|
||||
if (err.responseText === '') {
|
||||
msg = 'No Response from Server!';
|
||||
} else {
|
||||
try {
|
||||
oErr = JSON.parse(err.responseText);
|
||||
msg = oErr.message;
|
||||
} catch (_error) {}
|
||||
}
|
||||
$('#info').text(errMsg + msg);
|
||||
return $('#info').attr('class', 'error');
|
||||
}
|
||||
};
|
||||
};
|
||||
fFetchModules = function() {
|
||||
var cmd;
|
||||
if (moduleType === 'Event Poller') {
|
||||
if ($('#module_type').val() === 'Event Poller') {
|
||||
cmd = 'get_event_pollers';
|
||||
} else {
|
||||
cmd = 'get_action_invokers';
|
||||
|
|
@ -75,10 +61,7 @@
|
|||
var cmd, data, modName;
|
||||
modName = $('div', $(this).closest('tr')).text();
|
||||
if (confirm("Do you really want to delete the Module '" + modName + "'? The module might still be active in some of your rules!")) {
|
||||
$('#moduleName').html("<h2> </h2>");
|
||||
$('#moduleLanguage').html("<b> </b>");
|
||||
editor.setValue("");
|
||||
if (moduleType === 'Event Poller') {
|
||||
if ($('#module_type').val() === 'Event Poller') {
|
||||
cmd = 'delete_event_poller';
|
||||
} else {
|
||||
cmd = 'delete_action_invoker';
|
||||
|
|
@ -94,39 +77,13 @@
|
|||
}
|
||||
});
|
||||
return $('#tableModules').on('click', 'img.log', function() {
|
||||
var cmd, data, modName;
|
||||
modName = $('div', $(this).closest('tr')).text();
|
||||
if (moduleType === 'Event Poller') {
|
||||
cmd = 'get_full_event_poller';
|
||||
var modName;
|
||||
modName = encodeURIComponent($('div', $(this).closest('tr')).text());
|
||||
if ($('#module_type').val() === 'Event Poller') {
|
||||
return window.location.href = 'forge?page=forge_event_poller&id=' + modName;
|
||||
} else {
|
||||
cmd = 'get_full_action_invoker';
|
||||
return window.location.href = 'forge?page=forge_action_invoker&id=' + modName;
|
||||
}
|
||||
data = {
|
||||
command: cmd,
|
||||
payload: {
|
||||
id: modName
|
||||
}
|
||||
};
|
||||
data.payload = JSON.stringify(data.payload);
|
||||
return $.post('/usercommand', data).done(function(data) {
|
||||
var err, oMod;
|
||||
try {
|
||||
oMod = JSON.parse(data.message);
|
||||
} catch (_error) {
|
||||
err = _error;
|
||||
fErrHandler(err.message);
|
||||
}
|
||||
if (oMod.lang === 'CoffeeScript') {
|
||||
editor.getSession().setMode("ace/mode/coffee");
|
||||
} else {
|
||||
editor.getSession().setMode("ace/mode/javascript");
|
||||
}
|
||||
editor.setValue(oMod.data);
|
||||
editor.gotoLine(1, 1);
|
||||
editor.scrollToRow(1);
|
||||
$('#moduleName').html("<h2>" + oMod.id + "</h2>");
|
||||
return $('#moduleLanguage').html("<b>" + oMod.lang + "</b>");
|
||||
}).fail(fErrHandler('Could not get module! '));
|
||||
});
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
var fOnLoad;
|
||||
|
||||
fOnLoad = function() {
|
||||
var editor, fChangeInputVisibility;
|
||||
var arrKV, arrParams, editor, fChangeInputVisibility, id, param, _i, _len;
|
||||
document.title = 'Forge Action Invoker';
|
||||
$('#pagetitle').text("{{{user.username}}}, forge your custom action invoker!");
|
||||
editor = ace.edit("editor");
|
||||
|
|
@ -58,7 +58,7 @@
|
|||
}
|
||||
});
|
||||
fChangeInputVisibility();
|
||||
return $('#but_submit').click(function() {
|
||||
$('#but_submit').click(function() {
|
||||
var listParams, obj;
|
||||
if ($('#input_id').val() === '') {
|
||||
return alert('Please enter an action invoker name!');
|
||||
|
|
@ -111,6 +111,18 @@
|
|||
});
|
||||
}
|
||||
});
|
||||
arrParams = window.location.search.substring(1).split('&');
|
||||
id = '';
|
||||
for (_i = 0, _len = arrParams.length; _i < _len; _i++) {
|
||||
param = arrParams[_i];
|
||||
arrKV = param.split('=');
|
||||
if (arrKV[0] === 'id') {
|
||||
id = decodeURIComponent(arrKV[1]);
|
||||
}
|
||||
}
|
||||
if (id !== '') {
|
||||
return console.log(id);
|
||||
}
|
||||
};
|
||||
|
||||
window.addEventListener('load', fOnLoad, true);
|
||||
|
|
|
|||
|
|
@ -276,7 +276,7 @@
|
|||
return $(this).closest('tr').remove();
|
||||
});
|
||||
$('#but_submit').click(function() {
|
||||
var actParams, acts, ap, arrInp, conds, d, encryptedParams, ep, err, fParseTime, mins;
|
||||
var actParams, acts, ap, arrInp, conds, d, encryptedParams, ep, err, fParseTime, mins, txtInterval;
|
||||
window.scrollTo(0, 0);
|
||||
$('#info').text('');
|
||||
try {
|
||||
|
|
@ -333,7 +333,8 @@
|
|||
value: $('input[type=text]', this).val(),
|
||||
regexp: $('input[type=checkbox]', this).is(':checked')
|
||||
};
|
||||
return actParams[actionName] = cryptico.encrypt(JSON.stringify(tmp), strPublicKey);
|
||||
tmp = cryptico.encrypt(JSON.stringify(tmp), strPublicKey);
|
||||
return actParams[actionName] = tmp.cipher;
|
||||
});
|
||||
});
|
||||
try {
|
||||
|
|
@ -348,7 +349,7 @@
|
|||
fParseTime = function(str, hasDay) {
|
||||
var arrTime, h, time;
|
||||
arrTime = str.split(':');
|
||||
if (arrTime.length = 1) {
|
||||
if (arrTime.length === 1) {
|
||||
time = parseInt(str) || 10;
|
||||
if (hasDay) {
|
||||
return time * 60;
|
||||
|
|
@ -360,13 +361,15 @@
|
|||
return h * 60 + (parseInt(arrTime[1]) || 10);
|
||||
}
|
||||
};
|
||||
arrInp = $('#event_interval').text().split(' ');
|
||||
if (arrInp.length = 1) {
|
||||
mins = fParseTime(arrInp[0]);
|
||||
txtInterval = $('#event_interval').val();
|
||||
arrInp = txtInterval.split(' ');
|
||||
if (arrInp.length === 1) {
|
||||
mins = fParseTime(txtInterval);
|
||||
} else {
|
||||
d = parseInt(arrInp[0]) || 0;
|
||||
mins = d * 24 * 60 + fParseTime(arrInp[1], true);
|
||||
}
|
||||
mins = Math.min(mins, 35700);
|
||||
encryptedParams = cryptico.encrypt(JSON.stringify(ep), strPublicKey);
|
||||
obj = {
|
||||
command: 'forge_rule',
|
||||
|
|
|
|||
|
|
@ -3,12 +3,12 @@
|
|||
<option>Action Invoker</option>
|
||||
</select>
|
||||
|
||||
<table>
|
||||
<!-- <table>
|
||||
<tr>
|
||||
<td valign="top">
|
||||
<td valign="top"> -->
|
||||
<h3>Available Modules:</h3>
|
||||
<table id="tableModules"></table>
|
||||
</td>
|
||||
<!--</td>
|
||||
<td width="50px"></td>
|
||||
<td valign="top" width="700px">
|
||||
<div id="moduleName"><h2> </h2></div>
|
||||
|
|
@ -22,4 +22,4 @@ User-specific properties:
|
|||
</td>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</table> -->
|
||||
|
|
@ -24,7 +24,7 @@ exports.newMail = ( pushEvent ) ->
|
|||
#
|
||||
# Syntax: needle.request method, url, data, [options], callback
|
||||
#
|
||||
needlereq 'get', url, null, null, ( err, resp, body ) ->
|
||||
needle.request 'get', url, null, null, ( err, resp, body ) ->
|
||||
if err
|
||||
log 'Error in EmailYak EM newMail: ' + err.message
|
||||
else
|
||||
|
|
|
|||
Loading…
Reference in a new issue