From 63dea22553c6e353d39c7be2225e447fe968444c Mon Sep 17 00:00:00 2001 From: BelKed <66956532+BelKed@users.noreply.github.com> Date: Thu, 15 Feb 2024 19:49:50 +0100 Subject: [PATCH] Refactor `Login.login()` method --- edupage_api/__init__.py | 2 +- edupage_api/login.py | 64 +++++++++++++---------------------------- 2 files changed, 21 insertions(+), 45 deletions(-) diff --git a/edupage_api/__init__.py b/edupage_api/__init__.py index ab139a6..4d59d9f 100644 --- a/edupage_api/__init__.py +++ b/edupage_api/__init__.py @@ -61,7 +61,7 @@ def login_auto(self, username: str, password: str): password (str): Your password. """ - Login(self).login_auto(username, password) + Login(self).login(username, password) def get_students(self) -> Optional[list[EduStudent]]: """Get list of all students in your class. diff --git a/edupage_api/login.py b/edupage_api/login.py index 5b0d285..d43fa0a 100644 --- a/edupage_api/login.py +++ b/edupage_api/login.py @@ -7,51 +7,22 @@ class Login(Module): def __parse_login_data(self, data): - json_string = (data.split("userhome(", 1)[1] - .rsplit(");", 2)[0] - .replace("\t", "") - .replace("\n", "") - .replace("\r", "")) + json_string = ( + data.split("userhome(", 1)[1] + .rsplit(");", 2)[0] + .replace("\t", "") + .replace("\n", "") + .replace("\r", "") + ) self.edupage.data = json.loads(json_string) self.edupage.is_logged_in = True - self.edupage.gsec_hash = data.split("ASC.gsechash=\"")[1].split("\"")[0] + self.edupage.gsec_hash = data.split('ASC.gsechash="')[1].split('"')[0] - def login_auto(self, username: str, password: str): - """Login using https://portal.edupage.org. If this doesn't work, please use `Login.login`. - - Args: - username (str): Your username. - password (str): Your password. - - Raises: - BadCredentialsException: Your credentials are invalid. - """ - - response = self.edupage.session.get("https://login1.edupage.org") - data = response.content.decode() - csrf_token = data.split('name="csrfauth" value="')[1].split('"')[0] - - parameters = { - "csrfauth": csrf_token, - "username": username, - "password": password, - } - - request_url = "https://login1.edupage.org/login/edubarLogin.php" - response = self.edupage.session.post(request_url, parameters) - data = response.content.decode() - - if "bad=1" in response.url: - raise BadCredentialsException() - - self.__parse_login_data(data) - self.edupage.subdomain = data.split("-->")[0].split(" ")[-1] - self.edupage.username = username - - def login(self, username: str, password: str, subdomain: str): - """Login while specifying the subdomain to log into. + def login(self, username: str, password: str, subdomain: str = "login1"): + """Login to your school's Edupage account. + If the subdomain is not specified, the https://login1.edupage.org is used. Args: username (str): Your username. @@ -64,24 +35,29 @@ def login(self, username: str, password: str, subdomain: str): request_url = f"https://{subdomain}.edupage.org/login/index.php" - csrf_response = self.edupage.session.get(request_url).content.decode() + response = self.edupage.session.get(request_url) + data = response.content.decode() - csrf_token = csrf_response.split("name=\"csrfauth\" value=\"")[1].split("\"")[0] + csrf_token = data.split('name="csrfauth" value="')[1].split('"')[0] parameters = { + "csrfauth": csrf_token, "username": username, "password": password, - "csrfauth": csrf_token } request_url = f"https://{subdomain}.edupage.org/login/edubarLogin.php" response = self.edupage.session.post(request_url, parameters) + data = response.content.decode() if "bad=1" in response.url: raise BadCredentialsException() - self.__parse_login_data(response.content.decode()) + if subdomain == "login1": + subdomain = data.split("-->")[0].split(" ")[-1] + + self.__parse_login_data(data) self.edupage.subdomain = subdomain self.edupage.username = username