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 }