{"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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"}