aboutsummaryrefslogtreecommitdiff
path: root/test/haketilo_test/__main__.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/haketilo_test/__main__.py')
-rw-r--r--test/haketilo_test/__main__.py83
1 files changed, 83 insertions, 0 deletions
diff --git a/test/haketilo_test/__main__.py b/test/haketilo_test/__main__.py
new file mode 100644
index 0000000..7afda55
--- /dev/null
+++ b/test/haketilo_test/__main__.py
@@ -0,0 +1,83 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+
+"""
+Run a Firefox-type browser with WebDriver attached and Python console open
+"""
+
+# This file is part of Haketilo.
+#
+# Copyright (C) 2021 jahoti <jahoti@tilde.team>
+# Copyright (C) 2021 Wojtek Kosior <koszko@koszko.org>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero 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 Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+#
+# 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.
+
+import sys
+import time
+import code
+from rlcompleter import Completer
+import readline
+
+from .server import do_an_internet
+from .misc_constants import *
+from .profiles import firefox_safe_mode
+from .extension_crafting import get_extension_base_url
+
+def fail(msg, error_code):
+ print('Error:', msg)
+ print('Usage:', sys.argv[0], '[--load-haketilo]', '[certificates_directory] [proxy_port]')
+ sys.exit(error_code)
+
+load_haketilo = False
+argv_idx = 1
+if len(sys.argv) > argv_idx and sys.argv[argv_idx] == '--load-haketilo':
+ load_haketilo = True
+ argv_idx += 1
+
+certdir = Path(sys.argv[argv_idx]).resolve() if len(sys.argv) > argv_idx \
+ else default_cert_dir
+
+if not certdir.is_dir():
+ fail('selected certificate directory does not exist.', 2)
+
+argv_idx += 1
+
+port = sys.argv[argv_idx] if len(sys.argv) > argv_idx \
+ else str(default_proxy_port)
+
+if not port.isnumeric():
+ fail('port must be an integer.', 3)
+
+httpd = do_an_internet(certdir, int(port))
+driver = firefox_safe_mode(proxy_port=int(port))
+
+if load_haketilo:
+ driver.install_addon(str(here.parent / 'mozilla-build.zip'), temporary=True)
+ driver.get(get_extension_base_url(driver) + 'html/settings.html')
+
+print("You can now control the browser through 'driver' object")
+
+# Here we enable readline-enhanced editing:
+# https://stackoverflow.com/questions/35115208/is-there-any-way-to-combine-readline-rlcompleter-and-interactiveconsole-in-pytho#answer-35116399
+readline.parse_and_bind('tab: complete');
+console_locals = globals()
+readline.set_completer(Completer(console_locals).complete)
+code.InteractiveConsole(locals=globals()).interact()
+
+driver.quit()
+httpd.shutdown()