UNPKG

@ebondu/angular2-keycloak

Version:
70 lines 10 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. */ /** * Check login Iframe utility */ export class KeycloakCheckLoginIframe { keycloak; iframe; interval; iframeSrc; constructor(keycloak, checkInterval) { this.keycloak = keycloak; this.interval = checkInterval; this.iframeSrc = this.keycloak.getRealmUrl() + '/protocol/openid-connect/login-status-iframe.html'; this.initIframe(); } initIframe() { this.iframe = document.createElement('iframe'); this.iframe.setAttribute('src', this.iframeSrc); this.iframe.style.display = 'none'; this.iframe.setAttribute('title', 'keycloak-session-iframe'); document.body.appendChild(this.iframe); if (this.interval > 0) { this.iframe.onload = (() => { setTimeout(() => this.checkIframe(), this.interval); }); } window.addEventListener('message', () => this.processCallbackMessage(event), false); } checkIframe() { const msg = this.keycloak.keycloakConfig.clientId + ' ' + (!!this.keycloak.sessionId ? this.keycloak.sessionId : ''); const origin = this.iframeSrc.substring(0, this.iframeSrc.indexOf('/', 8)); // console.log('sending message to iframe ' + msg + ' origin :' + origin); this.iframe.contentWindow.postMessage(msg, origin); if (this.interval > 0) { setTimeout(() => this.checkIframe(), this.interval); } } processCallbackMessage(event) { const origin = this.iframeSrc.substring(0, this.iframeSrc.indexOf('/', 8)); // console.log('checking iframe message callback..' + event.data + ' ' + event.origin); if ((event.origin !== origin) || (this.iframe.contentWindow !== event.source)) { // console.log('event is not coming from the iframe, ignoring it'); return; } if (!(event.data === 'unchanged' || event.data === 'changed' || event.data === 'error')) { // console.log('unknown event data, ignoring it'); return; } if (event.data !== 'unchanged') { // console.log('event from the iframe, and data changed, clearing tokens'); this.keycloak.clearToken({}); } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWsudXRpbHMuY2hlY2stbG9naW4taWZyYW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWJvbmR1L2FuZ3VsYXIta2V5Y2xvYWsvc3JjL2xpYi91dGlsL2tleWNsb2FrLnV0aWxzLmNoZWNrLWxvZ2luLWlmcmFtZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFLSDs7R0FFRztBQUNILE1BQU0sT0FBTyx3QkFBd0I7SUFLZjtJQUpaLE1BQU0sQ0FBTTtJQUNaLFFBQVEsQ0FBUztJQUNqQixTQUFTLENBQVM7SUFFMUIsWUFBb0IsUUFBeUIsRUFBRSxhQUFxQjtRQUFoRCxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUMzQyxJQUFJLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEdBQUcsbURBQW1ELENBQUM7UUFDbkcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUM3RCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdkMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUN6QixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0RCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRU8sV0FBVztRQUNqQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckgsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNFLDBFQUEwRTtRQUMxRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRW5ELElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0QixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RCxDQUFDO0lBQ0gsQ0FBQztJQUVPLHNCQUFzQixDQUFDLEtBQVU7UUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNFLHVGQUF1RjtRQUN2RixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxLQUFLLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzlFLG1FQUFtRTtZQUNuRSxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN4RixrREFBa0Q7WUFDbEQsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDL0IsMkVBQTJFO1lBQzNFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjIgZWJvbmR1IGFuZC9vciBpdHMgYWZmaWxpYXRlc1xuICogYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyBhcyBpbmRpY2F0ZWQgYnkgdGhlIEBhdXRob3IgdGFncy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBLZXljbG9ha1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL2tleWNsb2FrLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogQ2hlY2sgbG9naW4gSWZyYW1lIHV0aWxpdHlcbiAqL1xuZXhwb3J0IGNsYXNzIEtleWNsb2FrQ2hlY2tMb2dpbklmcmFtZSB7XG4gIHByaXZhdGUgaWZyYW1lOiBhbnk7XG4gIHByaXZhdGUgaW50ZXJ2YWw6IG51bWJlcjtcbiAgcHJpdmF0ZSBpZnJhbWVTcmM6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGtleWNsb2FrOiBLZXljbG9ha1NlcnZpY2UsIGNoZWNrSW50ZXJ2YWw6IG51bWJlcikge1xuICAgIHRoaXMuaW50ZXJ2YWwgPSBjaGVja0ludGVydmFsO1xuICAgIHRoaXMuaWZyYW1lU3JjID0gdGhpcy5rZXljbG9hay5nZXRSZWFsbVVybCgpICsgJy9wcm90b2NvbC9vcGVuaWQtY29ubmVjdC9sb2dpbi1zdGF0dXMtaWZyYW1lLmh0bWwnO1xuICAgIHRoaXMuaW5pdElmcmFtZSgpO1xuICB9XG5cbiAgaW5pdElmcmFtZSgpIHtcbiAgICB0aGlzLmlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICAgIHRoaXMuaWZyYW1lLnNldEF0dHJpYnV0ZSgnc3JjJywgdGhpcy5pZnJhbWVTcmMpO1xuICAgIHRoaXMuaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgdGhpcy5pZnJhbWUuc2V0QXR0cmlidXRlKCd0aXRsZScsICdrZXljbG9hay1zZXNzaW9uLWlmcmFtZScpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5pZnJhbWUpO1xuXG4gICAgaWYgKHRoaXMuaW50ZXJ2YWwgPiAwKSB7XG4gICAgICB0aGlzLmlmcmFtZS5vbmxvYWQgPSAoKCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY2hlY2tJZnJhbWUoKSwgdGhpcy5pbnRlcnZhbCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCAoKSA9PiB0aGlzLnByb2Nlc3NDYWxsYmFja01lc3NhZ2UoZXZlbnQpLCBmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrSWZyYW1lKCkge1xuICAgIGNvbnN0IG1zZyA9IHRoaXMua2V5Y2xvYWsua2V5Y2xvYWtDb25maWcuY2xpZW50SWQgKyAnICcgKyAoISF0aGlzLmtleWNsb2FrLnNlc3Npb25JZCA/IHRoaXMua2V5Y2xvYWsuc2Vzc2lvbklkIDogJycpO1xuICAgIGNvbnN0IG9yaWdpbiA9IHRoaXMuaWZyYW1lU3JjLnN1YnN0cmluZygwLCB0aGlzLmlmcmFtZVNyYy5pbmRleE9mKCcvJywgOCkpO1xuXG4gICAgLy8gY29uc29sZS5sb2coJ3NlbmRpbmcgbWVzc2FnZSB0byBpZnJhbWUgJyArIG1zZyArICcgb3JpZ2luIDonICsgb3JpZ2luKTtcbiAgICB0aGlzLmlmcmFtZS5jb250ZW50V2luZG93LnBvc3RNZXNzYWdlKG1zZywgb3JpZ2luKTtcblxuICAgIGlmICh0aGlzLmludGVydmFsID4gMCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNoZWNrSWZyYW1lKCksIHRoaXMuaW50ZXJ2YWwpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0NhbGxiYWNrTWVzc2FnZShldmVudDogYW55KSB7XG4gICAgY29uc3Qgb3JpZ2luID0gdGhpcy5pZnJhbWVTcmMuc3Vic3RyaW5nKDAsIHRoaXMuaWZyYW1lU3JjLmluZGV4T2YoJy8nLCA4KSk7XG4gICAgLy8gY29uc29sZS5sb2coJ2NoZWNraW5nIGlmcmFtZSBtZXNzYWdlIGNhbGxiYWNrLi4nICsgZXZlbnQuZGF0YSArICcgJyArIGV2ZW50Lm9yaWdpbik7XG4gICAgaWYgKChldmVudC5vcmlnaW4gIT09IG9yaWdpbikgfHwgKHRoaXMuaWZyYW1lLmNvbnRlbnRXaW5kb3cgIT09IGV2ZW50LnNvdXJjZSkpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdldmVudCBpcyBub3QgY29taW5nIGZyb20gdGhlIGlmcmFtZSwgaWdub3JpbmcgaXQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCEoZXZlbnQuZGF0YSA9PT0gJ3VuY2hhbmdlZCcgfHwgZXZlbnQuZGF0YSA9PT0gJ2NoYW5nZWQnIHx8IGV2ZW50LmRhdGEgPT09ICdlcnJvcicpKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygndW5rbm93biBldmVudCBkYXRhLCBpZ25vcmluZyBpdCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5kYXRhICE9PSAndW5jaGFuZ2VkJykge1xuICAgICAgLy8gY29uc29sZS5sb2coJ2V2ZW50IGZyb20gdGhlIGlmcmFtZSwgYW5kIGRhdGEgY2hhbmdlZCwgY2xlYXJpbmcgdG9rZW5zJyk7XG4gICAgICB0aGlzLmtleWNsb2FrLmNsZWFyVG9rZW4oe30pO1xuICAgIH1cbiAgfVxufVxuIl19