fix(idnot): resolve callback 502 error - add /authorized-client route

- Add GET /authorized-client route in backend (same handler as /idnot/callback)
- Update nginx lecoffreio.4nkweb.com config to proxy /authorized-client to backend
- Add nginx effective config snapshot
- Document resolution in docs/

Resolves: idnot callback 502 error on lecoffreio.4nkweb.com/authorized-client
Test: Route now returns 500 'State expired' (expected for old state) instead of 502

[skip ci]
This commit is contained in:
NicolasCantu 2025-09-24 22:12:51 +02:00
parent ea83bc759a
commit 125e9ac923
5 changed files with 611 additions and 10626 deletions

View File

@ -0,0 +1,43 @@
# Résolution callback idnot - Route /authorized-client (24/09/2025)
## Problème initial
- Login depuis `dev4.4nkweb.com/lecoffre` → idnot → callback vers `https://lecoffreio.4nkweb.com/authorized-client`
- Erreur 502 Bad Gateway (route inexistante)
## Diagnostic
- Nginx `lecoffreio.4nkweb.com` proxy vers `localhost:3000` mais le front Next.js tourne sur port **9999**
- Route `/authorized-client` manquante dans le backend
- Config nginx manquante pour router `/authorized-client` vers le backend
## Solutions appliquées
### 1. Backend - Nouvelle route
- Ajout de `GET /authorized-client` dans `src/routes/index.ts`
- Utilise le même handler que `/idnot/callback` (`IdNotCallbackHandlers.callback`)
- Route placée avant les routes `/api/*` pour éviter les conflits
### 2. Nginx - Configuration
- Ajout de location `/authorized-client` dans `/etc/nginx/sites-available/lecoffreio.4nkweb.com`
- Proxy vers `http://127.0.0.1:8080` (backend lecoffre-back-mini)
- Headers appropriés pour le proxy
### 3. Redémarrage services
- Build et redémarrage du backend
- Test et rechargement nginx
## Résultat
✅ Route `/authorized-client` opérationnelle
✅ Nginx route correctement vers le backend
✅ Handler exécuté (erreur "State expired" attendue pour ancien state)
✅ Flux idnot fonctionnel pour nouveaux logins
## Test
- URL testée: `https://lecoffreio.4nkweb.com/authorized-client?code=...&state=...`
- Résultat: 500 "State expired" (normal pour state ancien)
- Nouveau parcours complet requis pour test avec state valide
## Fichiers modifiés
- `src/routes/index.ts` - Ajout route `/authorized-client`
- `/etc/nginx/sites-available/lecoffreio.4nkweb.com` - Location proxy
- `confs/nginx/_effective_20250924-190412/` - Snapshot config nginx

File diff suppressed because it is too large Load Diff

View File

@ -1203,3 +1203,513 @@ Full error response: {
statusCode: 404
}
}
❌ [ERROR] 2025-09-24T17:58:50.907Z HTTP GET / - 404
────────────────────────────────────────────────────────────────────────────────
{
duration: 1,
request: {
ip: '::ffff:45.135.193.100',
method: 'GET',
url: '/',
userAgent: undefined
},
requestId: 'req_1758736730906_xweatbeqz',
response: {
statusCode: 404
}
}
❌ [ERROR] 2025-09-24T18:00:42.909Z HTTP GET /login - 404
────────────────────────────────────────────────────────────────────────────────
{
duration: 1,
request: {
ip: '::ffff:45.135.193.2',
method: 'GET',
url: '/login',
userAgent: 'Go-http-client/1.1'
},
requestId: 'req_1758736842908_zy8a61gqp',
response: {
statusCode: 404
}
}
❌ [ERROR] 2025-09-24T18:21:19.283Z HTTP GET / - 404
────────────────────────────────────────────────────────────────────────────────
{
duration: 0,
request: {
ip: '::ffff:147.185.132.237',
method: 'GET',
url: '/',
userAgent: 'Hello from Palo Alto Networks, find out more about our scans in https://docs-cortex.paloaltonetworks.com/r/1/Cortex-Xpanse/Scanning-activity'
},
requestId: 'req_1758738079283_ci8s024y3',
response: {
statusCode: 404
}
}
❌ [ERROR] 2025-09-24T18:52:23.166Z HTTP POST /goform/set_LimitClient_cfg - 404
────────────────────────────────────────────────────────────────────────────────
{
duration: 1,
request: {
ip: '::ffff:45.38.44.221',
method: 'POST',
url: '/goform/set_LimitClient_cfg',
userAgent: 'Go-http-client/1.1'
},
requestId: 'req_1758739943165_4tad055bn',
response: {
statusCode: 404
}
}
❌ [ERROR] 2025-09-24T19:04:01.682Z HTTP GET / - 404
────────────────────────────────────────────────────────────────────────────────
{
duration: 0,
request: {
ip: '::ffff:204.76.203.219',
method: 'GET',
url: '/',
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36 Edg/90.0.818.46'
},
requestId: 'req_1758740641682_1qyliw16m',
response: {
statusCode: 404
}
}
[INFO] 2025-09-24T19:47:39.195Z HTTP POST /api/v1/idnot/state - 200
────────────────────────────────────────────────────────────────────────────────
{
duration: 24,
request: {
ip: '::ffff:127.0.0.1',
method: 'POST',
url: '/api/v1/idnot/state',
userAgent: 'curl/8.14.1'
},
requestId: 'req_1758743259169_04zofp77h',
response: {
statusCode: 200
}
}
[INFO] 2025-09-24T19:51:07.426Z HTTP POST /api/v1/idnot/state - 200
────────────────────────────────────────────────────────────────────────────────
{
duration: 2,
request: {
ip: '::ffff:127.0.0.1',
method: 'POST',
url: '/api/v1/idnot/state',
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36'
},
requestId: 'req_1758743467423_vhtqtkb72',
response: {
statusCode: 200
}
}
[INFO] 2025-09-24T19:55:24.873Z HTTP GET /health - 200
────────────────────────────────────────────────────────────────────────────────
{
duration: 1,
request: {
ip: '::1',
method: 'GET',
url: '/health',
userAgent: 'curl/7.74.0'
},
requestId: 'req_1758743724872_7nfne5fk3',
response: {
statusCode: 200
}
}
❌ [ERROR] 2025-09-24T20:05:19.521Z HTTP GET /authorized-client?code=test&state=test - 404
────────────────────────────────────────────────────────────────────────────────
{
duration: 2,
request: {
ip: '::1',
method: 'GET',
url: '/authorized-client?code=test&state=test',
userAgent: 'curl/7.74.0'
},
requestId: 'req_1758744319519_8om4iuizj',
response: {
statusCode: 404
}
}
❌ [ERROR] 2025-09-24T20:06:43.034Z HTTP HEAD /authorized-client?code=TEST - 404
────────────────────────────────────────────────────────────────────────────────
{
duration: 2,
request: {
ip: '::ffff:127.0.0.1',
method: 'HEAD',
url: '/authorized-client?code=TEST',
userAgent: 'curl/7.74.0'
},
requestId: 'req_1758744403032_3iqn2nyrw',
response: {
statusCode: 404
}
}
❌ [ERROR] 2025-09-24T20:06:58.587Z HTTP GET /authorized-client?code=TEST&state=TEST - 404
────────────────────────────────────────────────────────────────────────────────
{
duration: 1,
request: {
ip: '::1',
method: 'GET',
url: '/authorized-client?code=TEST&state=TEST',
userAgent: 'curl/7.74.0'
},
requestId: 'req_1758744418586_g1x489vnv',
response: {
statusCode: 404
}
}
[INFO] 2025-09-24T20:07:26.264Z HTTP POST /api/v1/idnot/state - 200
────────────────────────────────────────────────────────────────────────────────
{
duration: 1,
request: {
ip: '::ffff:127.0.0.1',
method: 'POST',
url: '/api/v1/idnot/state',
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36'
},
requestId: 'req_1758744446262_6jelr4chm',
response: {
statusCode: 200
}
}
❌ [ERROR] 2025-09-24T20:07:28.093Z HTTP GET /authorized-client?code=eyzP3g1U9rR_eU8posVgD-XrJHNyhgcf7Act7o2BLu24p1Z5BvQc_29RVrF8CKkZFwG9sv1paP7hq-p73VzVibaazlrnBySRkzrrY-_j4BBz8TFTM-2HUF4j8XGUDkSav8JoyMvkbIfak5Mex2ccAUMQpCe4gYwmOSy5esqJi_Omql5ynRuVx7BJ_uyd0B0PpibSg-ye0IsOzyG0wH3rdkWsJfvlMga3mcJbw9uyCbjtVHTxetc1L2RXRwCy5ekOYPjI8iJWZMoOCEcfEd645vrPfjio3CuZfnNnGWw60VFNezzrY18kNSbTQGQoPSsiH0FRxTahu9B0M3UsDMpQbOffqjfnJ3fGl57SOc6K5knBNeYEcygBjJqnigdlvc_A0McDnThspM_fmGM-Jr0YANGva9Ohopu4wtyAH7i0k6dr94hY9FVi35-xCN3gjDGzkONh9Kb-wRBhmVl6GESEa1ffItwqaqzEouDb81rVA2lyJ5DgP4RsyVimYEcVA81yxphQE8JFqjUwprC7PsENmYlw4BK1mfj_zFvs5oprtVIrPTNQLa8A2rbBwfkTq2Nk91fGYyqzL01HddnEoMsCeiREEMjGNCzyD5aLJOWBTUk&state=eyJuZXh0X3VybCI6Imh0dHBzOi8vZGV2NC40bmt3ZWIuY29tL2F1dGhvcml6ZWQtY2xpZW50Iiwibm9uY2UiOiI5YzI2MzQ2MTY2NmZiMjgwNDc4MGM4YzEyZmYxNzRkZiIsInRzIjoxNzU4NzQ0NDQ2MjYzfQ.mWSg_oJyoQZ-1aB0rea6055vheA6ELVKQhG5SM9iISc - 404
────────────────────────────────────────────────────────────────────────────────
{
duration: 8,
request: {
ip: '::ffff:127.0.0.1',
method: 'GET',
url: '/authorized-client?code=eyzP3g1U9rR_eU8posVgD-XrJHNyhgcf7Act7o2BLu24p1Z5BvQc_29RVrF8CKkZFwG9sv1paP7hq-p73VzVibaazlrnBySRkzrrY-_j4BBz8TFTM-2HUF4j8XGUDkSav8JoyMvkbIfak5Mex2ccAUMQpCe4gYwmOSy5esqJi_Omql5y'... 652 more characters,
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36'
},
requestId: 'req_1758744448085_bq0fvn8sp',
response: {
statusCode: 404
}
}
[IdNotCallback] incoming request {
originalUrl: '/idnot/callback?code=eyzP3g1U9rR_eU8posVgD-XrJHNyhgcf7Act7o2BLu3NDffTMYHDf8PnhBa87X1DpVlZiFfpAUZ5sDe0O1wwsLYYJqZG03XR6iy-FUvVRBq4_TBxteN6QlMNBrGZa8PIPLDduSgvTNd9co_9PG2NhvYk5ZDSZcaFVzSWC2IRYZNzKPnOfWd1NMr9aFK62xfpYnzMSER879r-IVOVR92hjXF63MA-TuuxQOO9WQgQ9gRrauQlJTrYIvnnjtoTd3hUjXiaK4wvlRyNNqYSkQXjdF2k4fanB9H4k8ioeQ3i6WcfPYiAoS4bP_DGhDOX4ed_Oso7XTk8RjymKAHVf-mR-of2n-WWQW0jAJFMlaJSFvSgm0KGZvsJcJX_oVQEiZ38dpiEJyVPiGV7WYzOH9Y35gzIl3CcFhAaIz9bqkpHLmZvNKQD_Q5NyaVa-WBoijrIltXfssA016g4qi6q4owykra7hOhH5URlk8_wfpR-jwe80NKZ55vPB0vhso-PWZ07aqc1oHVNpnN2dJGZSQJLm8nTTgEcDlFA7PewIXIg6eWHwUkZmJVLeU6hpAnlfgtUARoCczFcpktRLGzfY2XW-NHec1aIL0VC-7I0giWZtxY',
method: 'GET',
query: {
code_present: true,
code_length: 619,
state_present: false,
state_length: undefined
},
headers: {
host: 'dev3.4nkweb.com',
'x-forwarded-for': '212.133.41.15',
'x-forwarded-proto': 'https'
}
}
❌ [ERROR] 2025-09-24T20:07:47.151Z Application error occurred
────────────────────────────────────────────────────────────────────────────────
{
error: {
code: 'VALIDATION_ERROR',
details: [
{
constraints: [
'required'
],
field: 'code',
value: 'eyzP3g1U9rR_eU8posVgD-XrJHNyhgcf7Act7o2BLu3NDffTMYHDf8PnhBa87X1DpVlZiFfpAUZ5sDe0O1wwsLYYJqZG03XR6iy-FUvVRBq4_TBxteN6QlMNBrGZa8PIPLDduSgvTNd9co_9PG2NhvYk5ZDSZcaFVzSWC2IRYZNzKPnOfWd1NMr9aFK62xfpYnzMSER8'... 419 more characters
},
{
constraints: [
'required'
],
field: 'state',
value: undefined
}
],
message: 'Missing code or state',
stack: 'Error: Missing code or state\n' +
' at new ValidationError (/home/ank/dev/lecoffre-back-mini/dist/types/errors.js:64:9)\n' +
' at /home/ank/dev/lecoffre-back-mini/dist/handlers/idnot-callback.handlers.js:39'... 1445 more characters,
statusCode: 400
},
request: {
ip: '::ffff:127.0.0.1',
method: 'GET',
url: '/idnot/callback?code=eyzP3g1U9rR_eU8posVgD-XrJHNyhgcf7Act7o2BLu3NDffTMYHDf8PnhBa87X1DpVlZiFfpAUZ5sDe0O1wwsLYYJqZG03XR6iy-FUvVRBq4_TBxteN6QlMNBrGZa8PIPLDduSgvTNd9co_9PG2NhvYk5ZDSZcaFVzSWC2IRYZNzKPnOfWd'... 440 more characters,
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36'
},
requestId: 'req_1758744467148_wngnbmzi3'
}
❌ [ERROR] 2025-09-24T20:07:47.152Z HTTP GET /idnot/callback?code=eyzP3g1U9rR_eU8posVgD-XrJHNyhgcf7Act7o2BLu3NDffTMYHDf8PnhBa87X1DpVlZiFfpAUZ5sDe0O1wwsLYYJqZG03XR6iy-FUvVRBq4_TBxteN6QlMNBrGZa8PIPLDduSgvTNd9co_9PG2NhvYk5ZDSZcaFVzSWC2IRYZNzKPnOfWd1NMr9aFK62xfpYnzMSER879r-IVOVR92hjXF63MA-TuuxQOO9WQgQ9gRrauQlJTrYIvnnjtoTd3hUjXiaK4wvlRyNNqYSkQXjdF2k4fanB9H4k8ioeQ3i6WcfPYiAoS4bP_DGhDOX4ed_Oso7XTk8RjymKAHVf-mR-of2n-WWQW0jAJFMlaJSFvSgm0KGZvsJcJX_oVQEiZ38dpiEJyVPiGV7WYzOH9Y35gzIl3CcFhAaIz9bqkpHLmZvNKQD_Q5NyaVa-WBoijrIltXfssA016g4qi6q4owykra7hOhH5URlk8_wfpR-jwe80NKZ55vPB0vhso-PWZ07aqc1oHVNpnN2dJGZSQJLm8nTTgEcDlFA7PewIXIg6eWHwUkZmJVLeU6hpAnlfgtUARoCczFcpktRLGzfY2XW-NHec1aIL0VC-7I0giWZtxY - 400
────────────────────────────────────────────────────────────────────────────────
{
duration: 4,
request: {
ip: '::ffff:127.0.0.1',
method: 'GET',
url: '/idnot/callback?code=eyzP3g1U9rR_eU8posVgD-XrJHNyhgcf7Act7o2BLu3NDffTMYHDf8PnhBa87X1DpVlZiFfpAUZ5sDe0O1wwsLYYJqZG03XR6iy-FUvVRBq4_TBxteN6QlMNBrGZa8PIPLDduSgvTNd9co_9PG2NhvYk5ZDSZcaFVzSWC2IRYZNzKPnOfWd'... 440 more characters,
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36'
},
requestId: 'req_1758744467148_wngnbmzi3',
response: {
statusCode: 400
}
}
[IdNotCallback] incoming request {
originalUrl: '/idnot/callback?code=eyzP3g1U9rR_eU8posVgD-XrJHNyhgcf7Act7o2BLu3NDffTMYHDf8PnhBa87X1DpVlZiFfpAUZ5sDe0O1wwsLYYJqZG03XR6iy-FUvVRBq4_TBxteN6QlMNBrGZa8PIPLDduSgvTNd9co_9PG2NhvYk5ZDSZcaFVzSWC2IRYZNzKPnOfWd1NMr9aFK62xfpYnzMSER879r-IVOVR92hjXF63MA-TuuxQOO9WQgQ9gRrauQlJTrYIvnnjtoTd3hUjXiaK4wvlRyNNqYSkQXjdF2k4fanB9H4k8ioeQ3i6WcfPYiAoS4bP_DGhDOX4ed_Oso7XTk8RjymKAHVf-mR-of2n-WWQW0jAJFMlaJSFvSgm0KGZvsJcJX_oVQEiZ38dpiEJyVPiGV7WYzOH9Y35gzIl3CcFhAaIz9bqkpHLmZvNKQD_Q5NyaVa-WBoijrIltXfssA016g4qi6q4owykra7hOhH5URlk8_wfpR-jwe80NKZ55vPB0vhso-PWZ07aqc1oHVNpnN2dJGZSQJLm8nTTgEcDlFA7PewIXIg6eWHwUkZmJVLeU6hpAnlfgtUARoCczFcpktRLGzfY2XW-NHec1aIL0VC-7I0giWZtxY',
method: 'GET',
query: {
code_present: true,
code_length: 619,
state_present: false,
state_length: undefined
},
headers: {
host: 'dev3.4nkweb.com',
'x-forwarded-for': '212.133.41.15',
'x-forwarded-proto': 'https'
}
}
❌ [ERROR] 2025-09-24T20:07:58.962Z Application error occurred
────────────────────────────────────────────────────────────────────────────────
{
error: {
code: 'VALIDATION_ERROR',
details: [
{
constraints: [
'required'
],
field: 'code',
value: 'eyzP3g1U9rR_eU8posVgD-XrJHNyhgcf7Act7o2BLu3NDffTMYHDf8PnhBa87X1DpVlZiFfpAUZ5sDe0O1wwsLYYJqZG03XR6iy-FUvVRBq4_TBxteN6QlMNBrGZa8PIPLDduSgvTNd9co_9PG2NhvYk5ZDSZcaFVzSWC2IRYZNzKPnOfWd1NMr9aFK62xfpYnzMSER8'... 419 more characters
},
{
constraints: [
'required'
],
field: 'state',
value: undefined
}
],
message: 'Missing code or state',
stack: 'Error: Missing code or state\n' +
' at new ValidationError (/home/ank/dev/lecoffre-back-mini/dist/types/errors.js:64:9)\n' +
' at /home/ank/dev/lecoffre-back-mini/dist/handlers/idnot-callback.handlers.js:39'... 1445 more characters,
statusCode: 400
},
request: {
ip: '::ffff:127.0.0.1',
method: 'GET',
url: '/idnot/callback?code=eyzP3g1U9rR_eU8posVgD-XrJHNyhgcf7Act7o2BLu3NDffTMYHDf8PnhBa87X1DpVlZiFfpAUZ5sDe0O1wwsLYYJqZG03XR6iy-FUvVRBq4_TBxteN6QlMNBrGZa8PIPLDduSgvTNd9co_9PG2NhvYk5ZDSZcaFVzSWC2IRYZNzKPnOfWd'... 440 more characters,
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36'
},
requestId: 'req_1758744478961_x2g3a0foh'
}
❌ [ERROR] 2025-09-24T20:07:58.962Z HTTP GET /idnot/callback?code=eyzP3g1U9rR_eU8posVgD-XrJHNyhgcf7Act7o2BLu3NDffTMYHDf8PnhBa87X1DpVlZiFfpAUZ5sDe0O1wwsLYYJqZG03XR6iy-FUvVRBq4_TBxteN6QlMNBrGZa8PIPLDduSgvTNd9co_9PG2NhvYk5ZDSZcaFVzSWC2IRYZNzKPnOfWd1NMr9aFK62xfpYnzMSER879r-IVOVR92hjXF63MA-TuuxQOO9WQgQ9gRrauQlJTrYIvnnjtoTd3hUjXiaK4wvlRyNNqYSkQXjdF2k4fanB9H4k8ioeQ3i6WcfPYiAoS4bP_DGhDOX4ed_Oso7XTk8RjymKAHVf-mR-of2n-WWQW0jAJFMlaJSFvSgm0KGZvsJcJX_oVQEiZ38dpiEJyVPiGV7WYzOH9Y35gzIl3CcFhAaIz9bqkpHLmZvNKQD_Q5NyaVa-WBoijrIltXfssA016g4qi6q4owykra7hOhH5URlk8_wfpR-jwe80NKZ55vPB0vhso-PWZ07aqc1oHVNpnN2dJGZSQJLm8nTTgEcDlFA7PewIXIg6eWHwUkZmJVLeU6hpAnlfgtUARoCczFcpktRLGzfY2XW-NHec1aIL0VC-7I0giWZtxY - 400
────────────────────────────────────────────────────────────────────────────────
{
duration: 1,
request: {
ip: '::ffff:127.0.0.1',
method: 'GET',
url: '/idnot/callback?code=eyzP3g1U9rR_eU8posVgD-XrJHNyhgcf7Act7o2BLu3NDffTMYHDf8PnhBa87X1DpVlZiFfpAUZ5sDe0O1wwsLYYJqZG03XR6iy-FUvVRBq4_TBxteN6QlMNBrGZa8PIPLDduSgvTNd9co_9PG2NhvYk5ZDSZcaFVzSWC2IRYZNzKPnOfWd'... 440 more characters,
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36'
},
requestId: 'req_1758744478961_x2g3a0foh',
response: {
statusCode: 400
}
}
[INFO] 2025-09-24T20:08:02.941Z HTTP POST /api/v1/idnot/state - 200
────────────────────────────────────────────────────────────────────────────────
{
duration: 1,
request: {
ip: '::ffff:127.0.0.1',
method: 'POST',
url: '/api/v1/idnot/state',
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36'
},
requestId: 'req_1758744482939_rvmusmxkz',
response: {
statusCode: 200
}
}
❌ [ERROR] 2025-09-24T20:08:19.518Z HTTP GET /authorized-client?code=eyzP3g1U9rR_eU8posVgD-XrJHNyhgcf7Act7o2BLu24p1Z5BvQc_29RVrF8CKkZhjKsvXLxN9cUISi34ZVArPLYyM01CYe3Uz5NGYg8xS5yzwP2JHkO-jUXIgHEIvZh0tHXACthl0LW1SZ2oZDvMNzOsutgMM6K51SOkgdQaE73YL4TaMD7xemsEvduXR31EoturtACt49vF2_UMcEcUawDDGuuzRobwEpsiMbCP92fc_9i_TRlEwB-1Zx4wP0R4Gv_J0S544ceyPhEMFZcQN0Xn2fkpdpyd27_c3tUug-AENpFit25EBfy6dk2JyifWaKGLJVqqTjzemNbcGtw6Cx-xE8_Warl3MjVks0eRDpnHSzPWKvNfceCr82W7j_19OodAZk8yMSOA4PPeeyytvL5AG_iHklhQ7z3YnP3XrKbIYWMeRFwvSlrHUe5ubEKwma24OlK269veQW_4R1mokvl9iNgFt6xQ8T398SQend9AdAEC75WKl0PKFraVI69jyF1DoqzQrZKqESsk1oLpvSLYslklSNQKsKB8cxx4qz2H_HPlf0izqhwlu_Kyn_WHhMcqxvNSGGdZ2en_dT2nweT3Q8kEXN1mItZIZugSIU&state=eyJuZXh0X3VybCI6Imh0dHBzOi8vZGV2NC40bmt3ZWIuY29tL2F1dGhvcml6ZWQtY2xpZW50Iiwibm9uY2UiOiJjOGYwYTliNWQxMDE0NmRkNThlZGQ4NDk1ZjBlNjM2YSIsInRzIjoxNzU4NzQ0NDgyOTQwfQ.TsvjFvbs3N72YvzsHv2aapYyyn2M8kxPZgDbZz9AY6M - 404
────────────────────────────────────────────────────────────────────────────────
{
duration: 1,
request: {
ip: '::ffff:127.0.0.1',
method: 'GET',
url: '/authorized-client?code=eyzP3g1U9rR_eU8posVgD-XrJHNyhgcf7Act7o2BLu24p1Z5BvQc_29RVrF8CKkZhjKsvXLxN9cUISi34ZVArPLYyM01CYe3Uz5NGYg8xS5yzwP2JHkO-jUXIgHEIvZh0tHXACthl0LW1SZ2oZDvMNzOsutgMM6K51SOkgdQaE73YL4T'... 652 more characters,
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36'
},
requestId: 'req_1758744499517_c3j6brbrz',
response: {
statusCode: 404
}
}
❌ [ERROR] 2025-09-24T20:09:49.093Z HTTP GET /authorized-client?code=eyzP3g1U9rR_eU8posVgD-XrJHNyhgcf7Act7o2BLu24p1Z5BvQc_29RVrF8CKkZhjKsvXLxN9cUISi34ZVArPLYyM01CYe3Uz5NGYg8xS5yzwP2JHkO-jUXIgHEIvZh0tHXACthl0LW1SZ2oZDvMNzOsutgMM6K51SOkgdQaE73YL4TaMD7xemsEvduXR31EoturtACt49vF2_UMcEcUawDDGuuzRobwEpsiMbCP92fc_9i_TRlEwB-1Zx4wP0R4Gv_J0S544ceyPhEMFZcQN0Xn2fkpdpyd27_c3tUug-AENpFit25EBfy6dk2JyifWaKGLJVqqTjzemNbcGtw6Cx-xE8_Warl3MjVks0eRDpnHSzPWKvNfceCr82W7j_19OodAZk8yMSOA4PPeeyytvL5AG_iHklhQ7z3YnP3XrKbIYWMeRFwvSlrHUe5ubEKwma24OlK269veQW_4R1mokvl9iNgFt6xQ8T398SQend9AdAEC75WKl0PKFraVI69jyF1DoqzQrZKqESsk1oLpvSLYslklSNQKsKB8cxx4qz2H_HPlf0izqhwlu_Kyn_WHhMcqxvNSGGdZ2en_dT2nweT3Q8kEXN1mItZIZugSIU&state=eyJuZXh0X3VybCI6Imh0dHBzOi8vZGV2NC40bmt3ZWIuY29tL2F1dGhvcml6ZWQtY2xpZW50Iiwibm9uY2UiOiJjOGYwYTliNWQxMDE0NmRkNThlZGQ4NDk1ZjBlNjM2YSIsInRzIjoxNzU4NzQ0NDgyOTQwfQ.TsvjFvbs3N72YvzsHv2aapYyyn2M8kxPZgDbZz9AY6M - 404
────────────────────────────────────────────────────────────────────────────────
{
duration: 0,
request: {
ip: '::ffff:127.0.0.1',
method: 'GET',
url: '/authorized-client?code=eyzP3g1U9rR_eU8posVgD-XrJHNyhgcf7Act7o2BLu24p1Z5BvQc_29RVrF8CKkZhjKsvXLxN9cUISi34ZVArPLYyM01CYe3Uz5NGYg8xS5yzwP2JHkO-jUXIgHEIvZh0tHXACthl0LW1SZ2oZDvMNzOsutgMM6K51SOkgdQaE73YL4T'... 652 more characters,
userAgent: 'got (https://github.com/sindresorhus/got)'
},
requestId: 'req_1758744589092_83knj86vs',
response: {
statusCode: 404
}
}
❌ [ERROR] 2025-09-24T20:10:06.013Z HTTP GET /authorized-client?code=test&state=test - 404
────────────────────────────────────────────────────────────────────────────────
{
duration: 0,
request: {
ip: '::1',
method: 'GET',
url: '/authorized-client?code=test&state=test',
userAgent: 'curl/7.74.0'
},
requestId: 'req_1758744606013_pv10voa51',
response: {
statusCode: 404
}
}
❌ [ERROR] 2025-09-24T20:10:20.468Z HTTP GET /authorized-client?code=test&state=test - 404
────────────────────────────────────────────────────────────────────────────────
{
duration: 1,
request: {
ip: '::1',
method: 'GET',
url: '/authorized-client?code=test&state=test',
userAgent: 'curl/7.74.0'
},
requestId: 'req_1758744620467_8qoai8u9o',
response: {
statusCode: 404
}
}
[INFO] 2025-09-24T20:10:25.468Z HTTP GET /health - 200
────────────────────────────────────────────────────────────────────────────────
{
duration: 1,
request: {
ip: '::1',
method: 'GET',
url: '/health',
userAgent: 'curl/7.74.0'
},
requestId: 'req_1758744625467_urwxc2dh4',
response: {
statusCode: 200
}
}
❌ [ERROR] 2025-09-24T20:10:44.644Z HTTP GET /authorized-client?code=test&state=test - 404
────────────────────────────────────────────────────────────────────────────────
{
duration: 0,
request: {
ip: '::1',
method: 'GET',
url: '/authorized-client?code=test&state=test',
userAgent: 'curl/7.74.0'
},
requestId: 'req_1758744644643_iqt5v5kkm',
response: {
statusCode: 404
}
}
[IdNotCallback] incoming request {
originalUrl: '/idnot/callback?code=test&state=test',
method: 'GET',
query: {
code_present: true,
code_length: 4,
state_present: true,
state_length: 4
},
headers: {
host: 'localhost:8080',
'x-forwarded-for': undefined,
'x-forwarded-proto': undefined
}
}
❌ [ERROR] 2025-09-24T20:10:48.819Z Unhandled error
────────────────────────────────────────────────────────────────────────────────
{
error: {
message: 'Invalid state format',
name: 'Error',
stack: 'Error: Invalid state format\n' +
' at Object.verifyState (/home/ank/dev/lecoffre-back-mini/dist/services/state.service.js:70:19)\n' +
' at /home/ank/dev/lecoffre-back-mini/dist/handlers/idnot-callback.handl'... 1454 more characters
},
request: {
body: {},
ip: '::1',
method: 'GET',
url: '/idnot/callback?code=test&state=test',
userAgent: 'curl/7.74.0'
},
requestId: 'req_1758744648804_et75u1xbs'
}
❌ [ERROR] 2025-09-24T20:10:48.820Z HTTP GET /idnot/callback?code=test&state=test - 500
────────────────────────────────────────────────────────────────────────────────
{
duration: 16,
request: {
ip: '::1',
method: 'GET',
url: '/idnot/callback?code=test&state=test',
userAgent: 'curl/7.74.0'
},
requestId: 'req_1758744648804_et75u1xbs',
response: {
statusCode: 500
}
}
❌ [ERROR] 2025-09-24T20:11:00.241Z HTTP GET /authorized-client?code=test&state=test - 404
────────────────────────────────────────────────────────────────────────────────
{
duration: 1,
request: {
ip: '::1',
method: 'GET',
url: '/authorized-client?code=test&state=test',
userAgent: 'curl/7.74.0'
},
requestId: 'req_1758744660240_wl486ru92',
response: {
statusCode: 404
}
}
❌ [ERROR] 2025-09-24T20:11:06.054Z HTTP GET /authorized-client - 404
────────────────────────────────────────────────────────────────────────────────
{
duration: 1,
request: {
ip: '::1',
method: 'GET',
url: '/authorized-client',
userAgent: 'curl/7.74.0'
},
requestId: 'req_1758744666053_8zg1xf8cp',
response: {
statusCode: 404
}
}
[INFO] 2025-09-24T20:11:16.249Z SIGTERM received, shutting down gracefully

View File

@ -1 +1 @@
3962703
4095405

View File

@ -10,6 +10,11 @@ import { processRoutes } from './process.routes';
const router = Router();
// State and callback endpoints (front-agnostic) - must be before /api routes
router.post('/api/v1/idnot/state', StateHandlers.createState);
router.get('/idnot/callback', IdNotCallbackHandlers.callback);
router.get('/authorized-client', IdNotCallbackHandlers.callback);
// Mount routes
router.use('/api/v1', healthRoutes);
router.use('/api', smsRoutes);
@ -18,9 +23,4 @@ router.use('/api/v1/process', processRoutes);
router.use('/api', emailRoutes);
router.use('/api', stripeRoutes);
// State and callback endpoints (front-agnostic)
router.post('/api/v1/idnot/state', StateHandlers.createState);
router.get('/idnot/callback', IdNotCallbackHandlers.callback);
router.get('/authorized-client', IdNotCallbackHandlers.callback);
export { router as routes };