@igo2/auth 1.15.4 → 16.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/{esm2020 → esm2022}/igo2-auth.mjs +4 -4
  2. package/esm2022/lib/auth-form/auth-facebook.component.mjs +67 -0
  3. package/esm2022/lib/auth-form/auth-form.component.mjs +286 -0
  4. package/esm2022/lib/auth-form/auth-google.component.mjs +108 -0
  5. package/esm2022/lib/auth-form/auth-intern.component.mjs +134 -0
  6. package/esm2022/lib/auth-form/auth-microsoft.component.mjs +107 -0
  7. package/esm2022/lib/auth-form/auth-microsoftb2c.component.mjs +105 -0
  8. package/{esm2020 → esm2022}/lib/auth-form/index.mjs +5 -5
  9. package/{esm2020 → esm2022}/lib/auth-routing.module.mjs +24 -24
  10. package/{esm2020 → esm2022}/lib/auth.module.mjs +91 -91
  11. package/esm2022/lib/shared/admin.guard.mjs +39 -0
  12. package/esm2022/lib/shared/auth-microsoft.provider.mjs +86 -0
  13. package/esm2022/lib/shared/auth-msalBroadcastServiceb2c.service.mjs +47 -0
  14. package/esm2022/lib/shared/auth-msalServiceb2c.service..mjs +85 -0
  15. package/esm2022/lib/shared/auth.guard.mjs +38 -0
  16. package/esm2022/lib/shared/auth.interceptor.mjs +164 -0
  17. package/{esm2020 → esm2022}/lib/shared/auth.interface.mjs +2 -2
  18. package/esm2022/lib/shared/auth.service.mjs +168 -0
  19. package/esm2022/lib/shared/logged.guard.mjs +38 -0
  20. package/esm2022/lib/shared/profils.guard.mjs +43 -0
  21. package/esm2022/lib/shared/protected.directive.mjs +20 -0
  22. package/{esm2020 → esm2022}/lib/shared/storage.interface.mjs +1 -1
  23. package/esm2022/lib/shared/storage.service.mjs +99 -0
  24. package/esm2022/lib/shared/token.service.mjs +48 -0
  25. package/{esm2020 → esm2022}/public_api.mjs +18 -18
  26. package/{fesm2020 → fesm2022}/igo2-auth.mjs +1573 -1477
  27. package/fesm2022/igo2-auth.mjs.map +1 -0
  28. package/index.d.ts +5 -5
  29. package/lib/auth-form/auth-facebook.component.d.ts +18 -18
  30. package/lib/auth-form/auth-form.component.d.ts +42 -42
  31. package/lib/auth-form/auth-google.component.d.ts +24 -24
  32. package/lib/auth-form/auth-intern.component.d.ts +21 -21
  33. package/lib/auth-form/auth-microsoft.component.d.ts +23 -23
  34. package/lib/auth-form/auth-microsoftb2c.component.d.ts +23 -23
  35. package/lib/auth-form/index.d.ts +4 -4
  36. package/lib/auth-routing.module.d.ts +7 -7
  37. package/lib/auth.module.d.ts +23 -23
  38. package/lib/shared/admin.guard.d.ts +13 -13
  39. package/lib/shared/auth-microsoft.provider.d.ts +30 -30
  40. package/lib/shared/auth-msalBroadcastServiceb2c.service.d.ts +15 -15
  41. package/lib/shared/auth-msalServiceb2c.service..d.ts +33 -33
  42. package/lib/shared/auth.guard.d.ts +13 -13
  43. package/lib/shared/auth.interceptor.d.ts +24 -24
  44. package/lib/shared/auth.interface.d.ts +99 -99
  45. package/lib/shared/auth.service.d.ts +44 -44
  46. package/lib/shared/logged.guard.d.ts +13 -13
  47. package/lib/shared/profils.guard.d.ts +13 -13
  48. package/lib/shared/protected.directive.d.ts +8 -8
  49. package/lib/shared/storage.interface.d.ts +4 -4
  50. package/lib/shared/storage.service.d.ts +17 -18
  51. package/lib/shared/token.service.d.ts +15 -15
  52. package/locale/en.auth.json +28 -0
  53. package/locale/fr.auth.json +32 -0
  54. package/package.json +18 -25
  55. package/public_api.d.ts +15 -15
  56. package/esm2020/lib/auth-form/auth-facebook.component.mjs +0 -61
  57. package/esm2020/lib/auth-form/auth-form.component.mjs +0 -277
  58. package/esm2020/lib/auth-form/auth-google.component.mjs +0 -99
  59. package/esm2020/lib/auth-form/auth-intern.component.mjs +0 -119
  60. package/esm2020/lib/auth-form/auth-microsoft.component.mjs +0 -94
  61. package/esm2020/lib/auth-form/auth-microsoftb2c.component.mjs +0 -93
  62. package/esm2020/lib/shared/admin.guard.mjs +0 -33
  63. package/esm2020/lib/shared/auth-microsoft.provider.mjs +0 -84
  64. package/esm2020/lib/shared/auth-msalBroadcastServiceb2c.service.mjs +0 -38
  65. package/esm2020/lib/shared/auth-msalServiceb2c.service..mjs +0 -80
  66. package/esm2020/lib/shared/auth.guard.mjs +0 -32
  67. package/esm2020/lib/shared/auth.interceptor.mjs +0 -155
  68. package/esm2020/lib/shared/auth.service.mjs +0 -158
  69. package/esm2020/lib/shared/logged.guard.mjs +0 -32
  70. package/esm2020/lib/shared/profils.guard.mjs +0 -37
  71. package/esm2020/lib/shared/protected.directive.mjs +0 -19
  72. package/esm2020/lib/shared/storage.service.mjs +0 -91
  73. package/esm2020/lib/shared/token.service.mjs +0 -47
  74. package/fesm2015/igo2-auth.mjs +0 -1655
  75. package/fesm2015/igo2-auth.mjs.map +0 -1
  76. package/fesm2020/igo2-auth.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public_api';
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public_api';
5
5
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWdvMi1hdXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvYXV0aC9zcmMvaWdvMi1hdXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljX2FwaSc7XG4iXX0=
@@ -0,0 +1,67 @@
1
+ import { Component, ChangeDetectionStrategy, ApplicationRef, Output, EventEmitter } from '@angular/core';
2
+ import { ConfigService } from '@igo2/core';
3
+ import { AuthService } from '../shared/auth.service';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../shared/auth.service";
6
+ import * as i2 from "@igo2/core";
7
+ export class AuthFacebookComponent {
8
+ authService;
9
+ config;
10
+ appRef;
11
+ options;
12
+ login = new EventEmitter();
13
+ constructor(authService, config, appRef) {
14
+ this.authService = authService;
15
+ this.config = config;
16
+ this.appRef = appRef;
17
+ this.options = this.config.getConfig('auth.facebook');
18
+ if (this.options?.appId) {
19
+ this.loadSDKFacebook();
20
+ }
21
+ else {
22
+ console.warn('Facebook authentification needs "appId" option');
23
+ }
24
+ }
25
+ subscribeEvents() {
26
+ window.FB.Event.subscribe('auth.statusChange', (rep) => {
27
+ this.statusChangeCallback(rep);
28
+ });
29
+ }
30
+ statusChangeCallback(response) {
31
+ if (response.status === 'connected') {
32
+ const accessToken = response.authResponse.accessToken;
33
+ this.loginFacebook(accessToken);
34
+ }
35
+ }
36
+ loginFacebook(token) {
37
+ this.authService.loginWithToken(token, 'facebook').subscribe(() => {
38
+ this.appRef.tick();
39
+ this.login.emit(true);
40
+ });
41
+ }
42
+ loadSDKFacebook() {
43
+ if (document.getElementById('facebook-jssdk')) {
44
+ return;
45
+ }
46
+ const urlSDK = 'https://connect.facebook.net/fr_CA/sdk.js#xfbml=1&version=v2.9';
47
+ const fjs = document.getElementsByTagName('script')[0];
48
+ const js = document.createElement('script');
49
+ js.id = 'facebook-jssdk';
50
+ js.src = `${urlSDK}&appId=${this.options?.appId}`;
51
+ js.onload = () => {
52
+ this.subscribeEvents();
53
+ };
54
+ fjs.parentNode.insertBefore(js, fjs);
55
+ }
56
+ static ɵfac = function AuthFacebookComponent_Factory(t) { return new (t || AuthFacebookComponent)(i0.ɵɵdirectiveInject(i1.AuthService), i0.ɵɵdirectiveInject(i2.ConfigService), i0.ɵɵdirectiveInject(i0.ApplicationRef)); };
57
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AuthFacebookComponent, selectors: [["igo-auth-facebook"]], outputs: { login: "login" }, decls: 1, vars: 0, consts: [["scope", "public_profile,email", "data-max-rows", "1", "data-size", "large", "data-button-type", "login_with", "data-show-faces", "false", "data-auto-logout-link", "false", "data-use-continue-as", "false", 1, "fb-login-button"]], template: function AuthFacebookComponent_Template(rf, ctx) { if (rf & 1) {
58
+ i0.ɵɵelement(0, "div", 0);
59
+ } }, styles: ["[_nghost-%COMP%]{padding:10px 10px 10px 0;display:inline-block;position:relative;top:-3px}"], changeDetection: 0 });
60
+ }
61
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AuthFacebookComponent, [{
62
+ type: Component,
63
+ args: [{ selector: 'igo-auth-facebook', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\r\n scope=\"public_profile,email\"\r\n class=\"fb-login-button\"\r\n data-max-rows=\"1\"\r\n data-size=\"large\"\r\n data-button-type=\"login_with\"\r\n data-show-faces=\"false\"\r\n data-auto-logout-link=\"false\"\r\n data-use-continue-as=\"false\"\r\n></div>\r\n", styles: [":host{padding:10px 10px 10px 0;display:inline-block;position:relative;top:-3px}\n"] }]
64
+ }], function () { return [{ type: i1.AuthService }, { type: i2.ConfigService }, { type: i0.ApplicationRef }]; }, { login: [{
65
+ type: Output
66
+ }] }); })();
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1mYWNlYm9vay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hdXRoL3NyYy9saWIvYXV0aC1mb3JtL2F1dGgtZmFjZWJvb2suY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYXV0aC9zcmMvbGliL2F1dGgtZm9ybS9hdXRoLWZhY2Vib29rLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLGNBQWMsRUFDZCxNQUFNLEVBQ04sWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7O0FBUXJELE1BQU0sT0FBTyxxQkFBcUI7SUFNdEI7SUFDQTtJQUNBO0lBUEYsT0FBTyxDQUF1QjtJQUU1QixLQUFLLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7SUFFckUsWUFDVSxXQUF3QixFQUN4QixNQUFxQixFQUNyQixNQUFzQjtRQUZ0QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBRTlCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFdEQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtZQUN2QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDeEI7YUFBTTtZQUNMLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0RBQWdELENBQUMsQ0FBQztTQUNoRTtJQUNILENBQUM7SUFFTyxlQUFlO1FBQ3BCLE1BQWMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzlELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxRQUFRO1FBQ25DLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUU7WUFDbkMsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUM7WUFDdEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNqQztJQUNILENBQUM7SUFFTyxhQUFhLENBQUMsS0FBSztRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNoRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLEVBQUU7WUFDN0MsT0FBTztTQUNSO1FBRUQsTUFBTSxNQUFNLEdBQ1YsZ0VBQWdFLENBQUM7UUFFbkUsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQztRQUN6QixFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxVQUFVLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDbEQsRUFBRSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7WUFDZixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDO1FBQ0YsR0FBRyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7K0VBdkRVLHFCQUFxQjs2REFBckIscUJBQXFCO1lDbEJsQyx5QkFTTzs7O3VGRFNNLHFCQUFxQjtjQU5qQyxTQUFTOzJCQUNFLG1CQUFtQixtQkFHWix1QkFBdUIsQ0FBQyxNQUFNO3VIQUtyQyxLQUFLO2tCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBBcHBsaWNhdGlvblJlZixcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XHJcbmltcG9ydCB7IEF1dGhGYWNlYm9va09wdGlvbnMgfSBmcm9tICcuLi9zaGFyZWQvYXV0aC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9hdXRoLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZ28tYXV0aC1mYWNlYm9vaycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2F1dGgtZmFjZWJvb2suY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2F1dGgtZmFjZWJvb2suY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXV0aEZhY2Vib29rQ29tcG9uZW50IHtcclxuICBwcml2YXRlIG9wdGlvbnM/OiBBdXRoRmFjZWJvb2tPcHRpb25zO1xyXG5cclxuICBAT3V0cHV0KCkgbG9naW46IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgY29uZmlnOiBDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmXHJcbiAgKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoJ2F1dGguZmFjZWJvb2snKTtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zPy5hcHBJZCkge1xyXG4gICAgICB0aGlzLmxvYWRTREtGYWNlYm9vaygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKCdGYWNlYm9vayBhdXRoZW50aWZpY2F0aW9uIG5lZWRzIFwiYXBwSWRcIiBvcHRpb24nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlRXZlbnRzKCkge1xyXG4gICAgKHdpbmRvdyBhcyBhbnkpLkZCLkV2ZW50LnN1YnNjcmliZSgnYXV0aC5zdGF0dXNDaGFuZ2UnLCAocmVwKSA9PiB7XHJcbiAgICAgIHRoaXMuc3RhdHVzQ2hhbmdlQ2FsbGJhY2socmVwKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0dXNDaGFuZ2VDYWxsYmFjayhyZXNwb25zZSkge1xyXG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gJ2Nvbm5lY3RlZCcpIHtcclxuICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSByZXNwb25zZS5hdXRoUmVzcG9uc2UuYWNjZXNzVG9rZW47XHJcbiAgICAgIHRoaXMubG9naW5GYWNlYm9vayhhY2Nlc3NUb2tlbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvZ2luRmFjZWJvb2sodG9rZW4pIHtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UubG9naW5XaXRoVG9rZW4odG9rZW4sICdmYWNlYm9vaycpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYXBwUmVmLnRpY2soKTtcclxuICAgICAgdGhpcy5sb2dpbi5lbWl0KHRydWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRTREtGYWNlYm9vaygpIHtcclxuICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFjZWJvb2stanNzZGsnKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdXJsU0RLID1cclxuICAgICAgJ2h0dHBzOi8vY29ubmVjdC5mYWNlYm9vay5uZXQvZnJfQ0Evc2RrLmpzI3hmYm1sPTEmdmVyc2lvbj12Mi45JztcclxuXHJcbiAgICBjb25zdCBmanMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMF07XHJcbiAgICBjb25zdCBqcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG4gICAganMuaWQgPSAnZmFjZWJvb2stanNzZGsnO1xyXG4gICAganMuc3JjID0gYCR7dXJsU0RLfSZhcHBJZD0ke3RoaXMub3B0aW9ucz8uYXBwSWR9YDtcclxuICAgIGpzLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgdGhpcy5zdWJzY3JpYmVFdmVudHMoKTtcclxuICAgIH07XHJcbiAgICBmanMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoanMsIGZqcyk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICBzY29wZT1cInB1YmxpY19wcm9maWxlLGVtYWlsXCJcclxuICBjbGFzcz1cImZiLWxvZ2luLWJ1dHRvblwiXHJcbiAgZGF0YS1tYXgtcm93cz1cIjFcIlxyXG4gIGRhdGEtc2l6ZT1cImxhcmdlXCJcclxuICBkYXRhLWJ1dHRvbi10eXBlPVwibG9naW5fd2l0aFwiXHJcbiAgZGF0YS1zaG93LWZhY2VzPVwiZmFsc2VcIlxyXG4gIGRhdGEtYXV0by1sb2dvdXQtbGluaz1cImZhbHNlXCJcclxuICBkYXRhLXVzZS1jb250aW51ZS1hcz1cImZhbHNlXCJcclxuPjwvZGl2PlxyXG4iXX0=
@@ -0,0 +1,286 @@
1
+ import { Component, ChangeDetectionStrategy, Input, Optional, Output, EventEmitter } from '@angular/core';
2
+ import { Router, NavigationStart } from '@angular/router';
3
+ import { filter } from 'rxjs/operators';
4
+ import { ConfigService } from '@igo2/core';
5
+ import { AuthService } from '../shared/auth.service';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../shared/auth.service";
8
+ import * as i2 from "@igo2/core";
9
+ import * as i3 from "@angular/router";
10
+ import * as i4 from "@angular/common";
11
+ import * as i5 from "@angular/material/button";
12
+ import * as i6 from "./auth-google.component";
13
+ import * as i7 from "./auth-intern.component";
14
+ import * as i8 from "./auth-facebook.component";
15
+ import * as i9 from "./auth-microsoft.component";
16
+ import * as i10 from "./auth-microsoftb2c.component";
17
+ import * as i11 from "@ngx-translate/core";
18
+ function AuthFormComponent_div_0_div_1_Template(rf, ctx) { if (rf & 1) {
19
+ i0.ɵɵelement(0, "div", 3);
20
+ } }
21
+ function AuthFormComponent_div_0_div_2_igo_auth_google_4_Template(rf, ctx) { if (rf & 1) {
22
+ const _r11 = i0.ɵɵgetCurrentView();
23
+ i0.ɵɵelementStart(0, "igo-auth-google", 7);
24
+ i0.ɵɵlistener("login", function AuthFormComponent_div_0_div_2_igo_auth_google_4_Template_igo_auth_google_login_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r10 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r10.onLogin()); });
25
+ i0.ɵɵelementEnd();
26
+ } }
27
+ function AuthFormComponent_div_0_div_2_igo_auth_microsoft_5_Template(rf, ctx) { if (rf & 1) {
28
+ const _r13 = i0.ɵɵgetCurrentView();
29
+ i0.ɵɵelementStart(0, "igo-auth-microsoft", 7);
30
+ i0.ɵɵlistener("login", function AuthFormComponent_div_0_div_2_igo_auth_microsoft_5_Template_igo_auth_microsoft_login_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r12 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r12.onLogin()); });
31
+ i0.ɵɵelementEnd();
32
+ } }
33
+ function AuthFormComponent_div_0_div_2_igo_auth_microsoftb2c_6_Template(rf, ctx) { if (rf & 1) {
34
+ const _r15 = i0.ɵɵgetCurrentView();
35
+ i0.ɵɵelementStart(0, "igo-auth-microsoftb2c", 7);
36
+ i0.ɵɵlistener("login", function AuthFormComponent_div_0_div_2_igo_auth_microsoftb2c_6_Template_igo_auth_microsoftb2c_login_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r14 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r14.onLogin()); });
37
+ i0.ɵɵelementEnd();
38
+ } }
39
+ function AuthFormComponent_div_0_div_2_igo_auth_facebook_7_Template(rf, ctx) { if (rf & 1) {
40
+ const _r17 = i0.ɵɵgetCurrentView();
41
+ i0.ɵɵelementStart(0, "igo-auth-facebook", 7);
42
+ i0.ɵɵlistener("login", function AuthFormComponent_div_0_div_2_igo_auth_facebook_7_Template_igo_auth_facebook_login_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r16 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r16.onLogin()); });
43
+ i0.ɵɵelementEnd();
44
+ } }
45
+ function AuthFormComponent_div_0_div_2_igo_auth_intern_8_Template(rf, ctx) { if (rf & 1) {
46
+ const _r19 = i0.ɵɵgetCurrentView();
47
+ i0.ɵɵelementStart(0, "igo-auth-intern", 8);
48
+ i0.ɵɵlistener("login", function AuthFormComponent_div_0_div_2_igo_auth_intern_8_Template_igo_auth_intern_login_0_listener() { i0.ɵɵrestoreView(_r19); const ctx_r18 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r18.onLogin()); });
49
+ i0.ɵɵelementEnd();
50
+ } if (rf & 2) {
51
+ const ctx_r9 = i0.ɵɵnextContext(3);
52
+ i0.ɵɵproperty("allowAnonymous", ctx_r9.options.allowAnonymous);
53
+ } }
54
+ function AuthFormComponent_div_0_div_2_Template(rf, ctx) { if (rf & 1) {
55
+ i0.ɵɵelementStart(0, "div", 4)(1, "h1");
56
+ i0.ɵɵtext(2);
57
+ i0.ɵɵpipe(3, "translate");
58
+ i0.ɵɵelementEnd();
59
+ i0.ɵɵtemplate(4, AuthFormComponent_div_0_div_2_igo_auth_google_4_Template, 1, 0, "igo-auth-google", 5);
60
+ i0.ɵɵtemplate(5, AuthFormComponent_div_0_div_2_igo_auth_microsoft_5_Template, 1, 0, "igo-auth-microsoft", 5);
61
+ i0.ɵɵtemplate(6, AuthFormComponent_div_0_div_2_igo_auth_microsoftb2c_6_Template, 1, 0, "igo-auth-microsoftb2c", 5);
62
+ i0.ɵɵtemplate(7, AuthFormComponent_div_0_div_2_igo_auth_facebook_7_Template, 1, 0, "igo-auth-facebook", 5);
63
+ i0.ɵɵtemplate(8, AuthFormComponent_div_0_div_2_igo_auth_intern_8_Template, 1, 1, "igo-auth-intern", 6);
64
+ i0.ɵɵelementEnd();
65
+ } if (rf & 2) {
66
+ const ctx_r2 = i0.ɵɵnextContext(2);
67
+ i0.ɵɵadvance(2);
68
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 6, "igo.auth.connection"));
69
+ i0.ɵɵadvance(2);
70
+ i0.ɵɵproperty("ngIf", ctx_r2.options.google && ctx_r2.options.google.enabled !== false);
71
+ i0.ɵɵadvance(1);
72
+ i0.ɵɵproperty("ngIf", ctx_r2.options.microsoft && ctx_r2.options.microsoft.enabled !== false);
73
+ i0.ɵɵadvance(1);
74
+ i0.ɵɵproperty("ngIf", ctx_r2.options.microsoftb2c && ctx_r2.options.microsoftb2c.enabled !== false);
75
+ i0.ɵɵadvance(1);
76
+ i0.ɵɵproperty("ngIf", ctx_r2.options.facebook && ctx_r2.options.facebook.enabled !== false);
77
+ i0.ɵɵadvance(1);
78
+ i0.ɵɵproperty("ngIf", !ctx_r2.options.intern || ctx_r2.options.intern.enabled !== false);
79
+ } }
80
+ function AuthFormComponent_div_0_div_3_Template(rf, ctx) { if (rf & 1) {
81
+ const _r21 = i0.ɵɵgetCurrentView();
82
+ i0.ɵɵelementStart(0, "div", 4)(1, "p");
83
+ i0.ɵɵtext(2);
84
+ i0.ɵɵpipe(3, "translate");
85
+ i0.ɵɵelementEnd();
86
+ i0.ɵɵelementStart(4, "button", 9);
87
+ i0.ɵɵlistener("click", function AuthFormComponent_div_0_div_3_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r21); const ctx_r20 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r20.logout()); });
88
+ i0.ɵɵtext(5);
89
+ i0.ɵɵpipe(6, "translate");
90
+ i0.ɵɵelementEnd()();
91
+ } if (rf & 2) {
92
+ const ctx_r3 = i0.ɵɵnextContext(2);
93
+ i0.ɵɵadvance(2);
94
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(3, 2, "igo.auth.welcome", ctx_r3.user));
95
+ i0.ɵɵadvance(3);
96
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(6, 5, "igo.auth.signOut"), " ");
97
+ } }
98
+ function AuthFormComponent_div_0_div_4_button_4_Template(rf, ctx) { if (rf & 1) {
99
+ const _r24 = i0.ɵɵgetCurrentView();
100
+ i0.ɵɵelementStart(0, "button", 9);
101
+ i0.ɵɵlistener("click", function AuthFormComponent_div_0_div_4_button_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r24); const ctx_r23 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r23.home()); });
102
+ i0.ɵɵtext(1);
103
+ i0.ɵɵpipe(2, "translate");
104
+ i0.ɵɵelementEnd();
105
+ } if (rf & 2) {
106
+ i0.ɵɵadvance(1);
107
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 1, "igo.auth.home"), " ");
108
+ } }
109
+ function AuthFormComponent_div_0_div_4_Template(rf, ctx) { if (rf & 1) {
110
+ i0.ɵɵelementStart(0, "div", 4)(1, "p");
111
+ i0.ɵɵtext(2);
112
+ i0.ɵɵpipe(3, "translate");
113
+ i0.ɵɵelementEnd();
114
+ i0.ɵɵtemplate(4, AuthFormComponent_div_0_div_4_button_4_Template, 3, 3, "button", 10);
115
+ i0.ɵɵelementEnd();
116
+ } if (rf & 2) {
117
+ const ctx_r4 = i0.ɵɵnextContext(2);
118
+ i0.ɵɵadvance(2);
119
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 2, "igo.auth.deconnection"));
120
+ i0.ɵɵadvance(2);
121
+ i0.ɵɵproperty("ngIf", ctx_r4.options.homeRoute);
122
+ } }
123
+ function AuthFormComponent_div_0_Template(rf, ctx) { if (rf & 1) {
124
+ i0.ɵɵelementStart(0, "div");
125
+ i0.ɵɵtemplate(1, AuthFormComponent_div_0_div_1_Template, 1, 0, "div", 1);
126
+ i0.ɵɵtemplate(2, AuthFormComponent_div_0_div_2_Template, 9, 8, "div", 2);
127
+ i0.ɵɵtemplate(3, AuthFormComponent_div_0_div_3_Template, 7, 7, "div", 2);
128
+ i0.ɵɵtemplate(4, AuthFormComponent_div_0_div_4_Template, 5, 4, "div", 2);
129
+ i0.ɵɵelementEnd();
130
+ } if (rf & 2) {
131
+ const ctx_r0 = i0.ɵɵnextContext();
132
+ i0.ɵɵadvance(1);
133
+ i0.ɵɵproperty("ngIf", !ctx_r0.auth.logged && ctx_r0.backgroundDisable);
134
+ i0.ɵɵadvance(1);
135
+ i0.ɵɵproperty("ngIf", !ctx_r0.auth.logged && ctx_r0.showLoginDiv);
136
+ i0.ɵɵadvance(1);
137
+ i0.ɵɵproperty("ngIf", ctx_r0.auth.logged && ctx_r0.showAlreadyConnectedDiv);
138
+ i0.ɵɵadvance(1);
139
+ i0.ɵɵproperty("ngIf", ctx_r0.showLogoutDiv);
140
+ } }
141
+ export class AuthFormComponent {
142
+ auth;
143
+ config;
144
+ router;
145
+ get backgroundDisable() {
146
+ if (this.isLogoutRoute || this.isLogoutRoute) {
147
+ return false;
148
+ }
149
+ return this._backgroundDisable;
150
+ }
151
+ set backgroundDisable(value) {
152
+ this._backgroundDisable = value.toString() === 'true';
153
+ }
154
+ _backgroundDisable = true;
155
+ get hasAlreadyConnectedDiv() {
156
+ return this._hasAlreadyConnectedDiv;
157
+ }
158
+ set hasAlreadyConnectedDiv(value) {
159
+ this._hasAlreadyConnectedDiv = value.toString() === 'true';
160
+ }
161
+ _hasAlreadyConnectedDiv = true;
162
+ get hasLogoutDiv() {
163
+ return this._hasLogoutDiv;
164
+ }
165
+ set hasLogoutDiv(value) {
166
+ this._hasLogoutDiv = value.toString() === 'true';
167
+ }
168
+ _hasLogoutDiv = true;
169
+ get showAlreadyConnectedDiv() {
170
+ if (this.isLogoutRoute) {
171
+ return this.hasAlreadyConnectedDiv;
172
+ }
173
+ return this._showAlreadyConnectedDiv;
174
+ }
175
+ set showAlreadyConnectedDiv(value) {
176
+ this._showAlreadyConnectedDiv = value.toString() === 'true';
177
+ }
178
+ _showAlreadyConnectedDiv = false;
179
+ get showLogoutDiv() {
180
+ if (this.isLogoutRoute) {
181
+ return this.hasLogoutDiv;
182
+ }
183
+ return this._showLogoutDiv;
184
+ }
185
+ set showLogoutDiv(value) {
186
+ this._showLogoutDiv = value.toString() === 'true';
187
+ }
188
+ _showLogoutDiv = false;
189
+ get showLoginDiv() {
190
+ if (!this.isLogoutRoute) {
191
+ return true;
192
+ }
193
+ }
194
+ login = new EventEmitter();
195
+ options;
196
+ user;
197
+ visible = true;
198
+ isLoginRoute;
199
+ isLogoutRoute;
200
+ constructor(auth, config, router) {
201
+ this.auth = auth;
202
+ this.config = config;
203
+ this.router = router;
204
+ this.options = this.config.getConfig('auth');
205
+ this.visible = Object.getOwnPropertyNames(this.options).length !== 0;
206
+ }
207
+ ngOnInit() {
208
+ this.analyzeRoute();
209
+ this.getName();
210
+ }
211
+ onLogin() {
212
+ this.auth.goToRedirectUrl();
213
+ this.getName();
214
+ this.login.emit(true);
215
+ }
216
+ logout() {
217
+ this.auth.logout().subscribe(() => {
218
+ this.user = undefined;
219
+ if (this.router) {
220
+ if (this.options?.logoutRoute) {
221
+ this.router.navigate([this.options?.logoutRoute]);
222
+ }
223
+ else if (this.options?.homeRoute) {
224
+ this.router.navigate([this.options?.homeRoute]);
225
+ }
226
+ }
227
+ });
228
+ }
229
+ home() {
230
+ if (this.router && this.options?.homeRoute) {
231
+ this.router.navigate([this.options?.homeRoute]);
232
+ }
233
+ }
234
+ getName() {
235
+ const tokenDecoded = this.auth.decodeToken();
236
+ if (tokenDecoded) {
237
+ this.user = {
238
+ name: tokenDecoded.user.firstName || tokenDecoded.user.sourceId
239
+ };
240
+ }
241
+ }
242
+ analyzeRoute() {
243
+ if (!this.router) {
244
+ return;
245
+ }
246
+ this.router.events
247
+ .pipe(filter((event) => event instanceof NavigationStart))
248
+ .subscribe((changeEvent) => {
249
+ if (changeEvent.url) {
250
+ const currentRoute = changeEvent.url;
251
+ const logoutRoute = this.options?.logoutRoute;
252
+ const loginRoute = this.options?.loginRoute;
253
+ this.isLogoutRoute = currentRoute === logoutRoute;
254
+ this.isLoginRoute = currentRoute === loginRoute;
255
+ if (this.isLogoutRoute) {
256
+ this.auth.logout();
257
+ }
258
+ }
259
+ });
260
+ }
261
+ static ɵfac = function AuthFormComponent_Factory(t) { return new (t || AuthFormComponent)(i0.ɵɵdirectiveInject(i1.AuthService), i0.ɵɵdirectiveInject(i2.ConfigService), i0.ɵɵdirectiveInject(i3.Router, 8)); };
262
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AuthFormComponent, selectors: [["igo-auth-form"]], inputs: { backgroundDisable: "backgroundDisable", hasAlreadyConnectedDiv: "hasAlreadyConnectedDiv", hasLogoutDiv: "hasLogoutDiv", showAlreadyConnectedDiv: "showAlreadyConnectedDiv", showLogoutDiv: "showLogoutDiv" }, outputs: { login: "login" }, decls: 1, vars: 1, consts: [[4, "ngIf"], ["class", "backgroundDisable", 4, "ngIf"], ["class", "login center-block", 4, "ngIf"], [1, "backgroundDisable"], [1, "login", "center-block"], [3, "login", 4, "ngIf"], [3, "allowAnonymous", "login", 4, "ngIf"], [3, "login"], [3, "allowAnonymous", "login"], ["mat-raised-button", "", "type", "button", 3, "click"], ["mat-raised-button", "", "type", "button", 3, "click", 4, "ngIf"]], template: function AuthFormComponent_Template(rf, ctx) { if (rf & 1) {
263
+ i0.ɵɵtemplate(0, AuthFormComponent_div_0_Template, 5, 4, "div", 0);
264
+ } if (rf & 2) {
265
+ i0.ɵɵproperty("ngIf", ctx.visible);
266
+ } }, dependencies: [i4.NgIf, i5.MatButton, i6.AuthGoogleComponent, i7.AuthInternComponent, i8.AuthFacebookComponent, i9.AuthMicrosoftComponent, i10.AuthMicrosoftb2cComponent, i11.TranslatePipe], styles: ["[_nghost-%COMP%]{z-index:999}div.login[_ngcontent-%COMP%]{z-index:200;width:90%;min-width:360px;max-width:600px;padding:25px 50px;border:1px solid;background-color:#fff;border-color:#888}.center-block[_ngcontent-%COMP%]{position:fixed;top:20%;left:50%;transform:translate(-50%)}.backgroundDisable[_ngcontent-%COMP%]{position:fixed;top:0;left:0;background:#000;opacity:.8;z-index:100;height:100%;width:100%}"] });
267
+ }
268
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AuthFormComponent, [{
269
+ type: Component,
270
+ args: [{ selector: 'igo-auth-form', changeDetection: ChangeDetectionStrategy.Default, template: "<div *ngIf=\"visible\">\r\n <div\r\n *ngIf=\"!auth.logged && backgroundDisable\"\r\n class=\"backgroundDisable\"\r\n ></div>\r\n\r\n <div *ngIf=\"!auth.logged && showLoginDiv\" class=\"login center-block\">\r\n <h1>{{ 'igo.auth.connection' | translate }}</h1>\r\n\r\n <igo-auth-google\r\n *ngIf=\"options.google && options.google.enabled !== false\"\r\n (login)=\"onLogin()\"\r\n >\r\n </igo-auth-google>\r\n <igo-auth-microsoft\r\n *ngIf=\"options.microsoft && options.microsoft.enabled !== false\"\r\n (login)=\"onLogin()\"\r\n >\r\n </igo-auth-microsoft>\r\n <igo-auth-microsoftb2c\r\n *ngIf=\"options.microsoftb2c && options.microsoftb2c.enabled !== false\"\r\n (login)=\"onLogin()\"\r\n >\r\n </igo-auth-microsoftb2c>\r\n <igo-auth-facebook\r\n *ngIf=\"options.facebook && options.facebook.enabled !== false\"\r\n (login)=\"onLogin()\"\r\n >\r\n </igo-auth-facebook>\r\n <igo-auth-intern\r\n *ngIf=\"!options.intern || options.intern.enabled !== false\"\r\n [allowAnonymous]=\"options.allowAnonymous\"\r\n (login)=\"onLogin()\"\r\n >\r\n </igo-auth-intern>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"auth.logged && showAlreadyConnectedDiv\"\r\n class=\"login center-block\"\r\n >\r\n <p>{{ 'igo.auth.welcome' | translate: user }}</p>\r\n <button mat-raised-button type=\"button\" (click)=\"logout()\">\r\n {{ 'igo.auth.signOut' | translate }}\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"showLogoutDiv\" class=\"login center-block\">\r\n <p>{{ 'igo.auth.deconnection' | translate }}</p>\r\n <button\r\n *ngIf=\"options.homeRoute\"\r\n mat-raised-button\r\n type=\"button\"\r\n (click)=\"home()\"\r\n >\r\n {{ 'igo.auth.home' | translate }}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [":host{z-index:999}div.login{z-index:200;width:90%;min-width:360px;max-width:600px;padding:25px 50px;border:1px solid;background-color:#fff;border-color:#888}.center-block{position:fixed;top:20%;left:50%;transform:translate(-50%)}.backgroundDisable{position:fixed;top:0;left:0;background:#000;opacity:.8;z-index:100;height:100%;width:100%}\n"] }]
271
+ }], function () { return [{ type: i1.AuthService }, { type: i2.ConfigService }, { type: i3.Router, decorators: [{
272
+ type: Optional
273
+ }] }]; }, { backgroundDisable: [{
274
+ type: Input
275
+ }], hasAlreadyConnectedDiv: [{
276
+ type: Input
277
+ }], hasLogoutDiv: [{
278
+ type: Input
279
+ }], showAlreadyConnectedDiv: [{
280
+ type: Input
281
+ }], showLogoutDiv: [{
282
+ type: Input
283
+ }], login: [{
284
+ type: Output
285
+ }] }); })();
286
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2F1dGgvc3JjL2xpYi9hdXRoLWZvcm0vYXV0aC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2F1dGgvc3JjL2xpYi9hdXRoLWZvcm0vYXV0aC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsdUJBQXVCLEVBRXZCLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7SUNibkQseUJBR087Ozs7SUFLTCwwQ0FHQztJQURDLGtNQUFTLGVBQUEsaUJBQVMsQ0FBQSxJQUFDO0lBRXJCLGlCQUFrQjs7OztJQUNsQiw2Q0FHQztJQURDLHdNQUFTLGVBQUEsaUJBQVMsQ0FBQSxJQUFDO0lBRXJCLGlCQUFxQjs7OztJQUNyQixnREFHQztJQURDLDhNQUFTLGVBQUEsaUJBQVMsQ0FBQSxJQUFDO0lBRXJCLGlCQUF3Qjs7OztJQUN4Qiw0Q0FHQztJQURDLHNNQUFTLGVBQUEsaUJBQVMsQ0FBQSxJQUFDO0lBRXJCLGlCQUFvQjs7OztJQUNwQiwwQ0FJQztJQURDLGtNQUFTLGVBQUEsaUJBQVMsQ0FBQSxJQUFDO0lBRXJCLGlCQUFrQjs7O0lBSGhCLDhEQUF5Qzs7O0lBekI3Qyw4QkFBcUUsU0FBQTtJQUMvRCxZQUF1Qzs7SUFBQSxpQkFBSztJ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TUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLFlBQVksZUFBZSxDQUFDLENBQUM7YUFDekQsU0FBUyxDQUFDLENBQUMsV0FBZ0IsRUFBRSxFQUFFO1lBQzlCLElBQUksV0FBVyxDQUFDLEdBQUcsRUFBRTtnQkFDbkIsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQztnQkFDckMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUM7Z0JBQzlDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDO2dCQUU1QyxJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksS0FBSyxXQUFXLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxLQUFLLFVBQVUsQ0FBQztnQkFFaEQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO29CQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2lCQUNwQjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzJFQTVJVSxpQkFBaUI7NkRBQWpCLGlCQUFpQjtZQ3RCOUIsa0VBMERNOztZQTFEQSxrQ0FBYTs7O3VGRHNCTixpQkFBaUI7Y0FON0IsU0FBUzsyQkFDRSxlQUFlLG1CQUdSLHVCQUF1QixDQUFDLE9BQU87O3NCQTRFN0MsUUFBUTt3QkF4RVAsaUJBQWlCO2tCQURwQixLQUFLO1lBYUYsc0JBQXNCO2tCQUR6QixLQUFLO1lBVUYsWUFBWTtrQkFEZixLQUFLO1lBVUYsdUJBQXVCO2tCQUQxQixLQUFLO1lBYUYsYUFBYTtrQkFEaEIsS0FBSztZQWtCSSxLQUFLO2tCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBPbkluaXQsXG4gIElucHV0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIsIE5hdmlnYXRpb25TdGFydCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlJztcbmltcG9ydCB7IEF1dGhPcHRpb25zIH0gZnJvbSAnLi4vc2hhcmVkL2F1dGguaW50ZXJmYWNlJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2F1dGguc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby1hdXRoLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vYXV0aC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXV0aC1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdFxufSlcbmV4cG9ydCBjbGFzcyBBdXRoRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIGdldCBiYWNrZ3JvdW5kRGlzYWJsZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc0xvZ291dFJvdXRlIHx8IHRoaXMuaXNMb2dvdXRSb3V0ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZERpc2FibGU7XG4gIH1cbiAgc2V0IGJhY2tncm91bmREaXNhYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fYmFja2dyb3VuZERpc2FibGUgPSB2YWx1ZS50b1N0cmluZygpID09PSAndHJ1ZSc7XG4gIH1cbiAgcHJpdmF0ZSBfYmFja2dyb3VuZERpc2FibGUgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBoYXNBbHJlYWR5Q29ubmVjdGVkRGl2KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9oYXNBbHJlYWR5Q29ubmVjdGVkRGl2O1xuICB9XG4gIHNldCBoYXNBbHJlYWR5Q29ubmVjdGVkRGl2KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faGFzQWxyZWFkeUNvbm5lY3RlZERpdiA9IHZhbHVlLnRvU3RyaW5nKCkgPT09ICd0cnVlJztcbiAgfVxuICBwcml2YXRlIF9oYXNBbHJlYWR5Q29ubmVjdGVkRGl2ID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBnZXQgaGFzTG9nb3V0RGl2KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9oYXNMb2dvdXREaXY7XG4gIH1cbiAgc2V0IGhhc0xvZ291dERpdih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2hhc0xvZ291dERpdiA9IHZhbHVlLnRvU3RyaW5nKCkgPT09ICd0cnVlJztcbiAgfVxuICBwcml2YXRlIF9oYXNMb2dvdXREaXYgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBzaG93QWxyZWFkeUNvbm5lY3RlZERpdigpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc0xvZ291dFJvdXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNBbHJlYWR5Q29ubmVjdGVkRGl2O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc2hvd0FscmVhZHlDb25uZWN0ZWREaXY7XG4gIH1cbiAgc2V0IHNob3dBbHJlYWR5Q29ubmVjdGVkRGl2KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2hvd0FscmVhZHlDb25uZWN0ZWREaXYgPSB2YWx1ZS50b1N0cmluZygpID09PSAndHJ1ZSc7XG4gIH1cbiAgcHJpdmF0ZSBfc2hvd0FscmVhZHlDb25uZWN0ZWREaXYgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBnZXQgc2hvd0xvZ291dERpdigpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc0xvZ291dFJvdXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNMb2dvdXREaXY7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zaG93TG9nb3V0RGl2O1xuICB9XG4gIHNldCBzaG93TG9nb3V0RGl2KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2hvd0xvZ291dERpdiA9IHZhbHVlLnRvU3RyaW5nKCkgPT09ICd0cnVlJztcbiAgfVxuICBwcml2YXRlIF9zaG93TG9nb3V0RGl2ID0gZmFsc2U7XG5cbiAgZ2V0IHNob3dMb2dpbkRpdigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaXNMb2dvdXRSb3V0ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgQE91dHB1dCgpIGxvZ2luOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgcHVibGljIG9wdGlvbnM/OiBBdXRoT3B0aW9ucztcbiAgcHVibGljIHVzZXI7XG5cbiAgcHVibGljIHZpc2libGUgPSB0cnVlO1xuXG4gIHByaXZhdGUgaXNMb2dpblJvdXRlOiBib29sZWFuO1xuICBwcml2YXRlIGlzTG9nb3V0Um91dGU6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGF1dGg6IEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnOiBDb25maWdTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcbiAgKSB7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5jb25maWcuZ2V0Q29uZmlnKCdhdXRoJyk7XG4gICAgdGhpcy52aXNpYmxlID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5vcHRpb25zKS5sZW5ndGggIT09IDA7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5hbmFseXplUm91dGUoKTtcbiAgICB0aGlzLmdldE5hbWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkxvZ2luKCkge1xuICAgIHRoaXMuYXV0aC5nb1RvUmVkaXJlY3RVcmwoKTtcbiAgICB0aGlzLmdldE5hbWUoKTtcbiAgICB0aGlzLmxvZ2luLmVtaXQodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgbG9nb3V0KCkge1xuICAgIHRoaXMuYXV0aC5sb2dvdXQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy51c2VyID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKHRoaXMucm91dGVyKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnM/LmxvZ291dFJvdXRlKSB7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMub3B0aW9ucz8ubG9nb3V0Um91dGVdKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnM/LmhvbWVSb3V0ZSkge1xuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLm9wdGlvbnM/LmhvbWVSb3V0ZV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaG9tZSgpIHtcbiAgICBpZiAodGhpcy5yb3V0ZXIgJiYgdGhpcy5vcHRpb25zPy5ob21lUm91dGUpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLm9wdGlvbnM/LmhvbWVSb3V0ZV0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0TmFtZSgpIHtcbiAgICBjb25zdCB0b2tlbkRlY29kZWQgPSB0aGlzLmF1dGguZGVjb2RlVG9rZW4oKTtcbiAgICBpZiAodG9rZW5EZWNvZGVkKSB7XG4gICAgICB0aGlzLnVzZXIgPSB7XG4gICAgICAgIG5hbWU6IHRva2VuRGVjb2RlZC51c2VyLmZpcnN0TmFtZSB8fCB0b2tlbkRlY29kZWQudXNlci5zb3VyY2VJZFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFuYWx5emVSb3V0ZSgpIHtcbiAgICBpZiAoIXRoaXMucm91dGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAucGlwZShmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkpXG4gICAgICAuc3Vic2NyaWJlKChjaGFuZ2VFdmVudDogYW55KSA9PiB7XG4gICAgICAgIGlmIChjaGFuZ2VFdmVudC51cmwpIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50Um91dGUgPSBjaGFuZ2VFdmVudC51cmw7XG4gICAgICAgICAgY29uc3QgbG9nb3V0Um91dGUgPSB0aGlzLm9wdGlvbnM/LmxvZ291dFJvdXRlO1xuICAgICAgICAgIGNvbnN0IGxvZ2luUm91dGUgPSB0aGlzLm9wdGlvbnM/LmxvZ2luUm91dGU7XG5cbiAgICAgICAgICB0aGlzLmlzTG9nb3V0Um91dGUgPSBjdXJyZW50Um91dGUgPT09IGxvZ291dFJvdXRlO1xuICAgICAgICAgIHRoaXMuaXNMb2dpblJvdXRlID0gY3VycmVudFJvdXRlID09PSBsb2dpblJvdXRlO1xuXG4gICAgICAgICAgaWYgKHRoaXMuaXNMb2dvdXRSb3V0ZSkge1xuICAgICAgICAgICAgdGhpcy5hdXRoLmxvZ291dCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJ2aXNpYmxlXCI+XHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCIhYXV0aC5sb2dnZWQgJiYgYmFja2dyb3VuZERpc2FibGVcIlxyXG4gICAgY2xhc3M9XCJiYWNrZ3JvdW5kRGlzYWJsZVwiXHJcbiAgPjwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwiIWF1dGgubG9nZ2VkICYmIHNob3dMb2dpbkRpdlwiIGNsYXNzPVwibG9naW4gY2VudGVyLWJsb2NrXCI+XHJcbiAgICA8aDE+e3sgJ2lnby5hdXRoLmNvbm5lY3Rpb24nIHwgdHJhbnNsYXRlIH19PC9oMT5cclxuXHJcbiAgICA8aWdvLWF1dGgtZ29vZ2xlXHJcbiAgICAgICpuZ0lmPVwib3B0aW9ucy5nb29nbGUgJiYgb3B0aW9ucy5nb29nbGUuZW5hYmxlZCAhPT0gZmFsc2VcIlxyXG4gICAgICAobG9naW4pPVwib25Mb2dpbigpXCJcclxuICAgID5cclxuICAgIDwvaWdvLWF1dGgtZ29vZ2xlPlxyXG4gICAgPGlnby1hdXRoLW1pY3Jvc29mdFxyXG4gICAgICAqbmdJZj1cIm9wdGlvbnMubWljcm9zb2Z0ICYmIG9wdGlvbnMubWljcm9zb2Z0LmVuYWJsZWQgIT09IGZhbHNlXCJcclxuICAgICAgKGxvZ2luKT1cIm9uTG9naW4oKVwiXHJcbiAgICA+XHJcbiAgICA8L2lnby1hdXRoLW1pY3Jvc29mdD5cclxuICAgIDxpZ28tYXV0aC1taWNyb3NvZnRiMmNcclxuICAgICAgKm5nSWY9XCJvcHRpb25zLm1pY3Jvc29mdGIyYyAmJiBvcHRpb25zLm1pY3Jvc29mdGIyYy5lbmFibGVkICE9PSBmYWxzZVwiXHJcbiAgICAgIChsb2dpbik9XCJvbkxvZ2luKClcIlxyXG4gICAgPlxyXG4gICAgPC9pZ28tYXV0aC1taWNyb3NvZnRiMmM+XHJcbiAgICA8aWdvLWF1dGgtZmFjZWJvb2tcclxuICAgICAgKm5nSWY9XCJvcHRpb25zLmZhY2Vib29rICYmIG9wdGlvbnMuZmFjZWJvb2suZW5hYmxlZCAhPT0gZmFsc2VcIlxyXG4gICAgICAobG9naW4pPVwib25Mb2dpbigpXCJcclxuICAgID5cclxuICAgIDwvaWdvLWF1dGgtZmFjZWJvb2s+XHJcbiAgICA8aWdvLWF1dGgtaW50ZXJuXHJcbiAgICAgICpuZ0lmPVwiIW9wdGlvbnMuaW50ZXJuIHx8IG9wdGlvbnMuaW50ZXJuLmVuYWJsZWQgIT09IGZhbHNlXCJcclxuICAgICAgW2FsbG93QW5vbnltb3VzXT1cIm9wdGlvbnMuYWxsb3dBbm9ueW1vdXNcIlxyXG4gICAgICAobG9naW4pPVwib25Mb2dpbigpXCJcclxuICAgID5cclxuICAgIDwvaWdvLWF1dGgtaW50ZXJuPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cImF1dGgubG9nZ2VkICYmIHNob3dBbHJlYWR5Q29ubmVjdGVkRGl2XCJcclxuICAgIGNsYXNzPVwibG9naW4gY2VudGVyLWJsb2NrXCJcclxuICA+XHJcbiAgICA8cD57eyAnaWdvLmF1dGgud2VsY29tZScgfCB0cmFuc2xhdGU6IHVzZXIgfX08L3A+XHJcbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwibG9nb3V0KClcIj5cclxuICAgICAge3sgJ2lnby5hdXRoLnNpZ25PdXQnIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cInNob3dMb2dvdXREaXZcIiBjbGFzcz1cImxvZ2luIGNlbnRlci1ibG9ja1wiPlxyXG4gICAgPHA+e3sgJ2lnby5hdXRoLmRlY29ubmVjdGlvbicgfCB0cmFuc2xhdGUgfX08L3A+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICpuZ0lmPVwib3B0aW9ucy5ob21lUm91dGVcIlxyXG4gICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgKGNsaWNrKT1cImhvbWUoKVwiXHJcbiAgICA+XHJcbiAgICAgIHt7ICdpZ28uYXV0aC5ob21lJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -0,0 +1,108 @@
1
+ import { Component, ChangeDetectionStrategy, ApplicationRef, Output, EventEmitter } from '@angular/core';
2
+ import { ConfigService, LanguageService } from '@igo2/core';
3
+ import { AuthService } from '../shared/auth.service';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../shared/auth.service";
6
+ import * as i2 from "@igo2/core";
7
+ export class AuthGoogleComponent {
8
+ authService;
9
+ config;
10
+ languageService;
11
+ appRef;
12
+ options;
13
+ login = new EventEmitter();
14
+ constructor(authService, config, languageService, appRef) {
15
+ this.authService = authService;
16
+ this.config = config;
17
+ this.languageService = languageService;
18
+ this.appRef = appRef;
19
+ this.options = this.config.getConfig('auth.google');
20
+ if (this.options?.apiKey && this.options?.clientId) {
21
+ this.loadSDKGoogle();
22
+ this.loadPlatform();
23
+ }
24
+ else {
25
+ console.warn('Google authentification needs "apiKey" and "clientId" options');
26
+ }
27
+ }
28
+ handleSignInClick() {
29
+ window.gapi.auth2.getAuthInstance().signIn();
30
+ }
31
+ handleSignOutClick() {
32
+ window.gapi.auth2.getAuthInstance().signOut();
33
+ }
34
+ handleClientLoad() {
35
+ window.gapi.load('client:auth2', () => this.initClient());
36
+ }
37
+ initClient() {
38
+ window.gapi.client
39
+ .init({
40
+ apiKey: this.options?.apiKey,
41
+ clientId: this.options?.clientId,
42
+ discoveryDocs: [
43
+ 'https://people.googleapis.com/$discovery/rest?version=v1'
44
+ ],
45
+ scope: 'profile'
46
+ })
47
+ .then(() => {
48
+ this.handleSignOutClick();
49
+ this.updateTextButton();
50
+ window.gapi.auth2
51
+ .getAuthInstance()
52
+ .isSignedIn.listen((rep) => {
53
+ this.updateSigninStatus(rep);
54
+ });
55
+ });
56
+ }
57
+ updateSigninStatus(isSignedIn) {
58
+ this.updateTextButton();
59
+ if (isSignedIn) {
60
+ this.loginGoogle(window.gapi.client.getToken().access_token);
61
+ }
62
+ }
63
+ updateTextButton() {
64
+ const btn = document.querySelector('span[id^="not_signed_"]');
65
+ if (btn && this.languageService.getLanguage() !== 'en') {
66
+ if (btn.innerHTML === 'Sign in with Google') {
67
+ btn.innerHTML = this.languageService.translate.instant('igo.auth.google.login');
68
+ }
69
+ else if (btn.innerHTML === 'Signed in with Google') {
70
+ btn.innerHTML = this.languageService.translate.instant('igo.auth.google.logged');
71
+ }
72
+ }
73
+ }
74
+ loginGoogle(token) {
75
+ this.authService.loginWithToken(token, 'google').subscribe(() => {
76
+ this.appRef.tick();
77
+ this.login.emit(true);
78
+ });
79
+ }
80
+ loadSDKGoogle() {
81
+ const fjs = document.getElementsByTagName('script')[0];
82
+ const js = document.createElement('script');
83
+ js.id = 'google-jssdk';
84
+ js.src = 'https://apis.google.com/js/api.js';
85
+ js.onload = () => {
86
+ this.handleClientLoad();
87
+ };
88
+ fjs.parentNode.insertBefore(js, fjs);
89
+ }
90
+ loadPlatform() {
91
+ const fjs = document.getElementsByTagName('script')[0];
92
+ const js = document.createElement('script');
93
+ js.id = 'google-platform';
94
+ js.src = 'https://apis.google.com/js/platform.js';
95
+ fjs.parentNode.insertBefore(js, fjs);
96
+ }
97
+ static ɵfac = function AuthGoogleComponent_Factory(t) { return new (t || AuthGoogleComponent)(i0.ɵɵdirectiveInject(i1.AuthService), i0.ɵɵdirectiveInject(i2.ConfigService), i0.ɵɵdirectiveInject(i2.LanguageService), i0.ɵɵdirectiveInject(i0.ApplicationRef)); };
98
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AuthGoogleComponent, selectors: [["igo-auth-google"]], outputs: { login: "login" }, decls: 1, vars: 0, consts: [["data-height", "40", "data-width", "265", "data-longtitle", "true", 1, "g-signin2", "google-login-button"]], template: function AuthGoogleComponent_Template(rf, ctx) { if (rf & 1) {
99
+ i0.ɵɵelement(0, "div", 0);
100
+ } }, styles: ["[_nghost-%COMP%]{padding:10px 10px 10px 0;display:inline-block}.google-login-button[_ngcontent-%COMP%] .abcRioButton{color:#000000de}"], changeDetection: 0 });
101
+ }
102
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AuthGoogleComponent, [{
103
+ type: Component,
104
+ args: [{ selector: 'igo-auth-google', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\r\n class=\"g-signin2 google-login-button\"\r\n data-height=\"40\"\r\n data-width=\"265\"\r\n data-longtitle=\"true\"\r\n></div>\r\n", styles: [":host{padding:10px 10px 10px 0;display:inline-block}.google-login-button ::ng-deep .abcRioButton{color:#000000de}\n"] }]
105
+ }], function () { return [{ type: i1.AuthService }, { type: i2.ConfigService }, { type: i2.LanguageService }, { type: i0.ApplicationRef }]; }, { login: [{
106
+ type: Output
107
+ }] }); })();
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1nb29nbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYXV0aC9zcmMvbGliL2F1dGgtZm9ybS9hdXRoLWdvb2dsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hdXRoL3NyYy9saWIvYXV0aC1mb3JtL2F1dGgtZ29vZ2xlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLGNBQWMsRUFDZCxNQUFNLEVBQ04sWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTVELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQVFyRCxNQUFNLE9BQU8sbUJBQW1CO0lBTXBCO0lBQ0E7SUFDQTtJQUNBO0lBUkYsT0FBTyxDQUFxQjtJQUUxQixLQUFLLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7SUFFckUsWUFDVSxXQUF3QixFQUN4QixNQUFxQixFQUNyQixlQUFnQyxFQUNoQyxNQUFzQjtRQUh0QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUU5QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXBELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUU7WUFDbEQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQjthQUFN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QUFFLENBQUMsRUFBRSxHQUFHLGNBQWMsQ0FBQztRQUN2QixFQUFFLENBQUMsR0FBRyxHQUFHLG1DQUFtQyxDQUFDO1FBQzdDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO1lBQ2YsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDO1FBQ0YsR0FBRyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxZQUFZO1FBQ2xCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RCxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsaUJBQWlCLENBQUM7UUFDMUIsRUFBRSxDQUFDLEdBQUcsR0FBRyx3Q0FBd0MsQ0FBQztRQUNsRCxHQUFHLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkMsQ0FBQzs2RUF0R1UsbUJBQW1COzZEQUFuQixtQkFBbUI7WUNsQmhDLHlCQUtPOzs7dUZEYU0sbUJBQW1CO2NBTi9CLFNBQVM7MkJBQ0UsaUJBQWlCLG1CQUdWLHVCQUF1QixDQUFDLE1BQU07cUpBS3JDLEtBQUs7a0JBQWQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIEFwcGxpY2F0aW9uUmVmLFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXJcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UsIExhbmd1YWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xyXG5pbXBvcnQgeyBBdXRoR29vZ2xlT3B0aW9ucyB9IGZyb20gJy4uL3NoYXJlZC9hdXRoLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2F1dGguc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lnby1hdXRoLWdvb2dsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2F1dGgtZ29vZ2xlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hdXRoLWdvb2dsZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoR29vZ2xlQ29tcG9uZW50IHtcclxuICBwcml2YXRlIG9wdGlvbnM/OiBBdXRoR29vZ2xlT3B0aW9ucztcclxuXHJcbiAgQE91dHB1dCgpIGxvZ2luOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpZzogQ29uZmlnU2VydmljZSxcclxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwcFJlZjogQXBwbGljYXRpb25SZWZcclxuICApIHtcclxuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuY29uZmlnLmdldENvbmZpZygnYXV0aC5nb29nbGUnKTtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zPy5hcGlLZXkgJiYgdGhpcy5vcHRpb25zPy5jbGllbnRJZCkge1xyXG4gICAgICB0aGlzLmxvYWRTREtHb29nbGUoKTtcclxuICAgICAgdGhpcy5sb2FkUGxhdGZvcm0oKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAnR29vZ2xlIGF1dGhlbnRpZmljYXRpb24gbmVlZHMgXCJhcGlLZXlcIiBhbmQgXCJjbGllbnRJZFwiIG9wdGlvbnMnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlU2lnbkluQ2xpY2soKSB7XHJcbiAgICAod2luZG93IGFzIGFueSkuZ2FwaS5hdXRoMi5nZXRBdXRoSW5zdGFuY2UoKS5zaWduSW4oKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVTaWduT3V0Q2xpY2soKSB7XHJcbiAgICAod2luZG93IGFzIGFueSkuZ2FwaS5hdXRoMi5nZXRBdXRoSW5zdGFuY2UoKS5zaWduT3V0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUNsaWVudExvYWQoKSB7XHJcbiAgICAod2luZG93IGFzIGFueSkuZ2FwaS5sb2FkKCdjbGllbnQ6YXV0aDInLCAoKSA9PiB0aGlzLmluaXRDbGllbnQoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRDbGllbnQoKSB7XHJcbiAgICAod2luZG93IGFzIGFueSkuZ2FwaS5jbGllbnRcclxuICAgICAgLmluaXQoe1xyXG4gICAgICAgIGFwaUtleTogdGhpcy5vcHRpb25zPy5hcGlLZXksXHJcbiAgICAgICAgY2xpZW50SWQ6IHRoaXMub3B0aW9ucz8uY2xpZW50SWQsXHJcbiAgICAgICAgZGlzY292ZXJ5RG9jczogW1xyXG4gICAgICAgICAgJ2h0dHBzOi8vcGVvcGxlLmdvb2dsZWFwaXMuY29tLyRkaXNjb3ZlcnkvcmVzdD92ZXJzaW9uPXYxJ1xyXG4gICAgICAgIF0sXHJcbiAgICAgICAgc2NvcGU6ICdwcm9maWxlJ1xyXG4gICAgICB9KVxyXG4gICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVTaWduT3V0Q2xpY2soKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVRleHRCdXR0b24oKTtcclxuICAgICAgICAod2luZG93IGFzIGFueSkuZ2FwaS5hdXRoMlxyXG4gICAgICAgICAgLmdldEF1dGhJbnN0YW5jZSgpXHJcbiAgICAgICAgICAuaXNTaWduZWRJbi5saXN0ZW4oKHJlcCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNpZ25pblN0YXR1cyhyZXApO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTaWduaW5TdGF0dXMoaXNTaWduZWRJbikge1xyXG4gICAgdGhpcy51cGRhdGVUZXh0QnV0dG9uKCk7XHJcbiAgICBpZiAoaXNTaWduZWRJbikge1xyXG4gICAgICB0aGlzLmxvZ2luR29vZ2xlKCh3aW5kb3cgYXMgYW55KS5nYXBpLmNsaWVudC5nZXRUb2tlbigpLmFjY2Vzc190b2tlbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVRleHRCdXR0b24oKSB7XHJcbiAgICBjb25zdCBidG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzcGFuW2lkXj1cIm5vdF9zaWduZWRfXCJdJyk7XHJcbiAgICBpZiAoYnRuICYmIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLmdldExhbmd1YWdlKCkgIT09ICdlbicpIHtcclxuICAgICAgaWYgKGJ0bi5pbm5lckhUTUwgPT09ICdTaWduIGluIHdpdGggR29vZ2xlJykge1xyXG4gICAgICAgIGJ0bi5pbm5lckhUTUwgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgICAgICdpZ28uYXV0aC5nb29nbGUubG9naW4nXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmIChidG4uaW5uZXJIVE1MID09PSAnU2lnbmVkIGluIHdpdGggR29vZ2xlJykge1xyXG4gICAgICAgIGJ0bi5pbm5lckhUTUwgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgICAgICdpZ28uYXV0aC5nb29nbGUubG9nZ2VkJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9naW5Hb29nbGUodG9rZW4pIHtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UubG9naW5XaXRoVG9rZW4odG9rZW4sICdnb29nbGUnKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmFwcFJlZi50aWNrKCk7XHJcbiAgICAgIHRoaXMubG9naW4uZW1pdCh0cnVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkU0RLR29vZ2xlKCkge1xyXG4gICAgY29uc3QgZmpzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdO1xyXG4gICAgY29uc3QganMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcclxuICAgIGpzLmlkID0gJ2dvb2dsZS1qc3Nkayc7XHJcbiAgICBqcy5zcmMgPSAnaHR0cHM6Ly9hcGlzLmdvb2dsZS5jb20vanMvYXBpLmpzJztcclxuICAgIGpzLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgdGhpcy5oYW5kbGVDbGllbnRMb2FkKCk7XHJcbiAgICB9O1xyXG4gICAgZmpzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGpzLCBmanMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkUGxhdGZvcm0oKSB7XHJcbiAgICBjb25zdCBmanMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMF07XHJcbiAgICBjb25zdCBqcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG4gICAganMuaWQgPSAnZ29vZ2xlLXBsYXRmb3JtJztcclxuICAgIGpzLnNyYyA9ICdodHRwczovL2FwaXMuZ29vZ2xlLmNvbS9qcy9wbGF0Zm9ybS5qcyc7XHJcbiAgICBmanMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoanMsIGZqcyk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICBjbGFzcz1cImctc2lnbmluMiBnb29nbGUtbG9naW4tYnV0dG9uXCJcclxuICBkYXRhLWhlaWdodD1cIjQwXCJcclxuICBkYXRhLXdpZHRoPVwiMjY1XCJcclxuICBkYXRhLWxvbmd0aXRsZT1cInRydWVcIlxyXG4+PC9kaXY+XHJcbiJdfQ==