UNPKG

@rxap/authentication

Version:

Provides authentication services, guards, and interceptors for Angular applications. It supports token-based authentication and provides features such as sign-out functionality and routing based on authentication status. This package also includes utiliti

1 lines 21.3 kB
{"version":3,"file":"rxap-authentication.mjs","sources":["../../../../../packages/angular/authentication/src/lib/tokens.ts","../../../../../packages/angular/authentication/src/lib/authentication.service.ts","../../../../../packages/angular/authentication/src/lib/authentication-routing.service.ts","../../../../../packages/angular/authentication/src/lib/authentication.guard.ts","../../../../../packages/angular/authentication/src/lib/bearer-token.interceptor.ts","../../../../../packages/angular/authentication/src/lib/disabled-authentication.service.ts","../../../../../packages/angular/authentication/src/lib/provide.ts","../../../../../packages/angular/authentication/src/lib/register.service.ts","../../../../../packages/angular/authentication/src/lib/sign-out.directive.ts","../../../../../packages/angular/authentication/src/index.ts","../../../../../packages/angular/authentication/src/rxap-authentication.ts"],"sourcesContent":["import {\n InjectionToken,\n Provider,\n} from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nexport const RXAP_AUTHENTICATION_DEACTIVATED = new InjectionToken<boolean>('rxap/authentication/deactivated');\n\nexport interface AuthenticationAccessToken extends Record<string, any> {\n token: string;\n valid?: boolean;\n}\n\nexport const RXAP_AUTHENTICATION_ACCESS_TOKEN = new InjectionToken<BehaviorSubject<AuthenticationAccessToken | null>>(\n 'rxap/authentication/access-token',\n {\n providedIn: 'root',\n factory: () => new BehaviorSubject<AuthenticationAccessToken | null>(null),\n },\n);\n\nexport const RXAP_INITIAL_AUTHENTICATION_STATE = new InjectionToken<boolean>('rxap/authentication/initial-state', {\n providedIn: 'root',\n factory: () => false,\n});\n\nexport function withDisabledAuthentication(disabled = true): Provider {\n return {\n provide: RXAP_AUTHENTICATION_DEACTIVATED,\n useValue: disabled,\n };\n}\n","import {\n inject,\n Injectable,\n} from '@angular/core';\nimport {\n BehaviorSubject,\n Observable,\n ReplaySubject,\n} from 'rxjs';\nimport { RXAP_INITIAL_AUTHENTICATION_STATE } from './tokens';\n\nexport interface IAuthenticationService {\n isAuthenticated$: Observable<boolean | null>;\n events$: Observable<AuthenticationEvent>;\n signOut(): Promise<void>;\n\n isAuthenticated(): Promise<boolean>;\n}\n\nexport enum AuthenticationEventType {\n OnAuthSuccess = 'on-auth-success',\n OnAuthError = 'on-auth-error',\n OnLogout = 'on-logout',\n}\n\nexport interface AuthenticationEvent extends Record<string, any> {\n type: AuthenticationEventType;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class RxapAuthenticationService implements IAuthenticationService {\n\n public isAuthenticated$ = new BehaviorSubject<boolean | null>(null);\n\n public readonly events$ = new ReplaySubject<AuthenticationEvent>();\n\n private _authenticated = inject(RXAP_INITIAL_AUTHENTICATION_STATE);\n\n constructor() {\n this.isAuthenticated().then(isAuthenticated => this.isAuthenticated$.next(isAuthenticated));\n }\n\n public async signOut(): Promise<void> {\n this._authenticated = false;\n this.isAuthenticated$.next(this._authenticated);\n this.events$.next({ type: AuthenticationEventType.OnLogout });\n }\n\n public isAuthenticated(): Promise<boolean> {\n return Promise.resolve(this._authenticated);\n }\n\n}\n","import {\n Inject,\n Injectable,\n Optional,\n} from '@angular/core';\nimport { Router } from '@angular/router';\nimport { RxapAuthenticationService } from './authentication.service';\nimport { RXAP_AUTHENTICATION_DEACTIVATED } from './tokens';\nimport { tap } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthenticationRoutingService {\n\n constructor(\n @Inject(Router)\n private readonly router: Router,\n @Inject(RxapAuthenticationService)\n private readonly authenticationService: RxapAuthenticationService,\n @Optional()\n @Inject(RXAP_AUTHENTICATION_DEACTIVATED)\n private readonly deactivated: boolean | null = null,\n ) {\n if (!deactivated) {\n console.log('Authentication is enabled');\n this.authenticationService.isAuthenticated$.pipe(\n tap(isAuthenticated => {\n if (isAuthenticated) {\n return this.router.navigate([ '/' ]);\n } else {\n return this.router.navigate([ '/', 'authentication', 'login' ]);\n }\n }),\n ).subscribe();\n }\n }\n\n}\n","import {\n Inject,\n Injectable,\n Optional,\n} from '@angular/core';\nimport {\n ActivatedRouteSnapshot,\n Router,\n RouterStateSnapshot,\n UrlTree,\n} from '@angular/router';\nimport { RxapAuthenticationService } from './authentication.service';\nimport { RXAP_AUTHENTICATION_DEACTIVATED } from './tokens';\n\n@Injectable({ providedIn: 'root' })\nexport class RxapAuthenticationGuard {\n\n public lastUrl: string | null = null;\n\n constructor(\n @Inject(RxapAuthenticationService)\n public authentication: RxapAuthenticationService,\n @Inject(Router)\n public router: Router,\n @Optional()\n @Inject(RXAP_AUTHENTICATION_DEACTIVATED)\n private readonly deactivated: boolean | null = null,\n ) {\n }\n\n public canActivate(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot,\n ): Promise<UrlTree | boolean> {\n console.debug('[RxapAuthenticationGuard] can activate', state.url);\n return this.checkAuthStatus(route, state);\n }\n\n public canActivateChild(\n childRoute: ActivatedRouteSnapshot,\n state: RouterStateSnapshot,\n ): Promise<UrlTree | boolean> {\n console.debug('[RxapAuthenticationGuard] can activate child', state.url);\n return this.checkAuthStatus(childRoute, state);\n }\n\n private async checkAuthStatus(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot,\n ): Promise<UrlTree | boolean> {\n\n if (this.deactivated) {\n return true;\n }\n\n const authenticated = await this.authentication.isAuthenticated();\n\n if (authenticated === null) {\n if (!this.lastUrl || (state.url !== '/' && !state.url.match(/authentication\\/login/))) {\n this.lastUrl = state.url;\n }\n return this.router.createUrlTree([ '/', 'authentication', 'loading' ]);\n }\n if (authenticated) {\n if (this.lastUrl && (state.url/*?*/ === '/' || state.url.match(/authentication\\/login/))) {\n const lastUrl = this.lastUrl;\n this.lastUrl = null;\n return this.createUrlTreeToLastUrl(lastUrl);\n } else {\n if (state.url.match(/authentication/)) {\n if (state.url.match(/authentication\\/reset-password/)) {\n return true;\n }\n return this.router.createUrlTree([ '/' ]);\n } else {\n this.lastUrl = null;\n return true;\n }\n }\n } else {\n if (!state.url.match(/^\\/?authentication/)) {\n this.lastUrl = state.url;\n }\n if (state.url.match(/^\\/?authentication/)) {\n if (this.lastUrl && this.lastUrl.match(/^\\/?authentication/)) {\n const lastUrl = this.lastUrl;\n this.lastUrl = null;\n return this.createUrlTreeToLastUrl(lastUrl);\n }\n return true;\n } else {\n return this.router.createUrlTree([ '/', 'authentication', 'login' ]);\n }\n }\n\n }\n\n private createUrlTreeToLastUrl(lastUrl: string): UrlTree {\n\n const urlMatch = lastUrl.match(/^([^?#]+)(\\?([^#]+))?(#(.+))?$/);\n\n if (urlMatch) {\n\n let queryParams: Record<string, string> = {};\n\n if (urlMatch[3]) {\n const queryParamsString = urlMatch[3];\n queryParams = queryParamsString.split('&').map(param => {\n const split = param.split('=');\n return { [split[0]]: split[1] };\n }).reduce((params, param) => ({ ...params, ...param }), {});\n }\n\n let fragment: string | undefined = undefined;\n\n if (urlMatch[5]) {\n fragment = urlMatch[5];\n }\n\n return this.router.createUrlTree([ urlMatch[1] ], {\n queryParams,\n fragment,\n });\n\n }\n\n return this.router.createUrlTree([ lastUrl ]);\n\n }\n\n}\n","import { HttpEvent, HttpHandlerFn, HttpRequest } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport {\n Observable,\n switchMap,\n take,\n} from 'rxjs';\nimport { RXAP_AUTHENTICATION_ACCESS_TOKEN } from './tokens';\n\nexport function BearerTokenInterceptor(req: HttpRequest<unknown>, next: HttpHandlerFn): Observable<HttpEvent<unknown>> {\n\n const accessToken$ = inject(RXAP_AUTHENTICATION_ACCESS_TOKEN);\n\n if (req.url.match(/https?:\\/\\/[^/]+\\/api/)) {\n return accessToken$.pipe(\n take(1),\n switchMap(accessToken => {\n if (accessToken && (accessToken.valid === undefined || accessToken.valid)) {\n console.debug('Add access token to request', req.url);\n return next(req.clone({\n setHeaders: {\n Authorization: `Bearer ${ accessToken.token }`,\n },\n }));\n } else {\n console.debug('No valid access token found!', req.url);\n }\n return next(req);\n }),\n );\n } else {\n console.debug('Skip adding access token to request', req.url);\n }\n\n return next(req);\n\n}\n","import { Injectable } from '@angular/core';\nimport {\n EMPTY,\n of,\n} from 'rxjs';\nimport { IAuthenticationService } from './authentication.service';\n\n@Injectable()\nexport class DisabledAuthenticationService implements IAuthenticationService {\n\n public readonly isAuthenticated$ = of(true);\n public readonly events$ = EMPTY;\n\n async signOut() {\n console.log('Authentication is disabled. No sign out possible');\n }\n\n async isAuthenticated() {\n return true;\n }\n\n}\n","import { Provider } from '@angular/core';\nimport { RXAP_INITIAL_AUTHENTICATION_STATE } from './tokens';\nimport {\n IAuthenticationService,\n RxapAuthenticationService,\n} from './authentication.service';\nimport { Constructor } from '@rxap/utilities';\n\nexport function provideAuthentication(\n service: Constructor<IAuthenticationService>,\n ...additionalProviders: Provider[]\n): Provider[] {\n return [\n {\n provide: RxapAuthenticationService,\n useClass: service,\n },\n ...additionalProviders,\n ];\n}\n\nexport function withInitialAuthenticationState(\n state: boolean\n): Provider {\n return {\n provide: RXAP_INITIAL_AUTHENTICATION_STATE,\n useValue: state,\n };\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\n/* ignore coverage */\nexport class RegisterService {\n\n constructor() {\n console.warn('The default RegisterService implementation should only be used in a development environment!');\n }\n\n public register(email: string, password: string): Promise<boolean> {\n return Promise.resolve(true);\n }\n\n}\n","import {\n Directive,\n EventEmitter,\n HostListener,\n Output,\n} from '@angular/core';\nimport { RxapAuthenticationService } from './authentication.service';\n\n@Directive({\n selector: '[rxapSignOut]',\n standalone: true,\n})\nexport class SignOutDirective {\n\n @Output()\n public successful = new EventEmitter<void>();\n\n @Output()\n public failure = new EventEmitter<Error>();\n\n constructor(private readonly auth: RxapAuthenticationService) {\n }\n\n @HostListener('click')\n public async onClick() {\n try {\n await this.auth.signOut();\n this.successful.emit();\n } catch (e: any) {\n this.failure.emit(e);\n }\n }\n\n}\n\n\n","// region \nexport * from './lib/authentication-routing.service';\nexport * from './lib/authentication.guard';\nexport * from './lib/authentication.service';\nexport * from './lib/bearer-token.interceptor';\nexport * from './lib/disabled-authentication.service';\nexport * from './lib/provide';\nexport * from './lib/register.service';\nexport * from './lib/sign-out.directive';\nexport * from './lib/tokens';\n// endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.RxapAuthenticationService"],"mappings":"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"}