Refactor: Modularize lib_general.py by extracting core functionalities.
- Extracted Email functions to app/lib_email.py. - Extracted Export functions to app/lib_export.py. - Extracted JWT utilities to app/lib_jwt.py. - Extracted Hash utilities to app/lib_hash.py. - Updated app/lib_general.py to import from these new modules for backward compatibility. - Updated V3 Frontend API Guide with latest security and site_domain exception details.
This commit is contained in:
68
app/lib_jwt.py
Normal file
68
app/lib_jwt.py
Normal file
@@ -0,0 +1,68 @@
|
||||
import jwt
|
||||
import time
|
||||
import logging
|
||||
from typing import Dict, Optional
|
||||
|
||||
from app.log import logger_reset
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
# ### BEGIN ### API Lib JWT ### sign_jwt() ###
|
||||
# Moved from lib_general.py 2026-01-07
|
||||
@logger_reset
|
||||
def sign_jwt(
|
||||
secret_key: str, # Secret/Private/Password
|
||||
ttl: int = 60, # Default to 60 seconds
|
||||
max_renew: int = 0, # Default to 0
|
||||
public_key: str = None, # Will be part of the token. Use to look up secret when verifying.???
|
||||
account_id: str = None,
|
||||
person_id: str = None,
|
||||
user_id: str = None,
|
||||
json_str: str = None,
|
||||
b64_str: str = None,
|
||||
) -> str:
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
payload = {
|
||||
'iat': time.time(), # Issued at
|
||||
'eat': time.time() + ttl, # Expires at
|
||||
'max_renew': max_renew, # Number of times allowed to request renew without API secret key
|
||||
'public_key': public_key, # Use to lookup the secret/private/password key when verifying
|
||||
'account_id': account_id,
|
||||
'person_id': person_id,
|
||||
'user_id': user_id,
|
||||
'json_str': json_str,
|
||||
'b64_str': b64_str,
|
||||
}
|
||||
secret = secret_key
|
||||
algorithm = 'HS256'
|
||||
token = jwt.encode(payload, secret, algorithm=algorithm)
|
||||
|
||||
log.debug(token)
|
||||
|
||||
return token
|
||||
# ### END ### API Lib JWT ### sign_jwt() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Lib JWT ### decode_jwt() ###
|
||||
# Moved from lib_general.py 2026-01-07
|
||||
@logger_reset
|
||||
def decode_jwt(
|
||||
secret_key: str,
|
||||
token: str,
|
||||
) -> Optional[dict]:
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
secret = secret_key
|
||||
algorithm = 'HS256'
|
||||
|
||||
try:
|
||||
decoded_token = jwt.decode(token, secret, algorithms=[algorithm])
|
||||
log.debug(decoded_token)
|
||||
if decoded_token['eat'] >= time.time(): return decoded_token
|
||||
else: return False
|
||||
except:
|
||||
return None
|
||||
# ### END ### API Lib JWT ### decode_jwt() ###
|
||||
Reference in New Issue
Block a user