421 lines
12 KiB
JavaScript
421 lines
12 KiB
JavaScript
if (browser.windows != undefined) {
|
|
var hello = "hello i2pcontrol";
|
|
|
|
function makeid(length) {
|
|
var result = "";
|
|
var characters =
|
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
var charactersLength = characters.length;
|
|
for (var i = 0; i < length; i++) {
|
|
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
|
}
|
|
return result;
|
|
}
|
|
|
|
function send(
|
|
message,
|
|
control_host = "127.0.0.1",
|
|
control_port = "7657",
|
|
control_path = "jsonrpc"
|
|
) {
|
|
async function postData(url = "", data = {}) {
|
|
// Default options are marked with *
|
|
let requestBody = JSON.stringify(data);
|
|
//console.log("(i2pcontrol) sending request", requestBody);
|
|
let opts = {
|
|
method: "POST", // *GET, POST, PUT, DELETE, etc.
|
|
mode: "cors", // no-cors, *cors, same-origin
|
|
cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached
|
|
credentials: "same-origin", // include, *same-origin, omit
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
},
|
|
redirect: "follow", // manual, *follow, error
|
|
referrerPolicy: "no-referrer", // no-referrer, *client
|
|
body: requestBody, // body data type must match "Content-Type" header
|
|
};
|
|
const response = await fetch(url, opts);
|
|
return await response.json(); // parses JSON response into native JavaScript objects
|
|
}
|
|
|
|
//console.log("http://" + control_host + ":" + control_port + "/" + control_path)
|
|
return postData(
|
|
"http://" + control_host + ":" + control_port + "/" + control_path + "/",
|
|
message
|
|
);
|
|
}
|
|
|
|
async function authenticate(
|
|
password = "itoopie",
|
|
control_host = "127.0.0.1",
|
|
control_port = "7657",
|
|
control_path = "jsonrpc"
|
|
) {
|
|
var json = new Object();
|
|
json["id"] = makeid(6);
|
|
json["jsonrpc"] = "2.0";
|
|
json["method"] = "Authenticate";
|
|
json["params"] = new Object();
|
|
json["params"]["API"] = 1;
|
|
json["params"]["Password"] = password;
|
|
return send(json, control_host, control_port, control_path);
|
|
}
|
|
|
|
async function GetToken(
|
|
password = "itoopie",
|
|
control_host = "127.0.0.1",
|
|
control_port = "7657",
|
|
control_path = "jsonrpc"
|
|
) {
|
|
function gettoken(authtoken) {
|
|
return authtoken.result.Token;
|
|
}
|
|
let me = authenticate(password, control_host, control_port, control_path);
|
|
return await me.then(gettoken);
|
|
}
|
|
|
|
async function Echo(
|
|
message,
|
|
control_host = "127.0.0.1",
|
|
control_port = "7657",
|
|
control_path = "jsonrpc",
|
|
password = "itoopie"
|
|
) {
|
|
function echo(token) {
|
|
console.log("(i2pcontrol) testing I2PControl connection");
|
|
var json = new Object();
|
|
json["id"] = makeid(6);
|
|
json["jsonrpc"] = "2.0";
|
|
json["method"] = "Echo";
|
|
json["params"] = new Object();
|
|
json["params"]["Token"] = token;
|
|
json["params"]["Echo"] = message;
|
|
return send(json, control_host, control_port, control_path);
|
|
}
|
|
let token = GetToken(password, control_host, control_port, control_path);
|
|
let done = await token.then(echo);
|
|
return done;
|
|
}
|
|
|
|
function UpdateEchoElementByID(
|
|
Query,
|
|
ID,
|
|
control_host = "127.0.0.1",
|
|
control_port = "7657",
|
|
control_path = "jsonrpc"
|
|
) {
|
|
function updateelement(update) {
|
|
//console.log("(i2pcontrol)", update);
|
|
if (document.getElementById(ID) !== null)
|
|
document.getElementById(ID).innerText = update;
|
|
}
|
|
let net = Echo(Query, control_host, control_port, control_path, password);
|
|
net.then(updateleement);
|
|
}
|
|
|
|
async function GetRate(
|
|
Query,
|
|
control_host = "127.0.0.1",
|
|
control_port = "7657",
|
|
control_path = "jsonrpc",
|
|
password = "itoopie"
|
|
) {
|
|
function getrate(token) {
|
|
var json = new Object();
|
|
json["id"] = makeid(6);
|
|
json["jsonrpc"] = "2.0";
|
|
json["method"] = "I2PControl";
|
|
json["params"] = new Object();
|
|
json["params"]["Token"] = token;
|
|
json["params"]["Stat"] = Query;
|
|
json["params"]["Period"] = 2000;
|
|
return send(json, control_host, control_port, control_path);
|
|
}
|
|
let token = GetToken(password, control_host, control_port, control_path);
|
|
let done = await token.then(getrate);
|
|
return done;
|
|
}
|
|
|
|
function UpdateGetRateElementByID(
|
|
Query,
|
|
ID,
|
|
control_host = "127.0.0.1",
|
|
control_port = "7657",
|
|
control_path = "jsonrpc"
|
|
) {
|
|
function updateelement(update) {
|
|
//console.log("(i2pcontrol)", update);
|
|
if (document.getElementById(ID) !== null)
|
|
document.getElementById(ID).innerText = update;
|
|
}
|
|
let net = GetRate(
|
|
Query,
|
|
control_host,
|
|
control_port,
|
|
control_path,
|
|
password
|
|
);
|
|
net.then(updateleement);
|
|
}
|
|
|
|
async function I2PControl(
|
|
Query,
|
|
control_host = "127.0.0.1",
|
|
control_port = "7657",
|
|
control_path = "jsonrpc",
|
|
password = "itoopie"
|
|
) {
|
|
function i2pcontrol(token) {
|
|
var json = new Object();
|
|
json["id"] = makeid(6);
|
|
json["jsonrpc"] = "2.0";
|
|
json["method"] = "I2PControl";
|
|
json["params"] = new Object();
|
|
json["params"]["Token"] = token;
|
|
json["params"][Query] = null;
|
|
return send(json, control_host, control_port, control_path);
|
|
}
|
|
let token = GetToken(password, control_host, control_port, control_path);
|
|
let done = await token.then(i2pcontrol);
|
|
return done;
|
|
}
|
|
|
|
function UpdateI2PControlElementByID(
|
|
Query,
|
|
ID,
|
|
control_host = "127.0.0.1",
|
|
control_port = "7657",
|
|
control_path = "jsonrpc"
|
|
) {
|
|
function updateelement(update) {
|
|
//console.log("(i2pcontrol)", update);
|
|
if (document.getElementById(ID) !== null)
|
|
document.getElementById(ID).innerText = update;
|
|
}
|
|
let net = I2PControl(
|
|
Query,
|
|
control_host,
|
|
control_port,
|
|
control_path,
|
|
password
|
|
);
|
|
net.then(updateleement);
|
|
}
|
|
|
|
async function RouterInfo(
|
|
Query,
|
|
control_host = "127.0.0.1",
|
|
control_port = "7657",
|
|
control_path = "jsonrpc",
|
|
password = "itoopie"
|
|
) {
|
|
function routerinfo(token) {
|
|
var json = new Object();
|
|
json["id"] = makeid(6);
|
|
json["jsonrpc"] = "2.0";
|
|
json["method"] = "RouterInfo";
|
|
json["params"] = new Object();
|
|
json["params"]["Token"] = token;
|
|
json["params"][Query] = null;
|
|
return send(json, control_host, control_port, control_path);
|
|
}
|
|
let token = GetToken(password, control_host, control_port, control_path);
|
|
let done = await token.then(routerinfo);
|
|
return done;
|
|
}
|
|
|
|
function UpdateRouterInfoElementByID(
|
|
Query,
|
|
ID,
|
|
control_host = "127.0.0.1",
|
|
control_port = "7657",
|
|
control_path = "jsonrpc",
|
|
password = "itoopie"
|
|
) {
|
|
function updateelement(update) {
|
|
/*console.log(
|
|
"(i2pcontrol) element",
|
|
update.result[Query],
|
|
ID,
|
|
document.getElementById(ID)
|
|
);*/
|
|
if (document.getElementById(ID) !== null)
|
|
document.getElementById(ID).innerText = update.result[Query];
|
|
}
|
|
|
|
let net = RouterInfo(
|
|
Query,
|
|
control_host,
|
|
control_port,
|
|
control_path,
|
|
password
|
|
);
|
|
net.then(updateelement);
|
|
}
|
|
|
|
async function RouterManager(
|
|
Query,
|
|
control_host = "127.0.0.1",
|
|
control_port = "7657",
|
|
control_path = "jsonrpc",
|
|
password = "itoopie"
|
|
) {
|
|
function routermanager(token) {
|
|
var json = new Object();
|
|
json["id"] = makeid(6);
|
|
json["jsonrpc"] = "2.0";
|
|
json["method"] = "RouterManager";
|
|
json["params"] = new Object();
|
|
json["params"]["Token"] = token;
|
|
json["params"][Query] = null;
|
|
return send(json, control_host, control_port, control_path);
|
|
}
|
|
let token = GetToken(password, control_host, control_port, control_path);
|
|
let done = await token.then(routermanager);
|
|
return done;
|
|
}
|
|
|
|
function UpdateRouterManagerElementByID(
|
|
Query,
|
|
ID,
|
|
control_host = "127.0.0.1",
|
|
control_port = "7657",
|
|
control_path = "jsonrpc",
|
|
password = "itoopie"
|
|
) {
|
|
function updateelement(update) {
|
|
//console.log("(i2pcontrol)", update);
|
|
if (document.getElementById(ID) !== null)
|
|
document.getElementById(ID).innerText = update;
|
|
}
|
|
let net = RouterManager(
|
|
Query,
|
|
control_host,
|
|
control_port,
|
|
control_path,
|
|
password
|
|
);
|
|
net.then(updateleement);
|
|
}
|
|
|
|
async function NetworkSetting(
|
|
Query,
|
|
control_host = "127.0.0.1",
|
|
control_port = "7657",
|
|
control_path = "jsonrpc",
|
|
password = "itoopie"
|
|
) {
|
|
function networksetting(token) {
|
|
var json = new Object();
|
|
json["id"] = makeid(6);
|
|
json["jsonrpc"] = "2.0";
|
|
json["method"] = "NetworkSetting";
|
|
json["params"] = new Object();
|
|
json["params"]["Token"] = token;
|
|
json["params"][Query] = null;
|
|
return send(json, control_host, control_port, control_path);
|
|
}
|
|
let token = GetToken(password, control_host, control_port, control_path);
|
|
let done = await token.then(networksetting);
|
|
return done;
|
|
}
|
|
|
|
function UpdateNetworkSettingElementByID(
|
|
Query,
|
|
ID,
|
|
control_host = "127.0.0.1",
|
|
control_port = "7657",
|
|
control_path = "jsonrpc",
|
|
password = "itoopie"
|
|
) {
|
|
function updateelement(update) {
|
|
//console.log("(i2pcontrol)", update);
|
|
document.getElementById(ID).innerText = update;
|
|
}
|
|
let net = NetworkSetting(
|
|
Query,
|
|
control_host,
|
|
control_port,
|
|
control_path,
|
|
password
|
|
);
|
|
net.then(updateleement);
|
|
}
|
|
|
|
function UpdateContents() {
|
|
UpdateRouterInfoElementByID("i2p.router.status", "router-status");
|
|
UpdateRouterInfoElementByID("i2p.router.uptime", "router-uptime");
|
|
UpdateRouterInfoElementByID("i2p.router.version", "router-version");
|
|
UpdateRouterInfoElementByID(
|
|
"i2p.router.net.bw.inbound.1s",
|
|
"router-net-bw-inbound-1s"
|
|
);
|
|
UpdateRouterInfoElementByID(
|
|
"i2p.router.net.bw.inbound.15s",
|
|
"router-net-bw-inbound-15s"
|
|
);
|
|
UpdateRouterInfoElementByID(
|
|
"i2p.router.net.bw.outbound.1s",
|
|
"router-net-bw-outbound-1s"
|
|
);
|
|
UpdateRouterInfoElementByID(
|
|
"i2p.router.net.bw.outbound.15s",
|
|
"router-net-bw-outbound-15s"
|
|
);
|
|
UpdateRouterInfoElementByID("i2p.router.net.status", "router-net-status");
|
|
UpdateRouterInfoElementByID(
|
|
"i2p.router.net.tunnels.participating",
|
|
"router-net-tunnels-participating"
|
|
);
|
|
UpdateRouterInfoElementByID(
|
|
"i2p.router.netdb.activepeers",
|
|
"router-netdb-activepeers"
|
|
);
|
|
UpdateRouterInfoElementByID(
|
|
"i2p.router.netdb.fastpeers",
|
|
"router-netdb-fastpeers"
|
|
);
|
|
UpdateRouterInfoElementByID(
|
|
"i2p.router.netdb.highcapacitypeers",
|
|
"router-netdb-highcapacitypeers"
|
|
);
|
|
UpdateRouterInfoElementByID(
|
|
"i2p.router.netdb.isreseeding",
|
|
"router-netdb-isreseeding"
|
|
);
|
|
UpdateRouterInfoElementByID(
|
|
"i2p.router.netdb.knownpeers",
|
|
"router-netdb-knownpeers"
|
|
);
|
|
}
|
|
|
|
var done = Echo(hello);
|
|
done.then(Done).catch(Done);
|
|
|
|
function Done(output) {
|
|
function hide(elements) {
|
|
elements = elements.length ? elements : [elements];
|
|
for (var index = 0; index < elements.length; index++) {
|
|
elements[index].style.display = "none";
|
|
}
|
|
}
|
|
|
|
function unhide(elements) {
|
|
elements = elements.length ? elements : [elements];
|
|
for (var index = 0; index < elements.length; index++) {
|
|
elements[index].style.display = "inline-block";
|
|
}
|
|
}
|
|
|
|
console.log("(i2pcontrol) I2PControl connection tested,", output);
|
|
if (output == hello) {
|
|
var toopieLinks = document.querySelectorAll(".window-visit-toopie");
|
|
unhide(toopieLinks);
|
|
} else {
|
|
var toopieLinks = document.querySelectorAll(".window-visit-toopie");
|
|
hide(toopieLinks);
|
|
}
|
|
return output;
|
|
}
|
|
}
|