@tradle/otr
Version:
Off-the-Record Messaging Protocol
87 lines (76 loc) • 2.05 kB
JavaScript
var OTR = require('./').OTR
var CONST = require('./lib/const')
var keys = require('./test/spec/unit/data/keys.js')
var Parse = require('./lib/parse')
var USER_ID = 0
var users = {
userA: null,
userB: null
}
function getOther(user) {
return user === 'userA' ? 'userB' : 'userA'
}
users.userA = makeUser('userA')
users.userB = makeUser('userB')
var CONST = require('./lib/const')
users.userA.sendQueryMsg()
users.userA.on('status', function (status) {
if (status === CONST.STATUS_AKE_SUCCESS) {
users.userA.died = true
users.userA = makeUser('userA')
users.userA.sendMsg('back')
// users.userA.their_instance_tag = OTR.makeInstanceTag()
// users.userA.sendMsg('hi')
// session ends
}
})
function makeUser(me) {
var other = getOther(me)
var user = new OTR({ priv: keys[me] })
user.REQUIRE_ENCRYPTION = true
var lastMsg
user.USER_ID = USER_ID++
var ignore = []
user.on('ui', function (msg) {
console.log(msg, 'from', other)
if (msg === 'back') {
debugger
}
})
user.on('error', function(err) { if (err) throw err })
user.on('io', function (msg) {
lastMsg = msg
if (user.died) {
debugger
return
}
if (users[other].died) debugger
users[other].receiveMsg(msg)
if (users[other].their_instance_tag !== '\x00\x00\x00\x00') {
var parsed = Parse.parseMsg(users[other], msg);
if (parsed.cls === 'query') {
debugger
users[other].died = true
users[other] = makeUser(other)
users[other].receiveMsg(msg)
}
}
})
user.on('warn', function(err) {
if (/session/.test(err)) {
debugger
// if (this.their_instance_tag !== '\x00\x00\x00\x00') {
// users[me].removeAllListeners()
// users[me] = makeUser(me)
// users[me].receiveMsg(lastMsg)
// }
// user.endOtr(function() {
// user.removeAllListeners()
// user = users[me] = makeUser(me, other)
// user.sendMsg('yo')
// })
}
console.warn(err)
})
return user
}