/
general.js
125 lines (108 loc) · 3.28 KB
/
general.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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
window.onload = function(){
var params = getParameters();
if (params.fingerprint == undefined){
var titleobj = document.getElementById("nickname");
titleobj.textContent = "No fingerprint specified";
}
else {
getRelay(params.fingerprint, updateRelay);
}
}
function updateRelay(relay){
var titleobj = document.getElementById("nickname");
titleobj.textContent = relay['nickname'];
var countryobj = document.getElementById("country");
countryobj.textContent = relay['country_name'];
var runningobj = document.getElementById("running");
runningobj.textContent = relay['running'];
var bandwidthobj = document.getElementById("bandwidth");
bandwidthobj.textContent = Math.floor((relay['advertised_bandwidth'])/1000)+"kB";
var contactobj = document.getElementById("contact");
contactobj.textContent = relay['contact'];
var detailslinkobj = document.getElementById("detailslink");
detailslinkobj.href = "https://atlas.torproject.org/#details/"+relay.fingerprint
// Flags
var flags = relay.flags;
flagstext = ""
for (var i=0; i<flags.length; i++){
flagstext += flags[i] + ", ";
}
flagstext = flagstext.slice(0,-2);
var flagsobj = document.getElementById("flags");
flagsobj.textContent = flagstext;
// Get age
var datestr = relay['first_seen'].split(' ')[0];
var timestr = relay['first_seen'].split(' ')[1];
var created = new Date(datestr+"T"+timestr);
var current = new Date();
var age = getTimeDiff(created, current);
// Set age
var ageobj = document.getElementById("age");
ageobj.textContent = age;
// Get relay uptime
var datestr = relay['last_restarted'].split(' ')[0];
var timestr = relay['last_restarted'].split(' ')[1];
var restarted = new Date(datestr+"T"+timestr);
var current = new Date();
var uptime = getTimeDiff(restarted, current);
// Set uptime
var uptimeobj = document.getElementById("uptime");
uptimeobj.textContent = uptime;
}
function getRelay(fingerprint, callback){
url = getApiUrl()+"details?fingerprint="+fingerprint;
response = httpGet(url, function(res){
if (res.readyState == 4){
if (res.status != 200){
console.error("Http request error: " + res.status);
}
var relay = JSON.parse(res.response)['relays'][0];
callback(relay);
}
});
}
function getApiUrl(){
proto = document.location.protocol;
if (proto == "file:")
proto = "http:";
url = proto + "//onionoo.torproject.org/";
console.log(url);
return url;
}
/*
* Utility functions
*/
function getParameters()
{
var prmstr = window.location.search.substr(1);
return prmstr != null && prmstr != "" ? transformToAssocArray(prmstr) : {};
}
function transformToAssocArray( prmstr )
{
var params = {};
var prmarr = prmstr.split("&");
for ( var i = 0; i < prmarr.length; i++)
{
var tmparr = prmarr[i].split("=");
params[tmparr[0]] = tmparr[1];
}
return params;
}
function getTimeDiff(startdate, enddate){
var miliseconds = enddate.getTime() - startdate.getTime();
var seconds = miliseconds / 1000;
var minutes = seconds/60;
var hours = minutes / 60;
var days = hours / 24;
return Math.floor(days)+"d "+Math.floor(hours%24)+"h";
}
/*
* Custom AJAX request function
*/
function httpGet(url, callback)
{
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", url, true); // False for synchronous reqeust
xmlHttp.onreadystatechange = function(){callback(xmlHttp);};
xmlHttp.send();
}