otr4
Version:
OTR Messaging Protocol [native libotr4.x.x]
83 lines (66 loc) • 1.84 kB
JavaScript
var net = require("net");
var otr = require("../index.js");
var user = new otr.User({
keys: "./alice.keys",
fingerprints: "./alice.fp",
instags: "./alice.instags"
}),
account = user.account("alice@telechat.org", "telechat"),
contact = account.contact("BOB");
if (!account.fingerprint()) {
console.log("no key found, run keygen.js to generate keys for this example.");
process.exit();
}
if (!account.instag()) account.generateInstag();
var server = net.createServer(function (conn) {
conn.pause(); //allow time to setup all event handlers
var session = contact.openSession({
debug: false
});
session.online = function () {
if (conn && conn.remotePort) {
return true;
}
return false;
};
session.on("disconnect", function () {
console.log("remote side ended secure session.");
session.end(); //return to plain text
});
session.on("new_fingerprint", function (fingerprint) {
console.log("contact's fingerprint:", fingerprint);
});
session.on("write_fingerprints", function () {
console.log("got write_fingerprints event");
});
session.on("gone_secure", function () {
console.log("got gone_secure event");
});
session.on("message", function (message, private) {
console.log("We got a message:", message);
console.log("Message was encrypted?:", private);
session.send(message); //echo back message.
});
session.on("inject_message", function (fragment) {
try {
conn.write(fragment);
} catch (e) {}
});
session.on("plaintext", function () {
conn.end();
});
conn.on("end", function () {
console.log("closing connection");
session.destroy();
});
conn.on("data", function (data) {
session.recv(data);
});
conn.resume(); //start emitting data events
});
server.listen(
8123,
function () {
console.log("listening on port:", server.address().port);
}
);