diff --git a/librefi/fxckers/_common.py b/librefi/fxckers/_common.py index ebbb830..44f8fda 100644 --- a/librefi/fxckers/_common.py +++ b/librefi/fxckers/_common.py @@ -1,12 +1,11 @@ import requests -from http.cookiejar import CookieJar -from ..utils import get_user_agent +from ..utils import get_user_agent, absolute_url class BaseFxcker: def __init__(self, logger, log_level): - self.cookie_jar = CookieJar() + self.cookie_jar = requests.cookies.RequestsCookieJar() self.user_agent = get_user_agent() self.log = logger(key=self.FXCKER_KEY, log_level=log_level) @@ -26,11 +25,14 @@ class BaseFxcker: self.log.info("Requesting " + resource if resource is not None else (str(method) + " " + str(url))) - req = requests.request(method, url, **kwargs) + sess = requests.Session() + req = sess.request(method, url, **kwargs) + self.cookie_jar.update(sess.cookies) if follow_redirects is True and req.headers.get("Location"): kwargs["data"] = None kwargs["headers"]["Referer"] = url - return self.request("GET", req.headers.get("Location"), + new_url = absolute_url(req.headers.get("Location"), url) + return self.request("GET", new_url, resource=resource, follow_redirects=follow_redirects, **kwargs) diff --git a/librefi/fxckers/_map.py b/librefi/fxckers/_map.py index 1dbce81..76cdef0 100644 --- a/librefi/fxckers/_map.py +++ b/librefi/fxckers/_map.py @@ -3,6 +3,7 @@ from .umwarszawa import UMWarszawaFxcker from .ledatel import LedatelFxcker from .ipartners import IPartnersFxcker from .kfchotspot import KFCHotspotFxcker +from .justwifi import JustWifiFxcker fxckers_map = [ ([r"re:MZK Opole \d{3}(?: (?:2.4|5)GHz)?"], DummyFxcker), @@ -10,4 +11,8 @@ fxckers_map = [ (["Pendolino_WiFi"], LedatelFxcker), (["McD-Hotspot"], IPartnersFxcker), (["KFC Hotspot"], KFCHotspotFxcker), + ([ + "Intercity_WiFi", + "_PKP_WIFI", + ], JustWifiFxcker), ] diff --git a/librefi/fxckers/justwifi.py b/librefi/fxckers/justwifi.py new file mode 100644 index 0000000..ed6b9da --- /dev/null +++ b/librefi/fxckers/justwifi.py @@ -0,0 +1,95 @@ +from ._common import BaseFxcker +from ..utils import regex_search_string, absolute_url, dump_qs + + +class JustWifiFxcker(BaseFxcker): + # tested with Intercity_WiFi (PKP IC Dart) + def unfxck(self, location=None): + start = self.request( + # flake8: noqa: E501 + "GET", location or "http://tank.justwifi.pl/connect?returnurl=http://detectportal.firefox.com/success.txt%3f", + resource="start redir") + redir_url = regex_search_string([ + r'window\.location\.href = "([^"]+)";', + ], start.text) + sgu = self.request("GET", redir_url, resource="splash page") + glash_form_url = absolute_url(regex_search_string([ + r"\$\('#glash_form(?:_adv)?'\).attr\('action', '([^']+)'\);", + r'