Internal API — Service-to-Service
Endpoints réservés aux plateformes de confiance (dema1n, inspire, jobready). Protégés par API key (X-API-KEY header).
Authentification
Chaque plateforme dispose d'une clé dédiée dans les variables d'environnement (DEMA1N_API_KEY, INSPIRE_API_KEY, JOBREADY_API_KEY, A1CONNECT_API_KEY). La clé est validée par ApiKeyAuthGuard.
Absence ou clé invalide → 401 Unauthorized.
Endpoints
GET /api/v1/auth/internal/user/:email
Vérifie si un email est enregistré dans A1C.
Requête
GET /api/v1/auth/internal/user/jean.dupont@example.com
X-API-KEY: <PLATFORM_API_KEY>
Réponses
| Status | Corps | Condition |
|---|---|---|
| 200 | { "exists": false } |
Email inconnu |
| 200 | { "exists": true } |
Email trouvé |
| 400 | { "message": "Invalid email format" } |
Format email invalide (regex côté controller) |
| 401 | — | API key absente ou invalide |
POST /api/v1/auth/internal/connect
Crée un utilisateur s'il n'existe pas, ou le connecte s'il existe déjà. Retourne un sessionJwt standard utilisable par la plateforme appelante.
Requête
POST /api/v1/auth/internal/connect
X-API-KEY: <PLATFORM_API_KEY>
{
"email": "jean.dupont@example.com",
"firstname": "Jean",
"lastname": "Dupont",
"password": "MotDePasse1!",
"origin": "dema1n"
}
Contraintes du champ password (validées par DTO) :
- Minimum 8 caractères
- Au moins une minuscule, une majuscule, un chiffre et un caractère spécial
Réponses
| Status | Corps | Condition |
|---|---|---|
| 201 | { "sessionJwt": "eyJ...", "userId": "uuid", "created": true } |
User créé (inexistant) |
| 201 | { "sessionJwt": "eyJ...", "userId": "uuid", "created": false } |
User connecté (existant, bon mot de passe) |
| 400 | { "message": [...] } |
Body invalide — email mal formé, champ manquant, mot de passe trop court ou ne respectant pas le pattern |
| 400 | { "message": "Adresse email invalide ou non délivrable (<reason>)." } |
Email non délivrable selon Emailable (uniquement à la création) |
| 401 | — | User existant mais mot de passe incorrect |
| 401 | — | API key absente ou invalide |
Comportement à la création : cguValidate est positionné à now(). La vérification de délivrabilité email via Emailable est effectuée avant la création — si EMAILABLE_API_KEY est vide, la vérification est désactivée et l'email est accepté.
Comportement à la connexion : si l'utilisateur a passwordEncoded = false (mot de passe non encore migré vers bcrypt), le mot de passe est vérifié auprès de la plateforme d'origine via son API interne, puis hashé et stocké en cas de succès.