diff --git a/src/client.py b/src/client.py index 7c6794c..e752ec8 100644 --- a/src/client.py +++ b/src/client.py @@ -81,7 +81,7 @@ def createClientBlueprint(wireguardConfigurations: dict[WireguardConfiguration], if session.get('username') is None: return ResponseObject(False, "Sign in status is invalid", status_code=401) session['totpVerified'] = True - + # return ResponseObject(True, data=) return ResponseObject(status, msg) @client.get(prefix) diff --git a/src/modules/DashboardClients.py b/src/modules/DashboardClients.py index bbb10ba..5b50dbf 100644 --- a/src/modules/DashboardClients.py +++ b/src/modules/DashboardClients.py @@ -57,6 +57,7 @@ class DashboardClients: ).where( self.dashboardClientsTable.c.DeletedDate is None) ).mappings().fetchall() + def SignIn(self, Email, Password) -> tuple[bool, str]: if not all([Email, Password]): @@ -85,6 +86,8 @@ class DashboardClients: totpMatched = pyotp.TOTP(data.get('TotpKey')).verify(UserProvidedTotp) if not totpMatched: return False, "TOTP is does not match" + else: + self.DashboardClientsTOTP.RevokeToken(Token) if data.get('TotpKeyVerified') is None: with self.engine.begin() as conn: conn.execute( @@ -94,12 +97,9 @@ class DashboardClients: self.dashboardClientsTable.c.ClientID == data.get('ClientID') ) ) + return True, None - - - - def SignUp(self, Email, Password, ConfirmPassword) -> tuple[bool, str] or tuple[bool, None]: try: if not all([Email, Password, ConfirmPassword]): @@ -141,4 +141,7 @@ class DashboardClients: self.logger.log(Status="false", Message=f"Signed up failed, reason: {str(e)}") return False, "Signed up failed." - return True, None \ No newline at end of file + return True, None + + def UpdatePassword(self, CurrentPassword, NewPassword, ConfirmNewPassword): + pass \ No newline at end of file diff --git a/src/modules/DashboardClientsTOTP.py b/src/modules/DashboardClientsTOTP.py index dbb9884..e3830fb 100644 --- a/src/modules/DashboardClientsTOTP.py +++ b/src/modules/DashboardClientsTOTP.py @@ -39,9 +39,22 @@ class DashboardClientsTOTP: "ExpireTime": datetime.datetime.now() + datetime.timedelta(minutes=10) }) ) - return token + def RevokeToken(self, Token) -> bool: + try: + with self.engine.begin() as conn: + conn.execute( + self.dashboardClientsTOTPTable.update().values({ + "ExpireTime": datetime.datetime.now() + }).where( + self.dashboardClientsTOTPTable.c.Token == Token + ) + ) + except Exception as e: + return False + return True + def GetTotp(self, token: str) -> tuple[bool, dict] or tuple[bool, None]: with self.engine.connect() as conn: totp = conn.execute(