UNPKG

@idea-ionic/auth0

Version:
53 lines 7.38 kB
import { inject } from '@angular/core'; import { firstValueFrom } from 'rxjs'; import { IDEAApiService } from '@idea-ionic/common'; import { IDEAAuth0Service } from './auth0.service'; export const auth0Guard = async (_, state) => { const _auth = inject(IDEAAuth0Service); const _api = inject(IDEAApiService); if (!_api.authToken) _api.authToken = async () => { try { return getValidIdToken(_auth); } catch (error) { _auth.goToLogin(state.url); return null; } }; if (await _auth.isUserAuthenticated()) return true; else { _auth.goToLogin(state.url); return false; } }; /** * Get a valid ID token from the cache or, if expired, from the server. * Note: Auth0 consider the cache valid even if the ID Token expried (only checks for valid Access Tokens). */ const getValidIdToken = async (auth) => { const cacheRes = await firstValueFrom(auth.__raw.getAccessTokenSilently({ detailedResponse: true })); const { exp } = decodeJwt(cacheRes.id_token); const isTokenExpired = new Date(exp * 1000) < new Date(); if (!isTokenExpired) return cacheRes.id_token; else { const freshRes = await firstValueFrom(auth.__raw.getAccessTokenSilently({ detailedResponse: true, cacheMode: 'off' })); return freshRes.id_token; } }; /** * Decode a JWT without relying on external libraries. */ const decodeJwt = (token) => { const base64Url = token.split('.')[1]; const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/'); const jsonPayload = decodeURIComponent(window .atob(base64) .split('') .map(c => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)) .join('')); return JSON.parse(jsonPayload); }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aDAuZ3VhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9tb2R1bGVzL2F1dGgwL3NyYy9hdXRoMC5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXBELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRW5ELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBa0IsS0FBSyxFQUM1QyxDQUF5QixFQUN6QixLQUEwQixFQUNSLEVBQUU7SUFDcEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDdkMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXBDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUztRQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssSUFBcUIsRUFBRTtZQUMzQyxJQUFJLENBQUM7Z0JBQ0gsT0FBTyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEMsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUMsQ0FBQztJQUVKLElBQUksTUFBTSxLQUFLLENBQUMsbUJBQW1CLEVBQUU7UUFBRSxPQUFPLElBQUksQ0FBQztTQUM5QyxDQUFDO1FBQ0osS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxlQUFlLEdBQUcsS0FBSyxFQUFFLElBQXNCLEVBQW1CLEVBQUU7SUFDeEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVyRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QyxNQUFNLGNBQWMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUV6RCxJQUFJLENBQUMsY0FBYztRQUFFLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQztTQUN6QyxDQUFDO1FBQ0osTUFBTSxRQUFRLEdBQUcsTUFBTSxjQUFjLENBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQ2hGLENBQUM7UUFDRixPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUM7SUFDM0IsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFhLEVBQXVCLEVBQUU7SUFDdkQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUNwQyxNQUFNO1NBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNaLEtBQUssQ0FBQyxFQUFFLENBQUM7U0FDVCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMvRCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQ1osQ0FBQztJQUNGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIENhbkFjdGl2YXRlRm4sIFJvdXRlclN0YXRlU25hcHNob3QgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElERUFBcGlTZXJ2aWNlIH0gZnJvbSAnQGlkZWEtaW9uaWMvY29tbW9uJztcblxuaW1wb3J0IHsgSURFQUF1dGgwU2VydmljZSB9IGZyb20gJy4vYXV0aDAuc2VydmljZSc7XG5cbmV4cG9ydCBjb25zdCBhdXRoMEd1YXJkOiBDYW5BY3RpdmF0ZUZuID0gYXN5bmMgKFxuICBfOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdFxuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IF9hdXRoID0gaW5qZWN0KElERUFBdXRoMFNlcnZpY2UpO1xuICBjb25zdCBfYXBpID0gaW5qZWN0KElERUFBcGlTZXJ2aWNlKTtcblxuICBpZiAoIV9hcGkuYXV0aFRva2VuKVxuICAgIF9hcGkuYXV0aFRva2VuID0gYXN5bmMgKCk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZ2V0VmFsaWRJZFRva2VuKF9hdXRoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIF9hdXRoLmdvVG9Mb2dpbihzdGF0ZS51cmwpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuXG4gIGlmIChhd2FpdCBfYXV0aC5pc1VzZXJBdXRoZW50aWNhdGVkKCkpIHJldHVybiB0cnVlO1xuICBlbHNlIHtcbiAgICBfYXV0aC5nb1RvTG9naW4oc3RhdGUudXJsKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbi8qKlxuICogR2V0IGEgdmFsaWQgSUQgdG9rZW4gZnJvbSB0aGUgY2FjaGUgb3IsIGlmIGV4cGlyZWQsIGZyb20gdGhlIHNlcnZlci5cbiAqIE5vdGU6IEF1dGgwIGNvbnNpZGVyIHRoZSBjYWNoZSB2YWxpZCBldmVuIGlmIHRoZSBJRCBUb2tlbiBleHByaWVkIChvbmx5IGNoZWNrcyBmb3IgdmFsaWQgQWNjZXNzIFRva2VucykuXG4gKi9cbmNvbnN0IGdldFZhbGlkSWRUb2tlbiA9IGFzeW5jIChhdXRoOiBJREVBQXV0aDBTZXJ2aWNlKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgY2FjaGVSZXMgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShhdXRoLl9fcmF3LmdldEFjY2Vzc1Rva2VuU2lsZW50bHkoeyBkZXRhaWxlZFJlc3BvbnNlOiB0cnVlIH0pKTtcblxuICBjb25zdCB7IGV4cCB9ID0gZGVjb2RlSnd0KGNhY2hlUmVzLmlkX3Rva2VuKTtcbiAgY29uc3QgaXNUb2tlbkV4cGlyZWQgPSBuZXcgRGF0ZShleHAgKiAxMDAwKSA8IG5ldyBEYXRlKCk7XG5cbiAgaWYgKCFpc1Rva2VuRXhwaXJlZCkgcmV0dXJuIGNhY2hlUmVzLmlkX3Rva2VuO1xuICBlbHNlIHtcbiAgICBjb25zdCBmcmVzaFJlcyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgYXV0aC5fX3Jhdy5nZXRBY2Nlc3NUb2tlblNpbGVudGx5KHsgZGV0YWlsZWRSZXNwb25zZTogdHJ1ZSwgY2FjaGVNb2RlOiAnb2ZmJyB9KVxuICAgICk7XG4gICAgcmV0dXJuIGZyZXNoUmVzLmlkX3Rva2VuO1xuICB9XG59O1xuXG4vKipcbiAqIERlY29kZSBhIEpXVCB3aXRob3V0IHJlbHlpbmcgb24gZXh0ZXJuYWwgbGlicmFyaWVzLlxuICovXG5jb25zdCBkZWNvZGVKd3QgPSAodG9rZW46IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIGFueT4gPT4ge1xuICBjb25zdCBiYXNlNjRVcmwgPSB0b2tlbi5zcGxpdCgnLicpWzFdO1xuICBjb25zdCBiYXNlNjQgPSBiYXNlNjRVcmwucmVwbGFjZSgvLS9nLCAnKycpLnJlcGxhY2UoL18vZywgJy8nKTtcbiAgY29uc3QganNvblBheWxvYWQgPSBkZWNvZGVVUklDb21wb25lbnQoXG4gICAgd2luZG93XG4gICAgICAuYXRvYihiYXNlNjQpXG4gICAgICAuc3BsaXQoJycpXG4gICAgICAubWFwKGMgPT4gJyUnICsgKCcwMCcgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtMikpXG4gICAgICAuam9pbignJylcbiAgKTtcbiAgcmV0dXJuIEpTT04ucGFyc2UoanNvblBheWxvYWQpO1xufTtcbiJdfQ==