@indice/ng-auth
Version:
Indice extensions for Angular v20 using oidc-client
1 lines • 34.3 kB
Source Map (JSON)
{"version":3,"file":"indice-ng-auth.mjs","sources":["../../../projects/ng-auth/src/lib/tokens.ts","../../../projects/ng-auth/src/lib/auth.service.ts","../../../projects/ng-auth/src/lib/auth-guard.service.ts","../../../projects/ng-auth/src/lib/auth-http-interceptor.ts","../../../projects/ng-auth/src/lib/tenant/tenant-service.ts","../../../projects/ng-auth/src/lib/tenant/tenant-header.interceptor.ts","../../../projects/ng-auth/src/lib/directives/user-picture.directive.ts","../../../projects/ng-auth/src/lib/ng-auth.module.ts","../../../projects/ng-auth/src/lib/types.ts","../../../projects/ng-auth/src/public-api.ts","../../../projects/ng-auth/src/indice-ng-auth.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { IAuthSettings } from './types';\n\nexport const AUTH_SETTINGS = new InjectionToken<IAuthSettings>('AUTH_SETTINGS');\nexport const TENANT_PREFIX_URL = new InjectionToken<string>('TENANT_PREFIX_URL');\n","import { Inject, Injectable } from '@angular/core';\n\nimport { IdTokenClaims, SignoutResponse, User, UserManager } from 'oidc-client-ts';\nimport { BehaviorSubject, from, Observable, throwError } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AUTH_SETTINGS } from './tokens';\nimport { IAuthSettings, SignInRedirectOptions } from './types';\n\n/** https://github.com/IdentityModel/oidc-client-js/wiki */\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthService {\n private _userManager: UserManager;\n private _user: User = null as any;\n private _userSubject: BehaviorSubject<User | null> = new BehaviorSubject<User | null>(null);\n\n constructor(@Inject(AUTH_SETTINGS) authSettings: IAuthSettings) {\n this._userManager = new UserManager(authSettings);\n this.loadUser().subscribe();\n\n this._userManager.clearStaleState();\n\n this._userManager.events.addUserLoaded(() => {\n this._userManager.getUser().then((user: User | null) => {\n if (user) {\n this._user = user;\n this._userSubject.next(user);\n this._userSubject.complete();\n } else {\n\n }\n });\n });\n\n this._userManager.events.addAccessTokenExpiring(() => {\n console.info('Access token expiring event occurred.');\n // No need to call this._userManager.signinSilent() since automaticSilentRenew is set to true.\n // check your environment.ts for auth_settings \n });\n\n this._userManager.events.addUserSignedOut(() => {\n this._userManager.clearStaleState();\n this._userManager.removeUser();\n });\n }\n\n public user$ = this._userSubject.asObservable();\n\n public loadUser(): Observable<User | null> {\n return from(this._userManager.getUser()).pipe(map((user: User | null) => {\n if (user) {\n this._user = user;\n this._userSubject.next(user);\n this._userSubject.complete();\n }\n return user;\n }));\n }\n\n public isLoggedIn(): Observable<boolean> {\n return from(this._userManager.getUser()).pipe(map<User | null, boolean>((user: User | null) => user ? true : false));\n }\n\n public getUserProfile(): IdTokenClaims | undefined {\n return this._user?.profile || undefined;\n }\n\n public getEmail(): string | undefined {\n return this.getUserProfile()?.email;\n }\n\n public hasVerifiedEmail(): boolean | undefined {\n return this.getUserProfile()?.email_verified;\n }\n\n public getSubjectId(): string | undefined {\n return this.getUserProfile()?.sub;\n }\n\n public getFullName(): string | undefined {\n const userProfile = this.getUserProfile();\n if (userProfile?.given_name && userProfile?.family_name) {\n return `${userProfile.given_name} ${userProfile.family_name}`;\n }\n return undefined;\n }\n\n public getUserName(): string | undefined {\n return this.getUserProfile()?.name;\n }\n\n public getDisplayName(): string {\n return this.getFullName() || this.getEmail() || this.getUserName() || '';\n }\n\n public getCurrentUser(): User {\n return this._user;\n }\n\n public isAdmin(): boolean {\n const profile = this.getUserProfile();\n if (!profile) {\n return false;\n }\n return profile[\"admin\"] === true || this.hasRole('Administrator');\n }\n\n public getAuthorizationHeaderValue(): string {\n if (this._user) {\n return `${this._user.token_type} ${this._user.access_token}`;\n }\n return '';\n }\n\n public getAccessTokenValue(): string {\n if (this._user) {\n return `${this._user.access_token}`;\n }\n return '';\n }\n\n public signoutRedirect(): void {\n this._userManager.signoutRedirect();\n }\n\n public removeUser(): Observable<void> {\n this._userManager.clearStaleState();\n return from(this._userManager.removeUser());\n }\n\n public signoutRedirectCallback(): Observable<SignoutResponse> {\n return from(this._userManager.signoutRedirectCallback()).pipe(map((response: SignoutResponse) => {\n this._user = null as any;\n this._userSubject.next(null);\n this._userSubject.complete();\n return response;\n }, (error: any) => {\n throwError(error);\n }));\n }\n\n public signinRedirect(signInRedirectOptions?: SignInRedirectOptions): void {\n const authorizeArgs: any = {};\n if (signInRedirectOptions?.location) {\n authorizeArgs['url_state'] = signInRedirectOptions.location;\n }\n if (signInRedirectOptions?.location) {\n authorizeArgs.state = { url: signInRedirectOptions.location };\n }\n if (signInRedirectOptions?.promptRegister === true) {\n authorizeArgs['extraQueryParams'] = { operation: 'register' };\n }\n if (signInRedirectOptions?.tenant) {\n authorizeArgs['acr_values'] = `tenant:${signInRedirectOptions.tenant}`;\n }\n this._userManager\n .signinRedirect(authorizeArgs)\n .catch((error: any) => { });\n }\n\n public signinRedirectCallback(): Observable<User> {\n return from(this._userManager.signinRedirectCallback()).pipe(map((user: User) => {\n this._user = user;\n this._userSubject.next(this._user);\n this._userSubject.complete();\n return user;\n }, (error: any) => {\n throwError(error);\n return null;\n }));\n }\n\n public signinSilent(): Observable<User> {\n return from(this._userManager.signinSilent()).pipe(map((user: any) => {\n this._userSubject.next(user);\n this._userSubject.complete();\n return user;\n }));\n }\n\n public signinSilentCallback(): Observable<User | undefined> {\n return from(this._userManager.signinSilentCallback()).pipe(map((user: any) => {\n if (user) {\n this._user = user;\n }\n this._userSubject.next(this._user);\n this._userSubject.complete();\n return user;\n }, (error: any) => {\n throwError(error);\n return null;\n }));\n }\n\n public hasRole(roleName: string): boolean {\n const profile = this.getUserProfile();\n if (!profile) {\n return false;\n }\n const roleClaim = profile[\"role\"] as string;\n if (roleClaim && Array.isArray(roleClaim)) {\n const roles = Array.from(roleClaim);\n return roles.indexOf(roleName) !== -1;\n }\n return roleClaim === roleName;\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree } from '@angular/router';\n\nimport { Observable } from 'rxjs';\nimport { AuthService } from './auth.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthGuardService {\n constructor(@Inject(AuthService) private authService: AuthService) { }\n\n public canActivate(route: ActivatedRouteSnapshot | undefined, state: RouterStateSnapshot | undefined): Observable<boolean> | Promise<boolean> | boolean {\n const observable = this.authService.isLoggedIn();\n observable.subscribe((isLoggedIn: boolean) => {\n if (!isLoggedIn) {\n this.authService.signinRedirect({\n location: state?.url || undefined,\n promptRegister: route?.data?.register || route?.firstChild?.data?.register || false,\n tenant: route?.params['tenantAlias'] ?? 'localhost'\n });\n }\n });\n return observable;\n }\n\n public canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | UrlTree | Observable<boolean | UrlTree> | Promise<boolean | UrlTree> {\n return this.canActivate(childRoute, state);\n }\n\n public canLoad(): Observable<boolean> | Promise<boolean> | boolean {\n return this.canActivate(undefined, undefined);\n }\n}\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { AuthService } from './auth.service';\nimport { Observable } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { Inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\n\n\n@Injectable()\nexport class AuthHttpInterceptor implements HttpInterceptor {\n constructor(@Inject(AuthService) private authService: AuthService, @Inject(Router) private router: Router) { }\n \n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n let authRequest = null;\n if (request.url.indexOf('i18n') >= 0) {\n authRequest = request;\n } else {\n authRequest = request.clone({\n headers: request.headers.set('Authorization', this.authService.getAuthorizationHeaderValue()),\n params: request.params\n });\n }\n return next.handle(authRequest).pipe(\n map((httpEvent: any) => {\n return httpEvent;\n }),\n catchError((error: any) => {\n if (error?.status === 401) {\n this.authService.removeUser().pipe(map(() => this.authService.signoutRedirect())).subscribe();\n }\n if (error?.status === 403) {\n this.router.navigate(['/forbidden']);\n }\n throw error;\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class TenantService {\n private _tenantSubject: BehaviorSubject<string> = new BehaviorSubject('');\n\n constructor() { }\n\n public storeTenant(tenant: string): void {\n this._tenantSubject.next(tenant);\n }\n\n public getTenant(): Observable<string> {\n return this._tenantSubject.asObservable();\n }\n\n public getTenantValue(): string {\n return this._tenantSubject.getValue();\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\nimport { TenantService } from './tenant-service';\nimport { TENANT_PREFIX_URL } from '../tokens';\n\n@Injectable({ providedIn: 'root' })\nexport class TenantHeaderInterceptor implements HttpInterceptor {\n constructor(\n @Inject(TENANT_PREFIX_URL) private tenantPrefixUrl: string,\n @Inject(TenantService) private tenantStore: TenantService\n ) { }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n let clonedRequest = request;\n // First check if request is going to our API or an external call.\n if (request.urlWithParams.toLowerCase().startsWith(this.tenantPrefixUrl.toLowerCase())) {\n this.tenantStore.getTenant().subscribe((tenant: any) => {\n if (tenant !== null || tenant !== '') {\n // Clone the request to add the new header.\n clonedRequest = request.clone({ \n headers: request.headers.append('X-Tenant-Id', `${tenant}`) \n });\n }\n })\n .unsubscribe();\n }\n // Pass the cloned request instead of the original request to the next handle.\n return next.handle(clonedRequest);\n }\n}\n","import { OnInit, Directive, ElementRef, Input } from '@angular/core';\nimport { Inject } from '@angular/core';\nimport { AUTH_SETTINGS } from '../tokens';\nimport { IAuthSettings } from '../types';\n\n@Directive({\n selector: 'img[userPicture]',\n standalone: false\n})\nexport class ImgUserPictureDirective implements OnInit {\n private _userId: string | undefined | null;\n private _size: number = 48;\n private _displayName: string = 'John Doe';\n private _color: string | undefined | null = undefined;\n private _img: HTMLImageElement;\n private _version: number = 0;\n private _initialized: boolean = false;\n\n constructor(@Inject(AUTH_SETTINGS) private authSettings: IAuthSettings, element: ElementRef) {\n this._img = element.nativeElement as HTMLImageElement;\n }\n ngOnInit(): void {\n this.setProfileSrc();\n this._initialized = true;\n }\n\n @Input('userPicture')\n public set setUserId(value: string) {\n if (this._userId === value) {\n return;\n }\n this._userId = value;\n if (this._initialized) {\n this.setProfileSrc();\n }\n }\n \n @Input('size')\n public set setSize(value: number) {\n this._size = value;\n }\n @Input('version')\n public set setVersion(value: number) {\n if (this._version === value) {\n return;\n }\n this._version = value;\n if (this._initialized) {\n this.setProfileSrc();\n }\n }\n\n @Input('displayName')\n public set setDisplayName(value: BaseUser | string) {\n if (!value) {\n return;\n }\n let text: string | undefined = this._displayName;\n if (typeof value === 'string') {\n text = value;\n } else {\n const firstName = value.firstName || '';\n const lastName = value.lastName || '';\n const givenName = value.given_name || '';\n const familyName = value.family_name || '';\n \n // Construct the display name based on available properties\n if (firstName || lastName) {\n text = `${firstName} ${lastName}`.trim();\n } else if (givenName || familyName) {\n text = `${givenName} ${familyName}`.trim();\n } else if (value.email) {\n text = value.email;\n } else if (value.userName) {\n text = value.userName;\n } else if (value.name) {\n text = value.name;\n }\n }\n if (!text) {\n return;\n }\n this._displayName = text.split('@')[0].replaceAll(/[\\+\\(\\)\\{\\}\\.,\\[\\]]/g, ' '); // removes any special characters\n if (this._initialized) {\n this.setProfileSrc();\n }\n }\n\n @Input('color')\n public set setColor(value: string | undefined | null) {\n this._color = value?.replace(/^#+/, '');\n }\n\n private setProfileSrc() {\n let fallbackParts = ['/avatar', this._displayName, this._size, this._color].filter(x => !!(x)).join('/');\n if (!this._userId) {\n let srcParts = ['/api/my/account/picture', this._size].join('/');\n this._img.src=`${this.authSettings.authority}${srcParts}?d=${encodeURIComponent(fallbackParts)}&v=${this._version}`;// create my link\n return;\n }\n (async () => {\n // create public link\n const hash = await this.generateSHA256Hash(this._userId!);\n let srcParts = ['/pictures', hash, this._size].join('/');\n this._img.src=`${this.authSettings.authority}${srcParts}?d=${encodeURIComponent(fallbackParts)}&v=${this._version}`;\n })();\n this._img.alt = `Profile picture ${this._displayName}`;\n }\n\n private async generateSHA256Hash(text: string) {\n // Encode the text as UTF-8\n const encoder = new TextEncoder();\n const data = encoder.encode(text);\n \n // Compute the hash\n const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n \n // Convert the hash to a hexadecimal string\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray.map(byte => byte.toString(16).padStart(2, '0')).join('');\n \n return hashHex;\n }\n}\n\ninterface BaseUser {\n given_name?: string | undefined,\n family_name?: string | undefined,\n firstName?: string | undefined,\n lastName?: string | undefined,\n email?: string | undefined,\n name?: string | undefined,\n userName?: string | undefined\n}","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { AuthGuardService } from './auth-guard.service';\nimport { AuthHttpInterceptor } from './auth-http-interceptor';\nimport { AuthService } from './auth.service';\nimport { TenantHeaderInterceptor } from './tenant/tenant-header.interceptor';\nimport { TenantService } from './tenant/tenant-service';\nimport { ImgUserPictureDirective } from './directives/user-picture.directive';\n\n@NgModule({\n declarations: [ImgUserPictureDirective],\n imports: [],\n exports:[ImgUserPictureDirective]\n})\nexport class IndiceAuthModule {\n // tslint:disable-next-line:typedef\n static forRoot(): ModuleWithProviders<IndiceAuthModule> {\n return {\n ngModule: IndiceAuthModule,\n providers: [\n AuthGuardService,\n AuthHttpInterceptor,\n AuthService,\n TenantHeaderInterceptor,\n TenantService\n ]\n };\n }\n}\n","export interface IAuthSettings {\n authority: string;\n client_id: string;\n redirect_uri: string;\n post_logout_redirect_uri: string;\n response_type: string;\n scope: string;\n filterProtocolClaims: boolean;\n loadUserInfo: boolean;\n silent_redirect_uri: string;\n extraQueryParams: any;\n acr_values?: string;\n}\n\nexport class DefaultAuthSettings implements IAuthSettings {\n constructor() { }\n\n authority = '';\n client_id = '';\n redirect_uri = '';\n post_logout_redirect_uri = '';\n response_type = '';\n scope = '';\n filterProtocolClaims = true;\n loadUserInfo = false;\n silent_redirect_uri = '';\n extraQueryParams = {};\n}\n\nexport class SignInRedirectOptions {\n location?: string;\n promptRegister?: boolean;\n tenant?: string; \n}\n","/*\n * Public API Surface of indice-auth\n */\n\nexport * from './lib/ng-auth.module';\nexport * from './lib/auth-guard.service';\nexport * from './lib/auth-http-interceptor';\nexport * from './lib/auth.service';\nexport * from './lib/tenant/tenant-header.interceptor';\nexport * from './lib/tenant/tenant-service';\nexport * from './lib/tokens'; \nexport * from './lib/types';\nexport * from './lib/directives/user-picture.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}