| import json |
| |
| from wptserve.utils import isomorphic_decode |
| |
| def main(request, response): |
| origin = request.GET.first(b"origin", request.headers.get(b'origin') or b'none') |
| |
| if b"check" in request.GET: |
| token = request.GET.first(b"token") |
| value = request.server.stash.take(token) |
| if value is not None: |
| if request.GET.first(b"check", None) == b"keep": |
| request.server.stash.put(token, value) |
| body = u"1" |
| else: |
| body = u"0" |
| return [(b"Content-Type", b"text/plain")], body |
| |
| |
| if origin != b'none': |
| response.headers.set(b"Access-Control-Allow-Origin", origin) |
| if b'origin2' in request.GET: |
| response.headers.append(b"Access-Control-Allow-Origin", request.GET.first(b'origin2')) |
| |
| #Preflight |
| if b'headers' in request.GET: |
| response.headers.set(b"Access-Control-Allow-Headers", request.GET.first(b'headers')) |
| if b'credentials' in request.GET: |
| response.headers.set(b"Access-Control-Allow-Credentials", request.GET.first(b'credentials')) |
| if b'methods' in request.GET: |
| response.headers.set(b"Access-Control-Allow-Methods", request.GET.first(b'methods')) |
| |
| code_raw = request.GET.first(b'code', None) |
| if code_raw: |
| code = int(code_raw) |
| else: |
| code = None |
| if request.method == u'OPTIONS': |
| #Override the response code if we're in a preflight and it's asked |
| if b'preflight' in request.GET: |
| code = int(request.GET.first(b'preflight')) |
| |
| #Log that the preflight actually happened if we have an ident |
| if b'token' in request.GET: |
| request.server.stash.put(request.GET[b'token'], True) |
| |
| if b'location' in request.GET: |
| if code is None: |
| code = 302 |
| |
| if code >= 300 and code < 400: |
| response.headers.set(b"Location", request.GET.first(b'location')) |
| |
| headers = {} |
| for name, values in request.headers.items(): |
| if len(values) == 1: |
| headers[isomorphic_decode(name)] = isomorphic_decode(values[0]) |
| else: |
| #I have no idea, really |
| headers[name] = values |
| |
| headers[u'get_value'] = isomorphic_decode(request.GET.first(b'get_value', b'')) |
| |
| body = json.dumps(headers) |
| |
| if code: |
| return (code, b"StatusText"), [], body |
| else: |
| return body |