UNPKG

angular-oauth2-oidc

Version:

Support for OAuth 2 and OpenId Connect (OIDC) in Angular. Already prepared for the upcoming OAuth 2.1.

59 lines 7.81 kB
import { Injectable } from '@angular/core'; // const sha256 = factory(); import fsha256 from './fast-sha256js'; import * as i0 from "@angular/core"; /** * Abstraction for crypto algorithms */ export class HashHandler { } function decodeUTF8(s) { if (typeof s !== 'string') throw new TypeError('expected string'); const d = s, b = new Uint8Array(d.length); for (let i = 0; i < d.length; i++) b[i] = d.charCodeAt(i); return b; } function encodeUTF8(arr) { const s = []; for (let i = 0; i < arr.length; i++) s.push(String.fromCharCode(arr[i])); return s.join(''); } export class DefaultHashHandler { async calcHash(valueToHash, algorithm) { // const encoder = new TextEncoder(); // const hashArray = await window.crypto.subtle.digest(algorithm, data); // const data = encoder.encode(valueToHash); // const fhash = fsha256(valueToHash); const candHash = encodeUTF8(fsha256(decodeUTF8(valueToHash))); // const hashArray = (sha256 as any).array(valueToHash); // // const hashString = this.toHashString(hashArray); // const hashString = this.toHashString2(hashArray); // console.debug('hash orig - cand', candHash, hashString); // alert(1); return candHash; } toHashString2(byteArray) { let result = ''; for (const e of byteArray) { result += String.fromCharCode(e); } return result; } toHashString(buffer) { const byteArray = new Uint8Array(buffer); let result = ''; for (const e of byteArray) { result += String.fromCharCode(e); } return result; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: DefaultHashHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: DefaultHashHandler }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: DefaultHashHandler, decorators: [{ type: Injectable }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbGliL3NyYy90b2tlbi12YWxpZGF0aW9uL2hhc2gtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLDRCQUE0QjtBQUU1QixPQUFPLE9BQU8sTUFBTSxpQkFBaUIsQ0FBQzs7QUFFdEM7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLFdBQVc7Q0FFaEM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxDQUFDO0lBQ25CLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUTtRQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNsRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQ1QsQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7UUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxHQUFHO0lBQ3JCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNiLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtRQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixDQUFDO0FBR0QsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixLQUFLLENBQUMsUUFBUSxDQUFDLFdBQW1CLEVBQUUsU0FBaUI7UUFDbkQscUNBQXFDO1FBQ3JDLHdFQUF3RTtRQUN4RSw0Q0FBNEM7UUFFNUMsc0NBQXNDO1FBRXRDLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU5RCx3REFBd0Q7UUFDeEQsc0RBQXNEO1FBQ3RELG9EQUFvRDtRQUVwRCwyREFBMkQ7UUFDM0QsWUFBWTtRQUVaLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxhQUFhLENBQUMsU0FBbUI7UUFDL0IsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLEtBQUssTUFBTSxDQUFDLElBQUksU0FBUyxFQUFFO1lBQ3pCLE1BQU0sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFtQjtRQUM5QixNQUFNLFNBQVMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsS0FBSyxNQUFNLENBQUMsSUFBSSxTQUFTLEVBQUU7WUFDekIsTUFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOzhHQW5DVSxrQkFBa0I7a0hBQWxCLGtCQUFrQjs7MkZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgZmFjdG9yeSB9IGZyb20gJy4vanMtc2hhMjU2Jztcbi8vIGNvbnN0IHNoYTI1NiA9IGZhY3RvcnkoKTtcblxuaW1wb3J0IGZzaGEyNTYgZnJvbSAnLi9mYXN0LXNoYTI1NmpzJztcblxuLyoqXG4gKiBBYnN0cmFjdGlvbiBmb3IgY3J5cHRvIGFsZ29yaXRobXNcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEhhc2hIYW5kbGVyIHtcbiAgYWJzdHJhY3QgY2FsY0hhc2godmFsdWVUb0hhc2g6IHN0cmluZywgYWxnb3JpdGhtOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz47XG59XG5cbmZ1bmN0aW9uIGRlY29kZVVURjgocykge1xuICBpZiAodHlwZW9mIHMgIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdleHBlY3RlZCBzdHJpbmcnKTtcbiAgY29uc3QgZCA9IHMsXG4gICAgYiA9IG5ldyBVaW50OEFycmF5KGQubGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkLmxlbmd0aDsgaSsrKSBiW2ldID0gZC5jaGFyQ29kZUF0KGkpO1xuICByZXR1cm4gYjtcbn1cblxuZnVuY3Rpb24gZW5jb2RlVVRGOChhcnIpIHtcbiAgY29uc3QgcyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYXJyW2ldKSk7XG4gIHJldHVybiBzLmpvaW4oJycpO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGVmYXVsdEhhc2hIYW5kbGVyIGltcGxlbWVudHMgSGFzaEhhbmRsZXIge1xuICBhc3luYyBjYWxjSGFzaCh2YWx1ZVRvSGFzaDogc3RyaW5nLCBhbGdvcml0aG06IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgLy8gY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICAgIC8vIGNvbnN0IGhhc2hBcnJheSA9IGF3YWl0IHdpbmRvdy5jcnlwdG8uc3VidGxlLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIC8vIGNvbnN0IGRhdGEgPSBlbmNvZGVyLmVuY29kZSh2YWx1ZVRvSGFzaCk7XG5cbiAgICAvLyBjb25zdCBmaGFzaCA9IGZzaGEyNTYodmFsdWVUb0hhc2gpO1xuXG4gICAgY29uc3QgY2FuZEhhc2ggPSBlbmNvZGVVVEY4KGZzaGEyNTYoZGVjb2RlVVRGOCh2YWx1ZVRvSGFzaCkpKTtcblxuICAgIC8vIGNvbnN0IGhhc2hBcnJheSA9IChzaGEyNTYgYXMgYW55KS5hcnJheSh2YWx1ZVRvSGFzaCk7XG4gICAgLy8gLy8gY29uc3QgaGFzaFN0cmluZyA9IHRoaXMudG9IYXNoU3RyaW5nKGhhc2hBcnJheSk7XG4gICAgLy8gY29uc3QgaGFzaFN0cmluZyA9IHRoaXMudG9IYXNoU3RyaW5nMihoYXNoQXJyYXkpO1xuXG4gICAgLy8gY29uc29sZS5kZWJ1ZygnaGFzaCBvcmlnIC0gY2FuZCcsIGNhbmRIYXNoLCBoYXNoU3RyaW5nKTtcbiAgICAvLyBhbGVydCgxKTtcblxuICAgIHJldHVybiBjYW5kSGFzaDtcbiAgfVxuXG4gIHRvSGFzaFN0cmluZzIoYnl0ZUFycmF5OiBudW1iZXJbXSkge1xuICAgIGxldCByZXN1bHQgPSAnJztcbiAgICBmb3IgKGNvbnN0IGUgb2YgYnl0ZUFycmF5KSB7XG4gICAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHRvSGFzaFN0cmluZyhidWZmZXI6IEFycmF5QnVmZmVyKSB7XG4gICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgZm9yIChjb25zdCBlIG9mIGJ5dGVBcnJheSkge1xuICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBoZXhTdHJpbmcoYnVmZmVyKSB7XG4gIC8vICAgICBjb25zdCBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICAvLyAgICAgY29uc3QgaGV4Q29kZXMgPSBbLi4uYnl0ZUFycmF5XS5tYXAodmFsdWUgPT4ge1xuICAvLyAgICAgICBjb25zdCBoZXhDb2RlID0gdmFsdWUudG9TdHJpbmcoMTYpO1xuICAvLyAgICAgICBjb25zdCBwYWRkZWRIZXhDb2RlID0gaGV4Q29kZS5wYWRTdGFydCgyLCAnMCcpO1xuICAvLyAgICAgICByZXR1cm4gcGFkZGVkSGV4Q29kZTtcbiAgLy8gICAgIH0pO1xuXG4gIC8vICAgICByZXR1cm4gaGV4Q29kZXMuam9pbignJyk7XG4gIC8vICAgfVxuXG4gIC8vIHRvSGFzaFN0cmluZyhoZXhTdHJpbmc6IHN0cmluZykge1xuICAvLyAgIGxldCByZXN1bHQgPSAnJztcbiAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IGhleFN0cmluZy5sZW5ndGg7IGkgKz0gMikge1xuICAvLyAgICAgbGV0IGhleERpZ2l0ID0gaGV4U3RyaW5nLmNoYXJBdChpKSArIGhleFN0cmluZy5jaGFyQXQoaSArIDEpO1xuICAvLyAgICAgbGV0IG51bSA9IHBhcnNlSW50KGhleERpZ2l0LCAxNik7XG4gIC8vICAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShudW0pO1xuICAvLyAgIH1cbiAgLy8gICByZXR1cm4gcmVzdWx0O1xuICAvLyB9XG59XG4iXX0=