tor-browser

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

cors-makeheader.py (2371B)


      1 import json
      2 
      3 from wptserve.utils import isomorphic_decode
      4 
      5 def main(request, response):
      6    origin = request.GET.first(b"origin", request.headers.get(b'origin') or b'none')
      7 
      8    if b"check" in request.GET:
      9        token = request.GET.first(b"token")
     10        value = request.server.stash.take(token)
     11        if value is not None:
     12            if request.GET.first(b"check", None) == b"keep":
     13                request.server.stash.put(token, value)
     14            body = u"1"
     15        else:
     16            body = u"0"
     17        return [(b"Content-Type", b"text/plain")], body
     18 
     19 
     20    if origin != b'none':
     21        response.headers.set(b"Access-Control-Allow-Origin", origin)
     22    if b'origin2' in request.GET:
     23        response.headers.append(b"Access-Control-Allow-Origin", request.GET.first(b'origin2'))
     24 
     25    #Preflight
     26    if b'headers' in request.GET:
     27        response.headers.set(b"Access-Control-Allow-Headers", request.GET.first(b'headers'))
     28    if b'credentials' in request.GET:
     29        response.headers.set(b"Access-Control-Allow-Credentials", request.GET.first(b'credentials'))
     30    if b'methods' in request.GET:
     31        response.headers.set(b"Access-Control-Allow-Methods", request.GET.first(b'methods'))
     32 
     33    code_raw = request.GET.first(b'code', None)
     34    if code_raw:
     35        code = int(code_raw)
     36    else:
     37        code = None
     38    if request.method == u'OPTIONS':
     39        #Override the response code if we're in a preflight and it's asked
     40        if b'preflight' in request.GET:
     41            code = int(request.GET.first(b'preflight'))
     42 
     43        #Log that the preflight actually happened if we have an ident
     44        if b'token' in request.GET:
     45            request.server.stash.put(request.GET[b'token'], True)
     46 
     47    if b'location' in request.GET:
     48        if code is None:
     49            code = 302
     50 
     51        if code >= 300 and code < 400:
     52            response.headers.set(b"Location", request.GET.first(b'location'))
     53 
     54    headers = {}
     55    for name, values in request.headers.items():
     56        if len(values) == 1:
     57            headers[isomorphic_decode(name)] = isomorphic_decode(values[0])
     58        else:
     59            #I have no idea, really
     60            headers[name] = values
     61 
     62    headers[u'get_value'] = isomorphic_decode(request.GET.first(b'get_value', b''))
     63 
     64    body = json.dumps(headers)
     65 
     66    if code:
     67        return (code, b"StatusText"), [], body
     68    else:
     69        return body