Spaces:
Running
Running
File size: 2,605 Bytes
6ef4932 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# @title utils/jwt_handler.py
import json
import base64
from typing import Optional, Dict, Any
class JWTHandler:
"""
Klasa do obsługi tokenów JWT i ekstrakcji GroupID.
"""
@staticmethod
def decode_jwt(jwt_token: str) -> Optional[Dict[str, Any]]:
"""
Dekoduje token JWT i zwraca payload.
Args:
jwt_token: Token JWT do zdekodowania
Returns:
Dict z danymi z payloadu lub None w przypadku błędu
"""
try:
# Token JWT składa się z 3 części oddzielonych kropkami
header, payload, signature = jwt_token.split('.')
# Dekoduj payload
# Uzupełnij padding jeśli potrzebny
padding = 4 - (len(payload) % 4)
if padding != 4:
payload = payload + ('=' * padding)
# Zamień znaki specjalne
payload = payload.replace('-', '+').replace('_', '/')
# Dekoduj Base64
decoded_bytes = base64.b64decode(payload)
decoded_str = decoded_bytes.decode('utf-8')
# Parsuj JSON
payload_data = json.loads(decoded_str)
return payload_data
except Exception as e:
print(f"Błąd dekodowania JWT: {str(e)}")
return None
@staticmethod
def extract_group_id(jwt_token: str) -> Optional[str]:
"""
Ekstrahuje GroupID z tokenu JWT.
Args:
jwt_token: Token JWT
Returns:
GroupID lub None w przypadku błędu
"""
try:
payload = JWTHandler.decode_jwt(jwt_token)
if payload and 'GroupID' in payload:
return payload['GroupID']
# Sprawdź alternatywne pole
elif payload and 'GroupId' in payload:
return payload['GroupId']
return None
except Exception as e:
print(f"Błąd ekstrakcji GroupID: {str(e)}")
return None
@staticmethod
def validate_jwt(jwt_token: str) -> bool:
"""
Sprawdza czy token JWT jest poprawny i zawiera GroupID.
Args:
jwt_token: Token JWT do walidacji
Returns:
True jeśli token jest poprawny i zawiera GroupID
"""
try:
payload = JWTHandler.decode_jwt(jwt_token)
return payload is not None and 'GroupID' in payload
except:
return False |