import re from datetime import datetime from app.extensions import jwt_redis_blocklist def invalidate_token(jti: str, exp: int): """ Invalidates a JWT by adding its JTI to the Redis blocklist. :param jti: JWT ID. :type jti: str :param exp: JWT expiration timestamp. :type exp: int """ expiration = datetime.fromtimestamp(exp) now = datetime.now() delta = expiration - now jwt_redis_blocklist.set(jti, "", ex=delta) def verify_email(email: str) -> bool: """ Verifies a given email string against a regular expression. :param email: Email string. :type email: str :return: Boolean indicating whether the email successfully passed the check. :rtype: bool """ email_regex = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$" return re.match(email_regex, email) and len(email) <= 64 def verify_displayname(displayname: str) -> bool: """ Verifies a given display name string against a regular expression. :param displayname: Display name string. :type displayname: str :return: Boolean indicating whether the display name successfully passed the check. :rtype: bool """ displayname_regex = r"^[a-zA-Z.-_]{1,64}$" return re.match(displayname_regex, displayname) def verify_username(username: str) -> bool: """ Verifies a given username string against a regular expression. :param username: Username string. :type username: str :return: Boolean indicating whether the username successfully passed the check. :rtype: bool """ username_regex = r"^[a-z]{1,64}$" return re.match(username_regex, username) def verify_password(password: str) -> bool: """ Verifies a given password string against a regular expression. :param password: Password string. :type password: str :return: Boolean indicating whether the password successfully passed the check. :rtype: bool """ password_regex = ( r"^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$ %^&*-]).{8,64}$" ) return re.match(password_regex, password)