isock
Version:
Web -> Non-Web connectionusing Socket.io
132 lines (131 loc) • 3.97 kB
JavaScript
if (module !== undefined) {
isock = require("./isock.client.js");
simplersa = require("simplersa");
}
isocks = (function (o, cb = (function () { })) {
var d = (function (want, def) {
return want || def;
});
o = d(o, {});
o.server = d(o.server, "localhost");
o.port = d(o.port, 24681);
var conn = isock({
server: o.server,
port: o.port
});
var secure = false;
var server_rsa = false;
var client_rsa = false;
var rsa = false;
var on_data = (function () { });
var on_disconnect = (function () { });
var encrypt = (function (rsa, data) {
if (rsa !== null) {
return rsa.enc(data);
}
return false;
});
var decrypt = (function (rsa, data) {
if (rsa !== null) {
return rsa.dec(data);
}
return false;
});
conn.on_disconnect(function () {
conn.close();
conn.start();
});
conn.on_receive(function (data) {
if (data.secure) {
data.data = JSON.parse(decrypt(rsa, data.data), true)[0];
}
on_data(data.data);
});
conn.on_connect(function () {
conn.on("secure-1", function (data) {
var key = data.key;
var rsa1 = simplersa();
rsa1.set.pub(key);
server_rsa = rsa1;
var rsa2 = simplersa();
rsa2.gen.pri();
client_rsa = rsa2;
key = rsa1.enc(rsa2.get.pub());
conn.emit("secure-2", { key: key });
});
conn.on("secure-2", function (data) {
var key = data.key;
var dkey = decrypt(client_rsa, key);
var rsa1 = simplersa();
rsa1.set.pub(dkey);
server_rsa = rsa1;
var rsa2 = simplersa();
rsa2.gen.pri();
client_rsa = rsa2;
key = rsa1.enc(rsa2.get.pub());
conn.emit("secure-3", { key: key });
});
conn.on("secure-3", function (data) {
var key = data.key;
var dkey = decrypt(client_rsa, key);
var rsa1 = simplersa();
rsa1.set.pub(dkey);
server_rsa = rsa1;
var rsa2 = simplersa();
rsa2.gen.pri();
client_rsa = rsa2;
key = rsa1.enc(rsa2.get.pri());
rsa = rsa2;
conn.emit("secure-done", { key: key });
});
conn.on("secure-done", function (data) {
if (data) {
secure = true;
cb({
send: send,
rsend: rsend,
on_data: (function (IN) {
on_data = IN;
}),
on_disconnect: (function (IN) {
on_disconnect = IN;
}),
close: (function () {
conn.close();
})
});
}
});
conn.on("get-secure", function (data) {
//console.log(data);
//console.log("nice request");
conn.emit("secure-1", true);
});
});
var send = (function (data) {
if (secure) {
data = encrypt(rsa, data);
}
conn.send({
secure: secure,
data: data
});
});
var rsend = (function (data, reply) {
if (secure) {
data = encrypt(rsa, data);
}
conn.rsend({
secure: secure,
data: data
}, function (data) {
if (secure) {
data = JSON.parse(decrypt(rsa, data), true)[0];
}
reply(data);
});
});
conn.start();
});
isocks_client = isocks;
if (module !== undefined) { module.exports = isocks; }