Marek4321 commited on
Commit
6ef4932
verified
1 Parent(s): 4aa7066

Create jwt_handler.py

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