From e154dc91134859eb5f7de1d41d89d31d36a9d5a4 Mon Sep 17 00:00:00 2001 From: Laura Liberda Date: Tue, 25 May 2021 13:20:51 +0200 Subject: [PATCH] macrosystem (koleje mazowieckie) fxcker --- librefi/fxckers/_map.py | 2 ++ librefi/fxckers/macrosystem.py | 36 ++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 librefi/fxckers/macrosystem.py diff --git a/librefi/fxckers/_map.py b/librefi/fxckers/_map.py index 057b2d6..9838b3f 100644 --- a/librefi/fxckers/_map.py +++ b/librefi/fxckers/_map.py @@ -7,6 +7,7 @@ from .ledatel import LedatelFxcker from .ipartners import IPartnersFxcker from .kfchotspot import KFCHotspotFxcker from .justwifi import JustWifiFxcker +from .macrosystem import MacrosystemFxcker fxckers_map = [ ([r"re:MZK Opole \d{3}(?: (?:2.4|5)GHz)?"], DummyFxcker), @@ -19,6 +20,7 @@ fxckers_map = [ "_PKP_WIFI", "Poznan Airport by JustWiFi", ], JustWifiFxcker), + (["km-wifi"], MacrosystemFxcker), ] __all__ = ['fxckers_map'] diff --git a/librefi/fxckers/macrosystem.py b/librefi/fxckers/macrosystem.py new file mode 100644 index 0000000..aa87689 --- /dev/null +++ b/librefi/fxckers/macrosystem.py @@ -0,0 +1,36 @@ +from __future__ import unicode_literals + +from ._common import BaseFxcker +from ..utils import ( + dump_qs, + hidden_inputs, + js_to_json, + regex_search_string, + TEST_URL, +) + +import datetime +import json +import urllib.parse + + +# not tested, intended for Koleje Mazowieckie (https://www.mazowieckie.com.pl/) and possibly others +class MacrosystemFxcker(BaseFxcker): + def unfxck(self, location=None): + first_page = self.request("GET", location or TEST_URL) + qs = regex_search_string(r'(?s)function toDeviceLogin\(\)\s*{.+?queryParams\(({.+?})\);', first_page.text) + qs = qs.replace('new Date().getTime()', str(datetime.datetime.now().microsecond())) + first_url = urllib.parse.urlparse(first_page.url) + browser = urllib.parse.parse_qs(first_url.query)['browser'][0] + qs = qs.replace('getUrlParam("browser")', browser) + qs = js_to_json(qs) + qs = json.loads(qs) + qs = dump_qs(qs) + login_url = urllib.parse.urljoin(first_page.url, './login.html') + '?' + qs + login_page_req = self.request('GET', login_url) + login_page = login_page_req.text() + login_form = hidden_inputs(login_page) + login_req_url = regex_search_string(r"]*?action='([^']+)'", login_page) + # redirects to KM's own webpage + login_req = self.request('POST', login_req_url, body=dump_qs(login_form), follow_redirects=False) + return login_req.status_code == 302