aiteamutils 0.2.22__py3-none-any.whl → 0.2.24__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
aiteamutils/security.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
"""보안 관련 유틸리티."""
|
2
2
|
from datetime import datetime, timedelta, UTC
|
3
|
-
from typing import Dict, Any, Optional, Literal, Callable
|
3
|
+
from typing import Dict, Any, Optional, Literal, Callable, Type, Base
|
4
4
|
from fastapi import Request, HTTPException, status
|
5
5
|
from functools import wraps
|
6
6
|
from jose import jwt, JWTError
|
@@ -262,30 +262,30 @@ async def create_jwt_token(
|
|
262
262
|
user_data: Dict[str, Any],
|
263
263
|
token_type: Literal["access", "refresh"],
|
264
264
|
db_service: DatabaseService,
|
265
|
-
log_model:
|
265
|
+
log_model: Type[Base],
|
266
266
|
request: Optional[Request] = None
|
267
267
|
) -> str:
|
268
268
|
"""JWT 토큰을 생성하고 로그를 기록합니다.
|
269
269
|
|
270
270
|
Args:
|
271
|
-
user_data: 사용자 데이터 (username, ulid 등
|
271
|
+
user_data: 사용자 데이터 딕셔너리 (username, ulid, name, role_ulid, status, organization 정보 등)
|
272
272
|
token_type: 토큰 타입 ("access" 또는 "refresh")
|
273
273
|
db_service: 데이터베이스 서비스
|
274
|
-
log_model:
|
274
|
+
log_model: 로그 모델 클래스
|
275
275
|
request: FastAPI 요청 객체
|
276
276
|
|
277
277
|
Returns:
|
278
278
|
str: 생성된 JWT 토큰
|
279
279
|
|
280
280
|
Raises:
|
281
|
-
|
282
|
-
SecurityError: 기타 보안 관련 오류 발생 시
|
281
|
+
CustomException: 토큰 생성 실패 시
|
283
282
|
"""
|
284
283
|
try:
|
285
284
|
settings = get_settings()
|
285
|
+
|
286
286
|
# 필수 필드 검증
|
287
287
|
required_fields = {"username", "ulid"}
|
288
|
-
missing_fields = required_fields - user_data.keys()
|
288
|
+
missing_fields = required_fields - set(user_data.keys())
|
289
289
|
if missing_fields:
|
290
290
|
raise TokenCreationError(
|
291
291
|
detail=f"Missing required fields: {', '.join(missing_fields)}",
|
@@ -293,16 +293,31 @@ async def create_jwt_token(
|
|
293
293
|
token_type=token_type
|
294
294
|
)
|
295
295
|
|
296
|
-
# 토큰 데이터 생성
|
297
296
|
if token_type == "access":
|
298
297
|
expires_at = datetime.now(UTC) + timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES)
|
299
298
|
token_data = {
|
299
|
+
# 등록 클레임
|
300
300
|
"iss": settings.TOKEN_ISSUER,
|
301
301
|
"sub": user_data["username"],
|
302
302
|
"aud": settings.TOKEN_AUDIENCE,
|
303
303
|
"exp": expires_at,
|
304
|
+
|
305
|
+
# 공개 클레임
|
306
|
+
"username": user_data["username"],
|
307
|
+
"name": user_data.get("name"),
|
308
|
+
|
309
|
+
# 비공개 클레임
|
310
|
+
"user_ulid": user_data["ulid"],
|
311
|
+
"role_ulid": user_data.get("role_ulid"),
|
312
|
+
"status": user_data.get("status"),
|
313
|
+
"last_login": datetime.now(UTC).isoformat(),
|
304
314
|
"token_type": token_type,
|
305
|
-
|
315
|
+
|
316
|
+
# 조직 관련 클레임
|
317
|
+
"organization_ulid": user_data.get("organization_ulid"),
|
318
|
+
"organization_id": user_data.get("organization_id"),
|
319
|
+
"organization_name": user_data.get("organization_name"),
|
320
|
+
"company_name": user_data.get("company_name")
|
306
321
|
}
|
307
322
|
else: # refresh token
|
308
323
|
expires_at = datetime.now(UTC) + timedelta(days=14)
|
aiteamutils/version.py
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
"""버전 정보"""
|
2
|
-
__version__ = "0.2.
|
2
|
+
__version__ = "0.2.24"
|
@@ -8,9 +8,9 @@ aiteamutils/database.py,sha256=raYKRZjEfefM3SnoPYozPu7OUGm62XWOUqZzN4_cayw,33479
|
|
8
8
|
aiteamutils/dependencies.py,sha256=e5P-DQi5OMMh7FADaAUqU0kLVBcReE7za55EDNZN950,4008
|
9
9
|
aiteamutils/enums.py,sha256=ipZi6k_QD5-3QV7Yzv7bnL0MjDz-vqfO9I5L77biMKs,632
|
10
10
|
aiteamutils/exceptions.py,sha256=YV-ISya4wQlHk4twvGo16I5r8h22-tXpn9wa-b3WwDM,15231
|
11
|
-
aiteamutils/security.py,sha256=
|
11
|
+
aiteamutils/security.py,sha256=t1xdvfy2qpggiQGr89AMuRKvWK1UFMxJiJYAE5Lek7o,13453
|
12
12
|
aiteamutils/validators.py,sha256=3N245cZFjgwtW_KzjESkizx5BBUDaJLbbxfNO4WOFZ0,7764
|
13
|
-
aiteamutils/version.py,sha256=
|
14
|
-
aiteamutils-0.2.
|
15
|
-
aiteamutils-0.2.
|
16
|
-
aiteamutils-0.2.
|
13
|
+
aiteamutils/version.py,sha256=xu1IgfL2hhBUF2d91PMBax7rAUgopL3RxVIiQol7jAg,44
|
14
|
+
aiteamutils-0.2.24.dist-info/METADATA,sha256=CX-Mx2vQIjg5tPPaKKMWfwEYZv9Q-4LuVK6AGuqayqs,1718
|
15
|
+
aiteamutils-0.2.24.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
16
|
+
aiteamutils-0.2.24.dist-info/RECORD,,
|
File without changes
|