75 lines
2.1 KiB
Python
75 lines
2.1 KiB
Python
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)
|