From fe43bd552aaacd649b0e00afada01d07ad8dae9a Mon Sep 17 00:00:00 2001 From: Wojtek Kosior Date: Fri, 21 Oct 2022 21:42:56 +0200 Subject: [proxy] facilitate injecting non-payload script to all pages --- src/hydrilla/proxy/policies/payload.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'src/hydrilla/proxy/policies/payload.py') diff --git a/src/hydrilla/proxy/policies/payload.py b/src/hydrilla/proxy/policies/payload.py index 8aaf845..76a1202 100644 --- a/src/hydrilla/proxy/policies/payload.py +++ b/src/hydrilla/proxy/policies/payload.py @@ -49,12 +49,12 @@ class PayloadAwarePolicy(base.Policy): """....""" payload_data: state.PayloadData - def _assets_base_url(self, request_url: ParsedUrl): + def _assets_base_url(self, url: ParsedUrl) -> str: token = self.payload_data.unique_token base_path_segments = (*self.payload_data.pattern_path_segments, token) - return f'{request_url.url_without_path}/{"/".join(base_path_segments)}/' + return f'{url.url_without_path}/{"/".join(base_path_segments)}/' def _payload_details_to_signed_query_string( self, @@ -110,6 +110,10 @@ class PayloadInjectPolicy(PayloadAwarePolicy): priority: t.ClassVar[base.PolicyPriority] = base.PolicyPriority._TWO + @property + def current_popup_settings(self) -> state.PopupSettings: + return self.haketilo_settings.default_popup_payloadon + def _csp_to_clear(self, http_info: http_messages.FullHTTPInfo) \ -> t.Sequence[str]: return ['script-src'] @@ -141,8 +145,12 @@ class PayloadInjectPolicy(PayloadAwarePolicy): http_info: http_messages.FullHTTPInfo, encoding: t.Optional[str] ) -> t.Union[bytes, str]: + markup = super()._modify_response_document(http_info, encoding) + if isinstance(markup, str): + encoding = None + soup = bs4.BeautifulSoup( - markup = http_info.response_info.body, + markup = markup, from_encoding = encoding, features = 'html5lib' ) @@ -236,22 +244,23 @@ class PayloadPolicyFactory(PayloadAwarePolicyFactory): """....""" def make_policy(self, haketilo_state: state.HaketiloState) \ -> t.Optional[base.Policy]: - """....""" + haketilo_settings = haketilo_state.get_settings() + try: payload_data = self.payload_ref.get_data() except: return None if payload_data.explicitly_enabled: - return PayloadInjectPolicy(payload_data) + return PayloadInjectPolicy(haketilo_settings, payload_data) - mode = haketilo_state.get_settings().mapping_use_mode + mode = haketilo_settings.mapping_use_mode if mode == state.MappingUseMode.QUESTION: - return PayloadSuggestPolicy(payload_data) + return PayloadSuggestPolicy(haketilo_settings, payload_data) if mode == state.MappingUseMode.WHEN_ENABLED: return None # mode == state.MappingUseMode.AUTO - return AutoPayloadInjectPolicy(payload_data) + return AutoPayloadInjectPolicy(haketilo_settings, payload_data) -- cgit v1.2.3