Mercurial > hg > webaudioevaluationtool
changeset 2578:bf17cc19c1c0
Merge branch 'master' into Dev_main
author | Nicholas Jillings <nicholas.jillings@mail.bcu.ac.uk> |
---|---|
date | Mon, 24 Oct 2016 11:23:02 +0100 |
parents | 522f58e7773e (current diff) 22673a6cfcfb (diff) |
children | d83b38564fbb 278e6e54703b |
files | js/core.js php/keygen.php |
diffstat | 4 files changed, 98 insertions(+), 76 deletions(-) [+] |
line wrap: on
line diff
--- a/js/core.js Tue Oct 18 17:51:53 2016 +0100 +++ b/js/core.js Mon Oct 24 11:23:02 2016 +0100 @@ -3127,7 +3127,7 @@ this.initialise = function (existingStore) { if (existingStore == undefined) { // We need to get the sessionKey - this.SessionKey.generateKey(); + this.SessionKey.requestKey(); this.document = document.implementation.createDocument(null, "waetresult", null); this.root = this.document.childNodes[0]; var projectDocument = specification.projectXML; @@ -3156,9 +3156,8 @@ handleEvent: function () { var parse = new DOMParser(); var xml = parse.parseFromString(this.request.response, "text/xml"); - var shouldGenerateKey = true; if (this.request.response.length == 0) { - console.log("Error: Server did not respond"); + console.error("An unspecified error occured, no server key could be generated"); return; } if (xml.getElementsByTagName("state").length > 0) { @@ -3166,22 +3165,26 @@ this.key = xml.getAllElementsByTagName("key")[0].textContent; this.parent.root.setAttribute("key", this.key); this.parent.root.setAttribute("state", "empty"); - shouldGenerateKey = false; + this.update(); + return; + } else if (xml.getElementsByTagName("state")[0].textContent == "ERROR") { + this.key = null; + console.error("Could not generate server key. Server responded with error message: \"" + xml.getElementsByTagName("message")[0].textContent + "\""); + return; } } - if (shouldGenerateKey === true) { - this.generateKey(); - } + this.key = null; + console.error("An unspecified error occured, no server key could be generated"); }, - generateKey: function () { - var temp_key = randomString(32); + requestKey: function () { + // For new servers, request a new key from the server var returnURL = ""; if (typeof specification.projectReturn == "string") { if (specification.projectReturn.substr(0, 4) == "http") { returnURL = specification.projectReturn; } } - this.request.open("GET", returnURL + "php/keygen.php?key=" + temp_key, true); + this.request.open("GET", returnURL + "php/requestKey.php", true); this.request.addEventListener("load", this); this.request.send(); },
--- a/php/keygen.php Tue Oct 18 17:51:53 2016 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -<?php -header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); -header("Cache-Control: post-check=0, pre-check=0", false); -header("Pragma: no-cache"); -// This checks the key sent by the JavaScript against the current bunch of saves -// XML Saves location - assumes it will be saves/ -$saves = glob("../saves/*.xml"); - -$key_requested = $_GET['key']; - -$xml_good = "<response><state>OK</state><key>".$key_requested."</key></response>"; -$xml_bad = "<response><state>NO</state><key>".$key_requested."</key></response>"; -$xml_error = "<response><state>ERROR</state><key>".$key_requested."</key></response>"; -if (is_array($saves)) -{ - foreach($saves as $filename) { - $xml_string = file_get_contents($filename, FILE_TEXT); - $xml_object = simplexml_load_string($xml_string); - if ($xml_object != false) { - if (isset($value['key'])) - { - if ($value['key'] == $key_requested) { - echo $xml_bad; - return; - } - } - } - } - echo $xml_good; - // TODO: - // Generate the XML Base file and save it - $doc_struct = new SimpleXMLElement('<waetresult/>'); - $doc_struct->addAttribute("key",$key_requested); - // Add start time - // Add IP Address information - // Save the file - $doc_struct->asXML("saves/save-".$key_requested.".xml"); - return; -} else { - echo $xml_error; - return; -} -?> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/php/requestKey.php Mon Oct 24 11:23:02 2016 +0100 @@ -0,0 +1,61 @@ +<?php + +function generateRandomString($length = 32) { + // from http://stackoverflow.com/questions/4356289/php-random-string-generator + $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + $charactersLength = strlen($characters); + $randomString = ''; + for ($i = 0; $i < $length; $i++) { + $randomString .= $characters[rand(0, $charactersLength - 1)]; + } + return $randomString; +} + +// Request a new session key from the server +header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); +header("Cache-Control: post-check=0, pre-check=0", false); +header("Pragma: no-cache"); + +$saves = glob("../saves/*.xml"); + +$key = ""; + +while ($key == "") { + $tempKey = generateRandomString(32); + $unique = true; + foreach($saves as $filename) + { + $xml_string = file_get_contents($filename, FILE_TEXT); + $xml_object = simplexml_load_string($xml_string); + if ($xml_object != false) { + if (isset($value['key'])) + { + if ($value['key'] == $key_requested) { + $unique = false; + } + } + } + } + if ($unique) { + $key = $tempKey; + } +} + +$filename = "../saves/save-".$key.".xml"; +$fileHandle = fopen($filename, 'w'); +if ($fileHandle == FALSE) { + echo "<response><state>ERROR</state><key>".$key."</key><message>Could not open file for writing</message></response>"; + return; +} +fclose($fileHandle); +// TODO: +// Generate the XML Base file and save it +$doc_struct = new SimpleXMLElement('<waetresult/>'); +$doc_struct->addAttribute("key",$key); +// Add start time +// Add IP Address information +// Save the file +$doc_struct->asXML($filename); +echo "<response><state>OK</state><key>".$key."</key></response>"; +return; +?>
--- a/python/pythonServer.py Tue Oct 18 17:51:53 2016 +0100 +++ b/python/pythonServer.py Mon Oct 24 11:23:02 2016 +0100 @@ -11,6 +11,8 @@ import operator import xml.etree.ElementTree as ET import copy +import string +import random if sys.version_info[0] == 2: # Version 2.x @@ -109,27 +111,26 @@ s.send_header("Content-Length", len(fileBytes)) s.end_headers() s.wfile.write(fileBytes) - -def keygen(s): - reply = "" - options = s.path.rsplit('?') - options = options[1].rsplit('=') - key = options[1] - print("Registered key "+key) - if os.path.isfile("saves/save-"+key+".xml"): - reply = "<response><state>NO</state><key>"+key+"</key></response>" - else: - reply = "<response><state>OK</state><key>"+key+"</key></response>" - s.send_response(200) - s.send_header("Content-type", "application/xml") - s.end_headers() - if sys.version_info[0] == 2: - s.wfile.write(reply) - elif sys.version_info[0] == 3: - s.wfile.write(bytes(reply, "utf-8")) - file = open("../saves/save-"+key+".xml",'w') - file.write("<waetresult key="+key+"/>") - file.close(); + +def requestKey(s): + reply = "" + key = '' + while key == '': + tempKey = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(32)); + if (os.path.isfile("saves/save-"+tempKey+".xml") == False): + key = tempKey + s.send_response(200) + s.send_header("Content-type", "application/xml"); + s.end_headers() + reply = "<response><state>OK</state><key>"+key+"</key></response>" + if sys.version_info[0] == 2: + s.wfile.write(reply) + elif sys.version_info[0] == 3: + s.wfile.write(bytes(reply, "utf-8")) + file = open("../saves/save-"+key+".xml",'w') + file.write("<waetresult key="+key+"/>") + file.close() + def saveFile(self): global curFileName @@ -226,8 +227,8 @@ if(request.client_address[0] == "127.0.0.1"): if (request.path == "/favicon.ico"): send404(request) - elif (request.path.split('?',1)[0] == "/php/keygen.php"): - keygen(request); + elif (request.path.split('?',1)[0] == "/php/requestKey.php"): + requestKey(request); elif (request.path.split('?',1)[0] == "/php/pool.php"): poolXML(request); else: