diff --git a/services/dataService.ts b/services/dataService.ts index 8588ceb..2686600 100644 --- a/services/dataService.ts +++ b/services/dataService.ts @@ -417,7 +417,19 @@ export const returnToSuperAdmin = (): boolean => { const superAdminToken = localStorage.getItem('ctms_super_admin_token'); if (superAdminToken) { try { - const payload = JSON.parse(atob(superAdminToken.split('.')[1])); + // Correctly decode Base64Url JWT payload with proper padding + const base64Url = superAdminToken.split('.')[1]; + let base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/'); + const pad = base64.length % 4; + if (pad) { + base64 += '='.repeat(4 - pad); + } + + const jsonPayload = decodeURIComponent(atob(base64).split('').map(function(c) { + return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); + }).join('')); + const payload = JSON.parse(jsonPayload); + localStorage.setItem('ctms_token', superAdminToken); localStorage.setItem('ctms_user_id', payload.id); localStorage.setItem('ctms_tenant_id', payload.tenant_id || 'system');