tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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=&#x00E5;&amp;type=css&amp;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)