tor-browser

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

update-worker.py (2257B)


      1 from urllib.parse import unquote
      2 
      3 from wptserve.utils import isomorphic_decode, isomorphic_encode
      4 
      5 def redirect_response(request, response, visited_count):
      6  # |visited_count| is used as a unique id to differentiate responses
      7  # every time.
      8  location = b'empty.js'
      9  if b'Redirect' in request.GET:
     10      location = isomorphic_encode(unquote(isomorphic_decode(request.GET[b'Redirect'])))
     11  return (301,
     12  [
     13    (b'Cache-Control', b'no-cache, must-revalidate'),
     14    (b'Pragma', b'no-cache'),
     15    (b'Content-Type', b'application/javascript'),
     16    (b'Location', location),
     17  ],
     18  u'/* %s */' % str(visited_count))
     19 
     20 def not_found_response():
     21  return 404, [(b'Content-Type', b'text/plain')], u"Page not found"
     22 
     23 def ok_response(request, response, visited_count,
     24                extra_body=u'', mime_type=b'application/javascript'):
     25  # |visited_count| is used as a unique id to differentiate responses
     26  # every time.
     27  return (
     28    [
     29      (b'Cache-Control', b'no-cache, must-revalidate'),
     30      (b'Pragma', b'no-cache'),
     31      (b'Content-Type', mime_type)
     32    ],
     33    u'/* %s */ %s' % (str(visited_count), extra_body))
     34 
     35 def main(request, response):
     36  key = request.GET[b"Key"]
     37  mode = request.GET[b"Mode"]
     38 
     39  visited_count = request.server.stash.take(key)
     40  if visited_count is None:
     41    visited_count = 0
     42 
     43  # Keep how many times the test requested this resource.
     44  visited_count += 1
     45  request.server.stash.put(key, visited_count)
     46 
     47  # Return a response based on |mode| only when it's the second time (== update).
     48  if visited_count == 2:
     49    if mode == b'normal':
     50      return ok_response(request, response, visited_count)
     51    if mode == b'bad_mime_type':
     52      return ok_response(request, response, visited_count, mime_type=b'text/html')
     53    if mode == b'not_found':
     54      return not_found_response()
     55    if mode == b'redirect':
     56          return redirect_response(request, response, visited_count)
     57    if mode == b'syntax_error':
     58      return ok_response(request, response, visited_count, extra_body=u'badsyntax(isbad;')
     59    if mode == b'throw_install':
     60      return ok_response(request, response, visited_count, extra_body=u"addEventListener('install', function(e) { throw new Error('boom'); });")
     61 
     62  return ok_response(request, response, visited_count)