Documentation API

La documentation API interactive est fournie par drf-spectacular.

Endpoints locaux

Une fois le backend démarré :

  • Schéma OpenAPI brut : http://localhost:8000/api/schema/

  • Swagger UI : http://localhost:8000/api/docs/

  • Redoc : http://localhost:8000/api/redoc/

Générer un fichier OpenAPI

Depuis le conteneur backend :

docker compose exec backend python manage.py spectacular --file schema.yml

Depuis un environnement Python local placé dans backend/ :

python manage.py spectacular --file schema.yml

Les vues fonctionnelles DRF peuvent ensuite être enrichies avec @extend_schema pour préciser les requêtes, réponses, exemples et tags quand l’inférence automatique ne suffit pas.

Note sur la réservation

La création d’une réservation utilisateur attend une station, un créneau et un mode d’authentification. Le champ emplacement est optionnel pour ce flux : si aucun emplacement n’est fourni, l’API attribue automatiquement un emplacement disponible dans la station demandée.

L’endpoint de disponibilité expose notamment available_count et total_count pour permettre au frontend d’afficher une disponibilité globale de station plutôt qu’une sélection manuelle de place.

Endpoints d’administration des accès

Les moyens d’accès sont séparés selon leur durée de vie :

  • les badges RFID persistants sont gérés sur l’utilisateur avec /api/admin/users/<user_id>/auth-methods/;

  • la révocation d’un badge RFID passe par /api/admin/users/<user_id>/auth-methods/<auth_id>/revoke/;

  • l’utilisateur affiche le QR courant ou les métadonnées du code SMS avec /api/reservations/<reservation_id>/access-payload/ sans rotation du secret;

  • l’utilisateur déclenche l’envoi du code SMS temporaire avec /api/reservations/<reservation_id>/send-access-code/;

  • les QR codes et codes SMS temporaires sont gérés sur la réservation avec /api/admin/reservations/<reservation_id>/access-payload/ pour régénérer une valeur temporaire sans l’afficher dans une fenêtre de copie côté admin;

  • la révocation d’un QR/code SMS temporaire passe par /api/admin/reservations/<reservation_id>/revoke-access/.

Ces endpoints exigent un utilisateur authentifié avec les droits staff. Ils ne renvoient jamais la valeur complète d’un badge RFID. Les QR codes et codes SMS temporaires sont dérivés côté serveur. Le QR est consultable immédiatement dans l’application. Le code SMS n’est pas renvoyé en clair par l’endpoint d’affichage: il est transmis par le canal SMS et l’envoi est journalisé dans JournalSecurite.

Le code SMS temporaire suit une politique compatible clavier matriciel : 8 caractères sur l’alphabet 0123456789ABCD, stockage haché, expiration, limitation de renvoi et verrouillage après 5 mauvaises saisies.

Le jeton de rafraîchissement JWT n’est pas exposé au JavaScript du frontend. Les endpoints /api/register/ et /api/login/ renvoient le jeton d’accès et posent le refresh token dans un cookie HttpOnly. /api/token/refresh/ lit ce cookie pour renouveler l’accès, et /api/logout/ le supprime.

L’endpoint admin de régénération de QR/code SMS temporaire ne renvoie pas le secret régénéré. Il confirme seulement l’opération et renvoie la réservation à jour.