ihm_client/public/authorized-client.html
4NK CI Bot 85c4106ae6
All checks were successful
Build and Push Docker image (ext) / docker (push) Successful in 49s
ci: docker_tag=dev-test - Mise à jour documentation et services
2025-09-20 08:14:09 +00:00

112 lines
4.4 KiB
HTML

<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Redirection en cours…</title>
<style>
body { font-family: system-ui, -apple-system, Segoe UI, Roboto, sans-serif; margin: 2rem; color: #0a0a0a; }
.box { max-width: 720px; margin: 10vh auto; padding: 1.5rem; border: 1px solid #e5e7eb; border-radius: 12px; box-shadow: 0 2px 8px rgba(0,0,0,0.06); }
.muted { color: #6b7280; font-size: .95rem; }
.error { color: #b91c1c; }
.ok { color: #065f46; }
code { background: #f3f4f6; padding: .2rem .35rem; border-radius: 6px; }
a { color: #006BE0; text-decoration: none; }
</style>
</head>
<body>
<div class="box">
<h1>Connexion IdNot</h1>
<p class="muted" id="status">Traitement du code d'autorisation…</p>
<pre class="muted" id="details" style="white-space: pre-wrap"></pre>
</div>
<script>
(function () {
function getQueryParam(name) {
const params = new URLSearchParams(location.search);
return params.get(name);
}
function setCookie(name, value, days) {
const expires = new Date(Date.now() + days * 864e5).toUTCString();
// Domaine implicite: dev4.4nkweb.com (hébergement de cette page)
document.cookie = name + '=' + encodeURIComponent(value) + '; Path=/; Expires=' + expires + '; SameSite=None; Secure';
}
async function main() {
const code = getQueryParam('code');
const statusEl = document.getElementById('status');
const detailsEl = document.getElementById('details');
if (!code) {
statusEl.textContent = 'Aucun code reçu dans la redirection IdNot.';
statusEl.className = 'error';
detailsEl.textContent = 'Paramètre attendu: ?code=…\nRetour à l\'espace: https://dev4.4nkweb.com/lecoffre/';
return;
}
try {
const resp = await fetch('https://dev4.4nkweb.com/api/v1/idnot/auth', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Request-ID': 'bridge_' + Math.random().toString(36).slice(2)
},
body: JSON.stringify({ code })
});
const text = await resp.text();
let data;
try { data = JSON.parse(text); } catch (_) { data = null; }
if (!resp.ok) {
statusEl.textContent = 'Connexion refusée (' + resp.status + ').';
statusEl.className = 'error';
detailsEl.textContent = (data && data.error && data.error.message) ? data.error.message : text;
// Redirige néanmoins vers le front avec état d\'erreur afin d\'afficher un message utilisateur.
setTimeout(function(){ location.replace('https://dev4.4nkweb.com/lecoffre/authorized-bridge#error=' + encodeURIComponent(String(resp.status))); }, 600);
return;
}
// Attendu: { idNotUser, authToken }
if (!data || !data.authToken) {
statusEl.textContent = 'Réponse invalide du serveur.';
statusEl.className = 'error';
detailsEl.textContent = text;
setTimeout(function(){ location.replace('https://dev4.4nkweb.com/lecoffre/authorized-bridge#error=invalid_response'); }, 800);
return;
}
// Stocker le jeton pour le domaine dev4 (utilisé par le front)
setCookie('leCoffreAccessToken', data.authToken, 1);
statusEl.textContent = 'Connexion réussie, redirection…';
statusEl.className = 'ok';
detailsEl.textContent = '';
// Redirection vers le front avec token en hash en sauvegarde
location.replace('https://dev4.4nkweb.com/lecoffre/authorized-bridge#token=' + encodeURIComponent(data.authToken));
} catch (e) {
statusEl.textContent = 'Erreur réseau lors de la connexion.';
statusEl.className = 'error';
detailsEl.textContent = String(e && e.message || e);
setTimeout(function(){ location.replace('https://dev4.4nkweb.com/lecoffre/authorized-bridge#error=network'); }, 1000);
}
}
main();
})();
</script>
</body>
</html>