feat: link local library
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
import datetime
|
||||
from typing import List
|
||||
|
||||
from django.conf import settings
|
||||
from django.utils import timezone
|
||||
from pydantic import BaseModel, HttpUrl, validator
|
||||
from spid_cie_oidc.entity.utils import datetime_from_timestamp
|
||||
|
||||
|
||||
try:
|
||||
import spid_cie_oidc.entity.settings as entity_settings
|
||||
|
||||
NOW = timezone.localtime()
|
||||
MAX_ACCEPTED_TIMEDIFF = getattr(
|
||||
settings, "MAX_ACCEPTED_TIMEDIFF", entity_settings.MAX_ACCEPTED_TIMEDIFF
|
||||
)
|
||||
except ImportError: # pragma: no cover
|
||||
NOW = datetime.datetime.now()
|
||||
MAX_ACCEPTED_TIMEDIFF = 5
|
||||
|
||||
|
||||
class JwtStructure(BaseModel):
|
||||
iss: HttpUrl
|
||||
sub: HttpUrl
|
||||
iat: int
|
||||
exp: int
|
||||
jti: str
|
||||
# TODO: migliorare: array di url con almeno uno
|
||||
aud: List[HttpUrl]
|
||||
|
||||
@validator("exp")
|
||||
def validate_exp(cls, exp):
|
||||
now = int(NOW.timestamp())
|
||||
if exp <= now:
|
||||
raise ValueError("exp MUST be in the future")
|
||||
|
||||
@validator("iat")
|
||||
def validate_iat(cls, iat):
|
||||
dt_iat = datetime_from_timestamp(iat)
|
||||
delta = datetime.timedelta(minutes=MAX_ACCEPTED_TIMEDIFF)
|
||||
if abs((NOW - dt_iat).total_seconds()) > delta.total_seconds():
|
||||
raise ValueError(f"iat MUST be in the last {MAX_ACCEPTED_TIMEDIFF} minutes")
|
||||
|
||||
|
||||
class IdTokenJwt(JwtStructure):
|
||||
# TODO: implementare
|
||||
pass
|
||||
|
||||
|
||||
class AccessTokenJwt(JwtStructure):
|
||||
# TODO: implementare
|
||||
pass
|
||||
|
||||
|
||||
class RefreshTokenJwt(JwtStructure):
|
||||
# TODO: implementare
|
||||
pass
|
||||
|
||||
|
||||
class UserInfoResponseJwtHeader(BaseModel):
|
||||
# TODO: implementare
|
||||
pass
|
||||
|
||||
|
||||
class UserInfoResponseJwtPayload(JwtStructure):
|
||||
# TODO: implementare
|
||||
pass
|
||||
Reference in New Issue
Block a user