예제 #1
0
 async def send(
     self,
     request: AsyncRequest,
     verify: VerifyTypes = None,
     cert: CertTypes = None,
     timeout: TimeoutTypes = None,
 ) -> AsyncResponse:
     if request.url.path.startswith("/echo_cookies"):
         body = json.dumps({
             "cookies": request.headers.get("Cookie")
         }).encode()
         return AsyncResponse(200, content=body, request=request)
     elif request.url.path.startswith("/set_cookie"):
         headers = {"set-cookie": "example-name=example-value"}
         return AsyncResponse(200, headers=headers, request=request)
예제 #2
0
    def challenge_send(self, request: AsyncRequest) -> AsyncResponse:
        self._response_count += 1
        nonce = (
            hashlib.sha256(os.urandom(8)).hexdigest()
            if self._regenerate_nonce else
            "ee96edced2a0b43e4869e96ebe27563f369c1205a049d06419bb51d8aeddf3d3")
        challenge_data = {
            "nonce":
            nonce,
            "qop":
            self.qop,
            "opaque":
            ("ee6378f3ee14ebfd2fff54b70a91a7c9390518047f242ab2271380db0e14bda1"
             ),
            "algorithm":
            self.algorithm,
            "stale":
            "FALSE",
        }
        challenge_str = ", ".join('{}="{}"'.format(key, value)
                                  for key, value in challenge_data.items()
                                  if value)

        headers = [("www-authenticate",
                    'Digest realm="*****@*****.**", ' + challenge_str)]
        return AsyncResponse(401,
                             headers=headers,
                             content=b"",
                             request=request)
예제 #3
0
파일: test_auth.py 프로젝트: toppk/httpx
 async def send(
     self,
     request: AsyncRequest,
     verify: VerifyTypes = None,
     cert: CertTypes = None,
     timeout: TimeoutTypes = None,
 ) -> AsyncResponse:
     body = json.dumps({"auth": request.headers.get("Authorization")}).encode()
     return AsyncResponse(200, content=body, request=request)
예제 #4
0
 async def send(
     self,
     request: AsyncRequest,
     verify: VerifyTypes = None,
     cert: CertTypes = None,
     timeout: TimeoutTypes = None,
 ) -> AsyncResponse:
     if request.url.path.startswith("/echo_queryparams"):
         body = json.dumps({"ok": "ok"}).encode()
         return AsyncResponse(200, content=body, request=request)
예제 #5
0
파일: utils.py 프로젝트: timgates42/authlib
    async def send(self, request, verify=None, cert=None, timeout=None):
        if self.assert_func:
            self.assert_func(request)

        return AsyncResponse(
            self.status_code,
            content=self.body,
            headers=self.headers,
            request=request,
        )
예제 #6
0
 async def send(
     self,
     request: AsyncRequest,
     verify: VerifyTypes = None,
     cert: CertTypes = None,
     timeout: TimeoutTypes = None,
 ) -> AsyncResponse:
     if request.url.path.startswith("/echo_headers"):
         request_headers = dict(request.headers.items())
         body = json.dumps({"headers": request_headers}).encode()
         return AsyncResponse(200, content=body, request=request)
예제 #7
0
    async def send(
        self,
        request: AsyncRequest,
        verify: VerifyTypes = None,
        cert: CertTypes = None,
        timeout: TimeoutTypes = None,
    ) -> AsyncResponse:
        if self._response_count < self.send_response_after_attempt:
            return self.challenge_send(request)

        body = json.dumps({"auth": request.headers.get("Authorization")}).encode()
        return AsyncResponse(200, content=body, request=request)
예제 #8
0
 async def send(
     self,
     request: AsyncRequest,
     verify: VerifyTypes = None,
     cert: CertTypes = None,
     timeout: TimeoutTypes = None,
 ) -> AsyncResponse:
     headers = [("www-authenticate", self.auth_header)] if self.auth_header else []
     body = json.dumps({"auth": request.headers.get("Authorization")}).encode()
     return AsyncResponse(
         self.status_code, headers=headers, content=body, request=request
     )
