35 lines
1.3 KiB
Python
35 lines
1.3 KiB
Python
from app.core.config import Settings
|
|
from app.lib.jwt.blacklist import InMemoryTokenBlacklist
|
|
from app.lib.jwt.jwt import Jwt, JwtSceneConfig
|
|
|
|
|
|
class JwtFactory:
|
|
def __init__(self, settings: Settings, blacklist: InMemoryTokenBlacklist) -> None:
|
|
self.settings = settings
|
|
self.blacklist = blacklist
|
|
|
|
def get(self, scene: str = "default") -> Jwt:
|
|
if scene == "admin":
|
|
return Jwt(
|
|
JwtSceneConfig(
|
|
secret=self.settings.admin_jwt_secret,
|
|
issuer=f"{self.settings.app_name}_admin",
|
|
ttl=self.settings.admin_jwt_ttl,
|
|
refresh_ttl=self.settings.admin_jwt_refresh_ttl,
|
|
blacklist_ttl=self.settings.jwt_blacklist_ttl,
|
|
),
|
|
self.blacklist,
|
|
)
|
|
|
|
scene_name = "default" if scene == "default" else scene
|
|
return Jwt(
|
|
JwtSceneConfig(
|
|
secret=self.settings.api_jwt_secret,
|
|
issuer=f"{self.settings.app_name}_{scene_name}",
|
|
ttl=self.settings.api_jwt_ttl,
|
|
refresh_ttl=self.settings.api_jwt_refresh_ttl,
|
|
blacklist_ttl=self.settings.jwt_blacklist_ttl,
|
|
),
|
|
self.blacklist,
|
|
)
|