@ebondu/angular2-keycloak
Version:
65 lines • 8.56 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.
*/
import { BehaviorSubject } from 'rxjs';
/**
* 3Party cookie Iframe utility
*/
export class KeycloakCheck3pCookiesIframe {
keycloak;
iframe;
interval;
iframeSrc;
supportedBS;
supportedObs;
constructor(keycloak) {
this.keycloak = keycloak;
this.iframeSrc = this.keycloak.getRealmUrl() + '/protocol/openid-connect/3p-cookies/step1.html';
this.supportedBS = new BehaviorSubject(null);
this.supportedObs = this.supportedBS.asObservable();
this.initIframe();
}
initIframe() {
this.iframe = document.createElement('iframe');
this.iframe.setAttribute('src', this.iframeSrc);
this.iframe.setAttribute('title', 'keycloak-3p-check-iframe');
this.iframe.style.display = 'none';
document.body.appendChild(this.iframe);
window.addEventListener('message', () => this.process3pCookieCallbackMessage(event), false);
}
process3pCookieCallbackMessage(event) {
// console.log('checking iframe message callback..' + event.data + ' ' + event.origin);
if (this.iframe.contentWindow !== event.source) {
// console.log('event is not coming from the iframe, ignoring it');
return;
}
// console.log('Checking iframe message ' + event.data);
if (event.data !== 'supported' && event.data !== 'unsupported') {
return;
}
if (event.data === 'unsupported') {
console.warn('[KEYCLOAK] 3rd party cookies aren\'t supported by this browser.' +
' checkLoginIframe and silent check-sso are not available.');
this.supportedBS.next(false);
}
else {
this.supportedBS.next(true);
}
document.body.removeChild(this.iframe);
window.removeEventListener('message', () => this.process3pCookieCallbackMessage(event));
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWsudXRpbHMuY2hlY2stM3BDb29raWVzLWlmcmFtZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Vib25kdS9hbmd1bGFyLWtleWNsb2FrL3NyYy9saWIvdXRpbC9rZXljbG9hay51dGlscy5jaGVjay0zcENvb2tpZXMtaWZyYW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFFbkQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sNEJBQTRCO0lBT25CO0lBTlosTUFBTSxDQUFNO0lBQ1osUUFBUSxDQUFTO0lBQ2pCLFNBQVMsQ0FBUztJQUNsQixXQUFXLENBQTJCO0lBQ3ZDLFlBQVksQ0FBc0I7SUFFekMsWUFBb0IsUUFBeUI7UUFBekIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDM0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLGdEQUFnRCxDQUFDO1FBQ2hHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSwwQkFBMEIsQ0FBRSxDQUFDO1FBQy9ELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDbkMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFTyw4QkFBOEIsQ0FBQyxLQUFVO1FBQy9DLHVGQUF1RjtRQUN2RixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxLQUFLLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMvQyxtRUFBbUU7WUFDbkUsT0FBTztRQUNULENBQUM7UUFDRCx3REFBd0Q7UUFDeEQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsRUFBRSxDQUFDO1lBQy9ELE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUVBQWlFO2dCQUM1RSwyREFBMkQsQ0FDNUQsQ0FBQztZQUNGLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsQ0FBQztRQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzFGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAyMiBlYm9uZHUgYW5kL29yIGl0cyBhZmZpbGlhdGVzXG4gKiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIGFzIGluZGljYXRlZCBieSB0aGUgQGF1dGhvciB0YWdzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEtleWNsb2FrU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2Uva2V5Y2xvYWsuc2VydmljZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiAzUGFydHkgY29va2llIElmcmFtZSB1dGlsaXR5XG4gKi9cbmV4cG9ydCBjbGFzcyBLZXljbG9ha0NoZWNrM3BDb29raWVzSWZyYW1lIHtcbiAgcHJpdmF0ZSBpZnJhbWU6IGFueTtcbiAgcHJpdmF0ZSBpbnRlcnZhbDogbnVtYmVyO1xuICBwcml2YXRlIGlmcmFtZVNyYzogc3RyaW5nO1xuICBwcml2YXRlIHN1cHBvcnRlZEJTOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XG4gIHB1YmxpYyBzdXBwb3J0ZWRPYnM6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBrZXljbG9hazogS2V5Y2xvYWtTZXJ2aWNlKSB7XG4gICAgdGhpcy5pZnJhbWVTcmMgPSB0aGlzLmtleWNsb2FrLmdldFJlYWxtVXJsKCkgKyAnL3Byb3RvY29sL29wZW5pZC1jb25uZWN0LzNwLWNvb2tpZXMvc3RlcDEuaHRtbCc7XG4gICAgdGhpcy5zdXBwb3J0ZWRCUyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcbiAgICB0aGlzLnN1cHBvcnRlZE9icyA9IHRoaXMuc3VwcG9ydGVkQlMuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5pbml0SWZyYW1lKCk7XG4gIH1cblxuICBpbml0SWZyYW1lKCkge1xuICAgIHRoaXMuaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gICAgdGhpcy5pZnJhbWUuc2V0QXR0cmlidXRlKCdzcmMnLCB0aGlzLmlmcmFtZVNyYyk7XG4gICAgdGhpcy5pZnJhbWUuc2V0QXR0cmlidXRlKCd0aXRsZScsICdrZXljbG9hay0zcC1jaGVjay1pZnJhbWUnICk7XG4gICAgdGhpcy5pZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuaWZyYW1lKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsICgpID0+IHRoaXMucHJvY2VzczNwQ29va2llQ2FsbGJhY2tNZXNzYWdlKGV2ZW50KSwgZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzM3BDb29raWVDYWxsYmFja01lc3NhZ2UoZXZlbnQ6IGFueSkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdjaGVja2luZyBpZnJhbWUgbWVzc2FnZSBjYWxsYmFjay4uJyArIGV2ZW50LmRhdGEgKyAnICcgKyBldmVudC5vcmlnaW4pO1xuICAgIGlmICh0aGlzLmlmcmFtZS5jb250ZW50V2luZG93ICE9PSBldmVudC5zb3VyY2UpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdldmVudCBpcyBub3QgY29taW5nIGZyb20gdGhlIGlmcmFtZSwgaWdub3JpbmcgaXQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coJ0NoZWNraW5nIGlmcmFtZSBtZXNzYWdlICcgKyBldmVudC5kYXRhKTtcbiAgICBpZiAoZXZlbnQuZGF0YSAhPT0gJ3N1cHBvcnRlZCcgJiYgZXZlbnQuZGF0YSAhPT0gJ3Vuc3VwcG9ydGVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZlbnQuZGF0YSA9PT0gJ3Vuc3VwcG9ydGVkJykge1xuICAgICAgY29uc29sZS53YXJuKCdbS0VZQ0xPQUtdIDNyZCBwYXJ0eSBjb29raWVzIGFyZW5cXCd0IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuJyArXG4gICAgICAgICcgY2hlY2tMb2dpbklmcmFtZSBhbmQgc2lsZW50IGNoZWNrLXNzbyBhcmUgbm90IGF2YWlsYWJsZS4nXG4gICAgICApO1xuICAgICAgdGhpcy5zdXBwb3J0ZWRCUy5uZXh0KGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdXBwb3J0ZWRCUy5uZXh0KHRydWUpO1xuICAgIH1cbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuaWZyYW1lKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsICgpID0+IHRoaXMucHJvY2VzczNwQ29va2llQ2FsbGJhY2tNZXNzYWdlKGV2ZW50KSk7XG4gIH1cbn1cbiJdfQ==