@igo2/auth 17.0.0-next.2 → 17.0.0-next.4
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.
- package/environment/environment.interface.d.ts +6 -0
- package/environment/index.d.ts +5 -0
- package/esm2022/environment/environment.interface.mjs +2 -0
- package/esm2022/environment/igo2-auth-environment.mjs +5 -0
- package/esm2022/environment/public_api.mjs +2 -0
- package/esm2022/facebook/auth-facebook/auth-facebook.component.mjs +65 -0
- package/esm2022/facebook/igo2-auth-facebook.mjs +5 -0
- package/esm2022/facebook/public_api.mjs +3 -0
- package/esm2022/facebook/shared/auth-facebook.interface.mjs +2 -0
- package/esm2022/facebook/shared/index.mjs +2 -0
- package/esm2022/form/auth-form/auth-form.component.mjs +166 -0
- package/esm2022/form/auth-form.module.mjs +95 -0
- package/esm2022/form/igo2-auth-form.mjs +5 -0
- package/esm2022/form/public_api.mjs +9 -0
- package/esm2022/form/shared/auth-form.interface.mjs +2 -0
- package/esm2022/form/shared/auth-storage.interface.mjs +2 -0
- package/esm2022/form/shared/auth-storage.service.mjs +98 -0
- package/esm2022/form/shared/index.mjs +4 -0
- package/esm2022/google/auth-google/auth-google.component.mjs +108 -0
- package/esm2022/google/igo2-auth-google.mjs +5 -0
- package/esm2022/google/public_api.mjs +3 -0
- package/esm2022/google/shared/auth-google.interface.mjs +2 -0
- package/esm2022/google/shared/index.mjs +2 -0
- package/esm2022/internal/auth-intern/auth-intern.component.mjs +84 -0
- package/esm2022/internal/igo2-auth-internal.mjs +5 -0
- package/esm2022/internal/public_api.mjs +2 -0
- package/esm2022/lib/shared/auth.interface.mjs +1 -1
- package/esm2022/microsoft/auth-microsoft/auth-microsoft.component.mjs +100 -0
- package/esm2022/microsoft/auth-microsoft.provider.mjs +92 -0
- package/esm2022/microsoft/auth-microsoftb2c/auth-microsoftb2c.component.mjs +98 -0
- package/esm2022/microsoft/auth-microsoftb2c/auth-msalBroadcastServiceb2c.service.mjs +47 -0
- package/esm2022/microsoft/auth-microsoftb2c/auth-msalServiceb2c.service.mjs +85 -0
- package/esm2022/microsoft/igo2-auth-microsoft.mjs +5 -0
- package/esm2022/microsoft/public_api.mjs +5 -0
- package/esm2022/microsoft/shared/auth-microsoft.interface.mjs +2 -0
- package/esm2022/microsoft/shared/index.mjs +2 -0
- package/esm2022/monitoring/auth-monitoring/auth-monitoring.provider.mjs +24 -0
- package/esm2022/monitoring/auth-monitoring/auth-monitoring.service.mjs +54 -0
- package/esm2022/monitoring/igo2-auth-monitoring.mjs +5 -0
- package/esm2022/monitoring/public_api.mjs +3 -0
- package/esm2022/public_api.mjs +1 -10
- package/{lib/auth-form → facebook/auth-facebook}/auth-facebook.component.d.ts +1 -1
- package/facebook/index.d.ts +5 -0
- package/facebook/public_api.d.ts +2 -0
- package/facebook/shared/auth-facebook.interface.d.ts +4 -0
- package/facebook/shared/index.d.ts +1 -0
- package/fesm2022/igo2-auth-environment.mjs +4 -0
- package/fesm2022/igo2-auth-environment.mjs.map +1 -0
- package/fesm2022/igo2-auth-facebook.mjs +70 -0
- package/fesm2022/igo2-auth-facebook.mjs.map +1 -0
- package/fesm2022/igo2-auth-form.mjs +350 -0
- package/fesm2022/igo2-auth-form.mjs.map +1 -0
- package/fesm2022/igo2-auth-google.mjs +112 -0
- package/fesm2022/igo2-auth-google.mjs.map +1 -0
- package/fesm2022/igo2-auth-internal.mjs +89 -0
- package/fesm2022/igo2-auth-internal.mjs.map +1 -0
- package/fesm2022/igo2-auth-microsoft.mjs +390 -0
- package/fesm2022/igo2-auth-microsoft.mjs.map +1 -0
- package/fesm2022/igo2-auth-monitoring.mjs +81 -0
- package/fesm2022/igo2-auth-monitoring.mjs.map +1 -0
- package/fesm2022/igo2-auth.mjs +7 -1024
- package/fesm2022/igo2-auth.mjs.map +1 -1
- package/{lib → form}/auth-form/auth-form.component.d.ts +3 -4
- package/form/auth-form.module.d.ts +22 -0
- package/form/index.d.ts +5 -0
- package/form/public_api.d.ts +5 -0
- package/form/shared/auth-form.interface.d.ts +9 -0
- package/{lib → form}/shared/auth-storage.service.d.ts +1 -2
- package/form/shared/index.d.ts +3 -0
- package/{src/lib → form/src}/auth-form/auth-intern.theme.scss +19 -19
- package/form/src/auth-form.theme.scss +9 -0
- package/{lib/auth-form → google/auth-google}/auth-google.component.d.ts +1 -1
- package/google/index.d.ts +5 -0
- package/google/public_api.d.ts +2 -0
- package/google/shared/auth-google.interface.d.ts +5 -0
- package/google/shared/index.d.ts +1 -0
- package/{lib/auth-form → internal/auth-intern}/auth-intern.component.d.ts +1 -1
- package/internal/index.d.ts +5 -0
- package/internal/public_api.d.ts +1 -0
- package/lib/shared/auth.interface.d.ts +14 -71
- package/{lib/auth-form → microsoft/auth-microsoft}/auth-microsoft.component.d.ts +2 -2
- package/{lib/shared → microsoft}/auth-microsoft.provider.d.ts +5 -2
- package/{lib/auth-form → microsoft/auth-microsoftb2c}/auth-microsoftb2c.component.d.ts +3 -3
- package/{lib/shared → microsoft/auth-microsoftb2c}/auth-msalBroadcastServiceb2c.service.d.ts +1 -1
- package/microsoft/index.d.ts +5 -0
- package/microsoft/public_api.d.ts +4 -0
- package/microsoft/shared/auth-microsoft.interface.d.ts +32 -0
- package/microsoft/shared/index.d.ts +1 -0
- package/{lib → monitoring}/auth-monitoring/auth-monitoring.service.d.ts +1 -1
- package/monitoring/index.d.ts +5 -0
- package/monitoring/public_api.d.ts +2 -0
- package/package.json +45 -3
- package/public_api.d.ts +0 -9
- package/src/auth.theme.scss +9 -9
- package/esm2022/lib/auth-form/auth-facebook.component.mjs +0 -65
- package/esm2022/lib/auth-form/auth-form.component.mjs +0 -170
- package/esm2022/lib/auth-form/auth-google.component.mjs +0 -108
- package/esm2022/lib/auth-form/auth-intern.component.mjs +0 -84
- package/esm2022/lib/auth-form/auth-microsoft.component.mjs +0 -100
- package/esm2022/lib/auth-form/auth-microsoftb2c.component.mjs +0 -98
- package/esm2022/lib/auth-form/index.mjs +0 -19
- package/esm2022/lib/auth-monitoring/auth-monitoring.provider.mjs +0 -24
- package/esm2022/lib/auth-monitoring/auth-monitoring.service.mjs +0 -54
- package/esm2022/lib/auth.module.mjs +0 -98
- package/esm2022/lib/environment/environment.interface.mjs +0 -2
- package/esm2022/lib/environment/index.mjs +0 -2
- package/esm2022/lib/shared/auth-microsoft.provider.mjs +0 -86
- package/esm2022/lib/shared/auth-msalBroadcastServiceb2c.service.mjs +0 -47
- package/esm2022/lib/shared/auth-msalServiceb2c.service..mjs +0 -85
- package/esm2022/lib/shared/auth-storage.interface.mjs +0 -2
- package/esm2022/lib/shared/auth-storage.service.mjs +0 -100
- package/esm2022/lib/shared/index.mjs +0 -14
- package/esm2022/lib/shared/protected.directive.mjs +0 -21
- package/lib/auth-form/index.d.ts +0 -11
- package/lib/auth.module.d.ts +0 -24
- package/lib/environment/environment.interface.d.ts +0 -5
- package/lib/shared/index.d.ts +0 -13
- package/lib/shared/protected.directive.d.ts +0 -8
- /package/{lib/environment/index.d.ts → environment/public_api.d.ts} +0 -0
- /package/{lib → form}/shared/auth-storage.interface.d.ts +0 -0
- /package/{lib/shared/auth-msalServiceb2c.service..d.ts → microsoft/auth-microsoftb2c/auth-msalServiceb2c.service.d.ts} +0 -0
- /package/{lib → monitoring}/auth-monitoring/auth-monitoring.provider.d.ts +0 -0
|
@@ -1,62 +1,28 @@
|
|
|
1
1
|
import { BaseUser } from '@igo2/core/user';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
appId: string;
|
|
10
|
-
}
|
|
11
|
-
export interface AuthGoogleOptions {
|
|
12
|
-
enabled?: boolean;
|
|
13
|
-
apiKey: string;
|
|
14
|
-
clientId: string;
|
|
15
|
-
}
|
|
16
|
-
export interface AuthMicrosoftOptions extends BrowserAuthOptions {
|
|
17
|
-
enabled?: boolean;
|
|
18
|
-
}
|
|
19
|
-
export interface AuthMicrosoftb2cOptions {
|
|
20
|
-
enabled?: boolean;
|
|
21
|
-
browserAuthOptions?: BrowserAuthOptions;
|
|
22
|
-
options?: AuthMicrosoftb2cOptionsOptions;
|
|
23
|
-
scopes?: string[];
|
|
24
|
-
}
|
|
25
|
-
export interface AuthMicrosoftb2cOptionsOptions {
|
|
26
|
-
names: AuthMicrosoftb2cOptionsNames;
|
|
27
|
-
authorities: AuthMicrosoftb2cOptionsAuthorities;
|
|
28
|
-
authorityDomain: string[];
|
|
29
|
-
}
|
|
30
|
-
export interface AuthMicrosoftb2cOptionsNames {
|
|
31
|
-
signUpSignIn: string;
|
|
32
|
-
forgotPassword: string;
|
|
33
|
-
editProfile: string;
|
|
34
|
-
}
|
|
35
|
-
export interface AuthMicrosoftb2cOptionsAuthorities {
|
|
36
|
-
signUpSignIn: AuthMicrosoftb2cOptionsAuthority;
|
|
37
|
-
forgotPassword: AuthMicrosoftb2cOptionsAuthority;
|
|
38
|
-
editProfile: AuthMicrosoftb2cOptionsAuthority;
|
|
2
|
+
export interface User extends BaseUser {
|
|
3
|
+
source?: string;
|
|
4
|
+
sourceId?: string;
|
|
5
|
+
locale?: string;
|
|
6
|
+
isExpired?: boolean;
|
|
7
|
+
isAdmin?: boolean;
|
|
8
|
+
defaultContextId?: string;
|
|
39
9
|
}
|
|
40
|
-
export interface
|
|
41
|
-
|
|
10
|
+
export interface IInfosUser {
|
|
11
|
+
tokenId: string;
|
|
42
12
|
}
|
|
43
|
-
export
|
|
13
|
+
export type AuthOptions = {
|
|
44
14
|
url?: string;
|
|
45
15
|
tokenKey?: string;
|
|
46
16
|
allowAnonymous?: boolean;
|
|
47
17
|
loginRoute?: string;
|
|
48
18
|
logoutRoute?: string;
|
|
49
19
|
homeRoute?: string;
|
|
50
|
-
intern?: AuthInternOptions;
|
|
51
|
-
facebook?: AuthFacebookOptions;
|
|
52
|
-
google?: AuthGoogleOptions;
|
|
53
|
-
microsoft?: AuthMicrosoftOptions;
|
|
54
|
-
microsoftb2c?: AuthMicrosoftb2cOptions;
|
|
55
20
|
trustHosts?: string[];
|
|
56
21
|
profilsGuard?: string[];
|
|
57
22
|
hostsWithCredentials?: WithCredentialsOptions[];
|
|
58
23
|
hostsByKey?: AuthByKeyOptions[];
|
|
59
|
-
|
|
24
|
+
intern?: AuthInternOptions;
|
|
25
|
+
};
|
|
60
26
|
export interface AuthByKeyOptions {
|
|
61
27
|
domainRegFilters?: string;
|
|
62
28
|
keyProperty?: string;
|
|
@@ -66,29 +32,6 @@ export interface WithCredentialsOptions {
|
|
|
66
32
|
withCredentials?: boolean;
|
|
67
33
|
domainRegFilters?: string;
|
|
68
34
|
}
|
|
69
|
-
export interface
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
export interface MSPMsalGuardConfiguration extends MsalGuardConfiguration {
|
|
73
|
-
type: string;
|
|
74
|
-
}
|
|
75
|
-
export interface MSPMsalGuardConfiguration extends MsalGuardConfiguration {
|
|
76
|
-
type: string;
|
|
77
|
-
}
|
|
78
|
-
export interface MSPMsalGuardConfiguration extends MsalGuardConfiguration {
|
|
79
|
-
type: string;
|
|
80
|
-
}
|
|
81
|
-
export interface MSPMsalGuardConfiguration extends MsalGuardConfiguration {
|
|
82
|
-
type: string;
|
|
83
|
-
}
|
|
84
|
-
export interface User extends BaseUser {
|
|
85
|
-
source?: string;
|
|
86
|
-
sourceId?: string;
|
|
87
|
-
locale?: string;
|
|
88
|
-
isExpired?: boolean;
|
|
89
|
-
isAdmin?: boolean;
|
|
90
|
-
defaultContextId?: string;
|
|
91
|
-
}
|
|
92
|
-
export interface IInfosUser {
|
|
93
|
-
tokenId: string;
|
|
35
|
+
export interface AuthInternOptions {
|
|
36
|
+
enabled?: boolean;
|
|
94
37
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ApplicationRef, EventEmitter } from '@angular/core';
|
|
2
|
+
import { AuthService } from '@igo2/auth';
|
|
2
3
|
import { ConfigService } from '@igo2/core/config';
|
|
3
4
|
import { MsalService } from '@azure/msal-angular';
|
|
4
|
-
import { MSPMsalGuardConfiguration } from '../shared/auth.interface';
|
|
5
|
-
import { AuthService } from '../shared/auth.service';
|
|
5
|
+
import { MSPMsalGuardConfiguration } from '../shared/auth-microsoft.interface';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
export declare class AuthMicrosoftComponent {
|
|
8
8
|
private authService;
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { ConfigService } from '@igo2/core/config';
|
|
2
2
|
import { MsalService } from '@azure/msal-angular';
|
|
3
3
|
import { PublicClientApplication } from '@azure/msal-browser';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { AuthMicrosoftComponent } from './auth-microsoft/auth-microsoft.component';
|
|
5
|
+
import { AuthMicrosoftb2cComponent } from './auth-microsoftb2c/auth-microsoftb2c.component';
|
|
6
|
+
import { MsalServiceb2c } from './auth-microsoftb2c/auth-msalServiceb2c.service';
|
|
7
|
+
import { MSPMsalGuardConfiguration } from './shared/auth-microsoft.interface';
|
|
8
|
+
export declare const AUTH_MICROSOFT_DIRECTIVES: readonly [typeof AuthMicrosoftComponent, typeof AuthMicrosoftb2cComponent];
|
|
6
9
|
export declare function MSALConfigFactory(config: ConfigService): PublicClientApplication;
|
|
7
10
|
export declare function MSALConfigFactoryb2c(config: ConfigService): PublicClientApplication;
|
|
8
11
|
export declare function MSALAngularConfigFactory(config: ConfigService): MSPMsalGuardConfiguration;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ApplicationRef, EventEmitter } from '@angular/core';
|
|
2
|
+
import { AuthService } from '@igo2/auth';
|
|
2
3
|
import { ConfigService } from '@igo2/core/config';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { AuthService } from '../shared/auth.service';
|
|
4
|
+
import { MSPMsalGuardConfiguration } from '../shared/auth-microsoft.interface';
|
|
5
|
+
import { MsalServiceb2c } from './auth-msalServiceb2c.service';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
export declare class AuthMicrosoftb2cComponent {
|
|
8
8
|
private authService;
|
package/{lib/shared → microsoft/auth-microsoftb2c}/auth-msalBroadcastServiceb2c.service.d.ts
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EventMessage, IPublicClientApplication, InteractionStatus } from '@azure/msal-browser';
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
|
-
import { MsalServiceb2c } from './auth-msalServiceb2c.service
|
|
3
|
+
import { MsalServiceb2c } from './auth-msalServiceb2c.service';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class MsalBroadcastServiceb2c {
|
|
6
6
|
private msalInstance;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { MsalGuardConfiguration } from '@azure/msal-angular';
|
|
2
|
+
import type { BrowserAuthOptions } from '@azure/msal-browser';
|
|
3
|
+
export interface AuthMicrosoftOptions extends BrowserAuthOptions {
|
|
4
|
+
enabled?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface AuthMicrosoftb2cOptions {
|
|
7
|
+
enabled?: boolean;
|
|
8
|
+
browserAuthOptions?: BrowserAuthOptions;
|
|
9
|
+
options?: AuthMicrosoftb2cOptionsOptions;
|
|
10
|
+
scopes?: string[];
|
|
11
|
+
}
|
|
12
|
+
export interface AuthMicrosoftb2cOptionsOptions {
|
|
13
|
+
names: AuthMicrosoftb2cOptionsNames;
|
|
14
|
+
authorities: AuthMicrosoftb2cOptionsAuthorities;
|
|
15
|
+
authorityDomain: string[];
|
|
16
|
+
}
|
|
17
|
+
export interface AuthMicrosoftb2cOptionsNames {
|
|
18
|
+
signUpSignIn: string;
|
|
19
|
+
forgotPassword: string;
|
|
20
|
+
editProfile: string;
|
|
21
|
+
}
|
|
22
|
+
export interface AuthMicrosoftb2cOptionsAuthorities {
|
|
23
|
+
signUpSignIn: AuthMicrosoftb2cOptionsAuthority;
|
|
24
|
+
forgotPassword: AuthMicrosoftb2cOptionsAuthority;
|
|
25
|
+
editProfile: AuthMicrosoftb2cOptionsAuthority;
|
|
26
|
+
}
|
|
27
|
+
export interface AuthMicrosoftb2cOptionsAuthority {
|
|
28
|
+
authority: string;
|
|
29
|
+
}
|
|
30
|
+
export interface MSPMsalGuardConfiguration extends MsalGuardConfiguration {
|
|
31
|
+
type: string;
|
|
32
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './auth-microsoft.interface';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Injector } from '@angular/core';
|
|
2
|
+
import { AuthService } from '@igo2/auth';
|
|
2
3
|
import { ConfigService } from '@igo2/core/config';
|
|
3
4
|
import { AnyMonitoringOptions } from '@igo2/core/monitoring';
|
|
4
|
-
import { AuthService } from '../shared';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export declare class AuthMonitoringService {
|
|
7
7
|
private configService;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@igo2/auth",
|
|
3
|
-
"version": "17.0.0-next.
|
|
3
|
+
"version": "17.0.0-next.4",
|
|
4
4
|
"description": "IGO Library",
|
|
5
5
|
"author": "IGO Community",
|
|
6
6
|
"keywords": [
|
|
@@ -22,8 +22,50 @@
|
|
|
22
22
|
"esm": "./esm2022/igo2-auth.mjs",
|
|
23
23
|
"default": "./fesm2022/igo2-auth.mjs"
|
|
24
24
|
},
|
|
25
|
+
"./environment": {
|
|
26
|
+
"types": "./environment/index.d.ts",
|
|
27
|
+
"esm2022": "./esm2022/environment/igo2-auth-environment.mjs",
|
|
28
|
+
"esm": "./esm2022/environment/igo2-auth-environment.mjs",
|
|
29
|
+
"default": "./fesm2022/igo2-auth-environment.mjs"
|
|
30
|
+
},
|
|
31
|
+
"./facebook": {
|
|
32
|
+
"types": "./facebook/index.d.ts",
|
|
33
|
+
"esm2022": "./esm2022/facebook/igo2-auth-facebook.mjs",
|
|
34
|
+
"esm": "./esm2022/facebook/igo2-auth-facebook.mjs",
|
|
35
|
+
"default": "./fesm2022/igo2-auth-facebook.mjs"
|
|
36
|
+
},
|
|
37
|
+
"./form": {
|
|
38
|
+
"types": "./form/index.d.ts",
|
|
39
|
+
"esm2022": "./esm2022/form/igo2-auth-form.mjs",
|
|
40
|
+
"esm": "./esm2022/form/igo2-auth-form.mjs",
|
|
41
|
+
"default": "./fesm2022/igo2-auth-form.mjs"
|
|
42
|
+
},
|
|
43
|
+
"./google": {
|
|
44
|
+
"types": "./google/index.d.ts",
|
|
45
|
+
"esm2022": "./esm2022/google/igo2-auth-google.mjs",
|
|
46
|
+
"esm": "./esm2022/google/igo2-auth-google.mjs",
|
|
47
|
+
"default": "./fesm2022/igo2-auth-google.mjs"
|
|
48
|
+
},
|
|
49
|
+
"./internal": {
|
|
50
|
+
"types": "./internal/index.d.ts",
|
|
51
|
+
"esm2022": "./esm2022/internal/igo2-auth-internal.mjs",
|
|
52
|
+
"esm": "./esm2022/internal/igo2-auth-internal.mjs",
|
|
53
|
+
"default": "./fesm2022/igo2-auth-internal.mjs"
|
|
54
|
+
},
|
|
55
|
+
"./microsoft": {
|
|
56
|
+
"types": "./microsoft/index.d.ts",
|
|
57
|
+
"esm2022": "./esm2022/microsoft/igo2-auth-microsoft.mjs",
|
|
58
|
+
"esm": "./esm2022/microsoft/igo2-auth-microsoft.mjs",
|
|
59
|
+
"default": "./fesm2022/igo2-auth-microsoft.mjs"
|
|
60
|
+
},
|
|
25
61
|
"./package.json": {
|
|
26
62
|
"default": "./package.json"
|
|
63
|
+
},
|
|
64
|
+
"./monitoring": {
|
|
65
|
+
"types": "./monitoring/index.d.ts",
|
|
66
|
+
"esm2022": "./esm2022/monitoring/igo2-auth-monitoring.mjs",
|
|
67
|
+
"esm": "./esm2022/monitoring/igo2-auth-monitoring.mjs",
|
|
68
|
+
"default": "./fesm2022/igo2-auth-monitoring.mjs"
|
|
27
69
|
}
|
|
28
70
|
},
|
|
29
71
|
"dependencies": {
|
|
@@ -41,8 +83,8 @@
|
|
|
41
83
|
"@angular/router": "^17.0.6",
|
|
42
84
|
"@azure/msal-angular": "^3.0.4",
|
|
43
85
|
"@azure/msal-browser": "^3.0.4",
|
|
44
|
-
"@igo2/core": "^17.0.0-next.
|
|
45
|
-
"@igo2/utils": "^17.0.0-next.
|
|
86
|
+
"@igo2/core": "^17.0.0-next.4",
|
|
87
|
+
"@igo2/utils": "^17.0.0-next.4",
|
|
46
88
|
"rxjs": "^7.8.0"
|
|
47
89
|
},
|
|
48
90
|
"engines": {
|
package/public_api.d.ts
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
export { AuthFormComponent } from './lib/auth-form';
|
|
2
|
-
export * from './lib/environment';
|
|
3
1
|
export * from './lib/shared/auth.service';
|
|
4
2
|
export * from './lib/shared/logged.guard';
|
|
5
3
|
export * from './lib/shared/auth.guard';
|
|
@@ -7,12 +5,5 @@ export * from './lib/shared/admin.guard';
|
|
|
7
5
|
export * from './lib/shared/profils.guard';
|
|
8
6
|
export * from './lib/shared/auth.interceptor';
|
|
9
7
|
export * from './lib/shared/auth.interface';
|
|
10
|
-
export * from './lib/shared/auth-microsoft.provider';
|
|
11
|
-
export * from './lib/shared/protected.directive';
|
|
12
8
|
export * from './lib/shared/token.interface';
|
|
13
9
|
export * from './lib/shared/token.service';
|
|
14
|
-
export * from './lib/shared/auth-storage.interface';
|
|
15
|
-
export * from './lib/shared/auth-storage.service';
|
|
16
|
-
export * from './lib/auth-monitoring/auth-monitoring.provider';
|
|
17
|
-
export * from './lib/auth-monitoring/auth-monitoring.service';
|
|
18
|
-
export * from './lib/auth.module';
|
package/src/auth.theme.scss
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
@use '
|
|
2
|
-
|
|
3
|
-
@mixin themes($theme) {
|
|
4
|
-
@include auth-
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
@mixin colors($theme) {
|
|
8
|
-
@include auth-
|
|
9
|
-
}
|
|
1
|
+
@use '../form/src/auth-form.theme.scss' as auth-form;
|
|
2
|
+
|
|
3
|
+
@mixin themes($theme) {
|
|
4
|
+
@include auth-form.themes($theme);
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
@mixin colors($theme) {
|
|
8
|
+
@include auth-form.colors($theme);
|
|
9
|
+
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { ApplicationRef, ChangeDetectionStrategy, Component, EventEmitter, Output } from '@angular/core';
|
|
2
|
-
import { ConfigService } from '@igo2/core/config';
|
|
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/config";
|
|
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 = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: AuthFacebookComponent, deps: [{ token: i1.AuthService }, { token: i2.ConfigService }, { token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
57
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: AuthFacebookComponent, isStandalone: true, selector: "igo-auth-facebook", outputs: { login: "login" }, ngImport: i0, 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"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
58
|
-
}
|
|
59
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: AuthFacebookComponent, decorators: [{
|
|
60
|
-
type: Component,
|
|
61
|
-
args: [{ selector: 'igo-auth-facebook', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, 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"] }]
|
|
62
|
-
}], ctorParameters: () => [{ type: i1.AuthService }, { type: i2.ConfigService }, { type: i0.ApplicationRef }], propDecorators: { login: [{
|
|
63
|
-
type: Output
|
|
64
|
-
}] } });
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1mYWNlYm9vay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hdXRoL3NyYy9saWIvYXV0aC1mb3JtL2F1dGgtZmFjZWJvb2suY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYXV0aC9zcmMvbGliL2F1dGgtZm9ybS9hdXRoLWZhY2Vib29rLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxjQUFjLEVBQ2QsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7QUFTckQsTUFBTSxPQUFPLHFCQUFxQjtJQU10QjtJQUNBO0lBQ0E7SUFQRixPQUFPLENBQXVCO0lBRTVCLEtBQUssR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztJQUVyRSxZQUNVLFdBQXdCLEVBQ3hCLE1BQXFCLEVBQ3JCLE1BQXNCO1FBRnRCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFFOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV0RCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLElBQUksQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0lBRU8sZUFBZTtRQUNwQixNQUFjLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUM5RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sb0JBQW9CLENBQUMsUUFBUTtRQUNuQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDcEMsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUM7WUFDdEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFLO1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2hFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQzlDLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQ1YsZ0VBQWdFLENBQUM7UUFFbkUsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQztRQUN6QixFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxVQUFVLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDbEQsRUFBRSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7WUFDZixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDO1FBQ0YsR0FBRyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7dUdBdkRVLHFCQUFxQjsyRkFBckIscUJBQXFCLDBHQ3BCbEMsdVJBVUE7OzJGRFVhLHFCQUFxQjtrQkFQakMsU0FBUzsrQkFDRSxtQkFBbUIsbUJBR1osdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJO3lJQUtOLEtBQUs7c0JBQWQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQXBwbGljYXRpb25SZWYsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBPdXRwdXRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL2NvbmZpZyc7XHJcblxyXG5pbXBvcnQgeyBBdXRoRmFjZWJvb2tPcHRpb25zIH0gZnJvbSAnLi4vc2hhcmVkL2F1dGguaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvYXV0aC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWdvLWF1dGgtZmFjZWJvb2snLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRoLWZhY2Vib29rLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hdXRoLWZhY2Vib29rLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXV0aEZhY2Vib29rQ29tcG9uZW50IHtcclxuICBwcml2YXRlIG9wdGlvbnM/OiBBdXRoRmFjZWJvb2tPcHRpb25zO1xyXG5cclxuICBAT3V0cHV0KCkgbG9naW46IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgY29uZmlnOiBDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmXHJcbiAgKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoJ2F1dGguZmFjZWJvb2snKTtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zPy5hcHBJZCkge1xyXG4gICAgICB0aGlzLmxvYWRTREtGYWNlYm9vaygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKCdGYWNlYm9vayBhdXRoZW50aWZpY2F0aW9uIG5lZWRzIFwiYXBwSWRcIiBvcHRpb24nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlRXZlbnRzKCkge1xyXG4gICAgKHdpbmRvdyBhcyBhbnkpLkZCLkV2ZW50LnN1YnNjcmliZSgnYXV0aC5zdGF0dXNDaGFuZ2UnLCAocmVwKSA9PiB7XHJcbiAgICAgIHRoaXMuc3RhdHVzQ2hhbmdlQ2FsbGJhY2socmVwKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0dXNDaGFuZ2VDYWxsYmFjayhyZXNwb25zZSkge1xyXG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gJ2Nvbm5lY3RlZCcpIHtcclxuICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSByZXNwb25zZS5hdXRoUmVzcG9uc2UuYWNjZXNzVG9rZW47XHJcbiAgICAgIHRoaXMubG9naW5GYWNlYm9vayhhY2Nlc3NUb2tlbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvZ2luRmFjZWJvb2sodG9rZW4pIHtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UubG9naW5XaXRoVG9rZW4odG9rZW4sICdmYWNlYm9vaycpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYXBwUmVmLnRpY2soKTtcclxuICAgICAgdGhpcy5sb2dpbi5lbWl0KHRydWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRTREtGYWNlYm9vaygpIHtcclxuICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFjZWJvb2stanNzZGsnKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdXJsU0RLID1cclxuICAgICAgJ2h0dHBzOi8vY29ubmVjdC5mYWNlYm9vay5uZXQvZnJfQ0Evc2RrLmpzI3hmYm1sPTEmdmVyc2lvbj12Mi45JztcclxuXHJcbiAgICBjb25zdCBmanMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMF07XHJcbiAgICBjb25zdCBqcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG4gICAganMuaWQgPSAnZmFjZWJvb2stanNzZGsnO1xyXG4gICAganMuc3JjID0gYCR7dXJsU0RLfSZhcHBJZD0ke3RoaXMub3B0aW9ucz8uYXBwSWR9YDtcclxuICAgIGpzLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgdGhpcy5zdWJzY3JpYmVFdmVudHMoKTtcclxuICAgIH07XHJcbiAgICBmanMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoanMsIGZqcyk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICBzY29wZT1cInB1YmxpY19wcm9maWxlLGVtYWlsXCJcclxuICBjbGFzcz1cImZiLWxvZ2luLWJ1dHRvblwiXHJcbiAgZGF0YS1tYXgtcm93cz1cIjFcIlxyXG4gIGRhdGEtc2l6ZT1cImxhcmdlXCJcclxuICBkYXRhLWJ1dHRvbi10eXBlPVwibG9naW5fd2l0aFwiXHJcbiAgZGF0YS1zaG93LWZhY2VzPVwiZmFsc2VcIlxyXG4gIGRhdGEtYXV0by1sb2dvdXQtbGluaz1cImZhbHNlXCJcclxuICBkYXRhLXVzZS1jb250aW51ZS1hcz1cImZhbHNlXCJcclxuPjwvZGl2PlxyXG4iXX0=
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
import { NgIf } from '@angular/common';
|
|
2
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Optional, Output } from '@angular/core';
|
|
3
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
4
|
-
import { NavigationStart, Router } from '@angular/router';
|
|
5
|
-
import { ConfigService } from '@igo2/core/config';
|
|
6
|
-
import { TranslateModule } from '@ngx-translate/core';
|
|
7
|
-
import { filter } from 'rxjs/operators';
|
|
8
|
-
import { AuthService } from '../shared/auth.service';
|
|
9
|
-
import { AuthFacebookComponent } from './auth-facebook.component';
|
|
10
|
-
import { AuthGoogleComponent } from './auth-google.component';
|
|
11
|
-
import { AuthInternComponent } from './auth-intern.component';
|
|
12
|
-
import { AuthMicrosoftComponent } from './auth-microsoft.component';
|
|
13
|
-
import { AuthMicrosoftb2cComponent } from './auth-microsoftb2c.component';
|
|
14
|
-
import * as i0 from "@angular/core";
|
|
15
|
-
import * as i1 from "../shared/auth.service";
|
|
16
|
-
import * as i2 from "@igo2/core/config";
|
|
17
|
-
import * as i3 from "@angular/router";
|
|
18
|
-
import * as i4 from "@angular/material/button";
|
|
19
|
-
import * as i5 from "@ngx-translate/core";
|
|
20
|
-
export class AuthFormComponent {
|
|
21
|
-
auth;
|
|
22
|
-
config;
|
|
23
|
-
router;
|
|
24
|
-
get backgroundDisable() {
|
|
25
|
-
if (this.isLogoutRoute || this.isLogoutRoute) {
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
return this._backgroundDisable;
|
|
29
|
-
}
|
|
30
|
-
set backgroundDisable(value) {
|
|
31
|
-
this._backgroundDisable = value.toString() === 'true';
|
|
32
|
-
}
|
|
33
|
-
_backgroundDisable = true;
|
|
34
|
-
get hasAlreadyConnectedDiv() {
|
|
35
|
-
return this._hasAlreadyConnectedDiv;
|
|
36
|
-
}
|
|
37
|
-
set hasAlreadyConnectedDiv(value) {
|
|
38
|
-
this._hasAlreadyConnectedDiv = value.toString() === 'true';
|
|
39
|
-
}
|
|
40
|
-
_hasAlreadyConnectedDiv = true;
|
|
41
|
-
get hasLogoutDiv() {
|
|
42
|
-
return this._hasLogoutDiv;
|
|
43
|
-
}
|
|
44
|
-
set hasLogoutDiv(value) {
|
|
45
|
-
this._hasLogoutDiv = value.toString() === 'true';
|
|
46
|
-
}
|
|
47
|
-
_hasLogoutDiv = true;
|
|
48
|
-
get showAlreadyConnectedDiv() {
|
|
49
|
-
if (this.isLogoutRoute) {
|
|
50
|
-
return this.hasAlreadyConnectedDiv;
|
|
51
|
-
}
|
|
52
|
-
return this._showAlreadyConnectedDiv;
|
|
53
|
-
}
|
|
54
|
-
set showAlreadyConnectedDiv(value) {
|
|
55
|
-
this._showAlreadyConnectedDiv = value.toString() === 'true';
|
|
56
|
-
}
|
|
57
|
-
_showAlreadyConnectedDiv = false;
|
|
58
|
-
get showLogoutDiv() {
|
|
59
|
-
if (this.isLogoutRoute) {
|
|
60
|
-
return this.hasLogoutDiv;
|
|
61
|
-
}
|
|
62
|
-
return this._showLogoutDiv;
|
|
63
|
-
}
|
|
64
|
-
set showLogoutDiv(value) {
|
|
65
|
-
this._showLogoutDiv = value.toString() === 'true';
|
|
66
|
-
}
|
|
67
|
-
_showLogoutDiv = false;
|
|
68
|
-
get showLoginDiv() {
|
|
69
|
-
if (!this.isLogoutRoute) {
|
|
70
|
-
return true;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
login = new EventEmitter();
|
|
74
|
-
options;
|
|
75
|
-
user;
|
|
76
|
-
visible = true;
|
|
77
|
-
isLoginRoute;
|
|
78
|
-
isLogoutRoute;
|
|
79
|
-
constructor(auth, config, router) {
|
|
80
|
-
this.auth = auth;
|
|
81
|
-
this.config = config;
|
|
82
|
-
this.router = router;
|
|
83
|
-
this.options = this.config.getConfig('auth');
|
|
84
|
-
this.visible = Object.getOwnPropertyNames(this.options).length !== 0;
|
|
85
|
-
}
|
|
86
|
-
ngOnInit() {
|
|
87
|
-
this.analyzeRoute();
|
|
88
|
-
this.getName();
|
|
89
|
-
}
|
|
90
|
-
onLogin() {
|
|
91
|
-
this.auth.goToRedirectUrl();
|
|
92
|
-
this.getName();
|
|
93
|
-
this.login.emit(true);
|
|
94
|
-
}
|
|
95
|
-
logout() {
|
|
96
|
-
this.auth.logout().subscribe(() => {
|
|
97
|
-
this.user = undefined;
|
|
98
|
-
if (this.router) {
|
|
99
|
-
if (this.options?.logoutRoute) {
|
|
100
|
-
this.router.navigate([this.options?.logoutRoute]);
|
|
101
|
-
}
|
|
102
|
-
else if (this.options?.homeRoute) {
|
|
103
|
-
this.router.navigate([this.options?.homeRoute]);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
home() {
|
|
109
|
-
if (this.router && this.options?.homeRoute) {
|
|
110
|
-
this.router.navigate([this.options?.homeRoute]);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
getName() {
|
|
114
|
-
const tokenDecoded = this.auth.decodeToken();
|
|
115
|
-
if (tokenDecoded) {
|
|
116
|
-
this.user = {
|
|
117
|
-
name: tokenDecoded.user.firstName || tokenDecoded.user.sourceId
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
analyzeRoute() {
|
|
122
|
-
if (!this.router) {
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
this.router.events
|
|
126
|
-
.pipe(filter((event) => event instanceof NavigationStart))
|
|
127
|
-
.subscribe((changeEvent) => {
|
|
128
|
-
if (changeEvent.url) {
|
|
129
|
-
const currentRoute = changeEvent.url;
|
|
130
|
-
const logoutRoute = this.options?.logoutRoute;
|
|
131
|
-
const loginRoute = this.options?.loginRoute;
|
|
132
|
-
this.isLogoutRoute = currentRoute === logoutRoute;
|
|
133
|
-
this.isLoginRoute = currentRoute === loginRoute;
|
|
134
|
-
if (this.isLogoutRoute) {
|
|
135
|
-
this.auth.logout();
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: AuthFormComponent, deps: [{ token: i1.AuthService }, { token: i2.ConfigService }, { token: i3.Router, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
141
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: AuthFormComponent, isStandalone: true, selector: "igo-auth-form", inputs: { backgroundDisable: "backgroundDisable", hasAlreadyConnectedDiv: "hasAlreadyConnectedDiv", hasLogoutDiv: "hasLogoutDiv", showAlreadyConnectedDiv: "showAlreadyConnectedDiv", showLogoutDiv: "showLogoutDiv" }, outputs: { login: "login" }, ngImport: i0, 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"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: AuthGoogleComponent, selector: "igo-auth-google", outputs: ["login"] }, { kind: "component", type: AuthMicrosoftComponent, selector: "igo-auth-microsoft", outputs: ["login"] }, { kind: "component", type: AuthMicrosoftb2cComponent, selector: "igo-auth-microsoftb2c", outputs: ["login"] }, { kind: "component", type: AuthFacebookComponent, selector: "igo-auth-facebook", outputs: ["login"] }, { kind: "component", type: AuthInternComponent, selector: "igo-auth-intern", inputs: ["allowAnonymous"], outputs: ["login"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Default });
|
|
142
|
-
}
|
|
143
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: AuthFormComponent, decorators: [{
|
|
144
|
-
type: Component,
|
|
145
|
-
args: [{ selector: 'igo-auth-form', changeDetection: ChangeDetectionStrategy.Default, standalone: true, imports: [
|
|
146
|
-
NgIf,
|
|
147
|
-
AuthGoogleComponent,
|
|
148
|
-
AuthMicrosoftComponent,
|
|
149
|
-
AuthMicrosoftb2cComponent,
|
|
150
|
-
AuthFacebookComponent,
|
|
151
|
-
AuthInternComponent,
|
|
152
|
-
MatButtonModule,
|
|
153
|
-
TranslateModule
|
|
154
|
-
], 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"] }]
|
|
155
|
-
}], ctorParameters: () => [{ type: i1.AuthService }, { type: i2.ConfigService }, { type: i3.Router, decorators: [{
|
|
156
|
-
type: Optional
|
|
157
|
-
}] }], propDecorators: { backgroundDisable: [{
|
|
158
|
-
type: Input
|
|
159
|
-
}], hasAlreadyConnectedDiv: [{
|
|
160
|
-
type: Input
|
|
161
|
-
}], hasLogoutDiv: [{
|
|
162
|
-
type: Input
|
|
163
|
-
}], showAlreadyConnectedDiv: [{
|
|
164
|
-
type: Input
|
|
165
|
-
}], showLogoutDiv: [{
|
|
166
|
-
type: Input
|
|
167
|
-
}], login: [{
|
|
168
|
-
type: Output
|
|
169
|
-
}] } });
|
|
170
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2F1dGgvc3JjL2xpYi9hdXRoLWZvcm0vYXV0aC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2F1dGgvc3JjL2xpYi9hdXRoLWZvcm0vYXV0aC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7O0FBbUIxRSxNQUFNLE9BQU8saUJBQWlC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QXVCLENBQUMsT0FBTyxjQUNwQyxJQUFJLFdBQ1A7d0JBQ1AsSUFBSTt3QkFDSixtQkFBbUI7d0JBQ25CLHNCQUFzQjt3QkFDdEIseUJBQXlCO3dCQUN6QixxQkFBcUI7d0JBQ3JCLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixlQUFlO3FCQUNoQjs7MEJBNEVFLFFBQVE7eUNBeEVQLGlCQUFpQjtzQkFEcEIsS0FBSztnQkFhRixzQkFBc0I7c0JBRHpCLEtBQUs7Z0JBVUYsWUFBWTtzQkFEZixLQUFLO2dCQVVGLHVCQUF1QjtzQkFEMUIsS0FBSztnQkFhRixhQUFhO3NCQURoQixLQUFLO2dCQWtCSSxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPcHRpb25hbCxcclxuICBPdXRwdXRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvY29uZmlnJztcclxuXHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBBdXRoT3B0aW9ucyB9IGZyb20gJy4uL3NoYXJlZC9hdXRoLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhGYWNlYm9va0NvbXBvbmVudCB9IGZyb20gJy4vYXV0aC1mYWNlYm9vay5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBdXRoR29vZ2xlQ29tcG9uZW50IH0gZnJvbSAnLi9hdXRoLWdvb2dsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBdXRoSW50ZXJuQ29tcG9uZW50IH0gZnJvbSAnLi9hdXRoLWludGVybi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBdXRoTWljcm9zb2Z0Q29tcG9uZW50IH0gZnJvbSAnLi9hdXRoLW1pY3Jvc29mdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBdXRoTWljcm9zb2Z0YjJjQ29tcG9uZW50IH0gZnJvbSAnLi9hdXRoLW1pY3Jvc29mdGIyYy5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZ28tYXV0aC1mb3JtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXV0aC1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hdXRoLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LkRlZmF1bHQsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBOZ0lmLFxyXG4gICAgQXV0aEdvb2dsZUNvbXBvbmVudCxcclxuICAgIEF1dGhNaWNyb3NvZnRDb21wb25lbnQsXHJcbiAgICBBdXRoTWljcm9zb2Z0YjJjQ29tcG9uZW50LFxyXG4gICAgQXV0aEZhY2Vib29rQ29tcG9uZW50LFxyXG4gICAgQXV0aEludGVybkNvbXBvbmVudCxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIFRyYW5zbGF0ZU1vZHVsZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEF1dGhGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKVxyXG4gIGdldCBiYWNrZ3JvdW5kRGlzYWJsZSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmlzTG9nb3V0Um91dGUgfHwgdGhpcy5pc0xvZ291dFJvdXRlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl9iYWNrZ3JvdW5kRGlzYWJsZTtcclxuICB9XHJcbiAgc2V0IGJhY2tncm91bmREaXNhYmxlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9iYWNrZ3JvdW5kRGlzYWJsZSA9IHZhbHVlLnRvU3RyaW5nKCkgPT09ICd0cnVlJztcclxuICB9XHJcbiAgcHJpdmF0ZSBfYmFja2dyb3VuZERpc2FibGUgPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBoYXNBbHJlYWR5Q29ubmVjdGVkRGl2KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hhc0FscmVhZHlDb25uZWN0ZWREaXY7XHJcbiAgfVxyXG4gIHNldCBoYXNBbHJlYWR5Q29ubmVjdGVkRGl2KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9oYXNBbHJlYWR5Q29ubmVjdGVkRGl2ID0gdmFsdWUudG9TdHJpbmcoKSA9PT0gJ3RydWUnO1xyXG4gIH1cclxuICBwcml2YXRlIF9oYXNBbHJlYWR5Q29ubmVjdGVkRGl2ID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgaGFzTG9nb3V0RGl2KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hhc0xvZ291dERpdjtcclxuICB9XHJcbiAgc2V0IGhhc0xvZ291dERpdih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faGFzTG9nb3V0RGl2ID0gdmFsdWUudG9TdHJpbmcoKSA9PT0gJ3RydWUnO1xyXG4gIH1cclxuICBwcml2YXRlIF9oYXNMb2dvdXREaXYgPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBzaG93QWxyZWFkeUNvbm5lY3RlZERpdigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmlzTG9nb3V0Um91dGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaGFzQWxyZWFkeUNvbm5lY3RlZERpdjtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl9zaG93QWxyZWFkeUNvbm5lY3RlZERpdjtcclxuICB9XHJcbiAgc2V0IHNob3dBbHJlYWR5Q29ubmVjdGVkRGl2KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9zaG93QWxyZWFkeUNvbm5lY3RlZERpdiA9IHZhbHVlLnRvU3RyaW5nKCkgPT09ICd0cnVlJztcclxuICB9XHJcbiAgcHJpdmF0ZSBfc2hvd0FscmVhZHlDb25uZWN0ZWREaXYgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgc2hvd0xvZ291dERpdigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmlzTG9nb3V0Um91dGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaGFzTG9nb3V0RGl2O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX3Nob3dMb2dvdXREaXY7XHJcbiAgfVxyXG4gIHNldCBzaG93TG9nb3V0RGl2KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9zaG93TG9nb3V0RGl2ID0gdmFsdWUudG9TdHJpbmcoKSA9PT0gJ3RydWUnO1xyXG4gIH1cclxuICBwcml2YXRlIF9zaG93TG9nb3V0RGl2ID0gZmFsc2U7XHJcblxyXG4gIGdldCBzaG93TG9naW5EaXYoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuaXNMb2dvdXRSb3V0ZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSBsb2dpbjogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBwdWJsaWMgb3B0aW9ucz86IEF1dGhPcHRpb25zO1xyXG4gIHB1YmxpYyB1c2VyO1xyXG5cclxuICBwdWJsaWMgdmlzaWJsZSA9IHRydWU7XHJcblxyXG4gIHByaXZhdGUgaXNMb2dpblJvdXRlOiBib29sZWFuO1xyXG4gIHByaXZhdGUgaXNMb2dvdXRSb3V0ZTogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgYXV0aDogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpZzogQ29uZmlnU2VydmljZSxcclxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcclxuICApIHtcclxuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuY29uZmlnLmdldENvbmZpZygnYXV0aCcpO1xyXG4gICAgdGhpcy52aXNpYmxlID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5vcHRpb25zKS5sZW5ndGggIT09IDA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmFuYWx5emVSb3V0ZSgpO1xyXG4gICAgdGhpcy5nZXROYW1lKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25Mb2dpbigpIHtcclxuICAgIHRoaXMuYXV0aC5nb1RvUmVkaXJlY3RVcmwoKTtcclxuICAgIHRoaXMuZ2V0TmFtZSgpO1xyXG4gICAgdGhpcy5sb2dpbi5lbWl0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvZ291dCgpIHtcclxuICAgIHRoaXMuYXV0aC5sb2dvdXQoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLnVzZXIgPSB1bmRlZmluZWQ7XHJcbiAgICAgIGlmICh0aGlzLnJvdXRlcikge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnM/LmxvZ291dFJvdXRlKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5vcHRpb25zPy5sb2dvdXRSb3V0ZV0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zPy5ob21lUm91dGUpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLm9wdGlvbnM/LmhvbWVSb3V0ZV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaG9tZSgpIHtcclxuICAgIGlmICh0aGlzLnJvdXRlciAmJiB0aGlzLm9wdGlvbnM/LmhvbWVSb3V0ZSkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5vcHRpb25zPy5ob21lUm91dGVdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TmFtZSgpIHtcclxuICAgIGNvbnN0IHRva2VuRGVjb2RlZCA9IHRoaXMuYXV0aC5kZWNvZGVUb2tlbigpO1xyXG4gICAgaWYgKHRva2VuRGVjb2RlZCkge1xyXG4gICAgICB0aGlzLnVzZXIgPSB7XHJcbiAgICAgICAgbmFtZTogdG9rZW5EZWNvZGVkLnVzZXIuZmlyc3ROYW1lIHx8IHRva2VuRGVjb2RlZC51c2VyLnNvdXJjZUlkXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFuYWx5emVSb3V0ZSgpIHtcclxuICAgIGlmICghdGhpcy5yb3V0ZXIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucm91dGVyLmV2ZW50c1xyXG4gICAgICAucGlwZShmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGNoYW5nZUV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoY2hhbmdlRXZlbnQudXJsKSB7XHJcbiAgICAgICAgICBjb25zdCBjdXJyZW50Um91dGUgPSBjaGFuZ2VFdmVudC51cmw7XHJcbiAgICAgICAgICBjb25zdCBsb2dvdXRSb3V0ZSA9IHRoaXMub3B0aW9ucz8ubG9nb3V0Um91dGU7XHJcbiAgICAgICAgICBjb25zdCBsb2dpblJvdXRlID0gdGhpcy5vcHRpb25zPy5sb2dpblJvdXRlO1xyXG5cclxuICAgICAgICAgIHRoaXMuaXNMb2dvdXRSb3V0ZSA9IGN1cnJlbnRSb3V0ZSA9PT0gbG9nb3V0Um91dGU7XHJcbiAgICAgICAgICB0aGlzLmlzTG9naW5Sb3V0ZSA9IGN1cnJlbnRSb3V0ZSA9PT0gbG9naW5Sb3V0ZTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5pc0xvZ291dFJvdXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aC5sb2dvdXQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwidmlzaWJsZVwiPlxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiIWF1dGgubG9nZ2VkICYmIGJhY2tncm91bmREaXNhYmxlXCJcclxuICAgIGNsYXNzPVwiYmFja2dyb3VuZERpc2FibGVcIlxyXG4gID48L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cIiFhdXRoLmxvZ2dlZCAmJiBzaG93TG9naW5EaXZcIiBjbGFzcz1cImxvZ2luIGNlbnRlci1ibG9ja1wiPlxyXG4gICAgPGgxPnt7ICdpZ28uYXV0aC5jb25uZWN0aW9uJyB8IHRyYW5zbGF0ZSB9fTwvaDE+XHJcblxyXG4gICAgPGlnby1hdXRoLWdvb2dsZVxyXG4gICAgICAqbmdJZj1cIm9wdGlvbnMuZ29vZ2xlICYmIG9wdGlvbnMuZ29vZ2xlLmVuYWJsZWQgIT09IGZhbHNlXCJcclxuICAgICAgKGxvZ2luKT1cIm9uTG9naW4oKVwiXHJcbiAgICA+XHJcbiAgICA8L2lnby1hdXRoLWdvb2dsZT5cclxuICAgIDxpZ28tYXV0aC1taWNyb3NvZnRcclxuICAgICAgKm5nSWY9XCJvcHRpb25zLm1pY3Jvc29mdCAmJiBvcHRpb25zLm1pY3Jvc29mdC5lbmFibGVkICE9PSBmYWxzZVwiXHJcbiAgICAgIChsb2dpbik9XCJvbkxvZ2luKClcIlxyXG4gICAgPlxyXG4gICAgPC9pZ28tYXV0aC1taWNyb3NvZnQ+XHJcbiAgICA8aWdvLWF1dGgtbWljcm9zb2Z0YjJjXHJcbiAgICAgICpuZ0lmPVwib3B0aW9ucy5taWNyb3NvZnRiMmMgJiYgb3B0aW9ucy5taWNyb3NvZnRiMmMuZW5hYmxlZCAhPT0gZmFsc2VcIlxyXG4gICAgICAobG9naW4pPVwib25Mb2dpbigpXCJcclxuICAgID5cclxuICAgIDwvaWdvLWF1dGgtbWljcm9zb2Z0YjJjPlxyXG4gICAgPGlnby1hdXRoLWZhY2Vib29rXHJcbiAgICAgICpuZ0lmPVwib3B0aW9ucy5mYWNlYm9vayAmJiBvcHRpb25zLmZhY2Vib29rLmVuYWJsZWQgIT09IGZhbHNlXCJcclxuICAgICAgKGxvZ2luKT1cIm9uTG9naW4oKVwiXHJcbiAgICA+XHJcbiAgICA8L2lnby1hdXRoLWZhY2Vib29rPlxyXG4gICAgPGlnby1hdXRoLWludGVyblxyXG4gICAgICAqbmdJZj1cIiFvcHRpb25zLmludGVybiB8fCBvcHRpb25zLmludGVybi5lbmFibGVkICE9PSBmYWxzZVwiXHJcbiAgICAgIFthbGxvd0Fub255bW91c109XCJvcHRpb25zLmFsbG93QW5vbnltb3VzXCJcclxuICAgICAgKGxvZ2luKT1cIm9uTG9naW4oKVwiXHJcbiAgICA+XHJcbiAgICA8L2lnby1hdXRoLWludGVybj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJhdXRoLmxvZ2dlZCAmJiBzaG93QWxyZWFkeUNvbm5lY3RlZERpdlwiXHJcbiAgICBjbGFzcz1cImxvZ2luIGNlbnRlci1ibG9ja1wiXHJcbiAgPlxyXG4gICAgPHA+e3sgJ2lnby5hdXRoLndlbGNvbWUnIHwgdHJhbnNsYXRlOiB1c2VyIH19PC9wPlxyXG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImxvZ291dCgpXCI+XHJcbiAgICAgIHt7ICdpZ28uYXV0aC5zaWduT3V0JyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJzaG93TG9nb3V0RGl2XCIgY2xhc3M9XCJsb2dpbiBjZW50ZXItYmxvY2tcIj5cclxuICAgIDxwPnt7ICdpZ28uYXV0aC5kZWNvbm5lY3Rpb24nIHwgdHJhbnNsYXRlIH19PC9wPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAqbmdJZj1cIm9wdGlvbnMuaG9tZVJvdXRlXCJcclxuICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIChjbGljayk9XCJob21lKClcIlxyXG4gICAgPlxyXG4gICAgICB7eyAnaWdvLmF1dGguaG9tZScgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|