diff --git a/pkgs/default.nix b/pkgs/default.nix index 6fe43d42..36b84381 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -21,6 +21,7 @@ with prev; { drone-docker-runner = writeShellScriptBin "drone-docker-runner" (import ./drone-docker-runner.nix final); record-screen = writeShellScriptBin "record-screen" (import ./record-screen.nix final); cockroach-bin = import ./cockroach.nix final; + prison-break = import ./prison-break.nix final; # ps-fixes } diff --git a/pkgs/prison-break-url.patch b/pkgs/prison-break-url.patch new file mode 100644 index 00000000..a4a3a21e --- /dev/null +++ b/pkgs/prison-break-url.patch @@ -0,0 +1,84 @@ +diff --git a/prisonbreak/cli.py b/prisonbreak/cli.py +index 0add782..10eda94 100755 +--- a/prisonbreak/cli.py ++++ b/prisonbreak/cli.py +@@ -31,7 +31,7 @@ from straight.plugin import load + + + def configure_debug(debug: bool) -> None: +- if debug: ++ if True: + logging.basicConfig(level=logging.DEBUG) + from http.client import HTTPConnection + +@@ -57,7 +57,7 @@ def send_notify(message,title="Prison-Break",icon="dialog-warning-symbolic",do_n + + def main(): + args = docopt(__doc__) +- secret_url = "http://krebsco.de/secret" # return 1337 ++ check_online_url = "http://detectportal.firefox.com/canonical.html" + profile = environ.get("CONNECTION_FILENAME", None) + timeout = float(args['--timeout']) + tries = int(args['--retry']) +@@ -123,8 +123,8 @@ def main(): + s = requests.Session() + s.headers.update( + { +- "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:65.0)" +- "Gecko/20100101 Firefox/65.0" ++ "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:122.0)" ++ "Gecko/20100101 Firefox/122.0" + } + ) + if wait: +@@ -133,7 +133,7 @@ def main(): + + for n in range(tries): + try: +- initial_response = s.get(secret_url,timeout=timeout) ++ initial_response = s.get(check_online_url,timeout=timeout) + except Timeout as t: + log.info(f"Timeout number {n+1}, waiting {timeout_wait} seconds") + continue +@@ -144,12 +144,12 @@ def main(): + break + sleep(timeout_wait) + else: +- log.error(f'Unable to Retrieve the initial response after {tries} tires') ++ log.error(f'Unable to Retrieve the initial response after {tries} tries') + exit(1) + + +- if initial_response.text.startswith("1337"): +- log.info("Received the correct challenge token" ++ if 'nginx' == initial_response.headers.get('Server'): ++ log.info("Received the correct server header" + ", assuming no captive portal") + if args['--force-token']: + log.info("Continuing even though we got the correct token!") +@@ -171,8 +171,9 @@ def main(): + note("Trying to accept AGBs for you now!",title=f"Prison-Break Plugin {name}") + #notify2.Notification("Summary", "Some body text", "notification-message-im").show() + if plug.accept(initial_response, s): ++ log.debug(s.get(check_online_url,timeout=timeout).headers) + log.info(f"{name} successful?") +- if s.get(secret_url,timeout=timeout).text.startswith("1337"): ++ if 'nginx' == s.get(check_online_url,timeout=timeout).headers.get('Server'): + #notify2.Notification("Prison-Break", "Plugin {name} successful", "notification-message-im").show() + + log.info(f"{name} successful!") +diff --git a/prisonbreak/plugins/wifionice.py b/prisonbreak/plugins/wifionice.py +index 1cee64d..38e5c74 100644 +--- a/prisonbreak/plugins/wifionice.py ++++ b/prisonbreak/plugins/wifionice.py +@@ -58,8 +58,8 @@ def accept(resp: requests.Response, s: requests.Session) -> bool: + log.debug(f"data: {postdata}") + + # TODO: detect the correct URL to query based on form path and url +- # The URL changed from http to http, and wifionice.de is now wifi.bahn.de +- resp = s.post("https://wifi.bahn.de/de/?url=http%3A%2F%2Fkrebsco.de%2Fsecret", data=postdata) ++ # The URL changed from wifi.bahn.de to login.wifionice.de ++ resp = s.post("https://login.wifionice.de/en/?url=http%3A%2F%2Fdetectportal.firefox.com%2Fcanonical.html", data=postdata) + log.debug(f"Return code: {resp.status_code}") + log.debug(resp.headers) + return resp.ok diff --git a/pkgs/prison-break.nix b/pkgs/prison-break.nix new file mode 100644 index 00000000..7de96c1b --- /dev/null +++ b/pkgs/prison-break.nix @@ -0,0 +1,41 @@ +self: +with self; +let + straight-plugin = python3.pkgs.buildPythonPackage rec { + pname = "straight-plugin"; + version = "1.5.0"; + + src = fetchPypi { + pname = "straight.plugin"; + inherit version; + sha256 = "818a7641068932ed6436d0af0a3bb77bbbde29df0a7142c8bd1a249e7c2f0d38"; + }; + + meta = with lib; { + description = "A simple namespaced plugin facility"; + homepage = https://github.com/ironfroggy/straight.plugin; + license = licenses.mit; + maintainers = [ maintainers.makefu ]; + }; + }; +in +python3.pkgs.buildPythonPackage { + name = "env"; + src = fetchFromGitHub { + owner = "makefu"; + repo = "prison-break"; + rev = "15079bb094d37eeba92e17abfb98523076c5800c"; + sha256 = "sha256-MDzAmeJ6wsTm5+unIsYAZmErVN4sEAfih3YwbXkVIPg="; + }; + propagatedBuildInputs = with python3.pkgs;[ + docopt + requests + beautifulsoup4 + notify2 + straight-plugin + ]; + patches = [ + ./prison-break-url.patch + ]; + checkInputs = [ python3.pkgs.black ]; +}