예제 #9
0
    async def send(
        self,
        request: AsyncRequest,
        verify: VerifyTypes = None,
        cert: CertTypes = None,
        timeout: TimeoutTypes = None,
    ) -> AsyncResponse:
        if request.url.path == "/":
            if "cookie" in request.headers:
                content = b"Logged in"
            else:
                content = b"Not logged in"
            return AsyncResponse(codes.OK, content=content, request=request)

        elif request.url.path == "/login":
            status_code = codes.SEE_OTHER
            headers = {
                "location":
                "/",
                "set-cookie":
                ("session=eyJ1c2VybmFtZSI6ICJ0b21; path=/; Max-Age=1209600; "
                 "httponly; samesite=lax"),
            }

            return AsyncResponse(status_code, headers=headers, request=request)

        elif request.url.path == "/logout":
            status_code = codes.SEE_OTHER
            headers = {
                "location":
                "/",
                "set-cookie":
                ("session=null; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT; "
                 "httponly; samesite=lax"),
            }
            return AsyncResponse(status_code, headers=headers, request=request)
예제 #10
0
파일: utils.py 프로젝트: timgates42/authlib
    async def send(self, request, verify=None, cert=None, timeout=None):
        rv = self.path_maps[request.url.path]
        status_code = rv.get('status_code', 200)
        body = rv.get('body')
        headers = rv.get('headers', {})
        if isinstance(body, dict):
            body = json.dumps(body).encode()
            headers['Content-Type'] = 'application/json'
        else:
            if isinstance(body, str):
                body = body.encode()
            headers['Content-Type'] = 'application/x-www-form-urlencoded'

        return AsyncResponse(
            status_code,
            content=body,
            headers=headers,
            request=request,
        )
예제 #11
0
    async def send(
        self,
        request: AsyncRequest,
        verify: VerifyTypes = None,
        cert: CertTypes = None,
        timeout: TimeoutTypes = None,
    ) -> AsyncResponse:
        if request.url.path == "/redirect_301":
            status_code = codes.MOVED_PERMANENTLY
            headers = {"location": "https://example.org/"}
            return AsyncResponse(status_code, headers=headers, request=request)

        elif request.url.path == "/redirect_302":
            status_code = codes.FOUND
            headers = {"location": "https://example.org/"}
            return AsyncResponse(status_code, headers=headers, request=request)

        elif request.url.path == "/redirect_303":
            status_code = codes.SEE_OTHER
            headers = {"location": "https://example.org/"}
            return AsyncResponse(status_code, headers=headers, request=request)

        elif request.url.path == "/relative_redirect":
            headers = {"location": "/"}
            return AsyncResponse(codes.SEE_OTHER,
                                 headers=headers,
                                 request=request)

        elif request.url.path == "/no_scheme_redirect":
            headers = {"location": "//example.org/"}
            return AsyncResponse(codes.SEE_OTHER,
                                 headers=headers,
                                 request=request)

        elif request.url.path == "/multiple_redirects":
            params = parse_qs(request.url.query)
            count = int(params.get("count", "0")[0])
            redirect_count = count - 1
            code = codes.SEE_OTHER if count else codes.OK
            location = "/multiple_redirects"
            if redirect_count:
                location += "?count=" + str(redirect_count)
            headers = {"location": location} if count else {}
            return AsyncResponse(code, headers=headers, request=request)

        if request.url.path == "/redirect_loop":
            headers = {"location": "/redirect_loop"}
            return AsyncResponse(codes.SEE_OTHER,
                                 headers=headers,
                                 request=request)

        elif request.url.path == "/cross_domain":
            headers = {"location": "https://example.org/cross_domain_target"}
            return AsyncResponse(codes.SEE_OTHER,
                                 headers=headers,
                                 request=request)

        elif request.url.path == "/cross_domain_target":
            headers = dict(request.headers.items())
            content = json.dumps({"headers": headers}).encode()
            return AsyncResponse(codes.OK, content=content, request=request)

        elif request.url.path == "/redirect_body":
            await request.read()
            headers = {"location": "/redirect_body_target"}
            return AsyncResponse(codes.PERMANENT_REDIRECT,
                                 headers=headers,
                                 request=request)

        elif request.url.path == "/redirect_body_target":
            content = await request.read()
            body = json.dumps({"body": content.decode()}).encode()
            return AsyncResponse(codes.OK, content=body, request=request)

        elif request.url.path == "/cross_subdomain":
            if request.headers["host"] != "www.example.org":
                headers = {
                    "location": "https://www.example.org/cross_subdomain"
                }
                return AsyncResponse(codes.PERMANENT_REDIRECT,
                                     headers=headers,
                                     request=request)
            else:
                return AsyncResponse(codes.OK,
                                     content=b"Hello, world!",
                                     request=request)

        return AsyncResponse(codes.OK,
                             content=b"Hello, world!",
                             request=request)