aiteamutils 0.2.22__py3-none-any.whl → 0.2.24__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
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: Any,
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
- TokenCreationError: 토큰 생성 실패 시
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
- **user_data
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.22"
2
+ __version__ = "0.2.24"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aiteamutils
3
- Version: 0.2.22
3
+ Version: 0.2.24
4
4
  Summary: AI Team Utilities
5
5
  Project-URL: Homepage, https://github.com/yourusername/aiteamutils
6
6
  Project-URL: Issues, https://github.com/yourusername/aiteamutils/issues
@@ -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=2k5j8iV4jkp0IGRmOtEbVyoeuoDHbguzaYju0Wm-mmI,12715
11
+ aiteamutils/security.py,sha256=t1xdvfy2qpggiQGr89AMuRKvWK1UFMxJiJYAE5Lek7o,13453
12
12
  aiteamutils/validators.py,sha256=3N245cZFjgwtW_KzjESkizx5BBUDaJLbbxfNO4WOFZ0,7764
13
- aiteamutils/version.py,sha256=Mm5ouHx7VwulFLfCDKBLTQ-wZ87grFovjSV99Abt3Fc,44
14
- aiteamutils-0.2.22.dist-info/METADATA,sha256=sil3_P7va6jUaLuUaeEje6zaierWIpsrOUz6CwIRPG4,1718
15
- aiteamutils-0.2.22.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
16
- aiteamutils-0.2.22.dist-info/RECORD,,
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,,