tor-browser

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

echo-critical-hint.py (1869B)


      1 import sys
      2 
      3 def main(request, response):
      4    """
      5    Simple handler that sets a response header based on which client hint
      6    request headers were received.
      7    """
      8 
      9    response.headers.append(b"Content-Type", b"text/html; charset=UTF-8")
     10    response.headers.append(b"Access-Control-Allow-Origin", b"*")
     11    response.headers.append(b"Access-Control-Allow-Headers", b"*")
     12    response.headers.append(b"Access-Control-Expose-Headers", b"*")
     13 
     14    accept = b"sec-ch-device-memory,device-memory"
     15    if(request.GET.first(b"multiple", None) is not None):
     16      for accept_part in accept.split(b","):
     17        response.headers.append(b"Accept-CH", accept_part)
     18    else:
     19      response.headers.append(b"Accept-CH", accept)
     20 
     21    critical = b"sec-ch-device-memory,device-memory"
     22    if(request.GET.first(b"mismatch", None) is not None):
     23      critical = b"sec-ch-viewport-width,viewport-width"
     24 
     25    if(request.GET.first(b"multiple", None) is not None):
     26      for critical_part in critical.split(b","):
     27        response.headers.append(b"Critical-CH", critical_part)
     28    else:
     29      response.headers.append(b"Critical-CH", critical)
     30 
     31    response.headers.append(b"Cache-Control", b"no-store")
     32 
     33    result = "FAIL"
     34 
     35    if b"sec-ch-device-memory" in request.headers and b"device-memory" in request.headers:
     36      result = "PASS"
     37 
     38    token = request.GET.first(b"token", None)
     39    if(token is not None):
     40      with request.server.stash.lock:
     41        count = request.server.stash.take(token)
     42        if(count == None):
     43          count = 1
     44        else:
     45          count += 1
     46        request.server.stash.put(token, count)
     47        result = str(count)
     48 
     49    if b"sec-ch-viewport-width" in request.headers and b"viewport-width" in request.headers:
     50      result = "MISMATCH"
     51 
     52    response.content = "<script>(window.opener || window.top).postMessage('{0}', '*')</script>".format(result)