From b880bdc779b800ebde810279d1cf5b9e530000de Mon Sep 17 00:00:00 2001 From: Wojtek Kosior Date: Mon, 10 Oct 2022 15:01:08 +0200 Subject: [proxy] make it possible to access http://mitm.it magical domain --- src/hydrilla/proxy/addon.py | 20 ++++++-- src/hydrilla/proxy/policies/__init__.py | 3 +- src/hydrilla/proxy/policies/fallback.py | 61 ------------------------- src/hydrilla/proxy/policies/misc.py | 81 +++++++++++++++++++++++++++++++++ 4 files changed, 98 insertions(+), 67 deletions(-) delete mode 100644 src/hydrilla/proxy/policies/fallback.py create mode 100644 src/hydrilla/proxy/policies/misc.py diff --git a/src/hydrilla/proxy/addon.py b/src/hydrilla/proxy/addon.py index 2185bcb..b8ad819 100644 --- a/src/hydrilla/proxy/addon.py +++ b/src/hydrilla/proxy/addon.py @@ -34,6 +34,7 @@ from addon script. from __future__ import annotations import sys +import re import typing as t import dataclasses as dc import traceback as tb @@ -91,6 +92,10 @@ class FlowHandlingData: policy: policies.Policy +magical_mitm_it_url_reg = re.compile(r'^http://mitm.it(/.*)?$') +dummy_url = parse_url('http://dummy.replacement.url') + + @dc.dataclass class HaketiloAddon: """ @@ -142,11 +147,16 @@ class HaketiloAddon: handling_data = self.flows_data.get(id(flow)) if handling_data is None: - try: - parsed_url = parse_url(flow.request.url) - policy = self.state.select_policy(parsed_url) - except HaketiloException as e: - policy = policies.ErrorBlockPolicy(builtin=True, error=e) + parsed_url = dummy_url + + if magical_mitm_it_url_reg.match(flow.request.url): + policy = policies.DoNothingPolicy() + else: + try: + parsed_url = parse_url(flow.request.url) + policy = self.state.select_policy(parsed_url) + except HaketiloException as e: + policy = policies.ErrorBlockPolicy(builtin=True, error=e) handling_data = FlowHandlingData(parsed_url, policy) diff --git a/src/hydrilla/proxy/policies/__init__.py b/src/hydrilla/proxy/policies/__init__.py index 062ec56..448420a 100644 --- a/src/hydrilla/proxy/policies/__init__.py +++ b/src/hydrilla/proxy/policies/__init__.py @@ -12,6 +12,7 @@ from .payload_resource import PayloadResourcePolicyFactory from .rule import RuleBlockPolicyFactory, RuleAllowPolicyFactory -from .fallback import FallbackAllowPolicy, FallbackBlockPolicy, ErrorBlockPolicy +from .misc import FallbackAllowPolicy, FallbackBlockPolicy, ErrorBlockPolicy, \ + DoNothingPolicy from .web_ui import WebUIPolicyFactory diff --git a/src/hydrilla/proxy/policies/fallback.py b/src/hydrilla/proxy/policies/fallback.py deleted file mode 100644 index f5c9b16..0000000 --- a/src/hydrilla/proxy/policies/fallback.py +++ /dev/null @@ -1,61 +0,0 @@ -# SPDX-License-Identifier: GPL-3.0-or-later - -# Policies for blocking and allowing JS when no other policies match. -# -# This file is part of Hydrilla&Haketilo. -# -# Copyright (C) 2022 Wojtek Kosior -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -# -# I, Wojtek Kosior, thereby promise not to sue for violation of this -# file's license. Although I request that you do not make use of this -# code in a proprietary program, I am not going to enforce this in -# court. - -""" -..... -""" - -# Enable using with Python 3.7. -from __future__ import annotations - -import dataclasses as dc -import typing as t -import enum - -from abc import ABC, abstractmethod - -from .. import state -from . import base -from .rule import AllowPolicy, BlockPolicy - - -class FallbackAllowPolicy(AllowPolicy): - """.....""" - priority: t.ClassVar[base.PolicyPriority] = base.PolicyPriority._ONE - - -class FallbackBlockPolicy(BlockPolicy): - """....""" - priority: t.ClassVar[base.PolicyPriority] = base.PolicyPriority._ONE - - -@dc.dataclass(frozen=True) -class ErrorBlockPolicy(BlockPolicy): - """....""" - error: Exception - - builtin: bool = True diff --git a/src/hydrilla/proxy/policies/misc.py b/src/hydrilla/proxy/policies/misc.py new file mode 100644 index 0000000..bc3b08f --- /dev/null +++ b/src/hydrilla/proxy/policies/misc.py @@ -0,0 +1,81 @@ +# SPDX-License-Identifier: GPL-3.0-or-later + +# Miscellaneous policies. +# +# This file is part of Hydrilla&Haketilo. +# +# Copyright (C) 2022 Wojtek Kosior +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# +# I, Wojtek Kosior, thereby promise not to sue for violation of this +# file's license. Although I request that you do not make use of this +# code in a proprietary program, I am not going to enforce this in +# court. + +""" +..... +""" + +# Enable using with Python 3.7. +from __future__ import annotations + +import dataclasses as dc +import typing as t +import enum + +from abc import ABC, abstractmethod + +from .. import state +from .. import http_messages +from . import base +from .rule import AllowPolicy, BlockPolicy + + +class FallbackAllowPolicy(AllowPolicy): + """.....""" + priority: t.ClassVar[base.PolicyPriority] = base.PolicyPriority._ONE + + +class FallbackBlockPolicy(BlockPolicy): + """....""" + priority: t.ClassVar[base.PolicyPriority] = base.PolicyPriority._ONE + + +@dc.dataclass(frozen=True) +class ErrorBlockPolicy(BlockPolicy): + """....""" + error: Exception + + builtin: bool = True + +class DoNothingPolicy(base.Policy): + """ + A special policy class for handling of the magical mitm.it domain. It causes + request and response not to be modified in any way, and also (unlike + FallbackAllowPolicy) prevents them from being streamed. + """ + _process_request: t.ClassVar[bool] = True + _process_response: t.ClassVar[bool] = True + anticache: t.ClassVar[bool] = False + + def consume_request(self, request_info: http_messages.RequestInfo) -> None: + return None + + def consume_response(self, response_info: http_messages.ResponseInfo) \ + -> None: + return None + + builtin: bool = True -- cgit v1.2.3