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)
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)
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)
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)
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, )
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)
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)
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 )
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)
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, )
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)