1 module handlers;
2 
3 import vibe.vibe;
4 import libyggdrasil;
5 import std.net.curl;
6 import std.json;
7 import std.stdio;
8 import std.socket;
9 
10 void home(HTTPServerRequest request, HTTPServerResponse response)
11 {
12 	/* Render the template */
13 	response.render!("index.dt");
14 }
15 
16 
17 private string[] getKeys()
18 {
19 	string url = "http://[21e:e795:8e82:a9e2:ff48:952d:55f2:f0bb]/static/current";
20 	string[] keys;
21 	
22 	import std.net.curl;
23 	string k = cast(string)get(url);
24 
25 	//writeln(k);
26 
27 	JSONValue json = parseJSON(k);
28 	json = json["yggnodes"];
29 
30 	keys = json.object().keys;
31 //	writeln(keys);
32 
33 	return keys;
34 }
35 
36 void peerlist(HTTPServerRequest request, HTTPServerResponse response)
37 {
38 	/* Fetch the peers list from Arceliar's node */
39 	string[] peers = getKeys();
40 	
41 	/* Render the template */
42 	response.render!("peerlist.dt", peers);
43 }
44 
45 void peerinfo(HTTPServerRequest request, HTTPServerResponse response)
46 {
47 	/* Fetch the key */
48 	/* TODO: Validate the key */
49 	string key = request.query["key"];
50 
51 	Address testNode = parseAddress("201:6c56:f9d5:b7a5:8f42:b1ab:9e0e:5169", 9090);
52 	YggdrasilPeer yggPeer = new YggdrasilPeer(testNode);
53 
54 	/* Fetch the node */
55 	YggdrasilNode yggNode = yggPeer.fetchNode(key);
56 
57 	/* Fetch the NodeInfo */
58 	NodeInfo nodeInfo = yggNode.getNodeInfo();
59 	
60 	/* TODO: Fix up yggdraisl library for this */
61 	string ip = nodeInfo.getAddress();
62 	string name = nodeInfo.getName();
63 	string group = nodeInfo.getGroupName();
64 	string country = nodeInfo.getCountry();
65 	string operator = nodeInfo.getOperatorBlock().toPrettyString();
66 
67 	string nodeInfoJSON = nodeInfo.getFullJSON().toPrettyString();
68 	
69 	writeln(request);
70 	//response.writeBody(to!(string)(request));
71 	
72 	
73 	/* Render the template */
74 	response.render!("peerinfo.dt", key, ip, name, group, operator, country, nodeInfoJSON);
75 }