| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | import osfrom json import dumpsfrom typing import Literalimport httpximport pytestfrom _pytest.monkeypatch import MonkeyPatchfrom core.helper import ssrf_proxyMOCK = os.getenv("MOCK_SWITCH", "false") == "true"class MockedHttp:    @staticmethod    def httpx_request(        method: Literal["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD"], url: str, **kwargs    ) -> httpx.Response:        """        Mocked httpx.request        """        if url == "http://404.com":            response = httpx.Response(status_code=404, request=httpx.Request(method, url), content=b"Not Found")            return response        # get data, files        data = kwargs.get("data")        files = kwargs.get("files")        json = kwargs.get("json")        content = kwargs.get("content")        if data is not None:            resp = dumps(data).encode("utf-8")        elif files is not None:            resp = dumps(files).encode("utf-8")        elif json is not None:            resp = dumps(json).encode("utf-8")        elif content is not None:            resp = content        else:            resp = b"OK"        response = httpx.Response(            status_code=200, request=httpx.Request(method, url), headers=kwargs.get("headers", {}), content=resp        )        return response@pytest.fixturedef setup_http_mock(request, monkeypatch: MonkeyPatch):    if not MOCK:        yield        return    monkeypatch.setattr(ssrf_proxy, "make_request", MockedHttp.httpx_request)    yield    monkeypatch.undo()
 |