-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathxyz.iron.man.bootstrap.js
73 lines (60 loc) · 2.29 KB
/
xyz.iron.man.bootstrap.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
const Iron = require('iron')
function _ironAuthentication (xyz, config) {
config = config || {}
let clientRoute = config.clientRoute || 'CALL'
let clientIndex = config.clientIndex || 0
let serverIndex = config.serverIndex || 0
let serverRoute = config.serverRoute || 'CALL'
let serverPort = config.serverPort || xyz.id().port
const PASSWD = config.PASSWD || 'IRON_MAN_IRON_MAN_IRON_MAN_IRON_MAN_IRON_MAN_IRON_MAN_IRON_MAN_IRON_MAN_IRON_MAN_IRON_MAN_'
let ironConfig = config.ironConfig || Iron.defaults
let logger = xyz.logger
function _ironSealMsg (xSentMessageMwParam, next, end, xyz) {
let reqConfig = xSentMessageMwParam.requestConfig
let responseCb = xSentMessageMwParam.responseCallback
logger.debug(`IRON :: sealing ${JSON.stringify(reqConfig.json)}`)
Iron.seal(reqConfig.json.userPayload, PASSWD, ironConfig, (err, sealed) => {
if (err) {
logger.error(`IRON :: error while encrypting message ${err}`)
responseCb.writeHead(500)
responseCb.end(`IRON :: error while encrypting message ${err}`)
end()
} else {
reqConfig.json.userPayload = sealed
next()
}
})
}
function _ironUnSealMsg (xMessage, next, end, xyz) {
let body = xMessage.message.userPayload
let resp = xMessage.response
function fail (err) {
logger.error(`IRON :: error while decryping message :: ${err}`)
if (resp) {
resp.writeHead(401)
resp.end(JSON.stringify({error: `IRON :: error while decryping message ${err}`}))
}
end()
}
if (typeof (body) !== 'string') {
fail('message type incorrect')
return
}
Iron.unseal(body, PASSWD, ironConfig, (err, unsealed) => {
if (err) {
fail(err)
return
} else {
logger.silly(`IRON :: message has been unsealed to ${unsealed}`)
xMessage.message.userPayload = unsealed
next()
}
})
}
// client
xyz.middlewares().transport.client(clientRoute).register(clientIndex, _ironSealMsg)
// server
xyz.middlewares().transport.server(serverRoute)(serverPort).register(serverIndex, _ironUnSealMsg)
logger.info(`IRON :: Iron message encryption created for server [ @ ${serverPort} route ${serverRoute}] and client [route ${clientRoute}] `)
}
module.exports = _ironAuthentication