@ebondu/angular2-keycloak
Version:
55 lines • 7.77 kB
JavaScript
/*
* 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