ngx-oauth 4.2.0 → 4.2.3
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/{lib/components → components}/login/oauth-login.component.d.ts +0 -0
- package/esm2020/{lib/components → components}/login/oauth-login.component.mjs +1 -1
- package/esm2020/index.mjs +7 -6
- package/esm2020/models/index.mjs +47 -0
- package/esm2020/oauth.module.mjs +120 -0
- package/esm2020/services/oauth.interceptor.mjs +53 -0
- package/esm2020/services/oauth.service.mjs +300 -0
- package/esm2020/services/token.service.mjs +83 -0
- package/fesm2015/ngx-oauth.mjs +34 -24
- package/fesm2015/ngx-oauth.mjs.map +1 -1
- package/fesm2020/ngx-oauth.mjs +35 -25
- package/fesm2020/ngx-oauth.mjs.map +1 -1
- package/index.d.ts +6 -5
- package/{lib/models → models}/index.d.ts +1 -0
- package/{lib/oauth.module.d.ts → oauth.module.d.ts} +0 -0
- package/package.json +1 -1
- package/{lib/services → services}/oauth.interceptor.d.ts +3 -3
- package/{lib/services → services}/oauth.service.d.ts +6 -3
- package/{lib/services → services}/token.service.d.ts +3 -3
- package/esm2020/lib/models/index.mjs +0 -47
- package/esm2020/lib/oauth.module.mjs +0 -120
- package/esm2020/lib/services/oauth.interceptor.mjs +0 -53
- package/esm2020/lib/services/oauth.service.mjs +0 -290
- package/esm2020/lib/services/token.service.mjs +0 -83
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-oauth.mjs","sources":["../../../projects/ngx-oauth/src/lib/models/index.ts","../../../projects/ngx-oauth/src/lib/services/token.service.ts","../../../projects/ngx-oauth/src/lib/services/oauth.service.ts","../../../projects/ngx-oauth/src/lib/services/oauth.interceptor.ts","../../../projects/ngx-oauth/src/lib/components/login/oauth-login.component.ts","../../../projects/ngx-oauth/src/lib/components/login/oauth-login.component.html","../../../projects/ngx-oauth/src/lib/oauth.module.ts","../../../projects/ngx-oauth/src/index.ts","../../../projects/ngx-oauth/src/ngx-oauth.ts"],"sourcesContent":["import {FactoryProvider, inject, Injectable, InjectionToken, ValueProvider} from '@angular/core';\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\n\nexport const SERVER_HOST = new InjectionToken<string>('SERVER_HOST');\nexport const SERVER_PATH = new InjectionToken<string>('SERVER_PATH');\nexport const LOCATION = new InjectionToken<Location>('Location');\nexport const STORAGE = new InjectionToken<Storage>('Storage');\nexport const OAUTH_CONFIG = new InjectionToken<OAuthConfig[]>('OAuthConfig');\nexport const OAUTH_TOKEN = new InjectionToken<OAuthToken>('OAuthToken');\nexport const HEADER_APPLICATION = new HttpHeaders({'Content-Type': 'application/x-www-form-urlencoded'});\nexport const OAUTH_HTTP_CLIENT = new InjectionToken<HttpClient>('OAuthHttpClient');\n\n@Injectable({\n providedIn: 'root',\n useFactory: () => inject(OAUTH_CONFIG).reduce((p, c) => ({...p, ...c}), {})\n})\nexport abstract class OAuthConfig {\n config?: OAuthTypeConfig;\n storageKey?: string;\n storage?: Storage;\n ignorePaths?: RegExp[];\n}\n\nexport const provideOAuthConfig = (config: OAuthConfig = {}): ValueProvider => ({\n provide: OAUTH_CONFIG,\n useValue: config,\n multi: true\n});\n\nexport const provideOAuthConfigFactory = (factory: Function, deps?: any[]): FactoryProvider => ({\n provide: OAUTH_CONFIG,\n useFactory: factory,\n deps: deps,\n multi: true\n});\n\nexport enum OAuthType {\n RESOURCE = 'password',\n AUTHORIZATION_CODE = 'code',\n IMPLICIT = 'token',\n CLIENT_CREDENTIAL = 'client_credentials'\n}\n\nexport interface ClientCredentialConfig {\n tokenPath: string;\n revokePath?: string;\n clientId: string;\n clientSecret?: string;\n scope?: string;\n}\n\n// tslint:disable-next-line:no-empty-interface\nexport interface ResourceConfig extends ClientCredentialConfig {\n}\n\nexport interface ImplicitConfig {\n authorizePath: string;\n revokePath?: string;\n clientId: string;\n scope?: string;\n logoutPath?: string;\n logoutRedirectUri?: string;\n}\n\nexport interface AuthorizationCodeConfig extends ResourceConfig {\n authorizePath: string;\n}\n\nexport interface AuthorizationCodePKCEConfig extends AuthorizationCodeConfig {\n pkce: boolean;\n}\n\nexport interface OpenIdConfig {\n issuerPath: string;\n clientId: string;\n clientSecret?: string;\n scope?: string;\n}\n\nexport interface ResourceParameters {\n username: string;\n password: string;\n}\n\nexport interface AuthorizationParameters {\n redirectUri: string;\n responseType: OAuthType.IMPLICIT | OAuthType.AUTHORIZATION_CODE | string;\n state?: string;\n}\n\nexport type OAuthParameters = ResourceParameters | AuthorizationParameters;\nexport type OAuthTypeConfig = OpenIdConfig\n | AuthorizationCodePKCEConfig\n | AuthorizationCodeConfig\n | ImplicitConfig\n | ResourceConfig\n | ClientCredentialConfig;\n\nexport interface OAuthToken {\n id_token?: string;\n access_token?: string;\n refresh_token?: string;\n token_type?: string;\n state?: string;\n error?: string;\n error_description?: string;\n expires_in?: number | string;\n refresh_expires_in?: number | string;\n scope?: string;\n codeVerifier?: string;\n nonce?: string;\n type?: OAuthType;\n expires?: number;\n}\n\nexport enum OAuthStatus {\n NOT_AUTHORIZED = 'NOT_AUTHORIZED',\n AUTHORIZED = 'AUTHORIZED',\n DENIED = 'DENIED'\n}\n\nexport interface OpenIdConfiguration {\n issuer?: string;\n authorization_endpoint?: string;\n introspection_endpoint?: string;\n token_endpoint?: string;\n userinfo_endpoint?: string;\n end_session_endpoint?: string;\n revocation_endpoint?: string;\n scopes_supported?: string[];\n code_challenge_methods_supported?: string[];\n}\n\nexport interface UserInfo {\n email?: string;\n email_verified?: boolean;\n family_name?: string;\n given_name?: string;\n name?: string;\n preferred_username?: string;\n sub?: string;\n address?: object;\n picture?: string;\n locale?: string;\n}\n\nexport interface IntrospectInfo extends UserInfo {\n active: boolean;\n scope: string;\n client_id?: string;\n username: string;\n exp: number;\n}\n","import {Inject, Injectable, NgZone} from '@angular/core';\nimport {BehaviorSubject, distinctUntilChanged, Observable, of, switchMap} from 'rxjs';\nimport {HEADER_APPLICATION, OAUTH_HTTP_CLIENT, OAuthConfig, OAuthToken} from '../models';\nimport {catchError, map, shareReplay} from 'rxjs/operators';\nimport {HttpClient, HttpParams} from '@angular/common/http';\n\nconst isExpiredToken = (token?: OAuthToken) => token && token.expires && Date.now() > token.expires || false;\n\n@Injectable()\nexport class TokenService {\n\n #token$ = new BehaviorSubject<OAuthToken>(this.saved);\n token$ = this.#token$.pipe(\n distinctUntilChanged((p, c) => JSON.stringify(p || null) === JSON.stringify(c || null)),\n switchMap(token => !isExpiredToken(token) && of(token) || this.refreshToken(token)),\n shareReplay(1)\n );\n type$ = this.token$.pipe(\n map(token => token?.type),\n shareReplay(1)\n );\n accessToken$ = this.token$.pipe(\n map(token => token?.access_token),\n shareReplay(1),\n );\n\n constructor(protected authConfig: OAuthConfig,\n @Inject(OAUTH_HTTP_CLIENT) protected http: HttpClient,\n protected zone: NgZone) {\n }\n\n get token() {\n return this.#token$.value;\n }\n\n set token(token) {\n const expiresIn = Number(token.expires_in) || 0;\n const result = {\n ...token,\n ...expiresIn && {expires: Date.now() + expiresIn * 1000} || {}\n };\n this.saved = result;\n this.#token$.next(result);\n }\n\n get saved() {\n const {storageKey, storage} = this.authConfig;\n return storageKey && storage && storage[storageKey] && JSON.parse(storage[storageKey]) || {};\n }\n\n set saved(token: OAuthToken) {\n const {storageKey, storage} = this.authConfig;\n if (storage && storageKey) {\n if (token) {\n storage[storageKey] = JSON.stringify(token);\n } else {\n delete storage[storageKey];\n }\n }\n }\n\n protected refreshToken(token?: OAuthToken): Observable<OAuthToken> {\n const {tokenPath, clientId, clientSecret, scope} = this.authConfig.config as any;\n const {refresh_token} = token || {};\n return tokenPath && refresh_token && this.http.post<OAuthToken>(tokenPath, new HttpParams({\n fromObject: {\n client_id: clientId,\n ...clientSecret && {client_secret: clientSecret} || {},\n grant_type: 'refresh_token',\n refresh_token,\n ...scope && {scope} || {},\n }\n }), {\n headers: HEADER_APPLICATION\n }).pipe(\n catchError(() => {\n this.token = {};\n return of(this.token);\n }),\n map(token => {\n this.token = {\n ...this.token,\n ...token\n };\n return this.token;\n })\n ) || of(token);\n }\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {HttpClient, HttpParams} from '@angular/common/http';\nimport {catchError, concatMap, delay, filter, map, shareReplay, switchMap, tap} from 'rxjs/operators';\nimport {firstValueFrom, from, noop, of, ReplaySubject, throwError} from 'rxjs';\nimport {\n AuthorizationCodeConfig,\n AuthorizationParameters,\n HEADER_APPLICATION,\n LOCATION,\n OAuthConfig,\n OAuthParameters,\n OAuthStatus,\n OAuthToken,\n OAuthType,\n OAuthTypeConfig,\n OpenIdConfig,\n OpenIdConfiguration,\n ResourceParameters,\n UserInfo\n} from '../models';\nimport {Location as Location2} from '@angular/common';\nimport {TokenService} from './token.service';\n\nconst arrToString = (buf: Uint8Array) => buf.reduce((s, b) => s + String.fromCharCode(b), '');\n\nconst base64url = (str: string) => btoa(str)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '');\n\nconst randomString = (length: number = 48) => {\n const buff = arrToString(crypto.getRandomValues(new Uint8Array(length * 2)));\n return base64url(buff).substring(0, length);\n};\n\nconst pkce = async (value: string) => {\n const buff = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(value));\n return base64url(arrToString(new Uint8Array(buff)));\n};\n\nconst parseOauthUri = (hash: string) => {\n const regex = /([^&=]+)=([^&]*)/g;\n const params: Record<string, string> = {};\n let m;\n // tslint:disable-next-line:no-conditional-assignment\n while ((m = regex.exec(hash)) !== null) {\n params[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);\n }\n return Object.keys(params).length && params || {};\n};\n\nconst jwt = (token: string) => JSON.parse(atob(token.split('.')[1]));\n\n@Injectable()\nexport class OAuthService {\n\n state$ = new ReplaySubject<string>(1);\n config$ = of(this.config).pipe(\n filter(Boolean),\n filter(config => !!config?.clientId),\n map(config => config as OpenIdConfig),\n switchMap(config => !config.issuerPath && of(config) || this.http.get<OpenIdConfiguration>(`${config.issuerPath}/.well-known/openid-configuration`).pipe(\n tap(v => this.config = {\n ...v.authorization_endpoint && {authorizePath: v.authorization_endpoint} || {},\n ...v.token_endpoint && {tokenPath: v.token_endpoint} || {},\n ...v.revocation_endpoint && {revokePath: v.revocation_endpoint} || {},\n ...v.code_challenge_methods_supported && {pkce: v.code_challenge_methods_supported.indexOf('S256') > -1} || {},\n ...v.userinfo_endpoint && {userPath: v.userinfo_endpoint} || {},\n ...v.introspection_endpoint && {introspectionPath: v.introspection_endpoint} || {},\n ...v.end_session_endpoint && {logoutPath: v.end_session_endpoint} || {},\n ...{scope: config.scope || 'openid'}\n } as any),\n map(() => this.config)\n )),\n shareReplay(1)\n );\n token$ = this.config$.pipe(\n tap(config => {\n const {hash, search, origin, pathname} = this.location;\n const isImplicitRedirect = hash && /(access_token=)|(error=)/.test(hash);\n const isAuthCodeRedirect = search && /(code=)|(error=)/.test(search) || hash && /(code=)|(error=)/.test(hash);\n if (isImplicitRedirect) {\n const parameters = parseOauthUri(hash.substring(1));\n this.token = {\n ...parameters,\n type: OAuthType.IMPLICIT,\n };\n this.checkResponse(this.token, parameters);\n } else if (isAuthCodeRedirect) {\n const parameters = parseOauthUri(search && search.substring(1) || hash && hash.substring(1));\n if (!this.checkResponse(this.token, parameters)) {\n this.token = parameters;\n } else {\n const newParametersString = this.getCleanedUnSearchParameters();\n const {clientId, clientSecret, tokenPath, scope} = config as AuthorizationCodeConfig;\n const {codeVerifier} = this.token || {}; //should be set by authorizationUrl construction\n this.http.post(tokenPath, new HttpParams({\n fromObject: {\n code: parameters?.['code'],\n client_id: clientId,\n ...clientSecret && {client_secret: clientSecret} || {},\n redirect_uri: `${origin}${pathname}`,\n grant_type: 'authorization_code',\n ...scope && {scope} || {},\n ...codeVerifier && {code_verifier: codeVerifier} || {}\n }\n }), {headers: HEADER_APPLICATION}).pipe(\n ).subscribe(token => {\n this.token = {\n ...token,\n type: OAuthType.AUTHORIZATION_CODE\n };\n this.locationService.replaceState(`${pathname}${newParametersString}`);\n });\n }\n }\n }),\n switchMap(() => this.tokenService.token$),\n shareReplay(1)\n );\n status$ = this.token$.pipe(\n map(token => token.access_token && OAuthStatus.AUTHORIZED || token.error && OAuthStatus.DENIED || OAuthStatus.NOT_AUTHORIZED),\n shareReplay(1)\n );\n userInfo$ = this.status$.pipe(\n filter(s => s === OAuthStatus.AUTHORIZED),\n map(() => {\n const {config} = this.authConfig as any;\n return config.userPath;\n }),\n filter(Boolean),\n switchMap(path => this.http.get<UserInfo>(path)),\n shareReplay(1)\n );\n type$ = this.tokenService.type$;\n ignorePaths = this.authConfig.ignorePaths || [];\n\n get token() {\n return this.tokenService.token;\n }\n\n set token(token) {\n this.tokenService.token = token;\n }\n\n get config() {\n return this.authConfig.config;\n }\n\n set config(config: OAuthTypeConfig | undefined) {\n if (config) {\n this.authConfig.config = {\n ...this.authConfig.config,\n ...config\n };\n }\n }\n\n constructor(protected authConfig: OAuthConfig,\n protected tokenService: TokenService,\n protected http: HttpClient,\n @Inject(LOCATION) protected location: Location,\n protected locationService: Location2) {\n }\n\n async login(parameters?: OAuthParameters) {\n if (!!parameters && (parameters as ResourceParameters).password) {\n await this.resourceLogin(parameters as ResourceParameters);\n } else if (!!parameters && (parameters as AuthorizationParameters).redirectUri && (parameters as AuthorizationParameters).responseType\n ) {\n await this.toAuthorizationUrl(parameters as AuthorizationParameters);\n } else {\n await this.clientCredentialLogin();\n }\n }\n\n logout(useLogoutUrl?: boolean) {\n this.revoke();\n this.token = {};\n const {logoutPath, logoutRedirectUri} = this.authConfig.config as any;\n if (useLogoutUrl && logoutPath) {\n const {origin, pathname} = this.location;\n const currentPath = `${origin}${pathname}`;\n this.location.replace(`${logoutPath}?post_logout_redirect_uri=${logoutRedirectUri || currentPath}`);\n }\n }\n\n protected revoke() {\n const {revokePath, clientId, clientSecret} = this.authConfig.config as any;\n if (revokePath) {\n const {access_token, refresh_token} = this.token || {};\n const toRevoke = [];\n if (access_token) {\n toRevoke.push({\n ...clientId && {client_id: clientId} || {},\n ...clientSecret && {client_secret: clientSecret} || {},\n token: access_token,\n token_type_hint: 'access_token'\n });\n }\n if (refresh_token) {\n toRevoke.push({\n ...clientId && {client_id: clientId} || {},\n ...clientSecret && {client_secret: clientSecret} || {},\n token: refresh_token,\n token_type_hint: 'refresh_token'\n });\n }\n from(toRevoke).pipe(\n concatMap(o => of(o).pipe(delay(300))), // space request to avoid cancellation\n switchMap(o => this.http.post(revokePath, new HttpParams({fromObject: o}))),\n ).subscribe(noop);\n }\n }\n\n protected clientCredentialLogin() {\n const {clientId, clientSecret, tokenPath, scope} = this.authConfig.config as any;\n return firstValueFrom(this.http.post(tokenPath, new HttpParams({\n fromObject: {\n client_id: clientId,\n client_secret: clientSecret,\n grant_type: OAuthType.CLIENT_CREDENTIAL,\n ...scope ? {scope} : {},\n }\n }), {headers: HEADER_APPLICATION}).pipe(\n catchError((err) => {\n this.token = err;\n return throwError(() => err);\n }),\n tap(params => {\n this.token = {\n ...params,\n type: OAuthType.CLIENT_CREDENTIAL,\n };\n }),\n ));\n }\n\n protected resourceLogin(parameters: ResourceParameters) {\n const {clientId, clientSecret, tokenPath, scope} = this.authConfig.config as any;\n const {username, password} = parameters;\n return firstValueFrom(this.http.post(tokenPath, new HttpParams({\n fromObject: {\n client_id: clientId,\n ...clientSecret && {client_secret: clientSecret} || {},\n grant_type: OAuthType.RESOURCE,\n ...scope && {scope} || {},\n username,\n password\n }\n }), {headers: HEADER_APPLICATION}).pipe(\n catchError(err => {\n this.token = err;\n return throwError(() => err);\n }),\n tap(params => {\n this.token = {\n ...params,\n type: OAuthType.RESOURCE,\n };\n })\n ));\n }\n\n protected async toAuthorizationUrl(parameters: AuthorizationParameters) {\n const {config} = this.authConfig as any;\n let authorizationUrl = `${config.authorizePath}`;\n authorizationUrl += config.authorizePath.includes('?') && '&' || '?';\n authorizationUrl += `client_id=${config.clientId}`;\n authorizationUrl += `&redirect_uri=${encodeURIComponent(parameters.redirectUri)}`;\n authorizationUrl += `&response_type=${parameters.responseType}`;\n authorizationUrl += `&scope=${encodeURIComponent(config.scope || '')}`;\n authorizationUrl += `&state=${encodeURIComponent(parameters.state || '')}`;\n return this.location.replace(`${authorizationUrl}${this.generateNonce(config)}${await this.generateCodeChallenge(config)}`);\n }\n\n protected async generateCodeChallenge(config: any) {\n if (config.pkce) {\n const codeVerifier = randomString();\n this.token = {...this.token, codeVerifier};\n return `&code_challenge=${await pkce(codeVerifier)}&code_challenge_method=S256`;\n }\n return '';\n }\n\n protected generateNonce(config: any) {\n if (config && config.scope && config.scope.indexOf('openid') > -1) {\n const nonce = randomString(10);\n this.token = {...this.token, nonce};\n return `&nonce=${nonce}`;\n }\n return '';\n }\n\n private checkResponse(token?: OAuthToken,\n parameters?: Record<string, string>) {\n this.emitState(parameters);\n this.cleanLocationHash();\n if (!parameters || parameters['error']) {\n return false;\n }\n if (token && token.nonce && parameters['access_token']) {\n const jwtToken = jwt(parameters['access_token']);\n return token.nonce === jwtToken.nonce;\n }\n return parameters['access_token'] || parameters['code'];\n }\n\n private getCleanedUnSearchParameters() {\n const {search} = this.location;\n let searchString = search && search.substring(1) || '';\n const hashKeys = ['code', 'state', 'error', 'error_description', 'session_state', 'scope', 'authuser', 'prompt'];\n hashKeys.forEach(hashKey => {\n const re = new RegExp('&' + hashKey + '(=[^&]*)?|^' + hashKey + '(=[^&]*)?&?');\n searchString = searchString.replace(re, '');\n });\n return searchString.length && `?${searchString}` || '';\n }\n\n private cleanLocationHash() {\n const {hash} = this.location;\n let curHash = hash && hash.substring(1) || '';\n const hashKeys = [\n 'access_token',\n 'token_type',\n 'expires_in',\n 'scope',\n 'state',\n 'error',\n 'error_description',\n 'session_state',\n 'nonce',\n 'id_token',\n 'code'\n ];\n hashKeys.forEach(hashKey => {\n const re = new RegExp('&' + hashKey + '(=[^&]*)?|^' + hashKey + '(=[^&]*)?&?');\n curHash = curHash.replace(re, '');\n });\n this.location.hash = curHash;\n }\n\n private emitState(parameters?: Record<string, string>) {\n const {state} = parameters || {};\n state && this.state$.next(state);\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpErrorResponse, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\nimport {switchMap, take, throwError} from 'rxjs';\nimport {catchError, map} from 'rxjs/operators';\nimport {OAuthConfig} from '../models';\nimport {TokenService} from './token.service';\n\n@Injectable()\nexport class OAuthInterceptor implements HttpInterceptor {\n\n constructor(protected tokenService: TokenService,\n protected authConfig: OAuthConfig) {\n }\n\n intercept(req: HttpRequest<any>, next: HttpHandler) {\n return this.tokenService.token$.pipe(\n take(1),\n map(token => {\n if (token?.access_token && !this.isPathExcepted(req)) {\n req = req.clone({\n setHeaders: {\n Authorization: `${token.token_type} ${token.access_token}`\n }\n });\n }\n return req;\n }),\n switchMap(req => next.handle(req)),\n catchError((err: HttpErrorResponse) => {\n if (err.status === 401 && !this.isPathExcepted(req)) {\n this.tokenService.token = {\n error: `${err.status}`,\n error_description: err.message\n };\n }\n return throwError(() => err);\n })\n );\n }\n\n private isPathExcepted(req: HttpRequest<any>) {\n const {ignorePaths} = this.authConfig || {};\n if (ignorePaths) {\n for (const ignorePath of ignorePaths) {\n try {\n if (req.url.match(ignorePath)) {\n return true;\n }\n } catch (err) {\n }\n }\n }\n return false;\n }\n}\n","import {Component, ContentChild, HostListener, Inject, Input, OnDestroy, Output, TemplateRef, ViewEncapsulation} from '@angular/core';\r\nimport {Observable, Subscription, take} from 'rxjs';\r\nimport {LOCATION, OAuthParameters, OAuthStatus, OAuthType} from '../../models';\r\nimport {tap} from 'rxjs/operators';\r\nimport {OAuthService} from '../../services/oauth.service';\r\nimport {Location as Location2} from '@angular/common';\r\n\r\nexport interface OAuthLoginI18n {\r\n username?: string;\r\n password?: string;\r\n submit?: string;\r\n notAuthorized?: string;\r\n authorized?: string;\r\n denied?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'oauth-login',\r\n templateUrl: 'oauth-login.component.html',\r\n styleUrls: ['oauth-login.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class OAuthLoginComponent implements OnDestroy {\r\n\r\n #subscription = new Subscription();\r\n #redirectUri?: string;\r\n #responseType?: string;\r\n #i18n: OAuthLoginI18n = {\r\n username: 'Username',\r\n password: 'Password',\r\n submit: 'Sign in',\r\n notAuthorized: 'Sign in',\r\n authorized: 'Welcome',\r\n denied: 'Access Denied. Try again!'\r\n };\r\n\r\n get i18n() {\r\n return this.#i18n;\r\n }\r\n\r\n @Input()\r\n type: OAuthType = OAuthType.RESOURCE;\r\n\r\n @Input()\r\n set i18n(i18n) {\r\n this.#i18n = {\r\n ...this.#i18n,\r\n ...i18n\r\n };\r\n }\r\n\r\n get redirectUri() {\r\n return this.#redirectUri || `${this.location.origin}${this.locationService.path(true) || '/'}`;\r\n }\r\n\r\n @Input()\r\n set redirectUri(redirectUri: string) {\r\n if (redirectUri) {\r\n this.#redirectUri = redirectUri;\r\n }\r\n }\r\n\r\n @Input()\r\n set responseType(responseType: string) {\r\n if (this.responseType) {\r\n this.#responseType = responseType;\r\n }\r\n }\r\n\r\n get responseType() {\r\n return this.#responseType || this.type;\r\n }\r\n\r\n @Input()\r\n useLogoutUrl = false;\r\n @Input()\r\n state = '';\r\n @Output()\r\n stateChange = this.oauthService.state$.asObservable();\r\n @Input()\r\n profileName$: Observable<string | undefined> | undefined;\r\n @ContentChild('login', {static: false})\r\n loginTemplate: TemplateRef<any> | undefined;\r\n username = '';\r\n password = '';\r\n profileName?: string;\r\n OAuthStatus = OAuthStatus;\r\n OAuthType = OAuthType;\r\n collapse = false;\r\n status$ = this.oauthService.status$.pipe(\r\n tap(s => {\r\n if (s === OAuthStatus.AUTHORIZED && this.profileName$) {\r\n this.#subscription.add(this.profileName$.pipe(\r\n take(1)\r\n ).subscribe(n => this.profileName = n));\r\n } else {\r\n const {token} = this.oauthService;\r\n const userInfo = token && token.id_token && JSON.parse(atob(token.id_token.split('.')[1])) || {};\r\n this.profileName = userInfo.name || userInfo.username || userInfo.email || userInfo.sub || '';\r\n }\r\n })\r\n );\r\n loginFunction = (p: OAuthParameters) => this.login(p);\r\n logoutFunction = () => this.logout();\r\n\r\n constructor(private oauthService: OAuthService,\r\n private locationService: Location2,\r\n @Inject(LOCATION) private location: Location) {\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n logout() {\r\n this.oauthService.logout(this.useLogoutUrl);\r\n }\r\n\r\n login(parameters: OAuthParameters) {\r\n this.collapse = false;\r\n return this.oauthService.login(parameters);\r\n }\r\n\r\n toggleCollapse() {\r\n this.collapse = !this.collapse;\r\n }\r\n\r\n @HostListener('window:keydown.escape')\r\n keyboardEvent() {\r\n this.collapse = false;\r\n }\r\n}\r\n","<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","import {ModuleWithProviders, NgModule, Optional, PLATFORM_ID} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {HTTP_INTERCEPTORS, HttpBackend, HttpClient, HttpClientModule} from '@angular/common/http';\nimport {RouterModule} from '@angular/router';\nimport {LOCATION, OAUTH_HTTP_CLIENT, OAuthConfig, provideOAuthConfigFactory, SERVER_HOST, SERVER_PATH, STORAGE} from './models';\nimport {OAuthService} from './services/oauth.service';\nimport {OAuthLoginComponent} from './components/login/oauth-login.component';\nimport {CommonModule, isPlatformBrowser} from '@angular/common';\nimport {OAuthInterceptor} from './services/oauth.interceptor';\nimport {TokenService} from './services/token.service';\n\nconst mockLocation = (serverHost: string, serverPath: string): Location => {\n const url = new URL(serverHost && serverPath ? `${serverHost}${serverPath}` : 'http://localhost');\n const {href, origin, protocol, host, hostname, port, pathname, search, hash} = url;\n return {\n href, origin, protocol, host, hostname, port, pathname, search, hash,\n reload() {\n },\n assign(_: string) {\n },\n ancestorOrigins: {} as any,\n replace(_: string) {\n }\n };\n};\n\nconst LocationService = {\n provide: LOCATION,\n useFactory(platformId: Object, serverHost: string, serverPath: string) {\n return isPlatformBrowser(platformId) ? location : mockLocation(serverHost, serverPath);\n },\n deps: [\n PLATFORM_ID,\n [new Optional(), SERVER_HOST],\n [new Optional(), SERVER_PATH]\n ]\n};\n\nconst mockStorage: Storage = {\n clear() {\n },\n getItem(key: string) {\n return null;\n },\n key(index: number) {\n return null;\n },\n removeItem(key: string) {\n },\n setItem(key: string, value: string) {\n },\n length: 0\n};\n\nconst StorageService = {\n provide: STORAGE,\n useFactory(platformId: Object) {\n return isPlatformBrowser(platformId) ? localStorage : mockStorage;\n },\n deps: [PLATFORM_ID]\n};\n\nconst OAuthHttpClient = {\n provide: OAUTH_HTTP_CLIENT,\n useFactory(httpBackend: HttpBackend) {\n // avoid http interceptors\n return new HttpClient(httpBackend);\n },\n deps: [HttpBackend]\n};\n\nconst OAuthInterceptorService = {\n provide: HTTP_INTERCEPTORS,\n useClass: OAuthInterceptor,\n multi: true,\n};\n\nconst defaultConfig = (storage: Storage) => {\n return {\n storage,\n storageKey: 'token',\n ignorePaths: []\n };\n};\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n HttpClientModule,\n RouterModule,\n ],\n declarations: [OAuthLoginComponent],\n exports: [OAuthLoginComponent]\n})\nexport class OAuthModule {\n\n static forRoot(config: OAuthConfig = {}): ModuleWithProviders<OAuthModule> {\n return {\n ngModule: OAuthModule,\n providers: [\n LocationService,\n StorageService,\n OAuthHttpClient,\n provideOAuthConfigFactory((storage: Storage) => ({\n ...defaultConfig(storage),\n ...config\n }), [STORAGE]),\n TokenService,\n OAuthInterceptorService,\n OAuthService,\n ]\n };\n }\n}\n","/*\n * Public API Surface of ngx-oauth\n */\nexport * from './lib/models';\nexport * from './lib/services/oauth.service';\nexport * from './lib/services/oauth.interceptor';\nexport * from './lib/components/login/oauth-login.component';\nexport * from './lib/oauth.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["switchMap","i4","i1.TokenService","i2.OAuthConfig","i3"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-oauth.mjs","sources":["../../../projects/ngx-oauth/src/models/index.ts","../../../projects/ngx-oauth/src/services/token.service.ts","../../../projects/ngx-oauth/src/services/oauth.service.ts","../../../projects/ngx-oauth/src/services/oauth.interceptor.ts","../../../projects/ngx-oauth/src/components/login/oauth-login.component.ts","../../../projects/ngx-oauth/src/components/login/oauth-login.component.html","../../../projects/ngx-oauth/src/oauth.module.ts","../../../projects/ngx-oauth/src/index.ts","../../../projects/ngx-oauth/src/ngx-oauth.ts"],"sourcesContent":["import {FactoryProvider, inject, Injectable, InjectionToken, ValueProvider} from '@angular/core';\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\n\nexport const SERVER_HOST = new InjectionToken<string>('SERVER_HOST');\nexport const SERVER_PATH = new InjectionToken<string>('SERVER_PATH');\nexport const LOCATION = new InjectionToken<Location>('Location');\nexport const STORAGE = new InjectionToken<Storage>('Storage');\nexport const OAUTH_CONFIG = new InjectionToken<OAuthConfig[]>('OAuthConfig');\nexport const OAUTH_TOKEN = new InjectionToken<OAuthToken>('OAuthToken');\nexport const HEADER_APPLICATION = new HttpHeaders({'Content-Type': 'application/x-www-form-urlencoded'});\nexport const OAUTH_HTTP_CLIENT = new InjectionToken<HttpClient>('OAuthHttpClient');\n\n@Injectable({\n providedIn: 'root',\n useFactory: () => inject(OAUTH_CONFIG).reduce((p, c) => ({...p, ...c}), {})\n})\nexport abstract class OAuthConfig {\n config?: OAuthTypeConfig;\n storageKey?: string;\n storage?: Storage;\n ignorePaths?: RegExp[];\n}\n\nexport const provideOAuthConfig = (config: OAuthConfig = {}): ValueProvider => ({\n provide: OAUTH_CONFIG,\n useValue: config,\n multi: true\n});\n\nexport const provideOAuthConfigFactory = (factory: Function, deps?: any[]): FactoryProvider => ({\n provide: OAUTH_CONFIG,\n useFactory: factory,\n deps: deps,\n multi: true\n});\n\nexport enum OAuthType {\n RESOURCE = 'password',\n AUTHORIZATION_CODE = 'code',\n IMPLICIT = 'token',\n CLIENT_CREDENTIAL = 'client_credentials'\n}\n\nexport interface ClientCredentialConfig {\n tokenPath: string;\n revokePath?: string;\n clientId: string;\n clientSecret?: string;\n scope?: string;\n}\n\n// tslint:disable-next-line:no-empty-interface\nexport interface ResourceConfig extends ClientCredentialConfig {\n}\n\nexport interface ImplicitConfig {\n authorizePath: string;\n revokePath?: string;\n clientId: string;\n scope?: string;\n logoutPath?: string;\n logoutRedirectUri?: string;\n}\n\nexport interface AuthorizationCodeConfig extends ResourceConfig {\n authorizePath: string;\n}\n\nexport interface AuthorizationCodePKCEConfig extends AuthorizationCodeConfig {\n pkce: boolean;\n}\n\nexport interface OpenIdConfig {\n issuerPath: string;\n clientId: string;\n clientSecret?: string;\n scope?: string;\n}\n\nexport interface ResourceParameters {\n username: string;\n password: string;\n}\n\nexport interface AuthorizationParameters {\n redirectUri: string;\n responseType: OAuthType.IMPLICIT | OAuthType.AUTHORIZATION_CODE | string;\n state?: string;\n}\n\nexport type OAuthParameters = ResourceParameters | AuthorizationParameters;\nexport type OAuthTypeConfig = OpenIdConfig\n | AuthorizationCodePKCEConfig\n | AuthorizationCodeConfig\n | ImplicitConfig\n | ResourceConfig\n | ClientCredentialConfig;\n\nexport interface OAuthToken {\n id_token?: string;\n access_token?: string;\n refresh_token?: string;\n token_type?: string;\n state?: string;\n error?: string;\n error_description?: string;\n expires_in?: number | string;\n refresh_expires_in?: number | string;\n scope?: string;\n codeVerifier?: string;\n nonce?: string;\n type?: OAuthType;\n expires?: number;\n \n [x: string]: any;\n}\n\nexport enum OAuthStatus {\n NOT_AUTHORIZED = 'NOT_AUTHORIZED',\n AUTHORIZED = 'AUTHORIZED',\n DENIED = 'DENIED'\n}\n\nexport interface OpenIdConfiguration {\n issuer?: string;\n authorization_endpoint?: string;\n introspection_endpoint?: string;\n token_endpoint?: string;\n userinfo_endpoint?: string;\n end_session_endpoint?: string;\n revocation_endpoint?: string;\n scopes_supported?: string[];\n code_challenge_methods_supported?: string[];\n}\n\nexport interface UserInfo {\n email?: string;\n email_verified?: boolean;\n family_name?: string;\n given_name?: string;\n name?: string;\n preferred_username?: string;\n sub?: string;\n address?: object;\n picture?: string;\n locale?: string;\n}\n\nexport interface IntrospectInfo extends UserInfo {\n active: boolean;\n scope: string;\n client_id?: string;\n username: string;\n exp: number;\n}\n","import {Inject, Injectable, NgZone} from '@angular/core';\nimport {BehaviorSubject, distinctUntilChanged, Observable, of, switchMap} from 'rxjs';\nimport {HEADER_APPLICATION, OAUTH_HTTP_CLIENT, OAuthConfig, OAuthToken} from '../models';\nimport {catchError, map, shareReplay} from 'rxjs/operators';\nimport {HttpClient, HttpParams} from '@angular/common/http';\n\nconst isExpiredToken = (token?: OAuthToken) => token && token.expires && Date.now() > token.expires || false;\n\n@Injectable()\nexport class OAuthTokenService {\n\n #token$ = new BehaviorSubject<OAuthToken>(this.saved);\n token$ = this.#token$.pipe(\n distinctUntilChanged((p, c) => JSON.stringify(p || null) === JSON.stringify(c || null)),\n shareReplay(1),\n switchMap(token => !isExpiredToken(token) && of(token) || this.refreshToken(token)),\n );\n type$ = this.token$.pipe(\n map(token => token?.type),\n shareReplay(1)\n );\n accessToken$ = this.token$.pipe(\n map(token => token?.access_token),\n shareReplay(1),\n );\n\n constructor(protected authConfig: OAuthConfig,\n @Inject(OAUTH_HTTP_CLIENT) protected http: HttpClient,\n protected zone: NgZone) {\n }\n\n get token() {\n return this.#token$.value;\n }\n\n set token(token) {\n const expiresIn = Number(token.expires_in) || 0;\n const result = {\n ...token,\n ...expiresIn && {expires: Date.now() + expiresIn * 1000} || {}\n };\n this.saved = result;\n this.#token$.next(result);\n }\n\n get saved() {\n const {storageKey, storage} = this.authConfig;\n return storageKey && storage && storage[storageKey] && JSON.parse(storage[storageKey]) || {};\n }\n\n set saved(token: OAuthToken) {\n const {storageKey, storage} = this.authConfig;\n if (storage && storageKey) {\n if (token) {\n storage[storageKey] = JSON.stringify(token);\n } else {\n delete storage[storageKey];\n }\n }\n }\n\n protected refreshToken(token?: OAuthToken): Observable<OAuthToken> {\n const {tokenPath, clientId, clientSecret, scope} = this.authConfig.config as any;\n const {refresh_token} = token || {};\n return tokenPath && refresh_token && this.http.post<OAuthToken>(tokenPath, new HttpParams({\n fromObject: {\n client_id: clientId,\n ...clientSecret && {client_secret: clientSecret} || {},\n grant_type: 'refresh_token',\n refresh_token,\n ...scope && {scope} || {},\n }\n }), {\n headers: HEADER_APPLICATION\n }).pipe(\n catchError(() => {\n this.token = {};\n return of(this.token);\n }),\n map(token => {\n this.token = {\n ...this.token,\n ...token\n };\n return this.token;\n })\n ) || of(token);\n }\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {HttpClient, HttpParams} from '@angular/common/http';\nimport {catchError, concatMap, delay, filter, map, shareReplay, switchMap, tap} from 'rxjs/operators';\nimport {firstValueFrom, from, noop, of, ReplaySubject, throwError} from 'rxjs';\nimport {\n AuthorizationCodeConfig,\n AuthorizationParameters,\n HEADER_APPLICATION,\n LOCATION,\n OAuthConfig,\n OAuthParameters,\n OAuthStatus,\n OAuthToken,\n OAuthType,\n OAuthTypeConfig,\n OpenIdConfig,\n OpenIdConfiguration,\n ResourceParameters,\n UserInfo\n} from '../models';\nimport {Location as Location2} from '@angular/common';\nimport {OAuthTokenService} from './token.service';\n\nconst arrToString = (buf: Uint8Array) => buf.reduce((s, b) => s + String.fromCharCode(b), '');\n\nconst base64url = (str: string) => btoa(str)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '');\n\nconst randomString = (length: number = 48) => {\n const buff = arrToString(crypto.getRandomValues(new Uint8Array(length * 2)));\n return base64url(buff).substring(0, length);\n};\n\nconst pkce = async (value: string) => {\n const buff = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(value));\n return base64url(arrToString(new Uint8Array(buff)));\n};\n\nconst parseOauthUri = (hash: string) => {\n const regex = /([^&=]+)=([^&]*)/g;\n const params: Record<string, string> = {};\n let m;\n // tslint:disable-next-line:no-conditional-assignment\n while ((m = regex.exec(hash)) !== null) {\n params[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);\n }\n return Object.keys(params).length && params || {};\n};\n\nconst jwt = (token: string) => JSON.parse(atob(token.split('.')[1]));\n\n@Injectable()\nexport class OAuthService {\n\n state$ = new ReplaySubject<string>(1);\n config$ = of(this.config).pipe(\n filter(Boolean),\n filter(config => !!config?.clientId),\n map(config => config as OpenIdConfig),\n switchMap(config => !config.issuerPath && of(config) || this.http.get<OpenIdConfiguration>(`${config.issuerPath}/.well-known/openid-configuration`).pipe(\n tap(v => this.config = {\n ...v.authorization_endpoint && {authorizePath: v.authorization_endpoint} || {},\n ...v.token_endpoint && {tokenPath: v.token_endpoint} || {},\n ...v.revocation_endpoint && {revokePath: v.revocation_endpoint} || {},\n ...v.code_challenge_methods_supported && {pkce: v.code_challenge_methods_supported.indexOf('S256') > -1} || {},\n ...v.userinfo_endpoint && {userPath: v.userinfo_endpoint} || {},\n ...v.introspection_endpoint && {introspectionPath: v.introspection_endpoint} || {},\n ...v.end_session_endpoint && {logoutPath: v.end_session_endpoint} || {},\n ...{scope: config.scope || 'openid'}\n } as any),\n map(() => this.config)\n )),\n shareReplay(1)\n );\n token$ = this.config$.pipe(\n tap(config => {\n const {hash, search, origin, pathname} = this.location;\n const isImplicitRedirect = hash && /(access_token=)|(error=)/.test(hash);\n const isAuthCodeRedirect = search && /(code=)|(error=)/.test(search) || hash && /(code=)|(error=)/.test(hash);\n if (isImplicitRedirect) {\n const parameters = parseOauthUri(hash.substring(1));\n this.token = {\n ...parameters,\n type: OAuthType.IMPLICIT,\n };\n this.checkResponse(this.token, parameters);\n } else if (isAuthCodeRedirect) {\n const parameters = parseOauthUri(search && search.substring(1) || hash && hash.substring(1));\n if (!this.checkResponse(this.token, parameters)) {\n this.token = parameters;\n } else {\n const newParametersString = this.getCleanedUnSearchParameters();\n const {clientId, clientSecret, tokenPath, scope} = config as AuthorizationCodeConfig;\n const {codeVerifier} = this.token || {}; //should be set by authorizationUrl construction\n this.http.post(tokenPath, new HttpParams({\n fromObject: {\n code: parameters?.['code'],\n client_id: clientId,\n ...clientSecret && {client_secret: clientSecret} || {},\n redirect_uri: `${origin}${pathname}`,\n grant_type: 'authorization_code',\n ...scope && {scope} || {},\n ...codeVerifier && {code_verifier: codeVerifier} || {}\n }\n }), {headers: HEADER_APPLICATION}).pipe(\n ).subscribe(token => {\n this.token = {\n ...token,\n type: OAuthType.AUTHORIZATION_CODE\n };\n this.locationService.replaceState(`${pathname}${newParametersString}`);\n });\n }\n }\n }),\n switchMap(() => this.tokenService.token$),\n shareReplay(1)\n );\n status$ = this.token$.pipe(\n map(token => token.access_token && OAuthStatus.AUTHORIZED || token.error && OAuthStatus.DENIED || OAuthStatus.NOT_AUTHORIZED),\n shareReplay(1)\n );\n userInfo$ = this.status$.pipe(\n filter(s => s === OAuthStatus.AUTHORIZED),\n map(() => (this.config as any).userPath),\n filter(Boolean),\n switchMap(path => this.getUserInfo(path)),\n shareReplay(1)\n );\n type$ = this.tokenService.type$;\n ignorePaths = this.authConfig.ignorePaths || [];\n\n get storageKey() {\n return this.authConfig.storageKey;\n }\n\n set storageKey(storageKey) {\n if (storageKey) {\n this.authConfig.storageKey = storageKey;\n this.tokenService.token = this.tokenService.saved;\n }\n }\n\n get token() {\n return this.tokenService.token;\n }\n\n set token(token) {\n this.tokenService.token = token;\n }\n\n get config() {\n return this.authConfig.config;\n }\n\n set config(config: OAuthTypeConfig | undefined) {\n if (config) {\n this.authConfig.config = {\n ...this.authConfig.config,\n ...config\n };\n }\n }\n\n constructor(protected authConfig: OAuthConfig,\n protected tokenService: OAuthTokenService,\n protected http: HttpClient,\n @Inject(LOCATION) protected location: Location,\n protected locationService: Location2) {\n }\n\n async login(parameters?: OAuthParameters) {\n if (!!parameters && (parameters as ResourceParameters).password) {\n await this.resourceLogin(parameters as ResourceParameters);\n } else if (!!parameters && (parameters as AuthorizationParameters).redirectUri && (parameters as AuthorizationParameters).responseType\n ) {\n await this.toAuthorizationUrl(parameters as AuthorizationParameters);\n } else {\n await this.clientCredentialLogin();\n }\n }\n\n logout(useLogoutUrl?: boolean) {\n this.revoke();\n this.token = {};\n const {logoutPath, logoutRedirectUri} = this.authConfig.config as any;\n if (useLogoutUrl && logoutPath) {\n const {origin, pathname} = this.location;\n const currentPath = `${origin}${pathname}`;\n this.location.replace(`${logoutPath}?post_logout_redirect_uri=${logoutRedirectUri || currentPath}`);\n }\n }\n\n getUserInfo(path?: string) {\n const {userPath} = this.config as any;\n return this.http.get<UserInfo>(path || userPath);\n }\n\n protected revoke() {\n const {revokePath, clientId, clientSecret} = this.authConfig.config as any;\n if (revokePath) {\n const {access_token, refresh_token} = this.token || {};\n const toRevoke = [];\n if (access_token) {\n toRevoke.push({\n ...clientId && {client_id: clientId} || {},\n ...clientSecret && {client_secret: clientSecret} || {},\n token: access_token,\n token_type_hint: 'access_token'\n });\n }\n if (refresh_token) {\n toRevoke.push({\n ...clientId && {client_id: clientId} || {},\n ...clientSecret && {client_secret: clientSecret} || {},\n token: refresh_token,\n token_type_hint: 'refresh_token'\n });\n }\n from(toRevoke).pipe(\n concatMap(o => of(o).pipe(delay(300))), // space request to avoid cancellation\n switchMap(o => this.http.post(revokePath, new HttpParams({fromObject: o}))),\n ).subscribe(noop);\n }\n }\n\n protected clientCredentialLogin() {\n const {clientId, clientSecret, tokenPath, scope} = this.authConfig.config as any;\n return firstValueFrom(this.http.post(tokenPath, new HttpParams({\n fromObject: {\n client_id: clientId,\n client_secret: clientSecret,\n grant_type: OAuthType.CLIENT_CREDENTIAL,\n ...scope ? {scope} : {},\n }\n }), {headers: HEADER_APPLICATION}).pipe(\n catchError((err) => {\n this.token = err;\n return throwError(() => err);\n }),\n tap(params => {\n this.token = {\n ...params,\n type: OAuthType.CLIENT_CREDENTIAL,\n };\n }),\n ));\n }\n\n protected resourceLogin(parameters: ResourceParameters) {\n const {clientId, clientSecret, tokenPath, scope} = this.authConfig.config as any;\n const {username, password} = parameters;\n return firstValueFrom(this.http.post(tokenPath, new HttpParams({\n fromObject: {\n client_id: clientId,\n ...clientSecret && {client_secret: clientSecret} || {},\n grant_type: OAuthType.RESOURCE,\n ...scope && {scope} || {},\n username,\n password\n }\n }), {headers: HEADER_APPLICATION}).pipe(\n catchError(err => {\n this.token = err;\n return throwError(() => err);\n }),\n tap(params => {\n this.token = {\n ...params,\n type: OAuthType.RESOURCE,\n };\n })\n ));\n }\n\n protected async toAuthorizationUrl(parameters: AuthorizationParameters) {\n const {config} = this.authConfig as any;\n let authorizationUrl = `${config.authorizePath}`;\n authorizationUrl += config.authorizePath.includes('?') && '&' || '?';\n authorizationUrl += `client_id=${config.clientId}`;\n authorizationUrl += `&redirect_uri=${encodeURIComponent(parameters.redirectUri)}`;\n authorizationUrl += `&response_type=${parameters.responseType}`;\n authorizationUrl += `&scope=${encodeURIComponent(config.scope || '')}`;\n authorizationUrl += `&state=${encodeURIComponent(parameters.state || '')}`;\n return this.location.replace(`${authorizationUrl}${this.generateNonce(config)}${await this.generateCodeChallenge(config)}`);\n }\n\n protected async generateCodeChallenge(config: any) {\n if (config.pkce) {\n const codeVerifier = randomString();\n this.token = {...this.token, codeVerifier};\n return `&code_challenge=${await pkce(codeVerifier)}&code_challenge_method=S256`;\n }\n return '';\n }\n\n protected generateNonce(config: any) {\n if (config && config.scope && config.scope.indexOf('openid') > -1) {\n const nonce = randomString(10);\n this.token = {...this.token, nonce};\n return `&nonce=${nonce}`;\n }\n return '';\n }\n\n private checkResponse(token?: OAuthToken,\n parameters?: Record<string, string>) {\n this.emitState(parameters);\n this.cleanLocationHash();\n if (!parameters || parameters['error']) {\n return false;\n }\n if (token && token.nonce && parameters['access_token']) {\n const jwtToken = jwt(parameters['access_token']);\n return token.nonce === jwtToken.nonce;\n }\n return parameters['access_token'] || parameters['code'];\n }\n\n private getCleanedUnSearchParameters() {\n const {search} = this.location;\n let searchString = search && search.substring(1) || '';\n const hashKeys = ['code', 'state', 'error', 'error_description', 'session_state', 'scope', 'authuser', 'prompt'];\n hashKeys.forEach(hashKey => {\n const re = new RegExp('&' + hashKey + '(=[^&]*)?|^' + hashKey + '(=[^&]*)?&?');\n searchString = searchString.replace(re, '');\n });\n return searchString.length && `?${searchString}` || '';\n }\n\n private cleanLocationHash() {\n const {hash} = this.location;\n let curHash = hash && hash.substring(1) || '';\n const hashKeys = [\n 'access_token',\n 'token_type',\n 'expires_in',\n 'scope',\n 'state',\n 'error',\n 'error_description',\n 'session_state',\n 'nonce',\n 'id_token',\n 'code'\n ];\n hashKeys.forEach(hashKey => {\n const re = new RegExp('&' + hashKey + '(=[^&]*)?|^' + hashKey + '(=[^&]*)?&?');\n curHash = curHash.replace(re, '');\n });\n this.location.hash = curHash;\n }\n\n private emitState(parameters?: Record<string, string>) {\n const {state} = parameters || {};\n state && this.state$.next(state);\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpErrorResponse, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\nimport {switchMap, take, throwError} from 'rxjs';\nimport {catchError, map} from 'rxjs/operators';\nimport {OAuthConfig} from '../models';\nimport {OAuthTokenService} from './token.service';\n\n@Injectable()\nexport class OAuthInterceptor implements HttpInterceptor {\n\n constructor(protected tokenService: OAuthTokenService,\n protected authConfig: OAuthConfig) {\n }\n\n intercept(req: HttpRequest<any>, next: HttpHandler) {\n return this.isPathExcepted(req) && next.handle(req) || this.tokenService.token$.pipe(\n take(1),\n map(token => {\n if (token?.access_token) {\n req = req.clone({\n setHeaders: {\n Authorization: `${token.token_type} ${token.access_token}`\n }\n });\n }\n return req;\n }),\n switchMap(req => next.handle(req)),\n catchError((err: HttpErrorResponse) => {\n if (err.status === 401) {\n this.tokenService.token = {\n error: `${err.status}`,\n error_description: err.message\n };\n }\n return throwError(() => err);\n })\n );\n }\n\n private isPathExcepted(req: HttpRequest<any>) {\n const {ignorePaths} = this.authConfig || {};\n if (ignorePaths) {\n for (const ignorePath of ignorePaths) {\n try {\n if (req.url.match(ignorePath)) {\n return true;\n }\n } catch (err) {\n }\n }\n }\n return false;\n }\n}\n","import {Component, ContentChild, HostListener, Inject, Input, OnDestroy, Output, TemplateRef, ViewEncapsulation} from '@angular/core';\r\nimport {Observable, Subscription, take} from 'rxjs';\r\nimport {LOCATION, OAuthParameters, OAuthStatus, OAuthType} from '../../models';\r\nimport {tap} from 'rxjs/operators';\r\nimport {OAuthService} from '../../services/oauth.service';\r\nimport {Location as Location2} from '@angular/common';\r\n\r\nexport interface OAuthLoginI18n {\r\n username?: string;\r\n password?: string;\r\n submit?: string;\r\n notAuthorized?: string;\r\n authorized?: string;\r\n denied?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'oauth-login',\r\n templateUrl: 'oauth-login.component.html',\r\n styleUrls: ['oauth-login.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class OAuthLoginComponent implements OnDestroy {\r\n\r\n #subscription = new Subscription();\r\n #redirectUri?: string;\r\n #responseType?: string;\r\n #i18n: OAuthLoginI18n = {\r\n username: 'Username',\r\n password: 'Password',\r\n submit: 'Sign in',\r\n notAuthorized: 'Sign in',\r\n authorized: 'Welcome',\r\n denied: 'Access Denied. Try again!'\r\n };\r\n\r\n get i18n() {\r\n return this.#i18n;\r\n }\r\n\r\n @Input()\r\n type: OAuthType = OAuthType.RESOURCE;\r\n\r\n @Input()\r\n set i18n(i18n) {\r\n this.#i18n = {\r\n ...this.#i18n,\r\n ...i18n\r\n };\r\n }\r\n\r\n get redirectUri() {\r\n return this.#redirectUri || `${this.location.origin}${this.locationService.path(true) || '/'}`;\r\n }\r\n\r\n @Input()\r\n set redirectUri(redirectUri: string) {\r\n if (redirectUri) {\r\n this.#redirectUri = redirectUri;\r\n }\r\n }\r\n\r\n @Input()\r\n set responseType(responseType: string) {\r\n if (this.responseType) {\r\n this.#responseType = responseType;\r\n }\r\n }\r\n\r\n get responseType() {\r\n return this.#responseType || this.type;\r\n }\r\n\r\n @Input()\r\n useLogoutUrl = false;\r\n @Input()\r\n state = '';\r\n @Output()\r\n stateChange = this.oauthService.state$.asObservable();\r\n @Input()\r\n profileName$: Observable<string | undefined> | undefined;\r\n @ContentChild('login', {static: false})\r\n loginTemplate: TemplateRef<any> | undefined;\r\n username = '';\r\n password = '';\r\n profileName?: string;\r\n OAuthStatus = OAuthStatus;\r\n OAuthType = OAuthType;\r\n collapse = false;\r\n status$ = this.oauthService.status$.pipe(\r\n tap(s => {\r\n if (s === OAuthStatus.AUTHORIZED && this.profileName$) {\r\n this.#subscription.add(this.profileName$.pipe(\r\n take(1)\r\n ).subscribe(n => this.profileName = n));\r\n } else {\r\n const {token} = this.oauthService;\r\n const userInfo = token && token.id_token && JSON.parse(atob(token.id_token.split('.')[1])) || {};\r\n this.profileName = userInfo.name || userInfo.username || userInfo.email || userInfo.sub || '';\r\n }\r\n })\r\n );\r\n loginFunction = (p: OAuthParameters) => this.login(p);\r\n logoutFunction = () => this.logout();\r\n\r\n constructor(private oauthService: OAuthService,\r\n private locationService: Location2,\r\n @Inject(LOCATION) private location: Location) {\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n logout() {\r\n this.oauthService.logout(this.useLogoutUrl);\r\n }\r\n\r\n login(parameters: OAuthParameters) {\r\n this.collapse = false;\r\n return this.oauthService.login(parameters);\r\n }\r\n\r\n toggleCollapse() {\r\n this.collapse = !this.collapse;\r\n }\r\n\r\n @HostListener('window:keydown.escape')\r\n keyboardEvent() {\r\n this.collapse = false;\r\n }\r\n}\r\n","<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","import {ModuleWithProviders, NgModule, Optional, PLATFORM_ID} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {HTTP_INTERCEPTORS, HttpBackend, HttpClient, HttpClientModule} from '@angular/common/http';\nimport {RouterModule} from '@angular/router';\nimport {LOCATION, OAUTH_HTTP_CLIENT, OAuthConfig, provideOAuthConfigFactory, SERVER_HOST, SERVER_PATH, STORAGE} from './models';\nimport {OAuthService} from './services/oauth.service';\nimport {OAuthLoginComponent} from './components/login/oauth-login.component';\nimport {CommonModule, isPlatformBrowser} from '@angular/common';\nimport {OAuthInterceptor} from './services/oauth.interceptor';\nimport {OAuthTokenService} from './services/token.service';\n\nconst mockLocation = (serverHost: string, serverPath: string): Location => {\n const url = new URL(serverHost && serverPath ? `${serverHost}${serverPath}` : 'http://localhost');\n const {href, origin, protocol, host, hostname, port, pathname, search, hash} = url;\n return {\n href, origin, protocol, host, hostname, port, pathname, search, hash,\n reload() {\n },\n assign(_: string) {\n },\n ancestorOrigins: {} as any,\n replace(_: string) {\n }\n };\n};\n\nconst LocationService = {\n provide: LOCATION,\n useFactory(platformId: Object, serverHost: string, serverPath: string) {\n return isPlatformBrowser(platformId) ? location : mockLocation(serverHost, serverPath);\n },\n deps: [\n PLATFORM_ID,\n [new Optional(), SERVER_HOST],\n [new Optional(), SERVER_PATH]\n ]\n};\n\nconst mockStorage: Storage = {\n clear() {\n },\n getItem(key: string) {\n return null;\n },\n key(index: number) {\n return null;\n },\n removeItem(key: string) {\n },\n setItem(key: string, value: string) {\n },\n length: 0\n};\n\nconst StorageService = {\n provide: STORAGE,\n useFactory(platformId: Object) {\n return isPlatformBrowser(platformId) ? localStorage : mockStorage;\n },\n deps: [PLATFORM_ID]\n};\n\nconst OAuthHttpClient = {\n provide: OAUTH_HTTP_CLIENT,\n useFactory(httpBackend: HttpBackend) {\n // avoid http interceptors\n return new HttpClient(httpBackend);\n },\n deps: [HttpBackend]\n};\n\nconst OAuthInterceptorService = {\n provide: HTTP_INTERCEPTORS,\n useClass: OAuthInterceptor,\n multi: true,\n};\n\nconst defaultConfig = (storage: Storage) => {\n return {\n storage,\n storageKey: 'token',\n ignorePaths: []\n };\n};\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n HttpClientModule,\n RouterModule,\n ],\n declarations: [OAuthLoginComponent],\n exports: [OAuthLoginComponent]\n})\nexport class OAuthModule {\n\n static forRoot(config: OAuthConfig = {}): ModuleWithProviders<OAuthModule> {\n return {\n ngModule: OAuthModule,\n providers: [\n LocationService,\n StorageService,\n OAuthHttpClient,\n provideOAuthConfigFactory((storage: Storage) => ({\n ...defaultConfig(storage),\n ...config\n }), [STORAGE]),\n OAuthTokenService,\n OAuthInterceptorService,\n OAuthService,\n ]\n };\n }\n}\n","/*\n * Public API Surface of ngx-oauth\n */\nexport * from './models';\nexport * from './services/token.service';\nexport * from './services/oauth.service';\nexport * from './services/oauth.interceptor';\nexport * from './components/login/oauth-login.component';\nexport * from './oauth.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["switchMap","i4","i1.OAuthTokenService","i2.OAuthConfig","i3"],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
export * from './
|
|
3
|
-
export * from './
|
|
4
|
-
export * from './
|
|
5
|
-
export * from './
|
|
1
|
+
export * from './models';
|
|
2
|
+
export * from './services/token.service';
|
|
3
|
+
export * from './services/oauth.service';
|
|
4
|
+
export * from './services/oauth.interceptor';
|
|
5
|
+
export * from './components/login/oauth-login.component';
|
|
6
|
+
export * from './oauth.module';
|
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
|
|
2
2
|
import { OAuthConfig } from '../models';
|
|
3
|
-
import {
|
|
3
|
+
import { OAuthTokenService } from './token.service';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class OAuthInterceptor implements HttpInterceptor {
|
|
6
|
-
protected tokenService:
|
|
6
|
+
protected tokenService: OAuthTokenService;
|
|
7
7
|
protected authConfig: OAuthConfig;
|
|
8
|
-
constructor(tokenService:
|
|
8
|
+
constructor(tokenService: OAuthTokenService, authConfig: OAuthConfig);
|
|
9
9
|
intercept(req: HttpRequest<any>, next: HttpHandler): import("rxjs").Observable<import("@angular/common/http").HttpEvent<any>>;
|
|
10
10
|
private isPathExcepted;
|
|
11
11
|
static ɵfac: i0.ɵɵFactoryDeclaration<OAuthInterceptor, never>;
|
|
@@ -2,11 +2,11 @@ import { HttpClient } from '@angular/common/http';
|
|
|
2
2
|
import { ReplaySubject } from 'rxjs';
|
|
3
3
|
import { AuthorizationParameters, OAuthConfig, OAuthParameters, OAuthStatus, OAuthToken, OAuthType, OAuthTypeConfig, ResourceParameters, UserInfo } from '../models';
|
|
4
4
|
import { Location as Location2 } from '@angular/common';
|
|
5
|
-
import {
|
|
5
|
+
import { OAuthTokenService } from './token.service';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
export declare class OAuthService {
|
|
8
8
|
protected authConfig: OAuthConfig;
|
|
9
|
-
protected tokenService:
|
|
9
|
+
protected tokenService: OAuthTokenService;
|
|
10
10
|
protected http: HttpClient;
|
|
11
11
|
protected location: Location;
|
|
12
12
|
protected locationService: Location2;
|
|
@@ -17,13 +17,16 @@ export declare class OAuthService {
|
|
|
17
17
|
userInfo$: import("rxjs").Observable<UserInfo>;
|
|
18
18
|
type$: import("rxjs").Observable<OAuthType | undefined>;
|
|
19
19
|
ignorePaths: RegExp[];
|
|
20
|
+
get storageKey(): string | undefined;
|
|
21
|
+
set storageKey(storageKey: string | undefined);
|
|
20
22
|
get token(): OAuthToken;
|
|
21
23
|
set token(token: OAuthToken);
|
|
22
24
|
get config(): OAuthTypeConfig | undefined;
|
|
23
25
|
set config(config: OAuthTypeConfig | undefined);
|
|
24
|
-
constructor(authConfig: OAuthConfig, tokenService:
|
|
26
|
+
constructor(authConfig: OAuthConfig, tokenService: OAuthTokenService, http: HttpClient, location: Location, locationService: Location2);
|
|
25
27
|
login(parameters?: OAuthParameters): Promise<void>;
|
|
26
28
|
logout(useLogoutUrl?: boolean): void;
|
|
29
|
+
getUserInfo(path?: string): import("rxjs").Observable<UserInfo>;
|
|
27
30
|
protected revoke(): void;
|
|
28
31
|
protected clientCredentialLogin(): Promise<Object>;
|
|
29
32
|
protected resourceLogin(parameters: ResourceParameters): Promise<Object>;
|
|
@@ -3,7 +3,7 @@ import { Observable } from 'rxjs';
|
|
|
3
3
|
import { OAuthConfig, OAuthToken } from '../models';
|
|
4
4
|
import { HttpClient } from '@angular/common/http';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
|
-
export declare class
|
|
6
|
+
export declare class OAuthTokenService {
|
|
7
7
|
#private;
|
|
8
8
|
protected authConfig: OAuthConfig;
|
|
9
9
|
protected http: HttpClient;
|
|
@@ -17,6 +17,6 @@ export declare class TokenService {
|
|
|
17
17
|
get saved(): OAuthToken;
|
|
18
18
|
set saved(token: OAuthToken);
|
|
19
19
|
protected refreshToken(token?: OAuthToken): Observable<OAuthToken>;
|
|
20
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<
|
|
21
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<
|
|
20
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<OAuthTokenService, never>;
|
|
21
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<OAuthTokenService>;
|
|
22
22
|
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { inject, Injectable, InjectionToken } from '@angular/core';
|
|
2
|
-
import { HttpHeaders } from '@angular/common/http';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export const SERVER_HOST = new InjectionToken('SERVER_HOST');
|
|
5
|
-
export const SERVER_PATH = new InjectionToken('SERVER_PATH');
|
|
6
|
-
export const LOCATION = new InjectionToken('Location');
|
|
7
|
-
export const STORAGE = new InjectionToken('Storage');
|
|
8
|
-
export const OAUTH_CONFIG = new InjectionToken('OAuthConfig');
|
|
9
|
-
export const OAUTH_TOKEN = new InjectionToken('OAuthToken');
|
|
10
|
-
export const HEADER_APPLICATION = new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded' });
|
|
11
|
-
export const OAUTH_HTTP_CLIENT = new InjectionToken('OAuthHttpClient');
|
|
12
|
-
export class OAuthConfig {
|
|
13
|
-
}
|
|
14
|
-
OAuthConfig.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: OAuthConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
15
|
-
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) => ({ ...p, ...c }), {}) });
|
|
16
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: OAuthConfig, decorators: [{
|
|
17
|
-
type: Injectable,
|
|
18
|
-
args: [{
|
|
19
|
-
providedIn: 'root',
|
|
20
|
-
useFactory: () => inject(OAUTH_CONFIG).reduce((p, c) => ({ ...p, ...c }), {})
|
|
21
|
-
}]
|
|
22
|
-
}] });
|
|
23
|
-
export const provideOAuthConfig = (config = {}) => ({
|
|
24
|
-
provide: OAUTH_CONFIG,
|
|
25
|
-
useValue: config,
|
|
26
|
-
multi: true
|
|
27
|
-
});
|
|
28
|
-
export const provideOAuthConfigFactory = (factory, deps) => ({
|
|
29
|
-
provide: OAUTH_CONFIG,
|
|
30
|
-
useFactory: factory,
|
|
31
|
-
deps: deps,
|
|
32
|
-
multi: true
|
|
33
|
-
});
|
|
34
|
-
export var OAuthType;
|
|
35
|
-
(function (OAuthType) {
|
|
36
|
-
OAuthType["RESOURCE"] = "password";
|
|
37
|
-
OAuthType["AUTHORIZATION_CODE"] = "code";
|
|
38
|
-
OAuthType["IMPLICIT"] = "token";
|
|
39
|
-
OAuthType["CLIENT_CREDENTIAL"] = "client_credentials";
|
|
40
|
-
})(OAuthType || (OAuthType = {}));
|
|
41
|
-
export var OAuthStatus;
|
|
42
|
-
(function (OAuthStatus) {
|
|
43
|
-
OAuthStatus["NOT_AUTHORIZED"] = "NOT_AUTHORIZED";
|
|
44
|
-
OAuthStatus["AUTHORIZED"] = "AUTHORIZED";
|
|
45
|
-
OAuthStatus["DENIED"] = "DENIED";
|
|
46
|
-
})(OAuthStatus || (OAuthStatus = {}));
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtb2F1dGgvc3JjL2xpYi9tb2RlbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFrQixNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDakcsT0FBTyxFQUFhLFdBQVcsRUFBQyxNQUFNLHNCQUFzQixDQUFDOztBQUU3RCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxjQUFjLENBQVMsYUFBYSxDQUFDLENBQUM7QUFDckUsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLElBQUksY0FBYyxDQUFTLGFBQWEsQ0FBQyxDQUFDO0FBQ3JFLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxJQUFJLGNBQWMsQ0FBVyxVQUFVLENBQUMsQ0FBQztBQUNqRSxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxjQUFjLENBQVUsU0FBUyxDQUFDLENBQUM7QUFDOUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLElBQUksY0FBYyxDQUFnQixhQUFhLENBQUMsQ0FBQztBQUM3RSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxjQUFjLENBQWEsWUFBWSxDQUFDLENBQUM7QUFDeEUsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBQyxjQUFjLEVBQUUsbUNBQW1DLEVBQUMsQ0FBQyxDQUFDO0FBQ3pHLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksY0FBYyxDQUFhLGlCQUFpQixDQUFDLENBQUM7QUFNbkYsTUFBTSxPQUFnQixXQUFXOzt3R0FBWCxXQUFXOzRHQUFYLFdBQVcsY0FIbkIsTUFBTSxjQUNOLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQzsyRkFFdkQsV0FBVztrQkFKaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtvQkFDbEIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztpQkFDNUU7O0FBUUQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxTQUFzQixFQUFFLEVBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQzlFLE9BQU8sRUFBRSxZQUFZO0lBQ3JCLFFBQVEsRUFBRSxNQUFNO0lBQ2hCLEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxPQUFpQixFQUFFLElBQVksRUFBbUIsRUFBRSxDQUFDLENBQUM7SUFDOUYsT0FBTyxFQUFFLFlBQVk7SUFDckIsVUFBVSxFQUFFLE9BQU87SUFDbkIsSUFBSSxFQUFFLElBQUk7SUFDVixLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBTixJQUFZLFNBS1g7QUFMRCxXQUFZLFNBQVM7SUFDbkIsa0NBQXFCLENBQUE7SUFDckIsd0NBQTJCLENBQUE7SUFDM0IsK0JBQWtCLENBQUE7SUFDbEIscURBQXdDLENBQUE7QUFDMUMsQ0FBQyxFQUxXLFNBQVMsS0FBVCxTQUFTLFFBS3BCO0FBMEVELE1BQU0sQ0FBTixJQUFZLFdBSVg7QUFKRCxXQUFZLFdBQVc7SUFDckIsZ0RBQWlDLENBQUE7SUFDakMsd0NBQXlCLENBQUE7SUFDekIsZ0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUpXLFdBQVcsS0FBWCxXQUFXLFFBSXRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtGYWN0b3J5UHJvdmlkZXIsIGluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIFZhbHVlUHJvdmlkZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwSGVhZGVyc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5leHBvcnQgY29uc3QgU0VSVkVSX0hPU1QgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignU0VSVkVSX0hPU1QnKTtcbmV4cG9ydCBjb25zdCBTRVJWRVJfUEFUSCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdTRVJWRVJfUEFUSCcpO1xuZXhwb3J0IGNvbnN0IExPQ0FUSU9OID0gbmV3IEluamVjdGlvblRva2VuPExvY2F0aW9uPignTG9jYXRpb24nKTtcbmV4cG9ydCBjb25zdCBTVE9SQUdFID0gbmV3IEluamVjdGlvblRva2VuPFN0b3JhZ2U+KCdTdG9yYWdlJyk7XG5leHBvcnQgY29uc3QgT0FVVEhfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPE9BdXRoQ29uZmlnW10+KCdPQXV0aENvbmZpZycpO1xuZXhwb3J0IGNvbnN0IE9BVVRIX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPE9BdXRoVG9rZW4+KCdPQXV0aFRva2VuJyk7XG5leHBvcnQgY29uc3QgSEVBREVSX0FQUExJQ0FUSU9OID0gbmV3IEh0dHBIZWFkZXJzKHsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCd9KTtcbmV4cG9ydCBjb25zdCBPQVVUSF9IVFRQX0NMSUVOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxIdHRwQ2xpZW50PignT0F1dGhIdHRwQ2xpZW50Jyk7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICB1c2VGYWN0b3J5OiAoKSA9PiBpbmplY3QoT0FVVEhfQ09ORklHKS5yZWR1Y2UoKHAsIGMpID0+ICh7Li4ucCwgLi4uY30pLCB7fSlcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgT0F1dGhDb25maWcge1xuICBjb25maWc/OiBPQXV0aFR5cGVDb25maWc7XG4gIHN0b3JhZ2VLZXk/OiBzdHJpbmc7XG4gIHN0b3JhZ2U/OiBTdG9yYWdlO1xuICBpZ25vcmVQYXRocz86IFJlZ0V4cFtdO1xufVxuXG5leHBvcnQgY29uc3QgcHJvdmlkZU9BdXRoQ29uZmlnID0gKGNvbmZpZzogT0F1dGhDb25maWcgPSB7fSk6IFZhbHVlUHJvdmlkZXIgPT4gKHtcbiAgcHJvdmlkZTogT0FVVEhfQ09ORklHLFxuICB1c2VWYWx1ZTogY29uZmlnLFxuICBtdWx0aTogdHJ1ZVxufSk7XG5cbmV4cG9ydCBjb25zdCBwcm92aWRlT0F1dGhDb25maWdGYWN0b3J5ID0gKGZhY3Rvcnk6IEZ1bmN0aW9uLCBkZXBzPzogYW55W10pOiBGYWN0b3J5UHJvdmlkZXIgPT4gKHtcbiAgcHJvdmlkZTogT0FVVEhfQ09ORklHLFxuICB1c2VGYWN0b3J5OiBmYWN0b3J5LFxuICBkZXBzOiBkZXBzLFxuICBtdWx0aTogdHJ1ZVxufSk7XG5cbmV4cG9ydCBlbnVtIE9BdXRoVHlwZSB7XG4gIFJFU09VUkNFID0gJ3Bhc3N3b3JkJyxcbiAgQVVUSE9SSVpBVElPTl9DT0RFID0gJ2NvZGUnLFxuICBJTVBMSUNJVCA9ICd0b2tlbicsXG4gIENMSUVOVF9DUkVERU5USUFMID0gJ2NsaWVudF9jcmVkZW50aWFscydcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGllbnRDcmVkZW50aWFsQ29uZmlnIHtcbiAgdG9rZW5QYXRoOiBzdHJpbmc7XG4gIHJldm9rZVBhdGg/OiBzdHJpbmc7XG4gIGNsaWVudElkOiBzdHJpbmc7XG4gIGNsaWVudFNlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1lbXB0eS1pbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VDb25maWcgZXh0ZW5kcyBDbGllbnRDcmVkZW50aWFsQ29uZmlnIHtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbXBsaWNpdENvbmZpZyB7XG4gIGF1dGhvcml6ZVBhdGg6IHN0cmluZztcbiAgcmV2b2tlUGF0aD86IHN0cmluZztcbiAgY2xpZW50SWQ6IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIGxvZ291dFBhdGg/OiBzdHJpbmc7XG4gIGxvZ291dFJlZGlyZWN0VXJpPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhvcml6YXRpb25Db2RlQ29uZmlnIGV4dGVuZHMgUmVzb3VyY2VDb25maWcge1xuICBhdXRob3JpemVQYXRoOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aG9yaXphdGlvbkNvZGVQS0NFQ29uZmlnIGV4dGVuZHMgQXV0aG9yaXphdGlvbkNvZGVDb25maWcge1xuICBwa2NlOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5JZENvbmZpZyB7XG4gIGlzc3VlclBhdGg6IHN0cmluZztcbiAgY2xpZW50SWQ6IHN0cmluZztcbiAgY2xpZW50U2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVBhcmFtZXRlcnMge1xuICB1c2VybmFtZTogc3RyaW5nO1xuICBwYXNzd29yZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhvcml6YXRpb25QYXJhbWV0ZXJzIHtcbiAgcmVkaXJlY3RVcmk6IHN0cmluZztcbiAgcmVzcG9uc2VUeXBlOiBPQXV0aFR5cGUuSU1QTElDSVQgfCBPQXV0aFR5cGUuQVVUSE9SSVpBVElPTl9DT0RFIHwgc3RyaW5nO1xuICBzdGF0ZT86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgT0F1dGhQYXJhbWV0ZXJzID0gUmVzb3VyY2VQYXJhbWV0ZXJzIHwgQXV0aG9yaXphdGlvblBhcmFtZXRlcnM7XG5leHBvcnQgdHlwZSBPQXV0aFR5cGVDb25maWcgPSBPcGVuSWRDb25maWdcbiAgfCBBdXRob3JpemF0aW9uQ29kZVBLQ0VDb25maWdcbiAgfCBBdXRob3JpemF0aW9uQ29kZUNvbmZpZ1xuICB8IEltcGxpY2l0Q29uZmlnXG4gIHwgUmVzb3VyY2VDb25maWdcbiAgfCBDbGllbnRDcmVkZW50aWFsQ29uZmlnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoVG9rZW4ge1xuICBpZF90b2tlbj86IHN0cmluZztcbiAgYWNjZXNzX3Rva2VuPzogc3RyaW5nO1xuICByZWZyZXNoX3Rva2VuPzogc3RyaW5nO1xuICB0b2tlbl90eXBlPzogc3RyaW5nO1xuICBzdGF0ZT86IHN0cmluZztcbiAgZXJyb3I/OiBzdHJpbmc7XG4gIGVycm9yX2Rlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBleHBpcmVzX2luPzogbnVtYmVyIHwgc3RyaW5nO1xuICByZWZyZXNoX2V4cGlyZXNfaW4/OiBudW1iZXIgfCBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xuICBjb2RlVmVyaWZpZXI/OiBzdHJpbmc7XG4gIG5vbmNlPzogc3RyaW5nO1xuICB0eXBlPzogT0F1dGhUeXBlO1xuICBleHBpcmVzPzogbnVtYmVyO1xufVxuXG5leHBvcnQgZW51bSBPQXV0aFN0YXR1cyB7XG4gIE5PVF9BVVRIT1JJWkVEID0gJ05PVF9BVVRIT1JJWkVEJyxcbiAgQVVUSE9SSVpFRCA9ICdBVVRIT1JJWkVEJyxcbiAgREVOSUVEID0gJ0RFTklFRCdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuSWRDb25maWd1cmF0aW9uIHtcbiAgaXNzdWVyPzogc3RyaW5nO1xuICBhdXRob3JpemF0aW9uX2VuZHBvaW50Pzogc3RyaW5nO1xuICBpbnRyb3NwZWN0aW9uX2VuZHBvaW50Pzogc3RyaW5nO1xuICB0b2tlbl9lbmRwb2ludD86IHN0cmluZztcbiAgdXNlcmluZm9fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIGVuZF9zZXNzaW9uX2VuZHBvaW50Pzogc3RyaW5nO1xuICByZXZvY2F0aW9uX2VuZHBvaW50Pzogc3RyaW5nO1xuICBzY29wZXNfc3VwcG9ydGVkPzogc3RyaW5nW107XG4gIGNvZGVfY2hhbGxlbmdlX21ldGhvZHNfc3VwcG9ydGVkPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckluZm8ge1xuICBlbWFpbD86IHN0cmluZztcbiAgZW1haWxfdmVyaWZpZWQ/OiBib29sZWFuO1xuICBmYW1pbHlfbmFtZT86IHN0cmluZztcbiAgZ2l2ZW5fbmFtZT86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgcHJlZmVycmVkX3VzZXJuYW1lPzogc3RyaW5nO1xuICBzdWI/OiBzdHJpbmc7XG4gIGFkZHJlc3M/OiBvYmplY3Q7XG4gIHBpY3R1cmU/OiBzdHJpbmc7XG4gIGxvY2FsZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnRyb3NwZWN0SW5mbyBleHRlbmRzIFVzZXJJbmZvIHtcbiAgYWN0aXZlOiBib29sZWFuO1xuICBzY29wZTogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIHVzZXJuYW1lOiBzdHJpbmc7XG4gIGV4cDogbnVtYmVyO1xufVxuIl19
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import { NgModule, Optional, PLATFORM_ID } from '@angular/core';
|
|
2
|
-
import { FormsModule } from '@angular/forms';
|
|
3
|
-
import { HTTP_INTERCEPTORS, HttpBackend, HttpClient, HttpClientModule } from '@angular/common/http';
|
|
4
|
-
import { RouterModule } from '@angular/router';
|
|
5
|
-
import { LOCATION, OAUTH_HTTP_CLIENT, provideOAuthConfigFactory, SERVER_HOST, SERVER_PATH, STORAGE } from './models';
|
|
6
|
-
import { OAuthService } from './services/oauth.service';
|
|
7
|
-
import { OAuthLoginComponent } from './components/login/oauth-login.component';
|
|
8
|
-
import { CommonModule, isPlatformBrowser } from '@angular/common';
|
|
9
|
-
import { OAuthInterceptor } from './services/oauth.interceptor';
|
|
10
|
-
import { TokenService } from './services/token.service';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
const mockLocation = (serverHost, serverPath) => {
|
|
13
|
-
const url = new URL(serverHost && serverPath ? `${serverHost}${serverPath}` : 'http://localhost');
|
|
14
|
-
const { href, origin, protocol, host, hostname, port, pathname, search, hash } = url;
|
|
15
|
-
return {
|
|
16
|
-
href, origin, protocol, host, hostname, port, pathname, search, hash,
|
|
17
|
-
reload() {
|
|
18
|
-
},
|
|
19
|
-
assign(_) {
|
|
20
|
-
},
|
|
21
|
-
ancestorOrigins: {},
|
|
22
|
-
replace(_) {
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
};
|
|
26
|
-
const LocationService = {
|
|
27
|
-
provide: LOCATION,
|
|
28
|
-
useFactory(platformId, serverHost, serverPath) {
|
|
29
|
-
return isPlatformBrowser(platformId) ? location : mockLocation(serverHost, serverPath);
|
|
30
|
-
},
|
|
31
|
-
deps: [
|
|
32
|
-
PLATFORM_ID,
|
|
33
|
-
[new Optional(), SERVER_HOST],
|
|
34
|
-
[new Optional(), SERVER_PATH]
|
|
35
|
-
]
|
|
36
|
-
};
|
|
37
|
-
const mockStorage = {
|
|
38
|
-
clear() {
|
|
39
|
-
},
|
|
40
|
-
getItem(key) {
|
|
41
|
-
return null;
|
|
42
|
-
},
|
|
43
|
-
key(index) {
|
|
44
|
-
return null;
|
|
45
|
-
},
|
|
46
|
-
removeItem(key) {
|
|
47
|
-
},
|
|
48
|
-
setItem(key, value) {
|
|
49
|
-
},
|
|
50
|
-
length: 0
|
|
51
|
-
};
|
|
52
|
-
const StorageService = {
|
|
53
|
-
provide: STORAGE,
|
|
54
|
-
useFactory(platformId) {
|
|
55
|
-
return isPlatformBrowser(platformId) ? localStorage : mockStorage;
|
|
56
|
-
},
|
|
57
|
-
deps: [PLATFORM_ID]
|
|
58
|
-
};
|
|
59
|
-
const OAuthHttpClient = {
|
|
60
|
-
provide: OAUTH_HTTP_CLIENT,
|
|
61
|
-
useFactory(httpBackend) {
|
|
62
|
-
// avoid http interceptors
|
|
63
|
-
return new HttpClient(httpBackend);
|
|
64
|
-
},
|
|
65
|
-
deps: [HttpBackend]
|
|
66
|
-
};
|
|
67
|
-
const OAuthInterceptorService = {
|
|
68
|
-
provide: HTTP_INTERCEPTORS,
|
|
69
|
-
useClass: OAuthInterceptor,
|
|
70
|
-
multi: true,
|
|
71
|
-
};
|
|
72
|
-
const defaultConfig = (storage) => {
|
|
73
|
-
return {
|
|
74
|
-
storage,
|
|
75
|
-
storageKey: 'token',
|
|
76
|
-
ignorePaths: []
|
|
77
|
-
};
|
|
78
|
-
};
|
|
79
|
-
export class OAuthModule {
|
|
80
|
-
static forRoot(config = {}) {
|
|
81
|
-
return {
|
|
82
|
-
ngModule: OAuthModule,
|
|
83
|
-
providers: [
|
|
84
|
-
LocationService,
|
|
85
|
-
StorageService,
|
|
86
|
-
OAuthHttpClient,
|
|
87
|
-
provideOAuthConfigFactory((storage) => ({
|
|
88
|
-
...defaultConfig(storage),
|
|
89
|
-
...config
|
|
90
|
-
}), [STORAGE]),
|
|
91
|
-
TokenService,
|
|
92
|
-
OAuthInterceptorService,
|
|
93
|
-
OAuthService,
|
|
94
|
-
]
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
OAuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: OAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
99
|
-
OAuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.3", ngImport: i0, type: OAuthModule, declarations: [OAuthLoginComponent], imports: [CommonModule,
|
|
100
|
-
FormsModule,
|
|
101
|
-
HttpClientModule,
|
|
102
|
-
RouterModule], exports: [OAuthLoginComponent] });
|
|
103
|
-
OAuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: OAuthModule, imports: [CommonModule,
|
|
104
|
-
FormsModule,
|
|
105
|
-
HttpClientModule,
|
|
106
|
-
RouterModule] });
|
|
107
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: OAuthModule, decorators: [{
|
|
108
|
-
type: NgModule,
|
|
109
|
-
args: [{
|
|
110
|
-
imports: [
|
|
111
|
-
CommonModule,
|
|
112
|
-
FormsModule,
|
|
113
|
-
HttpClientModule,
|
|
114
|
-
RouterModule,
|
|
115
|
-
],
|
|
116
|
-
declarations: [OAuthLoginComponent],
|
|
117
|
-
exports: [OAuthLoginComponent]
|
|
118
|
-
}]
|
|
119
|
-
}] });
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW9hdXRoL3NyYy9saWIvb2F1dGgubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBc0IsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbEcsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQWUseUJBQXlCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDaEksT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxZQUFZLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7O0FBRXRELE1BQU0sWUFBWSxHQUFHLENBQUMsVUFBa0IsRUFBRSxVQUFrQixFQUFZLEVBQUU7SUFDeEUsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLEdBQUcsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDbEcsTUFBTSxFQUFDLElBQUksRUFBRSxN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QUM7SUFDSixDQUFDOzt3R0FsQlUsV0FBVzt5R0FBWCxXQUFXLGlCQUhQLG1CQUFtQixhQUxoQyxZQUFZO1FBQ1osV0FBVztRQUNYLGdCQUFnQjtRQUNoQixZQUFZLGFBR0osbUJBQW1CO3lHQUVsQixXQUFXLFlBUnBCLFlBQVk7UUFDWixXQUFXO1FBQ1gsZ0JBQWdCO1FBQ2hCLFlBQVk7MkZBS0gsV0FBVztrQkFWdkIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGdCQUFnQjt3QkFDaEIsWUFBWTtxQkFDYjtvQkFDRCxZQUFZLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztvQkFDbkMsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7aUJBQy9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSwgT3B0aW9uYWwsIFBMQVRGT1JNX0lEfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7SFRUUF9JTlRFUkNFUFRPUlMsIEh0dHBCYWNrZW5kLCBIdHRwQ2xpZW50LCBIdHRwQ2xpZW50TW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7TE9DQVRJT04sIE9BVVRIX0hUVFBfQ0xJRU5ULCBPQXV0aENvbmZpZywgcHJvdmlkZU9BdXRoQ29uZmlnRmFjdG9yeSwgU0VSVkVSX0hPU1QsIFNFUlZFUl9QQVRILCBTVE9SQUdFfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQge09BdXRoU2VydmljZX0gZnJvbSAnLi9zZXJ2aWNlcy9vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7T0F1dGhMb2dpbkNvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL2xvZ2luL29hdXRoLWxvZ2luLmNvbXBvbmVudCc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZSwgaXNQbGF0Zm9ybUJyb3dzZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge09BdXRoSW50ZXJjZXB0b3J9IGZyb20gJy4vc2VydmljZXMvb2F1dGguaW50ZXJjZXB0b3InO1xuaW1wb3J0IHtUb2tlblNlcnZpY2V9IGZyb20gJy4vc2VydmljZXMvdG9rZW4uc2VydmljZSc7XG5cbmNvbnN0IG1vY2tMb2NhdGlvbiA9IChzZXJ2ZXJIb3N0OiBzdHJpbmcsIHNlcnZlclBhdGg6IHN0cmluZyk6IExvY2F0aW9uID0+IHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChzZXJ2ZXJIb3N0ICYmIHNlcnZlclBhdGggPyBgJHtzZXJ2ZXJIb3N0fSR7c2VydmVyUGF0aH1gIDogJ2h0dHA6Ly9sb2NhbGhvc3QnKTtcbiAgY29uc3Qge2hyZWYsIG9yaWdpbiwgcHJvdG9jb2wsIGhvc3QsIGhvc3RuYW1lLCBwb3J0LCBwYXRobmFtZSwgc2VhcmNoLCBoYXNofSA9IHVybDtcbiAgcmV0dXJuIHtcbiAgICBocmVmLCBvcmlnaW4sIHByb3RvY29sLCBob3N0LCBob3N0bmFtZSwgcG9ydCwgcGF0aG5hbWUsIHNlYXJjaCwgaGFzaCxcbiAgICByZWxvYWQoKSB7XG4gICAgfSxcbiAgICBhc3NpZ24oXzogc3RyaW5nKSB7XG4gICAgfSxcbiAgICBhbmNlc3Rvck9yaWdpbnM6IHt9IGFzIGFueSxcbiAgICByZXBsYWNlKF86IHN0cmluZykge1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IExvY2F0aW9uU2VydmljZSA9IHtcbiAgcHJvdmlkZTogTE9DQVRJT04sXG4gIHVzZUZhY3RvcnkocGxhdGZvcm1JZDogT2JqZWN0LCBzZXJ2ZXJIb3N0OiBzdHJpbmcsIHNlcnZlclBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBpc1BsYXRmb3JtQnJvd3NlcihwbGF0Zm9ybUlkKSA/IGxvY2F0aW9uIDogbW9ja0xvY2F0aW9uKHNlcnZlckhvc3QsIHNlcnZlclBhdGgpO1xuICB9LFxuICBkZXBzOiBbXG4gICAgUExBVEZPUk1fSUQsXG4gICAgW25ldyBPcHRpb25hbCgpLCBTRVJWRVJfSE9TVF0sXG4gICAgW25ldyBPcHRpb25hbCgpLCBTRVJWRVJfUEFUSF1cbiAgXVxufTtcblxuY29uc3QgbW9ja1N0b3JhZ2U6IFN0b3JhZ2UgPSB7XG4gIGNsZWFyKCkge1xuICB9LFxuICBnZXRJdGVtKGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG4gIGtleShpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG4gIHJlbW92ZUl0ZW0oa2V5OiBzdHJpbmcpIHtcbiAgfSxcbiAgc2V0SXRlbShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICB9LFxuICBsZW5ndGg6IDBcbn07XG5cbmNvbnN0IFN0b3JhZ2VTZXJ2aWNlID0ge1xuICBwcm92aWRlOiBTVE9SQUdFLFxuICB1c2VGYWN0b3J5KHBsYXRmb3JtSWQ6IE9iamVjdCkge1xuICAgIHJldHVybiBpc1BsYXRmb3JtQnJvd3NlcihwbGF0Zm9ybUlkKSA/IGxvY2FsU3RvcmFnZSA6IG1vY2tTdG9yYWdlO1xuICB9LFxuICBkZXBzOiBbUExBVEZPUk1fSURdXG59O1xuXG5jb25zdCBPQXV0aEh0dHBDbGllbnQgPSB7XG4gIHByb3ZpZGU6IE9BVVRIX0hUVFBfQ0xJRU5ULFxuICB1c2VGYWN0b3J5KGh0dHBCYWNrZW5kOiBIdHRwQmFja2VuZCkge1xuICAgIC8vIGF2b2lkIGh0dHAgaW50ZXJjZXB0b3JzXG4gICAgcmV0dXJuIG5ldyBIdHRwQ2xpZW50KGh0dHBCYWNrZW5kKTtcbiAgfSxcbiAgZGVwczogW0h0dHBCYWNrZW5kXVxufTtcblxuY29uc3QgT0F1dGhJbnRlcmNlcHRvclNlcnZpY2UgPSB7XG4gIHByb3ZpZGU6IEhUVFBfSU5URVJDRVBUT1JTLFxuICB1c2VDbGFzczogT0F1dGhJbnRlcmNlcHRvcixcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5jb25zdCBkZWZhdWx0Q29uZmlnID0gKHN0b3JhZ2U6IFN0b3JhZ2UpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBzdG9yYWdlLFxuICAgIHN0b3JhZ2VLZXk6ICd0b2tlbicsXG4gICAgaWdub3JlUGF0aHM6IFtdXG4gIH07XG59O1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIEh0dHBDbGllbnRNb2R1bGUsXG4gICAgUm91dGVyTW9kdWxlLFxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtPQXV0aExvZ2luQ29tcG9uZW50XSxcbiAgZXhwb3J0czogW09BdXRoTG9naW5Db21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIE9BdXRoTW9kdWxlIHtcblxuICBzdGF0aWMgZm9yUm9vdChjb25maWc6IE9BdXRoQ29uZmlnID0ge30pOiBNb2R1bGVXaXRoUHJvdmlkZXJzPE9BdXRoTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBPQXV0aE1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICBMb2NhdGlvblNlcnZpY2UsXG4gICAgICAgIFN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICBPQXV0aEh0dHBDbGllbnQsXG4gICAgICAgIHByb3ZpZGVPQXV0aENvbmZpZ0ZhY3RvcnkoKHN0b3JhZ2U6IFN0b3JhZ2UpID0+ICh7XG4gICAgICAgICAgLi4uZGVmYXVsdENvbmZpZyhzdG9yYWdlKSxcbiAgICAgICAgICAuLi5jb25maWdcbiAgICAgICAgfSksIFtTVE9SQUdFXSksXG4gICAgICAgIFRva2VuU2VydmljZSxcbiAgICAgICAgT0F1dGhJbnRlcmNlcHRvclNlcnZpY2UsXG4gICAgICAgIE9BdXRoU2VydmljZSxcbiAgICAgIF1cbiAgICB9O1xuICB9XG59XG4iXX0=
|