fix(auth): corrige la CI cassee par le nouvel endpoint de validation
Backend / Lint, typage et tests (push) Successful in 1m19s
Backend / Lint, typage et tests (push) Successful in 1m19s
/auth/reset-password/validate manquait a la liste explicite des routes publiques (test_route_protection) et n'avait pas le modele de reponse 422 declare (openapi.json desynchronise du contrat genere).
This commit is contained in:
@@ -325,6 +325,7 @@ async def forgot_password(
|
|||||||
"/reset-password/validate",
|
"/reset-password/validate",
|
||||||
response_model=ResetTokenValidationResponse,
|
response_model=ResetTokenValidationResponse,
|
||||||
summary="Vérifie sans le consommer si un lien de réinitialisation est encore valide",
|
summary="Vérifie sans le consommer si un lien de réinitialisation est encore valide",
|
||||||
|
responses=REPONSE_VALIDATION,
|
||||||
)
|
)
|
||||||
async def validate_reset_token(token: str, service: AuthServiceDep) -> ResetTokenValidationResponse:
|
async def validate_reset_token(token: str, service: AuthServiceDep) -> ResetTokenValidationResponse:
|
||||||
return ResetTokenValidationResponse(valid=await service.is_reset_token_valid(token=token))
|
return ResetTokenValidationResponse(valid=await service.is_reset_token_valid(token=token))
|
||||||
|
|||||||
@@ -491,6 +491,58 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/api/v1/auth/reset-password/validate": {
|
||||||
|
"get": {
|
||||||
|
"tags": [
|
||||||
|
"auth"
|
||||||
|
],
|
||||||
|
"summary": "Vérifie sans le consommer si un lien de réinitialisation est encore valide",
|
||||||
|
"operationId": "validate_reset_token_api_v1_auth_reset_password_validate_get",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "token",
|
||||||
|
"in": "query",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"type": "string",
|
||||||
|
"title": "Token"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "Successful Response",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/components/schemas/ResetTokenValidationResponse"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Erreur interne. `correlation` identifie la trace côté serveur, qui n'est pas renvoyée au client.",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/components/schemas/InternalErrorResponse"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"422": {
|
||||||
|
"description": "Corps invalide. Le détail nomme le champ fautif et le type d'erreur, jamais la valeur envoyée.",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/components/schemas/ValidationErrorResponse"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/api/v1/auth/reset-password": {
|
"/api/v1/auth/reset-password": {
|
||||||
"post": {
|
"post": {
|
||||||
"tags": [
|
"tags": [
|
||||||
@@ -2166,6 +2218,19 @@
|
|||||||
],
|
],
|
||||||
"title": "ResetPasswordRequest"
|
"title": "ResetPasswordRequest"
|
||||||
},
|
},
|
||||||
|
"ResetTokenValidationResponse": {
|
||||||
|
"properties": {
|
||||||
|
"valid": {
|
||||||
|
"type": "boolean",
|
||||||
|
"title": "Valid"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"valid"
|
||||||
|
],
|
||||||
|
"title": "ResetTokenValidationResponse"
|
||||||
|
},
|
||||||
"Role": {
|
"Role": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": [
|
"enum": [
|
||||||
|
|||||||
@@ -22,6 +22,9 @@ ROUTES_PUBLIQUES = frozenset(
|
|||||||
# Protégée par le jeton dans le corps de la requête, pas par un `Principal` : aucune
|
# Protégée par le jeton dans le corps de la requête, pas par un `Principal` : aucune
|
||||||
# authentification préalable ne s'applique, c'est la validité du jeton qui tranche.
|
# authentification préalable ne s'applique, c'est la validité du jeton qui tranche.
|
||||||
("POST", "/api/v1/auth/reset-password"),
|
("POST", "/api/v1/auth/reset-password"),
|
||||||
|
# Même raison : lecture seule, protégée par le jeton passé en paramètre, pas par un
|
||||||
|
# `Principal`. Le jeton est un secret de 256 bits, non brute-forçable.
|
||||||
|
("GET", "/api/v1/auth/reset-password/validate"),
|
||||||
("GET", "/metrics"),
|
("GET", "/metrics"),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user