mirror of
https://github.com/Hopiu/webapi-eca.git
synced 2026-03-17 06:20:23 +00:00
switched crypto to crypto-js from google. login.html form loads cryptojs directly from google codebase in order to hash passwords before sending them to the server
138 lines
3.7 KiB
CoffeeScript
138 lines
3.7 KiB
CoffeeScript
###
|
|
|
|
User Handler
|
|
============
|
|
> TODO Add documentation
|
|
|
|
###
|
|
|
|
fs = require 'fs'
|
|
path = require 'path'
|
|
qs = require 'querystring'
|
|
|
|
# Requires:
|
|
|
|
# - The [Logging](logging.html) module
|
|
log = require './logging'
|
|
# - The [DB Interface](db_interface.html) module
|
|
db = require './db_interface'
|
|
# - The [Module Manager](module_manager.html) module
|
|
mm = require './module_manager'
|
|
|
|
### Prepare the admin command handlers that are issued via HTTP requests. ###
|
|
objAdminCmds =
|
|
'loadrules': mm.loadRulesFromFS,
|
|
'loadaction': mm.loadActionModuleFromFS,
|
|
'loadactions': mm.loadActionModulesFromFS,
|
|
'loadevent': mm.loadEventModuleFromFS,
|
|
'loadevents': mm.loadEventModulesFromFS
|
|
|
|
|
|
exports = module.exports = ( args ) ->
|
|
args = args ? {}
|
|
log args
|
|
db args
|
|
mm args
|
|
mm.addDBLink db
|
|
users = JSON.parse fs.readFileSync path.resolve __dirname, '..', 'config', 'users.json'
|
|
db.storeUser user for user in users
|
|
module.exports
|
|
|
|
|
|
exports.addShutdownHandler = ( fShutdown ) ->
|
|
objAdminCmds.shutdown = fShutdown
|
|
|
|
|
|
exports.handleRequest = ( req, resp ) ->
|
|
req.on 'end', -> resp.end()
|
|
if req.session and req.session.user
|
|
resp.send 'You\'re logged in'
|
|
else
|
|
resp.sendfile path.resolve __dirname, '..', 'webpages', 'handlers', 'login.html'
|
|
req.session.lastPage = req.originalUrl
|
|
|
|
|
|
exports.handleLogin = ( req, resp ) ->
|
|
body = ''
|
|
req.on 'data', ( data ) -> body += data
|
|
req.on 'end', ->
|
|
if not req.session or not req.session.user
|
|
obj = qs.parse body
|
|
db.loginUser obj.username, obj.password, ( err, obj ) ->
|
|
if not err
|
|
req.session.user = obj
|
|
if req.session.user
|
|
resp.write 'Welcome ' + req.session.user.name + '!'
|
|
else
|
|
resp.writeHead 401, { "Content-Type": "text/plain" }
|
|
resp.write 'Login failed!'
|
|
resp.end()
|
|
else
|
|
resp.write 'Welcome ' + req.session.user.name + '!'
|
|
resp.end()
|
|
|
|
|
|
answerHandler = ( resp ) ->
|
|
hasBeenAnswered = false
|
|
postAnswer( msg ) ->
|
|
if not hasBeenAnswered
|
|
resp.write msg
|
|
resp.end()
|
|
hasBeenAnswered = true
|
|
{
|
|
answerSuccess: ( msg ) ->
|
|
if not hasBeenAnswered
|
|
postAnswer msg,
|
|
answerError: ( msg ) ->
|
|
if not hasBeenAnswered
|
|
resp.writeHead 400, { "Content-Type": "text/plain" }
|
|
postAnswer msg,
|
|
isAnswered: -> hasBeenAnswered
|
|
}
|
|
|
|
# TODO add loadUsers as directive to admin commands
|
|
# exports.loadUsers = ->
|
|
# var users = JSON.parse(fs.readFileSync(path.resolve(__dirname, '..', 'users.json')));
|
|
# for(var name in users) {
|
|
# db.storeUser(users[name]);
|
|
# }
|
|
# };
|
|
|
|
onAdminCommand = ( req, response ) ->
|
|
q = req.query;
|
|
log.print 'HL', 'Received admin request: ' + req.originalUrl
|
|
if q.cmd
|
|
fAdminCommands q, answerHandler response
|
|
#answerSuccess(response, 'Thank you, we try our best!');
|
|
else answerError response, 'I\'m not sure about what you want from me...'
|
|
|
|
|
|
###
|
|
admin commands handler receives all command arguments and an answerHandler
|
|
object that eases response handling to the HTTP request issuer.
|
|
|
|
@private fAdminCommands( *args, answHandler* )
|
|
###
|
|
fAdminCommands = ( args, answHandler ) ->
|
|
if args and args.cmd
|
|
adminCmds[args.cmd]? args, answHandler
|
|
else
|
|
log.print 'RS', 'No command in request'
|
|
|
|
###
|
|
The fAnsw function receives an answerHandler object as an argument when called
|
|
and returns an anonymous function
|
|
###
|
|
fAnsw = ( ah ) ->
|
|
###
|
|
The anonymous function checks whether the answerHandler was already used to
|
|
issue an answer, if no answer was provided we answer with an error message
|
|
###
|
|
() ->
|
|
if not ah.isAnswered()
|
|
ah.answerError 'Not handled...'
|
|
|
|
###
|
|
Delayed function call of the anonymous function that checks the answer handler
|
|
###
|
|
setTimeout fAnsw(answHandler), 2000
|