UNPKG

@ebondu/angular2-keycloak

Version:
55 lines 7.77 kB
/* * Copyright 2022 ebondu and/or its affiliates * and other contributors as indicated by the @author tags. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Silent login check Iframe utility */ export class KeycloakSilentCheckLoginIframe { keycloak; iframe; iframeSrc; constructor(keycloak, silentRedirectUri) { this.keycloak = keycloak; this.iframeSrc = this.keycloak.createLoginUrl({ prompt: 'none', redirectUri: silentRedirectUri }); this.initIframe(); } initIframe() { this.iframe = document.createElement('iframe'); this.iframe.setAttribute('src', this.iframeSrc); this.iframe.style.display = 'none'; this.iframe.setAttribute('title', 'keycloak-silent-check-sso'); document.body.appendChild(this.iframe); window.addEventListener('message', () => this.processSilentLoginCallbackMessage(event), false); } processSilentLoginCallbackMessage(event) { const origin = this.iframeSrc.substring(0, this.iframeSrc.indexOf('/', 8)); // console.log('checking iframe message callback..' + event.data + ' ' + event.origin); if ((event.origin !== window.location.origin) || (this.iframe.contentWindow !== event.source)) { // console.log('event is not coming from the iframe, ignoring it'); return; } const oauth = this.keycloak.parseCallback(event.data); if (!!oauth) { this.keycloak.processCallback(oauth).subscribe(() => console.log('Silent login ended')); } document.body.removeChild(this.iframe); window.removeEventListener('message', () => this.processSilentLoginCallbackMessage(event), false); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWsudXRpbHMuc2lsZW50LWNoZWNrLWxvZ2luLWlmcmFtZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Vib25kdS9hbmd1bGFyLWtleWNsb2FrL3NyYy9saWIvdXRpbC9rZXljbG9hay51dGlscy5zaWxlbnQtY2hlY2stbG9naW4taWZyYW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUtIOztHQUVHO0FBQ0gsTUFBTSxPQUFPLDhCQUE4QjtJQUlyQjtJQUhaLE1BQU0sQ0FBTTtJQUNaLFNBQVMsQ0FBUztJQUUxQixZQUFvQixRQUF5QixFQUFFLGlCQUF5QjtRQUFwRCxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUMzQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDO1lBQzVDLE1BQU0sRUFBRSxNQUFNO1lBQ2QsV0FBVyxFQUFFLGlCQUFpQjtTQUMvQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO1FBQy9ELFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBRU8saUNBQWlDLENBQUMsS0FBVTtRQUNsRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0UsdUZBQXVGO1FBQ3ZGLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM5RixtRUFBbUU7WUFDbkUsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7UUFDMUYsQ0FBQztRQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwRyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjIgZWJvbmR1IGFuZC9vciBpdHMgYWZmaWxpYXRlc1xuICogYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyBhcyBpbmRpY2F0ZWQgYnkgdGhlIEBhdXRob3IgdGFncy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBLZXljbG9ha1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL2tleWNsb2FrLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogU2lsZW50IGxvZ2luIGNoZWNrIElmcmFtZSB1dGlsaXR5XG4gKi9cbmV4cG9ydCBjbGFzcyBLZXljbG9ha1NpbGVudENoZWNrTG9naW5JZnJhbWUge1xuICBwcml2YXRlIGlmcmFtZTogYW55O1xuICBwcml2YXRlIGlmcmFtZVNyYzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUga2V5Y2xvYWs6IEtleWNsb2FrU2VydmljZSwgc2lsZW50UmVkaXJlY3RVcmk6IHN0cmluZykge1xuICAgIHRoaXMuaWZyYW1lU3JjID0gdGhpcy5rZXljbG9hay5jcmVhdGVMb2dpblVybCh7XG4gICAgICBwcm9tcHQ6ICdub25lJyxcbiAgICAgIHJlZGlyZWN0VXJpOiBzaWxlbnRSZWRpcmVjdFVyaVxuICAgIH0pO1xuICAgIHRoaXMuaW5pdElmcmFtZSgpO1xuICB9XG5cbiAgaW5pdElmcmFtZSgpIHtcbiAgICB0aGlzLmlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICAgIHRoaXMuaWZyYW1lLnNldEF0dHJpYnV0ZSgnc3JjJywgdGhpcy5pZnJhbWVTcmMpO1xuICAgIHRoaXMuaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgdGhpcy5pZnJhbWUuc2V0QXR0cmlidXRlKCd0aXRsZScsICdrZXljbG9hay1zaWxlbnQtY2hlY2stc3NvJyk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmlmcmFtZSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCAoKSA9PiB0aGlzLnByb2Nlc3NTaWxlbnRMb2dpbkNhbGxiYWNrTWVzc2FnZShldmVudCksIGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1NpbGVudExvZ2luQ2FsbGJhY2tNZXNzYWdlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBvcmlnaW4gPSB0aGlzLmlmcmFtZVNyYy5zdWJzdHJpbmcoMCwgdGhpcy5pZnJhbWVTcmMuaW5kZXhPZignLycsIDgpKTtcbiAgICAvLyBjb25zb2xlLmxvZygnY2hlY2tpbmcgaWZyYW1lIG1lc3NhZ2UgY2FsbGJhY2suLicgKyBldmVudC5kYXRhICsgJyAnICsgZXZlbnQub3JpZ2luKTtcbiAgICBpZiAoKGV2ZW50Lm9yaWdpbiAhPT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbikgfHwgKHRoaXMuaWZyYW1lLmNvbnRlbnRXaW5kb3cgIT09IGV2ZW50LnNvdXJjZSkpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdldmVudCBpcyBub3QgY29taW5nIGZyb20gdGhlIGlmcmFtZSwgaWdub3JpbmcgaXQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb2F1dGggPSB0aGlzLmtleWNsb2FrLnBhcnNlQ2FsbGJhY2soZXZlbnQuZGF0YSk7XG4gICAgaWYgKCEhb2F1dGgpIHtcbiAgICAgIHRoaXMua2V5Y2xvYWsucHJvY2Vzc0NhbGxiYWNrKG9hdXRoKS5zdWJzY3JpYmUoKCkgPT4gY29uc29sZS5sb2coJ1NpbGVudCBsb2dpbiBlbmRlZCcpKTtcbiAgICB9XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLmlmcmFtZSk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCAoKSA9PiB0aGlzLnByb2Nlc3NTaWxlbnRMb2dpbkNhbGxiYWNrTWVzc2FnZShldmVudCksIGZhbHNlKTtcbiAgfVxufVxuIl19