ngx-oauth 4.0.0 → 4.2.1
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/README.md +2 -0
- package/esm2020/lib/components/login/oauth-login.component.mjs +22 -14
- package/esm2020/lib/models/index.mjs +5 -4
- package/esm2020/lib/oauth.module.mjs +16 -7
- package/esm2020/lib/services/oauth.interceptor.mjs +3 -3
- package/esm2020/lib/services/oauth.service.mjs +26 -16
- package/esm2020/lib/services/token.service.mjs +11 -8
- package/fesm2015/ngx-oauth.mjs +84 -51
- package/fesm2015/ngx-oauth.mjs.map +1 -1
- package/fesm2020/ngx-oauth.mjs +82 -51
- package/fesm2020/ngx-oauth.mjs.map +1 -1
- package/lib/components/login/oauth-login.component.d.ts +4 -3
- package/lib/models/index.d.ts +3 -2
- package/lib/services/oauth.service.d.ts +1 -0
- package/package.json +1 -1
package/fesm2015/ngx-oauth.mjs
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { InjectionToken, inject, Injectable, Inject, Component, ViewEncapsulation, Input, Output, ContentChild, HostListener, PLATFORM_ID, Optional, NgModule } from '@angular/core';
|
|
3
|
-
import * as
|
|
4
|
-
import { HttpHeaders, HttpParams, HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';
|
|
3
|
+
import * as i3 from '@angular/common/http';
|
|
4
|
+
import { HttpHeaders, HttpParams, HttpClient, HttpBackend, HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';
|
|
5
5
|
import { __classPrivateFieldGet, __awaiter, __classPrivateFieldSet } from 'tslib';
|
|
6
6
|
import { shareReplay, map, catchError, filter, switchMap as switchMap$1, tap, concatMap, delay } from 'rxjs/operators';
|
|
7
7
|
import { BehaviorSubject, distinctUntilChanged, switchMap, of, ReplaySubject, from, noop, firstValueFrom, throwError, take, Subscription } from 'rxjs';
|
|
8
|
-
import * as i2
|
|
8
|
+
import * as i2 from '@angular/common';
|
|
9
9
|
import { isPlatformBrowser, CommonModule } from '@angular/common';
|
|
10
|
-
import * as i3 from '@angular/forms';
|
|
10
|
+
import * as i3$1 from '@angular/forms';
|
|
11
11
|
import { FormsModule } from '@angular/forms';
|
|
12
12
|
import { RouterModule } from '@angular/router';
|
|
13
13
|
|
|
@@ -18,11 +18,12 @@ const STORAGE = new InjectionToken('Storage');
|
|
|
18
18
|
const OAUTH_CONFIG = new InjectionToken('OAuthConfig');
|
|
19
19
|
const OAUTH_TOKEN = new InjectionToken('OAuthToken');
|
|
20
20
|
const HEADER_APPLICATION = new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded' });
|
|
21
|
+
const OAUTH_HTTP_CLIENT = new InjectionToken('OAuthHttpClient');
|
|
21
22
|
class OAuthConfig {
|
|
22
23
|
}
|
|
23
|
-
OAuthConfig.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.
|
|
24
|
-
OAuthConfig.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.
|
|
25
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.
|
|
24
|
+
OAuthConfig.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: OAuthConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
25
|
+
OAuthConfig.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: OAuthConfig, providedIn: 'root', useFactory: () => inject(OAUTH_CONFIG).reduce((p, c) => (Object.assign(Object.assign({}, p), c)), {}) });
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: OAuthConfig, decorators: [{
|
|
26
27
|
type: Injectable,
|
|
27
28
|
args: [{
|
|
28
29
|
providedIn: 'root',
|
|
@@ -62,7 +63,7 @@ class TokenService {
|
|
|
62
63
|
this.http = http;
|
|
63
64
|
this.zone = zone;
|
|
64
65
|
_TokenService_token$.set(this, new BehaviorSubject(this.saved));
|
|
65
|
-
this.token$ = __classPrivateFieldGet(this, _TokenService_token$, "f").pipe(distinctUntilChanged((p, c) => JSON.stringify(p || null) === JSON.stringify(c || null)), switchMap(token => !isExpiredToken(token) && of(token) || this.refreshToken(token))
|
|
66
|
+
this.token$ = __classPrivateFieldGet(this, _TokenService_token$, "f").pipe(distinctUntilChanged((p, c) => JSON.stringify(p || null) === JSON.stringify(c || null)), shareReplay(1), switchMap(token => !isExpiredToken(token) && of(token) || this.refreshToken(token)));
|
|
66
67
|
this.type$ = this.token$.pipe(map(token => token === null || token === void 0 ? void 0 : token.type), shareReplay(1));
|
|
67
68
|
this.accessToken$ = this.token$.pipe(map(token => token === null || token === void 0 ? void 0 : token.access_token), shareReplay(1));
|
|
68
69
|
}
|
|
@@ -107,11 +108,16 @@ class TokenService {
|
|
|
107
108
|
}
|
|
108
109
|
}
|
|
109
110
|
_TokenService_token$ = new WeakMap();
|
|
110
|
-
TokenService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.
|
|
111
|
-
TokenService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.
|
|
112
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.
|
|
111
|
+
TokenService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: TokenService, deps: [{ token: OAuthConfig }, { token: OAUTH_HTTP_CLIENT }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
112
|
+
TokenService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: TokenService });
|
|
113
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: TokenService, decorators: [{
|
|
113
114
|
type: Injectable
|
|
114
|
-
}], ctorParameters: function () {
|
|
115
|
+
}], ctorParameters: function () {
|
|
116
|
+
return [{ type: OAuthConfig }, { type: i3.HttpClient, decorators: [{
|
|
117
|
+
type: Inject,
|
|
118
|
+
args: [OAUTH_HTTP_CLIENT]
|
|
119
|
+
}] }, { type: i0.NgZone }];
|
|
120
|
+
} });
|
|
115
121
|
|
|
116
122
|
const arrToString = (buf) => buf.reduce((s, b) => s + String.fromCharCode(b), '');
|
|
117
123
|
const base64url = (str) => btoa(str)
|
|
@@ -149,21 +155,21 @@ class OAuthService {
|
|
|
149
155
|
this.token$ = this.config$.pipe(tap(config => {
|
|
150
156
|
const { hash, search, origin, pathname } = this.location;
|
|
151
157
|
const isImplicitRedirect = hash && /(access_token=)|(error=)/.test(hash);
|
|
152
|
-
const isAuthCodeRedirect = search && /(code=)|(error=)/.test(search);
|
|
158
|
+
const isAuthCodeRedirect = search && /(code=)|(error=)/.test(search) || hash && /(code=)|(error=)/.test(hash);
|
|
153
159
|
if (isImplicitRedirect) {
|
|
154
160
|
const parameters = parseOauthUri(hash.substring(1));
|
|
155
161
|
this.token = Object.assign(Object.assign({}, parameters), { type: OAuthType.IMPLICIT });
|
|
156
162
|
this.checkResponse(this.token, parameters);
|
|
157
163
|
}
|
|
158
164
|
else if (isAuthCodeRedirect) {
|
|
159
|
-
const parameters = parseOauthUri(search.substring(1));
|
|
165
|
+
const parameters = parseOauthUri(search && search.substring(1) || hash && hash.substring(1));
|
|
160
166
|
if (!this.checkResponse(this.token, parameters)) {
|
|
161
167
|
this.token = parameters;
|
|
162
168
|
}
|
|
163
169
|
else {
|
|
164
170
|
const newParametersString = this.getCleanedUnSearchParameters();
|
|
165
171
|
const { clientId, clientSecret, tokenPath, scope } = config;
|
|
166
|
-
const { codeVerifier } = this.token || {}; //should be set by
|
|
172
|
+
const { codeVerifier } = this.token || {}; //should be set by authorizationUrl construction
|
|
167
173
|
this.http.post(tokenPath, new HttpParams({
|
|
168
174
|
fromObject: Object.assign(Object.assign(Object.assign(Object.assign({ code: parameters === null || parameters === void 0 ? void 0 : parameters['code'], client_id: clientId }, clientSecret && { client_secret: clientSecret } || {}), { redirect_uri: `${origin}${pathname}`, grant_type: 'authorization_code' }), scope && { scope } || {}), codeVerifier && { code_verifier: codeVerifier } || {})
|
|
169
175
|
}), { headers: HEADER_APPLICATION }).pipe().subscribe(token => {
|
|
@@ -174,10 +180,7 @@ class OAuthService {
|
|
|
174
180
|
}
|
|
175
181
|
}), switchMap$1(() => this.tokenService.token$), shareReplay(1));
|
|
176
182
|
this.status$ = this.token$.pipe(map(token => token.access_token && OAuthStatus.AUTHORIZED || token.error && OAuthStatus.DENIED || OAuthStatus.NOT_AUTHORIZED), shareReplay(1));
|
|
177
|
-
this.userInfo$ = this.status$.pipe(filter(s => s === OAuthStatus.AUTHORIZED), map(() =>
|
|
178
|
-
const { config } = this.authConfig;
|
|
179
|
-
return config.userPath;
|
|
180
|
-
}), filter(Boolean), switchMap$1(path => this.http.get(path)), shareReplay(1));
|
|
183
|
+
this.userInfo$ = this.status$.pipe(filter(s => s === OAuthStatus.AUTHORIZED), map(() => this.config.userPath), filter(Boolean), switchMap$1(path => this.getUserInfo(path)), shareReplay(1));
|
|
181
184
|
this.type$ = this.tokenService.type$;
|
|
182
185
|
this.ignorePaths = this.authConfig.ignorePaths || [];
|
|
183
186
|
}
|
|
@@ -200,10 +203,7 @@ class OAuthService {
|
|
|
200
203
|
if (!!parameters && parameters.password) {
|
|
201
204
|
yield this.resourceLogin(parameters);
|
|
202
205
|
}
|
|
203
|
-
else if (!!parameters
|
|
204
|
-
&& parameters.redirectUri
|
|
205
|
-
&& (parameters.responseType === OAuthType.IMPLICIT
|
|
206
|
-
|| parameters.responseType === OAuthType.AUTHORIZATION_CODE)) {
|
|
206
|
+
else if (!!parameters && parameters.redirectUri && parameters.responseType) {
|
|
207
207
|
yield this.toAuthorizationUrl(parameters);
|
|
208
208
|
}
|
|
209
209
|
else {
|
|
@@ -221,6 +221,10 @@ class OAuthService {
|
|
|
221
221
|
this.location.replace(`${logoutPath}?post_logout_redirect_uri=${logoutRedirectUri || currentPath}`);
|
|
222
222
|
}
|
|
223
223
|
}
|
|
224
|
+
getUserInfo(path) {
|
|
225
|
+
const { userPath } = this.config;
|
|
226
|
+
return this.http.get(path || userPath);
|
|
227
|
+
}
|
|
224
228
|
revoke() {
|
|
225
229
|
const { revokePath, clientId, clientSecret } = this.authConfig.config;
|
|
226
230
|
if (revokePath) {
|
|
@@ -316,7 +320,19 @@ class OAuthService {
|
|
|
316
320
|
cleanLocationHash() {
|
|
317
321
|
const { hash } = this.location;
|
|
318
322
|
let curHash = hash && hash.substring(1) || '';
|
|
319
|
-
const hashKeys = [
|
|
323
|
+
const hashKeys = [
|
|
324
|
+
'access_token',
|
|
325
|
+
'token_type',
|
|
326
|
+
'expires_in',
|
|
327
|
+
'scope',
|
|
328
|
+
'state',
|
|
329
|
+
'error',
|
|
330
|
+
'error_description',
|
|
331
|
+
'session_state',
|
|
332
|
+
'nonce',
|
|
333
|
+
'id_token',
|
|
334
|
+
'code'
|
|
335
|
+
];
|
|
320
336
|
hashKeys.forEach(hashKey => {
|
|
321
337
|
const re = new RegExp('&' + hashKey + '(=[^&]*)?|^' + hashKey + '(=[^&]*)?&?');
|
|
322
338
|
curHash = curHash.replace(re, '');
|
|
@@ -328,15 +344,15 @@ class OAuthService {
|
|
|
328
344
|
state && this.state$.next(state);
|
|
329
345
|
}
|
|
330
346
|
}
|
|
331
|
-
OAuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.
|
|
332
|
-
OAuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.
|
|
333
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.
|
|
347
|
+
OAuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: OAuthService, deps: [{ token: OAuthConfig }, { token: TokenService }, { token: i3.HttpClient }, { token: LOCATION }, { token: i2.Location }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
348
|
+
OAuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: OAuthService });
|
|
349
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: OAuthService, decorators: [{
|
|
334
350
|
type: Injectable
|
|
335
351
|
}], ctorParameters: function () {
|
|
336
|
-
return [{ type: OAuthConfig }, { type: TokenService }, { type:
|
|
352
|
+
return [{ type: OAuthConfig }, { type: TokenService }, { type: i3.HttpClient }, { type: Location, decorators: [{
|
|
337
353
|
type: Inject,
|
|
338
354
|
args: [LOCATION]
|
|
339
|
-
}] }, { type: i2
|
|
355
|
+
}] }, { type: i2.Location }];
|
|
340
356
|
} });
|
|
341
357
|
|
|
342
358
|
class OAuthInterceptor {
|
|
@@ -380,13 +396,13 @@ class OAuthInterceptor {
|
|
|
380
396
|
return false;
|
|
381
397
|
}
|
|
382
398
|
}
|
|
383
|
-
OAuthInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.
|
|
384
|
-
OAuthInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.
|
|
385
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.
|
|
399
|
+
OAuthInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: OAuthInterceptor, deps: [{ token: TokenService }, { token: OAuthConfig }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
400
|
+
OAuthInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: OAuthInterceptor });
|
|
401
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: OAuthInterceptor, decorators: [{
|
|
386
402
|
type: Injectable
|
|
387
403
|
}], ctorParameters: function () { return [{ type: TokenService }, { type: OAuthConfig }]; } });
|
|
388
404
|
|
|
389
|
-
var _OAuthLoginComponent_subscription, _OAuthLoginComponent_redirectUri, _OAuthLoginComponent_i18n;
|
|
405
|
+
var _OAuthLoginComponent_subscription, _OAuthLoginComponent_redirectUri, _OAuthLoginComponent_responseType, _OAuthLoginComponent_i18n;
|
|
390
406
|
class OAuthLoginComponent {
|
|
391
407
|
constructor(oauthService, locationService, location) {
|
|
392
408
|
this.oauthService = oauthService;
|
|
@@ -394,6 +410,7 @@ class OAuthLoginComponent {
|
|
|
394
410
|
this.location = location;
|
|
395
411
|
_OAuthLoginComponent_subscription.set(this, new Subscription());
|
|
396
412
|
_OAuthLoginComponent_redirectUri.set(this, void 0);
|
|
413
|
+
_OAuthLoginComponent_responseType.set(this, void 0);
|
|
397
414
|
_OAuthLoginComponent_i18n.set(this, {
|
|
398
415
|
username: 'Username',
|
|
399
416
|
password: 'Password',
|
|
@@ -402,6 +419,7 @@ class OAuthLoginComponent {
|
|
|
402
419
|
authorized: 'Welcome',
|
|
403
420
|
denied: 'Access Denied. Try again!'
|
|
404
421
|
});
|
|
422
|
+
this.type = OAuthType.RESOURCE;
|
|
405
423
|
this.useLogoutUrl = false;
|
|
406
424
|
this.state = '';
|
|
407
425
|
this.stateChange = this.oauthService.state$.asObservable();
|
|
@@ -410,7 +428,6 @@ class OAuthLoginComponent {
|
|
|
410
428
|
this.OAuthStatus = OAuthStatus;
|
|
411
429
|
this.OAuthType = OAuthType;
|
|
412
430
|
this.collapse = false;
|
|
413
|
-
this.type = OAuthType.RESOURCE;
|
|
414
431
|
this.status$ = this.oauthService.status$.pipe(tap(s => {
|
|
415
432
|
if (s === OAuthStatus.AUTHORIZED && this.profileName$) {
|
|
416
433
|
__classPrivateFieldGet(this, _OAuthLoginComponent_subscription, "f").add(this.profileName$.pipe(take(1)).subscribe(n => this.profileName = n));
|
|
@@ -438,6 +455,14 @@ class OAuthLoginComponent {
|
|
|
438
455
|
__classPrivateFieldSet(this, _OAuthLoginComponent_redirectUri, redirectUri, "f");
|
|
439
456
|
}
|
|
440
457
|
}
|
|
458
|
+
set responseType(responseType) {
|
|
459
|
+
if (this.responseType) {
|
|
460
|
+
__classPrivateFieldSet(this, _OAuthLoginComponent_responseType, responseType, "f");
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
get responseType() {
|
|
464
|
+
return __classPrivateFieldGet(this, _OAuthLoginComponent_responseType, "f") || this.type;
|
|
465
|
+
}
|
|
441
466
|
ngOnDestroy() {
|
|
442
467
|
__classPrivateFieldGet(this, _OAuthLoginComponent_subscription, "f").unsubscribe();
|
|
443
468
|
}
|
|
@@ -454,25 +479,26 @@ class OAuthLoginComponent {
|
|
|
454
479
|
keyboardEvent() {
|
|
455
480
|
this.collapse = false;
|
|
456
481
|
}
|
|
457
|
-
get responseType() {
|
|
458
|
-
return this.type; //avoid complains
|
|
459
|
-
}
|
|
460
482
|
}
|
|
461
|
-
_OAuthLoginComponent_subscription = new WeakMap(), _OAuthLoginComponent_redirectUri = new WeakMap(), _OAuthLoginComponent_i18n = new WeakMap();
|
|
462
|
-
OAuthLoginComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.
|
|
463
|
-
OAuthLoginComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.
|
|
464
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.
|
|
483
|
+
_OAuthLoginComponent_subscription = new WeakMap(), _OAuthLoginComponent_redirectUri = new WeakMap(), _OAuthLoginComponent_responseType = new WeakMap(), _OAuthLoginComponent_i18n = new WeakMap();
|
|
484
|
+
OAuthLoginComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: OAuthLoginComponent, deps: [{ token: OAuthService }, { token: i2.Location }, { token: LOCATION }], target: i0.ɵɵFactoryTarget.Component });
|
|
485
|
+
OAuthLoginComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: OAuthLoginComponent, selector: "oauth-login", inputs: { type: "type", i18n: "i18n", redirectUri: "redirectUri", responseType: "responseType", useLogoutUrl: "useLogoutUrl", state: "state", profileName$: "profileName$" }, outputs: { stateChange: "stateChange" }, host: { listeners: { "window:keydown.escape": "keyboardEvent()" } }, queries: [{ propertyName: "loginTemplate", first: true, predicate: ["login"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"loginTemplate; else defaultLogin\"\r\n [ngTemplateOutlet]=\"loginTemplate\"\r\n [ngTemplateOutletContext]=\"{login: loginFunction, logout: logoutFunction, status: status$ | async}\">\r\n</ng-container>\r\n<ng-template #defaultLogin>\r\n <ng-container *ngIf=\"status$ | async as status\">\r\n <ng-container *ngIf=\"type === OAuthType.RESOURCE; else noResource\">\r\n <div class=\"oauth dropdown text-end {{collapse ? 'show': ''}}\">\r\n <button class=\"btn btn-link p-0 dropdown-toggle\"\r\n (click)=\"status === OAuthStatus.AUTHORIZED ? logout() : toggleCollapse()\">\r\n <ng-container *ngTemplateOutlet=\"message\"></ng-container>\r\n </button>\r\n <div class=\"dropdown-menu mr-3 {{collapse ? 'show': ''}}\">\r\n <form class=\"p-3\"\r\n #form=\"ngForm\"\r\n *ngIf=\"status === OAuthStatus.NOT_AUTHORIZED || status === OAuthStatus.DENIED\"\r\n (submit)=\"login({username: username, password: password})\">\r\n <div class=\"mb-3\">\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n name=\"username\"\r\n required\r\n [(ngModel)]=\"username\"\r\n [placeholder]=\"i18n.username\">\r\n </div>\r\n <div class=\"mb-3\">\r\n <input type=\"password\"\r\n class=\"form-control\"\r\n name=\"password\"\r\n required\r\n [(ngModel)]=\"password\"\r\n [placeholder]=\"i18n.password\">\r\n </div>\r\n <div class=\"text-end\">\r\n <button type=\"submit\"\r\n class=\"btn btn-primary\"\r\n [disabled]=\"form.invalid\">{{i18n.submit}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #noResource>\r\n <a role=\"button\"\r\n class=\"oauth\"\r\n (click)=\"status === OAuthStatus.AUTHORIZED ? logout() : login({responseType: responseType, redirectUri: redirectUri, state:state})\">\r\n <ng-container *ngTemplateOutlet=\"message\"></ng-container>\r\n </a>\r\n </ng-template>\r\n\r\n <ng-template #message>\r\n <span class=\"not-authorized\"\r\n *ngIf=\"status === OAuthStatus.NOT_AUTHORIZED\"\r\n [innerHTML]=\"i18n.notAuthorized\"></span>\r\n <span class=\"authorized\"\r\n *ngIf=\"status === OAuthStatus.AUTHORIZED\">\r\n <span class=\"welcome\" [innerHTML]=\"i18n.authorized + ' '\"></span>\r\n <strong class=\"profile-name\"\r\n [innerHTML]=\"profileName\"></strong>\r\n </span>\r\n <span class=\"denied\"\r\n *ngIf=\"status === OAuthStatus.DENIED\"\r\n [innerHTML]=\"i18n.denied\"></span>\r\n </ng-template>\r\n </ng-container>\r\n</ng-template>\r\n\r\n", styles: [".oauth .dropdown-menu{left:auto;right:0;box-shadow:0 5px 10px #0003;min-width:250px}.oauth .dropdown-menu:before{content:\"\";display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:#0003;position:absolute;top:-7px;left:auto;right:15px}.oauth .dropdown-menu:after{content:\"\";display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:auto;right:16px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], encapsulation: i0.ViewEncapsulation.None });
|
|
486
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: OAuthLoginComponent, decorators: [{
|
|
465
487
|
type: Component,
|
|
466
|
-
args: [{ selector: 'oauth-login', encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"loginTemplate; else defaultLogin\"\r\n [ngTemplateOutlet]=\"loginTemplate\"\r\n [ngTemplateOutletContext]=\"{login: loginFunction, logout: logoutFunction, status: status$ | async}\">\r\n</ng-container>\r\n<ng-template #defaultLogin>\r\n <ng-container *ngIf=\"status$ | async as status\">\r\n <ng-container *ngIf=\"type === OAuthType.RESOURCE; else noResource\">\r\n <div class=\"oauth dropdown text-end {{collapse ? 'show': ''}}\">\r\n <button class=\"btn btn-link p-0 dropdown-toggle\"\r\n (click)=\"status === OAuthStatus.AUTHORIZED ? logout() : toggleCollapse()\">\r\n <ng-container *ngTemplateOutlet=\"message\"></ng-container>\r\n </button>\r\n <div class=\"dropdown-menu mr-3 {{collapse ? 'show': ''}}\">\r\n <form class=\"p-3\"
|
|
488
|
+
args: [{ selector: 'oauth-login', encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"loginTemplate; else defaultLogin\"\r\n [ngTemplateOutlet]=\"loginTemplate\"\r\n [ngTemplateOutletContext]=\"{login: loginFunction, logout: logoutFunction, status: status$ | async}\">\r\n</ng-container>\r\n<ng-template #defaultLogin>\r\n <ng-container *ngIf=\"status$ | async as status\">\r\n <ng-container *ngIf=\"type === OAuthType.RESOURCE; else noResource\">\r\n <div class=\"oauth dropdown text-end {{collapse ? 'show': ''}}\">\r\n <button class=\"btn btn-link p-0 dropdown-toggle\"\r\n (click)=\"status === OAuthStatus.AUTHORIZED ? logout() : toggleCollapse()\">\r\n <ng-container *ngTemplateOutlet=\"message\"></ng-container>\r\n </button>\r\n <div class=\"dropdown-menu mr-3 {{collapse ? 'show': ''}}\">\r\n <form class=\"p-3\"\r\n #form=\"ngForm\"\r\n *ngIf=\"status === OAuthStatus.NOT_AUTHORIZED || status === OAuthStatus.DENIED\"\r\n (submit)=\"login({username: username, password: password})\">\r\n <div class=\"mb-3\">\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n name=\"username\"\r\n required\r\n [(ngModel)]=\"username\"\r\n [placeholder]=\"i18n.username\">\r\n </div>\r\n <div class=\"mb-3\">\r\n <input type=\"password\"\r\n class=\"form-control\"\r\n name=\"password\"\r\n required\r\n [(ngModel)]=\"password\"\r\n [placeholder]=\"i18n.password\">\r\n </div>\r\n <div class=\"text-end\">\r\n <button type=\"submit\"\r\n class=\"btn btn-primary\"\r\n [disabled]=\"form.invalid\">{{i18n.submit}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #noResource>\r\n <a role=\"button\"\r\n class=\"oauth\"\r\n (click)=\"status === OAuthStatus.AUTHORIZED ? logout() : login({responseType: responseType, redirectUri: redirectUri, state:state})\">\r\n <ng-container *ngTemplateOutlet=\"message\"></ng-container>\r\n </a>\r\n </ng-template>\r\n\r\n <ng-template #message>\r\n <span class=\"not-authorized\"\r\n *ngIf=\"status === OAuthStatus.NOT_AUTHORIZED\"\r\n [innerHTML]=\"i18n.notAuthorized\"></span>\r\n <span class=\"authorized\"\r\n *ngIf=\"status === OAuthStatus.AUTHORIZED\">\r\n <span class=\"welcome\" [innerHTML]=\"i18n.authorized + ' '\"></span>\r\n <strong class=\"profile-name\"\r\n [innerHTML]=\"profileName\"></strong>\r\n </span>\r\n <span class=\"denied\"\r\n *ngIf=\"status === OAuthStatus.DENIED\"\r\n [innerHTML]=\"i18n.denied\"></span>\r\n </ng-template>\r\n </ng-container>\r\n</ng-template>\r\n\r\n", styles: [".oauth .dropdown-menu{left:auto;right:0;box-shadow:0 5px 10px #0003;min-width:250px}.oauth .dropdown-menu:before{content:\"\";display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:#0003;position:absolute;top:-7px;left:auto;right:15px}.oauth .dropdown-menu:after{content:\"\";display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:auto;right:16px}\n"] }]
|
|
467
489
|
}], ctorParameters: function () {
|
|
468
|
-
return [{ type: OAuthService }, { type: i2
|
|
490
|
+
return [{ type: OAuthService }, { type: i2.Location }, { type: Location, decorators: [{
|
|
469
491
|
type: Inject,
|
|
470
492
|
args: [LOCATION]
|
|
471
493
|
}] }];
|
|
472
|
-
}, propDecorators: {
|
|
494
|
+
}, propDecorators: { type: [{
|
|
495
|
+
type: Input
|
|
496
|
+
}], i18n: [{
|
|
473
497
|
type: Input
|
|
474
498
|
}], redirectUri: [{
|
|
475
499
|
type: Input
|
|
500
|
+
}], responseType: [{
|
|
501
|
+
type: Input
|
|
476
502
|
}], useLogoutUrl: [{
|
|
477
503
|
type: Input
|
|
478
504
|
}], state: [{
|
|
@@ -484,8 +510,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImpor
|
|
|
484
510
|
}], loginTemplate: [{
|
|
485
511
|
type: ContentChild,
|
|
486
512
|
args: ['login', { static: false }]
|
|
487
|
-
}], type: [{
|
|
488
|
-
type: Input
|
|
489
513
|
}], keyboardEvent: [{
|
|
490
514
|
type: HostListener,
|
|
491
515
|
args: ['window:keydown.escape']
|
|
@@ -538,6 +562,14 @@ const StorageService = {
|
|
|
538
562
|
},
|
|
539
563
|
deps: [PLATFORM_ID]
|
|
540
564
|
};
|
|
565
|
+
const OAuthHttpClient = {
|
|
566
|
+
provide: OAUTH_HTTP_CLIENT,
|
|
567
|
+
useFactory(httpBackend) {
|
|
568
|
+
// avoid http interceptors
|
|
569
|
+
return new HttpClient(httpBackend);
|
|
570
|
+
},
|
|
571
|
+
deps: [HttpBackend]
|
|
572
|
+
};
|
|
541
573
|
const OAuthInterceptorService = {
|
|
542
574
|
provide: HTTP_INTERCEPTORS,
|
|
543
575
|
useClass: OAuthInterceptor,
|
|
@@ -557,6 +589,7 @@ class OAuthModule {
|
|
|
557
589
|
providers: [
|
|
558
590
|
LocationService,
|
|
559
591
|
StorageService,
|
|
592
|
+
OAuthHttpClient,
|
|
560
593
|
provideOAuthConfigFactory((storage) => (Object.assign(Object.assign({}, defaultConfig(storage)), config)), [STORAGE]),
|
|
561
594
|
TokenService,
|
|
562
595
|
OAuthInterceptorService,
|
|
@@ -565,16 +598,16 @@ class OAuthModule {
|
|
|
565
598
|
};
|
|
566
599
|
}
|
|
567
600
|
}
|
|
568
|
-
OAuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.
|
|
569
|
-
OAuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.
|
|
601
|
+
OAuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: OAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
602
|
+
OAuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.3", ngImport: i0, type: OAuthModule, declarations: [OAuthLoginComponent], imports: [CommonModule,
|
|
570
603
|
FormsModule,
|
|
571
604
|
HttpClientModule,
|
|
572
605
|
RouterModule], exports: [OAuthLoginComponent] });
|
|
573
|
-
OAuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.
|
|
606
|
+
OAuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: OAuthModule, imports: [CommonModule,
|
|
574
607
|
FormsModule,
|
|
575
608
|
HttpClientModule,
|
|
576
609
|
RouterModule] });
|
|
577
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.
|
|
610
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: OAuthModule, decorators: [{
|
|
578
611
|
type: NgModule,
|
|
579
612
|
args: [{
|
|
580
613
|
imports: [
|
|
@@ -596,5 +629,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImpor
|
|
|
596
629
|
* Generated bundle index. Do not edit.
|
|
597
630
|
*/
|
|
598
631
|
|
|
599
|
-
export { HEADER_APPLICATION, LOCATION, OAUTH_CONFIG, OAUTH_TOKEN, OAuthConfig, OAuthInterceptor, OAuthLoginComponent, OAuthModule, OAuthService, OAuthStatus, OAuthType, SERVER_HOST, SERVER_PATH, STORAGE, provideOAuthConfig, provideOAuthConfigFactory };
|
|
632
|
+
export { HEADER_APPLICATION, LOCATION, OAUTH_CONFIG, OAUTH_HTTP_CLIENT, OAUTH_TOKEN, OAuthConfig, OAuthInterceptor, OAuthLoginComponent, OAuthModule, OAuthService, OAuthStatus, OAuthType, SERVER_HOST, SERVER_PATH, STORAGE, provideOAuthConfig, provideOAuthConfigFactory };
|
|
600
633
|
//# sourceMappingURL=ngx-oauth.mjs.map
|