diff options
author | Wojtek Kosior <koszko@koszko.org> | 2022-10-22 13:47:40 +0200 |
---|---|---|
committer | Wojtek Kosior <koszko@koszko.org> | 2022-10-22 14:00:35 +0200 |
commit | 59a4b477dd922d2f839a717fe199501e7cb71e6e (patch) | |
tree | d6120e13f493ef057ee5445c566e1aca11a9f7f5 /src/hydrilla/proxy/policies/base.py | |
parent | 1fc2dbe5a3e867eb5e6c2f759409f1c94146a794 (diff) | |
download | haketilo-hydrilla-59a4b477dd922d2f839a717fe199501e7cb71e6e.tar.gz haketilo-hydrilla-59a4b477dd922d2f839a717fe199501e7cb71e6e.zip |
[proxy] simplify usage of class variables of `Policy` subtypes
This commit also prevents popup script injection to Haketilo-served pages like `https://hkt.mitm.it/`.
Diffstat (limited to 'src/hydrilla/proxy/policies/base.py')
-rw-r--r-- | src/hydrilla/proxy/policies/base.py | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/hydrilla/proxy/policies/base.py b/src/hydrilla/proxy/policies/base.py index 0c37185..7ce5105 100644 --- a/src/hydrilla/proxy/policies/base.py +++ b/src/hydrilla/proxy/policies/base.py @@ -62,12 +62,20 @@ popup_script = jinja_env.get_template('popup.js.jinja').render() popup_script_sha256_bytes = sha256(popup_script.encode()).digest() popup_script_sha256_b64 = b64encode(popup_script_sha256_bytes).decode() + class PolicyPriority(int, enum.Enum): """....""" _ONE = 1 _TWO = 2 _THREE = 3 + +class MsgProcessOpt(enum.Enum): + """....""" + MUST = True + MUST_NOT = False + + MessageInfo = t.Union[ http_messages.RequestInfo, http_messages.ResponseInfo @@ -91,8 +99,8 @@ BOMs = ( # https://stackoverflow.com/questions/70999513/conflict-between-mix-ins-for-abstract-dataclasses/70999704#70999704 @dc.dataclass(frozen=True) # type: ignore[misc] class Policy(ABC): - _process_request: t.ClassVar[bool] = False - _process_response: t.ClassVar[bool] = False + _process_request: t.ClassVar[t.Optional[MsgProcessOpt]] = None + _process_response: t.ClassVar[t.Optional[MsgProcessOpt]] = None anticache: t.ClassVar[bool] = True priority: t.ClassVar[PolicyPriority] @@ -107,15 +115,15 @@ class Policy(ABC): self, request_info: http_messages.BodylessRequestInfo ) -> bool: - return self._process_request + return self._process_request == MsgProcessOpt.MUST def should_process_response( self, request_info: http_messages.RequestInfo, response_info: http_messages.AnyResponseInfo ) -> bool: - if self._process_response: - return True + if self._process_response is not None: + return self._process_response.value return (self.current_popup_settings.popup_enabled and http_messages.is_likely_a_page(request_info, response_info)) |