tor-browser

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

worker.py (1865B)


      1 import os, sys, json
      2 
      3 from wptserve.utils import isomorphic_decode, isomorphic_encode
      4 import importlib
      5 util = importlib.import_module("common.security-features.scope.util")
      6 
      7 def main(request, response):
      8  policyDeliveries = json.loads(request.GET.first(b'policyDeliveries', b'[]'))
      9  worker_type = request.GET.first(b'type', b'classic')
     10  commonjs_url = u'%s://%s:%s/common/security-features/resources/common.sub.js' % (
     11      request.url_parts.scheme, request.url_parts.hostname,
     12      request.url_parts.port)
     13  if worker_type == b'classic':
     14    import_line = u'importScripts("%s");' % commonjs_url
     15  else:
     16    import_line = u'import "%s";' % commonjs_url
     17 
     18  maybe_additional_headers = {}
     19  error = u''
     20  for delivery in policyDeliveries:
     21    if delivery[u'deliveryType'] == u'meta':
     22      error = u'<meta> cannot be used in WorkerGlobalScope'
     23    elif delivery[u'deliveryType'] == u'http-rp':
     24      if delivery[u'key'] == u'referrerPolicy':
     25        maybe_additional_headers[b'Referrer-Policy'] = isomorphic_encode(delivery[u'value'])
     26      elif delivery[u'key'] == u'mixedContent' and delivery[u'value'] == u'opt-in':
     27        maybe_additional_headers[b'Content-Security-Policy'] = b'block-all-mixed-content'
     28      elif delivery[u'key'] == u'upgradeInsecureRequests' and delivery[u'value'] == u'upgrade':
     29        maybe_additional_headers[b'Content-Security-Policy'] = b'upgrade-insecure-requests'
     30      else:
     31        error = u'invalid delivery key for http-rp: %s' % delivery[u'key']
     32    else:
     33      error = u'invalid deliveryType: %s' % delivery[u'deliveryType']
     34 
     35  handler = lambda: util.get_template(u'worker.js.template') % ({
     36      u'import': import_line,
     37      u'error': error
     38  })
     39  util.respond(
     40      request,
     41      response,
     42      payload_generator=handler,
     43      content_type=b'text/javascript',
     44      maybe_additional_headers=maybe_additional_headers)