23 lines
1.6 KiB
JavaScript
23 lines
1.6 KiB
JavaScript
|
|
// ═══════════════════════════════════════════════════════
|
||
|
|
// JWT Decoder
|
||
|
|
// ═══════════════════════════════════════════════════════
|
||
|
|
async function decodeJWT() {
|
||
|
|
const token = document.getElementById('jwtInput').value.trim();
|
||
|
|
if (!token) return setStatus('jwtStatus','error','Paste a JWT.');
|
||
|
|
const d = await apiPost('/api/jwt/decode', { token });
|
||
|
|
if (d.success) {
|
||
|
|
const expStr = d.expired === null ? '—' : d.expired ? '<span style="color:var(--red)">EXPIRED ✗</span>' : '<span style="color:var(--green)">VALID ✓</span>';
|
||
|
|
document.getElementById('jwtResults').innerHTML = `
|
||
|
|
<div class="result-card">
|
||
|
|
<div class="panel-label">Header</div>
|
||
|
|
<pre style="background:var(--bg-input);padding:12px;border-radius:var(--radius-sm);font-size:0.82rem;color:var(--cyan);overflow-x:auto;">${JSON.stringify(d.header, null, 2)}</pre>
|
||
|
|
<div class="panel-label" style="margin-top:14px;">Payload</div>
|
||
|
|
<pre style="background:var(--bg-input);padding:12px;border-radius:var(--radius-sm);font-size:0.82rem;color:var(--green);overflow-x:auto;">${JSON.stringify(d.payload, null, 2)}</pre>
|
||
|
|
<div class="panel-label" style="margin-top:14px;">Expiry</div>
|
||
|
|
<div style="font-size:0.9rem;">${expStr}</div>
|
||
|
|
</div>`;
|
||
|
|
setStatus('jwtStatus','success','Decoded ✓');
|
||
|
|
} else setStatus('jwtStatus','error', d.error);
|
||
|
|
}
|
||
|
|
|