@igo2/auth 20.1.0-next.2 → 20.1.0-next.21
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/fesm2022/igo2-auth-facebook.mjs +3 -3
- package/fesm2022/igo2-auth-facebook.mjs.map +1 -1
- package/fesm2022/igo2-auth-form.mjs +16 -17
- package/fesm2022/igo2-auth-form.mjs.map +1 -1
- package/fesm2022/igo2-auth-google.mjs +3 -3
- package/fesm2022/igo2-auth-google.mjs.map +1 -1
- package/fesm2022/igo2-auth-internal.mjs +3 -3
- package/fesm2022/igo2-auth-internal.mjs.map +1 -1
- package/fesm2022/igo2-auth-microsoft.mjs +124 -85
- package/fesm2022/igo2-auth-microsoft.mjs.map +1 -1
- package/fesm2022/igo2-auth-monitoring.mjs +3 -3
- package/fesm2022/igo2-auth-monitoring.mjs.map +1 -1
- package/fesm2022/igo2-auth.mjs +251 -148
- package/fesm2022/igo2-auth.mjs.map +1 -1
- package/form/index.d.ts +1 -1
- package/index.d.ts +155 -84
- package/internal/index.d.ts +1 -1
- package/locale/en.auth.json +4 -3
- package/locale/fr.auth.json +4 -3
- package/microsoft/index.d.ts +39 -24
- package/package.json +6 -5
package/fesm2022/igo2-auth.mjs
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { HttpClient, HttpHeaders, HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { inject, Injector, Injectable, makeEnvironmentProviders } from '@angular/core';
|
|
3
|
+
import { inject, Injector, Injectable, InjectionToken, signal, makeEnvironmentProviders } from '@angular/core';
|
|
4
4
|
import { BaseStorage, StorageScope, StorageService } from '@igo2/core/storage';
|
|
5
|
-
import { ConfigService } from '@igo2/core/config';
|
|
6
|
-
import { jwtDecode } from 'jwt-decode';
|
|
7
5
|
import { Router } from '@angular/router';
|
|
6
|
+
import { ConfigService } from '@igo2/core/config';
|
|
8
7
|
import { LanguageService } from '@igo2/core/language';
|
|
9
8
|
import { MessageService } from '@igo2/core/message';
|
|
10
9
|
import { Base64 } from '@igo2/utils';
|
|
11
|
-
import { BehaviorSubject, of } from 'rxjs';
|
|
12
|
-
import { tap, catchError, map } from 'rxjs/operators';
|
|
10
|
+
import { BehaviorSubject, tap, of, Observable, Subject, EMPTY } from 'rxjs';
|
|
11
|
+
import { finalize, tap as tap$1, catchError, switchMap, takeUntil, debounceTime, map } from 'rxjs/operators';
|
|
13
12
|
import { globalCacheBusterNotifier } from 'ts-cacheable';
|
|
13
|
+
import { jwtDecode } from 'jwt-decode';
|
|
14
14
|
import { Md5 } from 'ts-md5';
|
|
15
15
|
|
|
16
16
|
class TokenService {
|
|
@@ -46,19 +46,52 @@ class TokenService {
|
|
|
46
46
|
}
|
|
47
47
|
return true;
|
|
48
48
|
}
|
|
49
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
50
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
49
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: TokenService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
50
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: TokenService, providedIn: 'root' });
|
|
51
51
|
}
|
|
52
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
52
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: TokenService, decorators: [{
|
|
53
53
|
type: Injectable,
|
|
54
54
|
args: [{
|
|
55
55
|
providedIn: 'root'
|
|
56
56
|
}]
|
|
57
57
|
}], ctorParameters: () => [] });
|
|
58
58
|
|
|
59
|
+
const USER_AUTH_OPTIONS = new InjectionToken('USER_AUTH_OPTIONS');
|
|
60
|
+
class UserService {
|
|
61
|
+
http = inject(HttpClient);
|
|
62
|
+
options = inject(USER_AUTH_OPTIONS);
|
|
63
|
+
baseUrl;
|
|
64
|
+
_user$ = new BehaviorSubject(undefined);
|
|
65
|
+
user$ = this._user$.asObservable();
|
|
66
|
+
constructor() {
|
|
67
|
+
this.baseUrl = this.options.apiUrl;
|
|
68
|
+
}
|
|
69
|
+
getUser() {
|
|
70
|
+
return this.http
|
|
71
|
+
.get(this.baseUrl)
|
|
72
|
+
.pipe(tap((user) => this._user$.next(user)));
|
|
73
|
+
}
|
|
74
|
+
sync() {
|
|
75
|
+
return this.http
|
|
76
|
+
.get(`${this.baseUrl}/sync`)
|
|
77
|
+
.pipe(tap((user) => this._user$.next(user)));
|
|
78
|
+
}
|
|
79
|
+
updatePreference(preference) {
|
|
80
|
+
return this.http.patch(this.baseUrl, { preference });
|
|
81
|
+
}
|
|
82
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: UserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
83
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: UserService });
|
|
84
|
+
}
|
|
85
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: UserService, decorators: [{
|
|
86
|
+
type: Injectable
|
|
87
|
+
}], ctorParameters: () => [] });
|
|
88
|
+
|
|
59
89
|
class AuthService {
|
|
60
90
|
http = inject(HttpClient);
|
|
61
91
|
tokenService = inject(TokenService);
|
|
92
|
+
userService = inject(UserService, {
|
|
93
|
+
optional: true
|
|
94
|
+
});
|
|
62
95
|
config = inject(ConfigService);
|
|
63
96
|
languageService = inject(LanguageService);
|
|
64
97
|
messageService = inject(MessageService);
|
|
@@ -67,8 +100,9 @@ class AuthService {
|
|
|
67
100
|
logged$ = new BehaviorSubject(undefined);
|
|
68
101
|
redirectUrl;
|
|
69
102
|
languageForce = false;
|
|
70
|
-
anonymous = false;
|
|
71
103
|
authOptions;
|
|
104
|
+
anonymous = false;
|
|
105
|
+
isLogging = signal(false, ...(ngDevMode ? [{ debugName: "isLogging" }] : []));
|
|
72
106
|
get hasAuthService() {
|
|
73
107
|
return this.authOptions?.url !== undefined;
|
|
74
108
|
}
|
|
@@ -78,26 +112,28 @@ class AuthService {
|
|
|
78
112
|
}
|
|
79
113
|
constructor() {
|
|
80
114
|
this.authOptions = this.config.getConfig('auth');
|
|
81
|
-
this.
|
|
115
|
+
this.initializeAuthentication(this.authenticated).subscribe();
|
|
82
116
|
this.authenticate$.subscribe((authenticated) => {
|
|
83
117
|
this.logged$.next(authenticated);
|
|
84
118
|
globalCacheBusterNotifier.next();
|
|
85
119
|
});
|
|
86
120
|
}
|
|
87
121
|
login(username, password) {
|
|
122
|
+
this.isLogging.set(true);
|
|
88
123
|
const myHeader = new HttpHeaders({ 'Content-Type': 'application/json' });
|
|
89
124
|
const body = {
|
|
90
125
|
username,
|
|
91
126
|
password: this.encodePassword(password)
|
|
92
127
|
};
|
|
93
|
-
return this.loginCall(body, myHeader);
|
|
128
|
+
return this.loginCall(body, myHeader).pipe(finalize(() => this.isLogging.set(false)));
|
|
94
129
|
}
|
|
95
|
-
loginWithToken(token, type, infosUser) {
|
|
130
|
+
loginWithToken(token, type, infosUser, applicationId) {
|
|
96
131
|
const myHeader = new HttpHeaders({ 'Content-Type': 'application/json' });
|
|
97
132
|
const body = {
|
|
98
133
|
token,
|
|
99
134
|
typeConnection: type,
|
|
100
|
-
infosUser
|
|
135
|
+
infosUser,
|
|
136
|
+
applicationId
|
|
101
137
|
};
|
|
102
138
|
return this.loginCall(body, myHeader);
|
|
103
139
|
}
|
|
@@ -107,7 +143,7 @@ class AuthService {
|
|
|
107
143
|
return of(true);
|
|
108
144
|
}
|
|
109
145
|
refresh() {
|
|
110
|
-
return this.http.post(`${this.authOptions?.url}/refresh`, {}).pipe(tap((data) => {
|
|
146
|
+
return this.http.post(`${this.authOptions?.url}/refresh`, {}).pipe(tap$1((data) => {
|
|
111
147
|
this.tokenService.set(data.token);
|
|
112
148
|
}), catchError((err) => {
|
|
113
149
|
err.error.caught = true;
|
|
@@ -115,10 +151,15 @@ class AuthService {
|
|
|
115
151
|
}));
|
|
116
152
|
}
|
|
117
153
|
logout() {
|
|
154
|
+
this.logoutInternal();
|
|
155
|
+
if (this.authOptions.logoutRedirectRoute) {
|
|
156
|
+
this.router.navigate([this.authOptions.logoutRedirectRoute]);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
logoutInternal() {
|
|
118
160
|
this.anonymous = false;
|
|
119
161
|
this.tokenService.remove();
|
|
120
162
|
this.authenticate$.next(false);
|
|
121
|
-
return of(true);
|
|
122
163
|
}
|
|
123
164
|
isAuthenticated() {
|
|
124
165
|
return !this.tokenService.isExpired();
|
|
@@ -136,14 +177,8 @@ class AuthService {
|
|
|
136
177
|
if (!this.router) {
|
|
137
178
|
return;
|
|
138
179
|
}
|
|
139
|
-
const redirectUrl = this.redirectUrl
|
|
140
|
-
|
|
141
|
-
const homeRoute = this.authOptions.homeRoute || '/';
|
|
142
|
-
this.router.navigateByUrl(homeRoute);
|
|
143
|
-
}
|
|
144
|
-
else if (redirectUrl) {
|
|
145
|
-
this.router.navigateByUrl(redirectUrl);
|
|
146
|
-
}
|
|
180
|
+
const redirectUrl = this.redirectUrl ?? this.authOptions.homeRoute ?? '/';
|
|
181
|
+
this.router.navigateByUrl(redirectUrl);
|
|
147
182
|
}
|
|
148
183
|
getUserInfo() {
|
|
149
184
|
const url = this.authOptions?.url + '/info';
|
|
@@ -155,6 +190,24 @@ class AuthService {
|
|
|
155
190
|
updateUser(user) {
|
|
156
191
|
return this.http.patch(this.authOptions?.url, user);
|
|
157
192
|
}
|
|
193
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
194
|
+
translateError(prefix, error) {
|
|
195
|
+
return new Observable((observer) => {
|
|
196
|
+
try {
|
|
197
|
+
this.languageService.translate
|
|
198
|
+
.get(prefix + error.error.message)
|
|
199
|
+
.subscribe((errorMsg) => {
|
|
200
|
+
observer.next(errorMsg);
|
|
201
|
+
observer.complete();
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
if (error.error)
|
|
206
|
+
observer.next(error.error.message);
|
|
207
|
+
observer.complete();
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
}
|
|
158
211
|
encodePassword(password) {
|
|
159
212
|
return Base64.encode(password);
|
|
160
213
|
}
|
|
@@ -178,7 +231,7 @@ class AuthService {
|
|
|
178
231
|
loginCall(body, headers) {
|
|
179
232
|
return this.http
|
|
180
233
|
.post(`${this.authOptions?.url}/login`, body, { headers })
|
|
181
|
-
.pipe(tap((data) => {
|
|
234
|
+
.pipe(tap$1((data) => {
|
|
182
235
|
this.tokenService.set(data.token);
|
|
183
236
|
const tokenDecoded = this.decodeToken();
|
|
184
237
|
if (tokenDecoded?.user) {
|
|
@@ -186,78 +239,121 @@ class AuthService {
|
|
|
186
239
|
this.languageService.setLanguage(tokenDecoded.user.locale);
|
|
187
240
|
}
|
|
188
241
|
if (tokenDecoded.user.isExpired) {
|
|
189
|
-
this.messageService.alert('igo.auth.error.Password expired');
|
|
242
|
+
this.messageService.alert('igo.auth.error.intern.Password expired');
|
|
190
243
|
}
|
|
191
244
|
}
|
|
192
|
-
|
|
193
|
-
}), catchError((err) => {
|
|
194
|
-
err.error.caught = true;
|
|
195
|
-
throw err;
|
|
196
|
-
}));
|
|
245
|
+
}), switchMap(() => this.initializeAuthentication(true)));
|
|
197
246
|
}
|
|
198
|
-
|
|
199
|
-
|
|
247
|
+
initializeAuthentication(isAuthenticated) {
|
|
248
|
+
if (!isAuthenticated) {
|
|
249
|
+
this.authenticate$.next(false);
|
|
250
|
+
return of(null);
|
|
251
|
+
}
|
|
252
|
+
if (this.userService) {
|
|
253
|
+
const obs$ = this.authOptions.user.withSync
|
|
254
|
+
? this.userService.sync()
|
|
255
|
+
: this.userService.getUser();
|
|
256
|
+
return obs$.pipe(tap$1(() => this.authenticate$.next(true)));
|
|
257
|
+
}
|
|
258
|
+
this.authenticate$.next(true);
|
|
259
|
+
return of(null);
|
|
260
|
+
}
|
|
261
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AuthService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
262
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AuthService, providedIn: 'root' });
|
|
200
263
|
}
|
|
201
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
264
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AuthService, decorators: [{
|
|
202
265
|
type: Injectable,
|
|
203
266
|
args: [{
|
|
204
267
|
providedIn: 'root'
|
|
205
268
|
}]
|
|
206
269
|
}], ctorParameters: () => [] });
|
|
207
270
|
|
|
271
|
+
class AdminGuard {
|
|
272
|
+
authService = inject(AuthService);
|
|
273
|
+
config = inject(ConfigService);
|
|
274
|
+
router = inject(Router);
|
|
275
|
+
canActivate(route, state) {
|
|
276
|
+
if (this.authService.isAdmin) {
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
this.authService.redirectUrl = state.url;
|
|
280
|
+
const authConfig = this.config.getConfig('auth');
|
|
281
|
+
if (authConfig?.loginRoute) {
|
|
282
|
+
this.router.navigateByUrl(authConfig.loginRoute);
|
|
283
|
+
}
|
|
284
|
+
return false;
|
|
285
|
+
}
|
|
286
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AdminGuard, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
287
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AdminGuard, providedIn: 'root' });
|
|
288
|
+
}
|
|
289
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AdminGuard, decorators: [{
|
|
290
|
+
type: Injectable,
|
|
291
|
+
args: [{
|
|
292
|
+
providedIn: 'root'
|
|
293
|
+
}]
|
|
294
|
+
}] });
|
|
295
|
+
|
|
296
|
+
const DEBOUNCE_TIME = 3000; // 3 seconds;
|
|
208
297
|
class AuthStorageService extends BaseStorage {
|
|
209
|
-
http = inject(HttpClient);
|
|
210
298
|
authService = inject(AuthService);
|
|
299
|
+
userService = inject(UserService, {
|
|
300
|
+
optional: true
|
|
301
|
+
});
|
|
211
302
|
tokenService = inject(TokenService);
|
|
303
|
+
preferencesChanged$ = new Subject();
|
|
304
|
+
destroy$ = new Subject();
|
|
305
|
+
pendingPreferences = {};
|
|
306
|
+
serverPreferences = {};
|
|
212
307
|
constructor() {
|
|
213
308
|
const config = inject(ConfigService);
|
|
214
309
|
super(config);
|
|
215
|
-
this.authService.authenticate
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
310
|
+
this.authService.authenticate$
|
|
311
|
+
.pipe(switchMap((isAuthenticated) => {
|
|
312
|
+
if (isAuthenticated && this.userService) {
|
|
313
|
+
return this.userService.user$;
|
|
314
|
+
}
|
|
315
|
+
return EMPTY;
|
|
316
|
+
}), takeUntil(this.destroy$))
|
|
317
|
+
.subscribe((user) => {
|
|
318
|
+
if (!user?.preference) {
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
this.serverPreferences = { ...user.preference };
|
|
322
|
+
for (const key of Object.keys(user.preference)) {
|
|
323
|
+
const value = user.preference[key];
|
|
324
|
+
super.set(key, value);
|
|
227
325
|
}
|
|
228
326
|
});
|
|
327
|
+
this.preferencesChanged$
|
|
328
|
+
.pipe(debounceTime(DEBOUNCE_TIME), // Wait for more changes to accumulate
|
|
329
|
+
takeUntil(this.destroy$))
|
|
330
|
+
.subscribe(() => {
|
|
331
|
+
this.syncPreferences();
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
ngOnDestroy() {
|
|
335
|
+
this.destroy$.next();
|
|
336
|
+
this.destroy$.complete();
|
|
337
|
+
this.preferencesChanged$.complete();
|
|
229
338
|
}
|
|
230
339
|
set(key, value, scope = StorageScope.LOCAL) {
|
|
231
|
-
if (scope === StorageScope.LOCAL &&
|
|
232
|
-
this.
|
|
233
|
-
this.
|
|
234
|
-
const preference = {};
|
|
235
|
-
preference[key] = value;
|
|
236
|
-
this.http.patch(this.options.url, { preference }).subscribe();
|
|
340
|
+
if (scope === StorageScope.LOCAL && this.authService.authenticated) {
|
|
341
|
+
this.pendingPreferences[key] = value;
|
|
342
|
+
this.preferencesChanged$.next();
|
|
237
343
|
}
|
|
238
344
|
super.set(key, value, scope);
|
|
239
345
|
}
|
|
240
346
|
remove(key, scope = StorageScope.LOCAL) {
|
|
241
|
-
if (scope === StorageScope.LOCAL &&
|
|
242
|
-
this.
|
|
243
|
-
this.
|
|
244
|
-
const preference = {};
|
|
245
|
-
preference[key] = undefined;
|
|
246
|
-
this.http.patch(this.options.url, { preference }).subscribe();
|
|
347
|
+
if (scope === StorageScope.LOCAL && this.authService.authenticated) {
|
|
348
|
+
this.pendingPreferences[key] = undefined;
|
|
349
|
+
this.preferencesChanged$.next();
|
|
247
350
|
}
|
|
248
351
|
super.remove(key, scope);
|
|
249
352
|
}
|
|
250
353
|
clear(scope = StorageScope.LOCAL) {
|
|
251
|
-
if (scope === StorageScope.LOCAL &&
|
|
252
|
-
this.
|
|
253
|
-
this.
|
|
254
|
-
this.http
|
|
255
|
-
.patch(this.options.url, { preference: {} }, {
|
|
256
|
-
params: {
|
|
257
|
-
mergePreference: 'false'
|
|
258
|
-
}
|
|
259
|
-
})
|
|
260
|
-
.subscribe();
|
|
354
|
+
if (scope === StorageScope.LOCAL && this.authService.authenticated) {
|
|
355
|
+
this.pendingPreferences = {};
|
|
356
|
+
this.preferencesChanged$.next();
|
|
261
357
|
}
|
|
262
358
|
let token;
|
|
263
359
|
if (scope === StorageScope.LOCAL) {
|
|
@@ -267,35 +363,61 @@ class AuthStorageService extends BaseStorage {
|
|
|
267
363
|
if (token) {
|
|
268
364
|
this.tokenService.set(token);
|
|
269
365
|
}
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
366
|
+
}
|
|
367
|
+
syncPreferences() {
|
|
368
|
+
if (Object.keys(this.pendingPreferences).length === 0) {
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
// Filter out preferences that haven't actually changed
|
|
372
|
+
const changedPreferences = {};
|
|
373
|
+
for (const key of Object.keys(this.pendingPreferences)) {
|
|
374
|
+
const newValue = this.pendingPreferences[key];
|
|
375
|
+
const oldValue = this.serverPreferences[key];
|
|
376
|
+
if (JSON.stringify(newValue) !== JSON.stringify(oldValue)) {
|
|
377
|
+
changedPreferences[key] = newValue;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
this.pendingPreferences = {};
|
|
381
|
+
if (Object.keys(changedPreferences).length > 0) {
|
|
382
|
+
this.userService?.updatePreference(changedPreferences).subscribe(() => {
|
|
383
|
+
Object.assign(this.serverPreferences, changedPreferences);
|
|
282
384
|
});
|
|
283
385
|
}
|
|
284
386
|
}
|
|
285
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
286
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
387
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AuthStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
388
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AuthStorageService, providedIn: 'root' });
|
|
287
389
|
}
|
|
288
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
390
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AuthStorageService, decorators: [{
|
|
289
391
|
type: Injectable,
|
|
290
392
|
args: [{
|
|
291
393
|
providedIn: 'root'
|
|
292
394
|
}]
|
|
293
395
|
}], ctorParameters: () => [] });
|
|
294
396
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
397
|
+
class AuthGuard {
|
|
398
|
+
authService = inject(AuthService);
|
|
399
|
+
config = inject(ConfigService);
|
|
400
|
+
router = inject(Router);
|
|
401
|
+
canActivate(route, state) {
|
|
402
|
+
if (this.authService.authenticated) {
|
|
403
|
+
return true;
|
|
404
|
+
}
|
|
405
|
+
this.authService.redirectUrl = state.url;
|
|
406
|
+
const authConfig = this.config.getConfig('auth');
|
|
407
|
+
if (authConfig?.loginRoute) {
|
|
408
|
+
this.router.navigateByUrl(authConfig.loginRoute);
|
|
409
|
+
}
|
|
410
|
+
return false;
|
|
411
|
+
}
|
|
412
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AuthGuard, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
413
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AuthGuard, providedIn: 'root' });
|
|
414
|
+
}
|
|
415
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AuthGuard, decorators: [{
|
|
416
|
+
type: Injectable,
|
|
417
|
+
args: [{
|
|
418
|
+
providedIn: 'root'
|
|
419
|
+
}]
|
|
420
|
+
}] });
|
|
299
421
|
|
|
300
422
|
class AuthInterceptor {
|
|
301
423
|
config = inject(ConfigService);
|
|
@@ -425,7 +547,9 @@ class AuthInterceptor {
|
|
|
425
547
|
currentTime > jwt.exp - 1800) {
|
|
426
548
|
this.refreshInProgress = true;
|
|
427
549
|
const url = this.authOptions?.url;
|
|
428
|
-
return this.http.post(`${url}/refresh`, {}).subscribe(
|
|
550
|
+
return this.http.post(`${url}/refresh`, {}).subscribe(
|
|
551
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
552
|
+
(data) => {
|
|
429
553
|
this.tokenService.set(data.token);
|
|
430
554
|
this.refreshInProgress = false;
|
|
431
555
|
}, (err) => {
|
|
@@ -434,16 +558,22 @@ class AuthInterceptor {
|
|
|
434
558
|
});
|
|
435
559
|
}
|
|
436
560
|
}
|
|
437
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
438
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
561
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AuthInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
562
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AuthInterceptor, providedIn: 'root' });
|
|
439
563
|
}
|
|
440
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
564
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AuthInterceptor, decorators: [{
|
|
441
565
|
type: Injectable,
|
|
442
566
|
args: [{
|
|
443
567
|
providedIn: 'root'
|
|
444
568
|
}]
|
|
445
569
|
}], ctorParameters: () => [] });
|
|
446
570
|
|
|
571
|
+
var AuthFeatureKind;
|
|
572
|
+
(function (AuthFeatureKind) {
|
|
573
|
+
AuthFeatureKind[AuthFeatureKind["Microsoft"] = 0] = "Microsoft";
|
|
574
|
+
AuthFeatureKind[AuthFeatureKind["User"] = 1] = "User";
|
|
575
|
+
})(AuthFeatureKind || (AuthFeatureKind = {}));
|
|
576
|
+
|
|
447
577
|
class LoggedGuard {
|
|
448
578
|
authService = inject(AuthService);
|
|
449
579
|
config = inject(ConfigService);
|
|
@@ -459,60 +589,10 @@ class LoggedGuard {
|
|
|
459
589
|
}
|
|
460
590
|
return false;
|
|
461
591
|
}
|
|
462
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
463
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
592
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: LoggedGuard, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
593
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: LoggedGuard, providedIn: 'root' });
|
|
464
594
|
}
|
|
465
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
466
|
-
type: Injectable,
|
|
467
|
-
args: [{
|
|
468
|
-
providedIn: 'root'
|
|
469
|
-
}]
|
|
470
|
-
}] });
|
|
471
|
-
|
|
472
|
-
class AuthGuard {
|
|
473
|
-
authService = inject(AuthService);
|
|
474
|
-
config = inject(ConfigService);
|
|
475
|
-
router = inject(Router);
|
|
476
|
-
canActivate(route, state) {
|
|
477
|
-
if (this.authService.authenticated) {
|
|
478
|
-
return true;
|
|
479
|
-
}
|
|
480
|
-
this.authService.redirectUrl = state.url;
|
|
481
|
-
const authConfig = this.config.getConfig('auth');
|
|
482
|
-
if (authConfig?.loginRoute) {
|
|
483
|
-
this.router.navigateByUrl(authConfig.loginRoute);
|
|
484
|
-
}
|
|
485
|
-
return false;
|
|
486
|
-
}
|
|
487
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: AuthGuard, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
488
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: AuthGuard, providedIn: 'root' });
|
|
489
|
-
}
|
|
490
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: AuthGuard, decorators: [{
|
|
491
|
-
type: Injectable,
|
|
492
|
-
args: [{
|
|
493
|
-
providedIn: 'root'
|
|
494
|
-
}]
|
|
495
|
-
}] });
|
|
496
|
-
|
|
497
|
-
class AdminGuard {
|
|
498
|
-
authService = inject(AuthService);
|
|
499
|
-
config = inject(ConfigService);
|
|
500
|
-
router = inject(Router);
|
|
501
|
-
canActivate(route, state) {
|
|
502
|
-
if (this.authService.isAdmin) {
|
|
503
|
-
return true;
|
|
504
|
-
}
|
|
505
|
-
this.authService.redirectUrl = state.url;
|
|
506
|
-
const authConfig = this.config.getConfig('auth');
|
|
507
|
-
if (authConfig?.loginRoute) {
|
|
508
|
-
this.router.navigateByUrl(authConfig.loginRoute);
|
|
509
|
-
}
|
|
510
|
-
return false;
|
|
511
|
-
}
|
|
512
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: AdminGuard, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
513
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: AdminGuard, providedIn: 'root' });
|
|
514
|
-
}
|
|
515
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: AdminGuard, decorators: [{
|
|
595
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: LoggedGuard, decorators: [{
|
|
516
596
|
type: Injectable,
|
|
517
597
|
args: [{
|
|
518
598
|
providedIn: 'root'
|
|
@@ -538,16 +618,39 @@ class ProfilsGuard {
|
|
|
538
618
|
return false;
|
|
539
619
|
}));
|
|
540
620
|
}
|
|
541
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
542
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
621
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ProfilsGuard, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
622
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ProfilsGuard, providedIn: 'root' });
|
|
543
623
|
}
|
|
544
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
624
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ProfilsGuard, decorators: [{
|
|
545
625
|
type: Injectable,
|
|
546
626
|
args: [{
|
|
547
627
|
providedIn: 'root'
|
|
548
628
|
}]
|
|
549
629
|
}] });
|
|
550
630
|
|
|
631
|
+
function withUserIgo() {
|
|
632
|
+
return {
|
|
633
|
+
kind: AuthFeatureKind.User,
|
|
634
|
+
providers: [
|
|
635
|
+
{
|
|
636
|
+
provide: USER_AUTH_OPTIONS,
|
|
637
|
+
useFactory: (config) => config.getConfig('auth.user'),
|
|
638
|
+
deps: [ConfigService]
|
|
639
|
+
},
|
|
640
|
+
{
|
|
641
|
+
provide: UserService,
|
|
642
|
+
useFactory: (options) => {
|
|
643
|
+
if (!options) {
|
|
644
|
+
return undefined;
|
|
645
|
+
}
|
|
646
|
+
return new UserService();
|
|
647
|
+
},
|
|
648
|
+
deps: [USER_AUTH_OPTIONS]
|
|
649
|
+
}
|
|
650
|
+
]
|
|
651
|
+
};
|
|
652
|
+
}
|
|
653
|
+
|
|
551
654
|
function provideAuthentification(...features) {
|
|
552
655
|
const providers = [
|
|
553
656
|
{
|
|
@@ -574,5 +677,5 @@ function provideAuthentification(...features) {
|
|
|
574
677
|
* Generated bundle index. Do not edit.
|
|
575
678
|
*/
|
|
576
679
|
|
|
577
|
-
export { AdminGuard, AuthFeatureKind, AuthGuard, AuthInterceptor, AuthService, AuthStorageService, LoggedGuard, ProfilsGuard, TokenService, provideAuthentification };
|
|
680
|
+
export { AdminGuard, AuthFeatureKind, AuthGuard, AuthInterceptor, AuthService, AuthStorageService, LoggedGuard, ProfilsGuard, TokenService, USER_AUTH_OPTIONS, UserService, provideAuthentification, withUserIgo };
|
|
578
681
|
//# sourceMappingURL=igo2-auth.mjs.map
|