resource.py (5227B)
1 import os 2 import re 3 4 from wptserve.utils import isomorphic_decode, isomorphic_encode 5 6 def main(request, response): 7 type = request.GET[b'type'] 8 encoding = request.GET[b'encoding'] 9 # We want the raw input for 'q' 10 q = re.search(r'q=([^&]+)', request.url_parts.query).groups()[0] 11 if type == b'html': 12 return [(b"Content-Type", b"text/html; charset=utf-8")], isomorphic_encode(q) 13 elif type == b'css': 14 return [(b"Content-Type", b"text/css; charset=utf-8")], b"#test::before { content:'%s' }" % isomorphic_encode(q) 15 elif type == b'js': 16 return [(b"Content-Type", b"text/javascript; charset=utf-8")], b"%s = '%s';" % (request.GET[b'var'], isomorphic_encode(q)) 17 elif type == b'worker': 18 return [(b"Content-Type", b"text/javascript")], b"postMessage('%s'); close();" % isomorphic_encode(q) 19 elif type == b'sharedworker': 20 return [(b"Content-Type", b"text/javascript")], b"onconnect = function(e) { e.source.postMessage('%s'); close(); };" % isomorphic_encode(q) 21 elif type == b'worker_importScripts': 22 return ([(b"Content-Type", b"text/javascript; charset=%s" % encoding)], # charset should be ignored for workers 23 b"""try { 24 var x = 'importScripts failed to run'; 25 importScripts('?q=\\u00E5&type=js&var=x&encoding=%s'); 26 postMessage(x); 27 close(); 28 } catch(ex) { 29 postMessage(String(ex)); 30 }""" % encoding) 31 elif type == b'worker_worker': 32 return ([(b"Content-Type", b"text/javascript; charset=%s" % encoding)], # charset should be ignored for workers 33 b"""try { 34 var worker = new Worker('?q=\\u00E5&type=worker&encoding=%s'); 35 worker.onmessage = function(e) { 36 postMessage(e.data); 37 close(); 38 }; 39 } catch(ex) { 40 postMessage(String(ex)); 41 }""" % encoding) 42 elif type == b'sharedworker_importScripts': 43 return ([(b"Content-Type", b"text/javascript; charset=%s" % encoding)], # charset should be ignored for workers 44 b"""var x = 'importScripts failed to run'; 45 onconnect = function(e) { 46 var connect_port = e.source; 47 try { 48 importScripts('?q=\\u00E5&type=js&var=x&encoding=%s'); 49 connect_port.postMessage(x); 50 close(); 51 } catch(ex) { 52 connect_port.postMessage(String(ex)); 53 } 54 };""" % encoding) 55 elif type == b'sharedworker_worker': 56 return ([(b"Content-Type", b"text/javascript; charset=%s" % encoding)], # charset should be ignored for workers 57 b"""onconnect = function(e) { 58 var connect_port = e.source; 59 try { 60 var worker = new Worker('?q=\\u00E5&type=worker&encoding=%s'); 61 worker.onmessage = function(e) { 62 connect_port.postMessage(e.data); 63 close(); 64 }; 65 } catch(ex) { 66 connect_port.postMessage(String(ex)); 67 } 68 };""" % encoding) 69 elif type == b'eventstream': 70 return [(b"Content-Type", b"text/event-stream")], b"data: %s\n\n" % isomorphic_encode(q) 71 elif type == b'svg': 72 return [(b"Content-Type", b"image/svg+xml")], b"<svg xmlns='http://www.w3.org/2000/svg'>%s</svg>" % isomorphic_encode(q) 73 elif type == b'xmlstylesheet_css': 74 return ([(b"Content-Type", b"application/xhtml+xml; charset=%s" % encoding)], 75 (u"""<?xml-stylesheet href="?q=å&type=css&encoding=%s"?><html xmlns="http://www.w3.org/1999/xhtml"/>""" % isomorphic_decode(encoding)) 76 .encode(isomorphic_decode(encoding))) 77 elif type == b'png': 78 if q == u'%E5' or q == u'%26%23229%3B': 79 image = u'green-1x1.png' 80 elif q == u'%C3%A5': 81 image = u'green-2x2.png' 82 elif q == u'%3F': 83 image = u'green-16x16.png' 84 else: 85 image = u'green-256x256.png' 86 rv = open(os.path.join(request.doc_root, u"images", image), "rb").read() 87 return [(b"Content-Type", b"image/png")], rv 88 elif type == b'video': 89 ext = request.GET[b'ext'] 90 if q == u'%E5' or q == u'%26%23229%3B': 91 video = u'A4' # duration: 3 92 elif q == u'%C3%A5': 93 video = u'movie_5' # duration: 5 94 elif q == u'%3F': 95 video = u'green-at-15' # duration: 30 96 else: 97 video = u'movie_300' # duration: 300 98 rv = open(os.path.join(request.doc_root, u"media", u"%s.%s" % (video, isomorphic_decode(ext))), "rb").read() 99 if ext == b'ogv': 100 ext = b'ogg' 101 return [(b"Content-Type", b"video/%s" % ext)], rv 102 elif type == b'webvtt': 103 return [(b"Content-Type", b"text/vtt")], b"WEBVTT\n\n00:00:00.000 --> 00:00:01.000\n%s" % isomorphic_encode(q)