summaryrefslogtreecommitdiffstatshomepage
path: root/scripts/minimaws
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2019-10-02 02:11:58 +1000
committer Vas Crabb <vas@vastheman.com>2019-10-02 02:11:58 +1000
commit9a6e04b01f830d8491e1c98eabf19015f817c852 (patch)
tree5b5fcba7e8f612a9a4ebea1a17e778cb7b6e72cc /scripts/minimaws
parentf7afeebdafa16eedcc2c0bd8c2819a9950212078 (diff)
(nw) misc cleanup:
* subhuntr.cpp: S2636 PVI was seemingly uncommented by mistake in 93308b483ee73cecc46a6b44fccc126edf3c512a - offsets and sound routing seem to be copy/pasted from somewhere * phi: prettier config * scramble.cpp, wallc.cpp: avoid some calls to subdevice<...>(...) * makedep.py: open source files as UTF-8 (GitHub #5482) * minimaws: be less trusting
Diffstat (limited to 'scripts/minimaws')
-rw-r--r--scripts/minimaws/lib/assets/machine.js8
-rw-r--r--scripts/minimaws/lib/assets/romident.js2
-rw-r--r--scripts/minimaws/lib/wsgiserve.py29
-rwxr-xr-xscripts/minimaws/minimaws.py28
-rw-r--r--scripts/minimaws/minimaws.wsgi15
5 files changed, 44 insertions, 38 deletions
diff --git a/scripts/minimaws/lib/assets/machine.js b/scripts/minimaws/lib/assets/machine.js
index d0774d02c0a..d40dca12be0 100644
--- a/scripts/minimaws/lib/assets/machine.js
+++ b/scripts/minimaws/lib/assets/machine.js
@@ -136,7 +136,7 @@ var fetch_bios_sets = (function ()
{
pending[device] = true;
var req = new XMLHttpRequest();
- req.open('GET', appurl + 'rpc/bios/' + device, true);
+ req.open('GET', appurl + 'rpc/bios/' + encodeURIComponent(device), true);
req.responseType = 'json';
req.onload =
function ()
@@ -171,7 +171,7 @@ var fetch_machine_flags = (function ()
{
pending[device] = true;
var req = new XMLHttpRequest();
- req.open('GET', appurl + 'rpc/flags/' + device, true);
+ req.open('GET', appurl + 'rpc/flags/' + encodeURIComponent(device), true);
req.responseType = 'json';
req.onload =
function ()
@@ -413,7 +413,7 @@ function make_slot_change_handler(name, slot, defaults, dfltbtn)
row.appendChild(document.createElement('th')).textContent = 'Short name:';
var link = row.appendChild(document.createElement('td')).appendChild(document.createElement('a'));
link.textContent = selection.device;
- link.setAttribute('href', appurl + 'machine/' + selection.device);
+ link.setAttribute('href', appurl + 'machine/' + encodeURIComponent(selection.device));
// if we have emulation flags, populate now, otherwise fetch asynchronously
if (!Object.prototype.hasOwnProperty.call(machine_flags, selection.device))
@@ -487,7 +487,7 @@ function fetch_slots(machine)
function make_request(device)
{
var req = new XMLHttpRequest();
- req.open('GET', appurl + 'rpc/slots/' + device, true);
+ req.open('GET', appurl + 'rpc/slots/' + encodeURIComponent(device), true);
req.responseType = 'json';
req.onload =
function ()
diff --git a/scripts/minimaws/lib/assets/romident.js b/scripts/minimaws/lib/assets/romident.js
index 6db7a7f221a..cbe1af89fdf 100644
--- a/scripts/minimaws/lib/assets/romident.js
+++ b/scripts/minimaws/lib/assets/romident.js
@@ -145,7 +145,7 @@ function get_machine_table(shortname, description)
var heading = div.appendChild(document.createElement('h2'));
var link = heading.appendChild(document.createElement('a'));
link.textContent = description;
- link.setAttribute('href', appurl + 'machine/' + shortname);
+ link.setAttribute('href', appurl + 'machine/' + encodeURIComponent(shortname));
var table = div.appendChild(document.createElement('table'));
machine_info[shortname] = table;
add_matches(table, matched_names, null);
diff --git a/scripts/minimaws/lib/wsgiserve.py b/scripts/minimaws/lib/wsgiserve.py
index ae5e8f69dd7..da9cbed0f36 100644
--- a/scripts/minimaws/lib/wsgiserve.py
+++ b/scripts/minimaws/lib/wsgiserve.py
@@ -13,13 +13,15 @@ import mimetypes
import os.path
import re
import sys
-import wsgiref.simple_server
+import urllib
import wsgiref.util
if sys.version_info >= (3, ):
import urllib.parse as urlparse
+ urlquote = urlparse.quote
else:
import urlparse
+ urlquote = urllib.quote
class HandlerBase(object):
@@ -96,10 +98,10 @@ class QueryPageHandler(HandlerBase):
self.dbcurs = app.dbconn.cursor()
def machine_href(self, shortname):
- return cgi.escape(urlparse.urljoin(self.application_uri, 'machine/%s' % (shortname, )), True)
+ return cgi.escape(urlparse.urljoin(self.application_uri, 'machine/%s' % (urlquote(shortname), )), True)
def sourcefile_href(self, sourcefile):
- return cgi.escape(urlparse.urljoin(self.application_uri, 'sourcefile/%s' % (sourcefile, )), True)
+ return cgi.escape(urlparse.urljoin(self.application_uri, 'sourcefile/%s' % (urlquote(sourcefile), )), True)
class MachineRpcHandlerBase(QueryPageHandler):
@@ -174,21 +176,21 @@ class MachineHandler(QueryPageHandler):
if parent:
yield (
' <tr><th>Parent Machine:</th><td><a href="%s">%s (%s)</a></td></tr>\n' %
- (cgi.escape('%smachine/%s' % (self.application_uri, machine_info['cloneof']), True), cgi.escape(parent[1]), cgi.escape(machine_info['cloneof']))).encode('utf-8')
+ (self.machine_href(machine_info['cloneof']), cgi.escape(parent[1]), cgi.escape(machine_info['cloneof']))).encode('utf-8')
else:
yield (
' <tr><th>Parent Machine:</th><td><a href="%s">%s</a></td></tr>\n' %
- (cgi.escape('%smachine/%s' % (self.application_uri, machine_info['cloneof']), True), cgi.escape(machine_info['cloneof']))).encode('utf-8')
+ (self.machine_href(machine_info['cloneof']), cgi.escape(machine_info['cloneof']))).encode('utf-8')
if (machine_info['romof'] is not None) and (machine_info['romof'] != machine_info['cloneof']):
parent = self.dbcurs.listfull(machine_info['romof']).fetchone()
if parent:
yield (
' <tr><th>Parent ROM set:</th><td><a href="%s">%s (%s)</a></td></tr>\n' %
- (cgi.escape('%smachine/%s' % (self.application_uri, machine_info['romof']), True), cgi.escape(parent[1]), cgi.escape(machine_info['romof']))).encode('utf-8')
+ (self.machine_href(machine_info['romof']), cgi.escape(parent[1]), cgi.escape(machine_info['romof']))).encode('utf-8')
else:
yield (
' <tr><th>Parent Machine:</th><td><a href="%s">%s</a></td></tr>\n' %
- (cgi.escape('%smachine/%s' % (self.application_uri, machine_info['romof']), True), cgi.escape(machine_info['romof']))).encode('utf-8')
+ (self.machine_href(machine_info['romof']), cgi.escape(machine_info['romof']))).encode('utf-8')
unemulated = []
imperfect = []
for feature, status, overall in self.dbcurs.get_feature_flags(id):
@@ -404,10 +406,10 @@ class SourceFileHandler(QueryPageHandler):
uri = urlparse.urljoin(self.application_uri, 'sourcefile')
title = ''
for part in parts:
- uri = urlparse.urljoin(uri + '/', part)
+ uri = urlparse.urljoin(uri + '/', urlquote(part))
title += '<a href="{0}">{1}</a>/'.format(cgi.escape(uri, True), cgi.escape(part))
if linkfinal:
- uri = urlparse.urljoin(uri + '/', final)
+ uri = urlparse.urljoin(uri + '/', urlquote(final))
return title + '<a href="{0}">{1}</a>'.format(cgi.escape(uri, True), cgi.escape(final))
else:
return title + final
@@ -615,12 +617,3 @@ class MiniMawsApp(object):
def js_escape(self, str):
return self.JS_ESCAPE.sub('\\\\\\1', str).replace('\0', '\\0')
-
-
-def run_server(options):
- application = MiniMawsApp(options.database)
- server = wsgiref.simple_server.make_server(options.host, options.port, application)
- try:
- server.serve_forever()
- except KeyboardInterrupt:
- pass
diff --git a/scripts/minimaws/minimaws.py b/scripts/minimaws/minimaws.py
index e690fcd818f..5b657af5524 100755
--- a/scripts/minimaws/minimaws.py
+++ b/scripts/minimaws/minimaws.py
@@ -78,19 +78,9 @@
## and see dependent slots update. Required command-line arguments to
## produce the selected configuration are also displayed.
-import argparse
-import os
-import os.path
-import sys
-
-sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
-
-import lib.auxverbs
-import lib.lxparse
-import lib.wsgiserve
-
-
if __name__ == '__main__':
+ import argparse
+
parser = argparse.ArgumentParser()
parser.add_argument('--database', metavar='<dbfile>', default='minimaws.sqlite3', help='SQLite 3 info database file (defaults to minimaws.sqlite3)')
subparsers = parser.add_subparsers(title='commands', dest='command', metavar='<command>')
@@ -123,6 +113,8 @@ if __name__ == '__main__':
group.add_argument('--file', metavar='<xmlfile>', help='XML machine information file')
options = parser.parse_args()
+
+ import lib.auxverbs
if options.command == 'listfull':
lib.auxverbs.do_listfull(options)
elif options.command == 'listsource':
@@ -136,8 +128,14 @@ if __name__ == '__main__':
elif options.command == 'romident':
lib.auxverbs.do_romident(options)
elif options.command == 'serve':
- lib.wsgiserve.run_server(options)
+ import wsgiref.simple_server
+ import lib.wsgiserve
+ application = lib.wsgiserve.MiniMawsApp(options.database)
+ server = wsgiref.simple_server.make_server(options.host, options.port, application)
+ try:
+ server.serve_forever()
+ except KeyboardInterrupt:
+ pass
elif options.command == 'load':
+ import lib.lxparse
lib.lxparse.load_info(options)
-else:
- application = lib.wsgiserve.MiniMawsApp(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'minimaws.sqlite3'))
diff --git a/scripts/minimaws/minimaws.wsgi b/scripts/minimaws/minimaws.wsgi
new file mode 100644
index 00000000000..ff6d045419f
--- /dev/null
+++ b/scripts/minimaws/minimaws.wsgi
@@ -0,0 +1,15 @@
+#!/usr/bin/python
+##
+## license:BSD-3-Clause
+## copyright-holders:Vas Crabb
+##
+## Simple script for deploying minimaws with mod_wsgi.
+
+import os.path
+import sys
+
+sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
+
+import lib.wsgiserve
+
+application = lib.wsgiserve.MiniMawsApp(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'minimaws.sqlite3'))