{"version":3,"file":"kephas-ngx-oidc.mjs","sources":["../../../../projects/kephas/ngx-oidc/src/lib/appIdProvider.service.ts","../../../../projects/kephas/ngx-oidc/src/lib/authentication.settings.ts","../../../../projects/kephas/ngx-oidc/src/lib/authentication.service.ts","../../../../projects/kephas/ngx-oidc/src/lib/authorize.interceptor.ts","../../../../projects/kephas/ngx-oidc/src/lib/authorize.guard.ts","../../../../projects/kephas/ngx-oidc/src/lib/login/login.component.ts","../../../../projects/kephas/ngx-oidc/src/lib/login/login.component.html","../../../../projects/kephas/ngx-oidc/src/lib/logout/logout.component.ts","../../../../projects/kephas/ngx-oidc/src/lib/logout/logout.component.html","../../../../projects/kephas/ngx-oidc/src/lib/login-menu/login-menu.component.ts","../../../../projects/kephas/ngx-oidc/src/lib/login-menu/login-menu.component.html","../../../../projects/kephas/ngx-oidc/src/lib/oidc.module.ts","../../../../projects/kephas/ngx-oidc/src/public-api.ts","../../../../projects/kephas/ngx-oidc/src/kephas-ngx-oidc.ts"],"sourcesContent":["import { AppService, Priority, SingletonAppServiceContract } from \"@kephas/core\";\r\nimport { NgTarget } from \"@kephas/ngx-core\";\r\n\r\n/**\r\n * This service should be overwritten in the end application\r\n * to provide the real identity application ID in the getIdentityAppId() method.\r\n *\r\n * @export\r\n * @class AppIdProvider\r\n */\r\n@AppService({ overridePriority: Priority.Lowest })\r\n@SingletonAppServiceContract({ target: NgTarget })\r\nexport class AppIdProvider {\r\n  /**\r\n   * Gets the identity application ID.\r\n   *\r\n   * @returns\r\n   * @memberof AppIdProvider\r\n   */\r\n  getIdentityAppId() {\r\n    return '[TODO-APP-ID]';\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { AppIdProvider } from './appIdProvider.service';\r\n\r\nexport const ReturnUrlType = 'returnUrl';\r\n\r\nexport const QueryParameterNames = {\r\n  ReturnUrl: ReturnUrlType,\r\n  Message: 'message'\r\n};\r\n\r\nexport const LogoutActions = {\r\n  LogoutCallback: 'logout-callback',\r\n  Logout: 'logout',\r\n  LoggedOut: 'logged-out'\r\n};\r\n\r\nexport const LoginActions = {\r\n  Login: 'login',\r\n  LoginCallback: 'login-callback',\r\n  LoginFailed: 'login-failed',\r\n  Profile: 'profile',\r\n  Register: 'register'\r\n};\r\n\r\nexport interface ApplicationPathsType {\r\n  readonly DefaultLoginRedirectPath: string;\r\n  readonly ApiAuthorizationClientConfigurationUrl: string;\r\n  readonly Login: string;\r\n  readonly LoginFailed: string;\r\n  readonly LoginCallback: string;\r\n  readonly Register: string;\r\n  readonly Profile: string;\r\n  readonly LogOut: string;\r\n  readonly LoggedOut: string;\r\n  readonly LogOutCallback: string;\r\n  readonly LoginPathComponents: string [];\r\n  readonly LoginFailedPathComponents: string [];\r\n  readonly LoginCallbackPathComponents: string [];\r\n  readonly RegisterPathComponents: string [];\r\n  readonly ProfilePathComponents: string [];\r\n  readonly LogOutPathComponents: string [];\r\n  readonly LoggedOutPathComponents: string [];\r\n  readonly LogOutCallbackPathComponents: string [];\r\n  readonly IdentityRegisterPath: string;\r\n  readonly IdentityManagePath: string;\r\n}\r\n\r\nexport interface ActivitySettingsType {\r\n  /**\r\n   * The maximum idle time (seconds) until an automatic disconnect happens.\r\n   * Do not set if the automatic disconnect should not be triggered.\r\n   *\r\n   * @type {number}\r\n   * @memberof ActivitySettingsType\r\n   */\r\n  readonly MaxIdleSeconds?: number;\r\n}\r\n\r\nexport interface AuthenticationSettings {\r\n  readonly identityAppId: string;\r\n  readonly returnUrl: string;\r\n  readonly applicationPaths: ApplicationPathsType;\r\n  readonly activity: ActivitySettingsType;\r\n  popUpDisabled: boolean;\r\n}\r\n\r\n@Injectable()\r\nexport class AuthenticationSettingsProvider {\r\n  public static readonly instance = new AuthenticationSettingsProvider(new AppIdProvider());\r\n\r\n  readonly settings: AuthenticationSettings;\r\n\r\n  /**\r\n   * Creates an instance of AuthenticationSettingsProvider.\r\n   * @param {AppIdProvider} appIdProvider The application ID provider.\r\n   * @memberof AuthenticationSettingsProvider\r\n   */\r\n  constructor(appIdProvider: AppIdProvider) {\r\n    this.settings = this.getSettings(appIdProvider.getIdentityAppId())\r\n  }\r\n\r\n  protected getSettings(identityAppId: string): AuthenticationSettings {\r\n    let applicationPaths: ApplicationPathsType = {\r\n      DefaultLoginRedirectPath: '/',\r\n      ApiAuthorizationClientConfigurationUrl: `/_configuration/${identityAppId}`,\r\n      Login: `authentication/${LoginActions.Login}`,\r\n      LoginFailed: `authentication/${LoginActions.LoginFailed}`,\r\n      LoginCallback: `authentication/${LoginActions.LoginCallback}`,\r\n      Register: `authentication/${LoginActions.Register}`,\r\n      Profile: `authentication/${LoginActions.Profile}`,\r\n      LogOut: `authentication/${LogoutActions.Logout}`,\r\n      LoggedOut: `authentication/${LogoutActions.LoggedOut}`,\r\n      LogOutCallback: `authentication/${LogoutActions.LogoutCallback}`,\r\n      LoginPathComponents: [],\r\n      LoginFailedPathComponents: [],\r\n      LoginCallbackPathComponents: [],\r\n      RegisterPathComponents: [],\r\n      ProfilePathComponents: [],\r\n      LogOutPathComponents: [],\r\n      LoggedOutPathComponents: [],\r\n      LogOutCallbackPathComponents: [],\r\n      IdentityRegisterPath: '/Identity/Account/Register',\r\n      IdentityManagePath: '/Identity/Account/Manage'\r\n    };\r\n\r\n    applicationPaths = {\r\n      ...applicationPaths,\r\n      LoginPathComponents: applicationPaths.Login.split('/'),\r\n      LoginFailedPathComponents: applicationPaths.LoginFailed.split('/'),\r\n      RegisterPathComponents: applicationPaths.Register.split('/'),\r\n      ProfilePathComponents: applicationPaths.Profile.split('/'),\r\n      LogOutPathComponents: applicationPaths.LogOut.split('/'),\r\n      LoggedOutPathComponents: applicationPaths.LoggedOut.split('/'),\r\n      LogOutCallbackPathComponents: applicationPaths.LogOutCallback.split('/')\r\n    };\r\n\r\n    let activity: ActivitySettingsType = {\r\n    };\r\n\r\n    return {\r\n      identityAppId: identityAppId,\r\n      returnUrl: ReturnUrlType,\r\n      applicationPaths: applicationPaths,\r\n      activity: activity,\r\n      // By default pop ups are disabled because they don't work properly on Edge.\r\n      // If you want to enable pop up authentication simply set this flag to false.\r\n      popUpDisabled: true,\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { AppService, SingletonAppServiceContract } from '@kephas/core';\r\nimport { Profile, User, UserManager, } from 'oidc-client';\r\nimport { BehaviorSubject, concat, from, Observable } from 'rxjs';\r\nimport { filter, map, mergeMap, take, tap } from 'rxjs/operators';\r\nimport { AuthenticationSettingsProvider } from './authentication.settings';\r\n\r\nexport type IAuthenticationResult =\r\n  SuccessAuthenticationResult |\r\n  FailureAuthenticationResult |\r\n  RedirectAuthenticationResult;\r\n\r\nexport interface SuccessAuthenticationResult {\r\n  status: AuthenticationResultStatus.Success;\r\n  state: any;\r\n}\r\n\r\nexport interface FailureAuthenticationResult {\r\n  status: AuthenticationResultStatus.Fail;\r\n  message: string | Error;\r\n}\r\n\r\nexport interface RedirectAuthenticationResult {\r\n  status: AuthenticationResultStatus.Redirect;\r\n}\r\n\r\nexport enum AuthenticationResultStatus {\r\n  Success,\r\n  Redirect,\r\n  Fail\r\n}\r\n\r\nexport interface IUser extends Profile {\r\n  name?: string;\r\n}\r\n\r\n@Injectable()\r\nexport class AuthenticationService {\r\n  private _lastActivityTime?: Date;\r\n\r\n  /**\r\n   * Creates an instance of AuthorizeService.\r\n   * @param {AuthenticationSettingsProvider} settingsProvider The settings provider.\r\n   * @memberof AuthorizeService\r\n   */\r\n  constructor(protected readonly settingsProvider: AuthenticationSettingsProvider) {\r\n  }\r\n\r\n  protected userManager?: UserManager;\r\n  protected readonly userSubject: BehaviorSubject<IUser | null> = new BehaviorSubject(null as IUser | null);\r\n  protected readonly rawUserSubject: BehaviorSubject<User | null> = new BehaviorSubject(null as User | null);\r\n\r\n  /**\r\n   * Gets the time of user's last activity.\r\n   *\r\n   * @readonly\r\n   * @type {(Date | undefined)}\r\n   * @memberof AuthorizeService\r\n   */\r\n  public get lastActivityTime(): Date | undefined {\r\n    return this._lastActivityTime;\r\n  }\r\n\r\n  /**\r\n   * Gets an observable indicating whether the user is authenticated.\r\n   *\r\n   * @return {*}  {Observable<boolean>}\r\n   * @memberof AuthorizeService\r\n   */\r\n  public isAuthenticated(): Observable<boolean> {\r\n    return this.getUser().pipe(map(u => !!u));\r\n  }\r\n\r\n  /**\r\n   * Gets an observable retrieving the user.\r\n   *\r\n   * @return {*}  {(Observable<IUser | null | undefined>)}\r\n   * @memberof AuthorizeService\r\n   */\r\n  public getUser(): Observable<IUser | null | undefined> {\r\n    return concat(\r\n      this.userSubject.pipe(take(1), filter(u => !!u)),\r\n      this.getUserFromStorage().pipe(filter(u => !!u), tap(u => this.setUser(u!)), map(u => u?.profile)),\r\n      this.userSubject.asObservable());\r\n  }\r\n\r\n  /**\r\n   * Gets an observable containing the access token of the signed-in user.\r\n   *\r\n   * @return {*}  {(Observable<string | undefined>)}\r\n   * @memberof AuthorizeService\r\n   */\r\n  public getAccessToken(): Observable<string | undefined> {\r\n    return from(this.ensureUserManagerInitialized())\r\n      .pipe(mergeMap(() => from(this.userManager!.getUser())),\r\n        map(user => user?.access_token));\r\n  }\r\n\r\n  /**\r\n   * Notifies the authorization service that the user is active.\r\n   *\r\n   * @memberof AuthorizeService\r\n   */\r\n  public touch() {\r\n    this._lastActivityTime = new Date();\r\n  }\r\n\r\n  /**\r\n   * Sign in the user.\r\n   * We try to authenticate the user in three different ways:\r\n   * 1) We try to see if we can authenticate the user silently. This happens\r\n   *    when the user is already logged in on the IdP and is done using a hidden iframe\r\n   *    on the client.\r\n   * 2) We try to authenticate the user using a PopUp Window. This might fail if there is a\r\n   *    Pop-Up blocker or the user has disabled PopUps.\r\n   * 3) If the two methods above fail, we redirect the browser to the IdP to perform a traditional\r\n   *    redirect flow.\r\n   *\r\n   * @param {*} state\r\n   * @return {*}  {Promise<IAuthenticationResult>}\r\n   * @memberof AuthorizeService\r\n   */\r\n  public async signIn(state: any): Promise<IAuthenticationResult> {\r\n    await this.ensureUserManagerInitialized();\r\n    let user: User | null = null;\r\n    try {\r\n      user = await this.userManager!.signinSilent(this.createArguments());\r\n      this.setUser(user);\r\n      return this.success(state);\r\n    } catch (silentError) {\r\n      // User might not be authenticated, fallback to popup authentication\r\n      console.log('Silent authentication error: ', silentError);\r\n\r\n      const popUpDisabled = this.settingsProvider.settings.popUpDisabled;\r\n      try {\r\n        this.ensurePopupEnabled();\r\n\r\n        user = await this.userManager!.signinPopup(this.createArguments());\r\n        this.setUser(user);\r\n        return this.success(state);\r\n      } catch (popupError) {\r\n        if ((popupError as Error).message === 'Popup window closed') {\r\n          // The user explicitly cancelled the login action by closing an opened popup.\r\n          return this.error('The user closed the window.');\r\n        } else if (!popUpDisabled) {\r\n          console.log('Popup authentication error: ', popupError);\r\n        }\r\n\r\n        // PopUps might be blocked by the user, fallback to redirect\r\n        try {\r\n          await this.userManager!.signinRedirect(this.createArguments(state));\r\n          return this.redirect();\r\n        } catch (redirectError) {\r\n          console.log('Redirect authentication error: ', redirectError);\r\n          return this.error(redirectError as Error);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  public async completeSignIn(url: string): Promise<IAuthenticationResult> {\r\n    try {\r\n      await this.ensureUserManagerInitialized();\r\n      const user = await this.userManager!.signinCallback(url);\r\n      this.setUser(user);\r\n      return this.success(user?.state);\r\n    } catch (error) {\r\n      console.log('There was an error signing in: ', error);\r\n      return this.error('There was an error signing in.');\r\n    }\r\n  }\r\n\r\n  public async signOut(state: any): Promise<IAuthenticationResult> {\r\n    try {\r\n      this.ensurePopupEnabled();\r\n\r\n      await this.ensureUserManagerInitialized();\r\n      await this.userManager!.signoutPopup(this.createArguments());\r\n      this.setUser(null);\r\n      return this.success(state);\r\n    } catch (popupSignOutError) {\r\n      console.log('Popup signout error: ', popupSignOutError);\r\n      try {\r\n        await this.userManager!.signoutRedirect(this.createArguments(state));\r\n        return this.redirect();\r\n      } catch (redirectSignOutError) {\r\n        console.log('Redirect signout error: ', popupSignOutError);\r\n        return this.error(redirectSignOutError as Error);\r\n      }\r\n    }\r\n  }\r\n\r\n  public async completeSignOut(url: string): Promise<IAuthenticationResult> {\r\n    await this.ensureUserManagerInitialized();\r\n    try {\r\n      const response = await this.userManager!.signoutCallback(url);\r\n      this.setUser(null);\r\n      return this.success(response && response.state);\r\n    } catch (error) {\r\n      console.log(`There was an error trying to log out '${error}'.`);\r\n      return this.error(error as Error);\r\n    }\r\n  }\r\n\r\n  protected async ensureUserManagerInitialized(): Promise<void> {\r\n    if (this.userManager !== undefined) {\r\n      return;\r\n    }\r\n\r\n    const authSettings = this.settingsProvider.settings;\r\n    const response = await fetch(authSettings.applicationPaths.ApiAuthorizationClientConfigurationUrl);\r\n    if (!response.ok) {\r\n      throw new Error(`Could not load settings for '${authSettings.identityAppId}'`);\r\n    }\r\n\r\n    const settings: any = await response.json();\r\n    settings.automaticSilentRenew = true;\r\n    settings.includeIdTokenInSilentRenew = true;\r\n    this.userManager = new UserManager(settings);\r\n\r\n    this.userManager.events.addUserSignedOut(async () => {\r\n      await this.userManager!.removeUser();\r\n      this.setUser(null);\r\n    });\r\n  }\r\n\r\n  private ensurePopupEnabled() {\r\n    if (this.settingsProvider.settings.popUpDisabled) {\r\n      throw new Error('Popup disabled. Instruct the AuthorizationSettingsProvider service to return false in \\'settings.popupDisabled\\' to enable it.');\r\n    }\r\n  }\r\n\r\n  private createArguments(state?: any): any {\r\n    return { useReplaceToNavigate: true, data: state };\r\n  }\r\n\r\n  private error(message: string | Error): IAuthenticationResult {\r\n    return { status: AuthenticationResultStatus.Fail, message };\r\n  }\r\n\r\n  private success(state: any): IAuthenticationResult {\r\n    return { status: AuthenticationResultStatus.Success, state };\r\n  }\r\n\r\n  private redirect(): IAuthenticationResult {\r\n    return { status: AuthenticationResultStatus.Redirect };\r\n  }\r\n\r\n  private getUserFromStorage(): Observable<User | null> {\r\n    return from(this.ensureUserManagerInitialized())\r\n      .pipe(\r\n        mergeMap(() => this.userManager!.getUser()));\r\n  }\r\n\r\n  private setUser(user: User | null) {\r\n    const currentUser = this.rawUserSubject.value;\r\n\r\n    // make sure not to issue a change if the user is not really changed.\r\n    if (currentUser == user || currentUser?.id_token == user?.id_token) {\r\n      return;\r\n    }\r\n\r\n    this.rawUserSubject.next(user);\r\n    this.userSubject.next(user?.profile || null);\r\n  }\r\n}\r\n","import { HttpHandler, HttpEvent, HttpRequest, HttpInterceptor } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { AuthenticationService } from './authentication.service';\r\nimport { mergeMap } from 'rxjs/operators';\r\nimport { Injectable } from '@angular/core';\r\n\r\n/**\r\n * Interceptor handling the authorization.\r\n *\r\n * @export\r\n * @class AuthorizeInterceptor\r\n * @implements {HttpInterceptor}\r\n */\r\n@Injectable()\r\nexport class AuthorizeInterceptor implements HttpInterceptor {\r\n  /**\r\n   * Creates an instance of AuthorizeInterceptor.\r\n   * @param {AuthenticationService} authorize The authorization service.\r\n   * @memberof AuthorizeInterceptor\r\n   */\r\n  constructor(private authorize: AuthenticationService) {\r\n  }\r\n\r\n  /**\r\n   * Intercepts the request.\r\n   *\r\n   * @param {HttpRequest<any>} request\r\n   * @param {HttpHandler} next\r\n   * @return {*}  {Observable<HttpEvent<any>>}\r\n   * @memberof AuthorizeInterceptor\r\n   */\r\n  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n    return this.authorize.getAccessToken()\r\n      .pipe(mergeMap(token => this.processRequestWithToken(token, request, next)));\r\n  }\r\n\r\n  // Checks if there is an access_token available in the authorize service\r\n  // and adds it to the request in case it's targeted at the same origin as the\r\n  // single page application.\r\n  private processRequestWithToken(token: string | undefined, req: HttpRequest<any>, next: HttpHandler) {\r\n    if (!!token && this.isSameOriginUrl(req)) {\r\n      req = req.clone({\r\n        setHeaders: {\r\n          Authorization: `Bearer ${token}`\r\n        }\r\n      });\r\n    }\r\n\r\n    return next.handle(req);\r\n  }\r\n\r\n  private isSameOriginUrl(req: any) {\r\n    // It's an absolute url with the same origin.\r\n    if (req.url.startsWith(`${window.location.origin}/`)) {\r\n      return true;\r\n    }\r\n\r\n    // It's a protocol relative url with the same origin.\r\n    // For example: //www.example.com/api/Products\r\n    if (req.url.startsWith(`//${window.location.host}/`)) {\r\n      return true;\r\n    }\r\n\r\n    // It's a relative url like /api/Products\r\n    if (/^\\/[^\\/].*/.test(req.url)) {\r\n      return true;\r\n    }\r\n\r\n    // It's an absolute or protocol relative url that\r\n    // doesn't have the same origin.\r\n    return false;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\nimport { tap } from 'rxjs/operators';\r\nimport { AuthenticationService } from './authentication.service';\r\nimport { AuthenticationSettingsProvider, QueryParameterNames } from './authentication.settings';\r\n\r\n@Injectable()\r\nexport class AuthorizeGuard implements CanActivate {\r\n  constructor(\r\n    private authService: AuthenticationService,\r\n    private router: Router,\r\n    private settingsProvider: AuthenticationSettingsProvider) {\r\n  }\r\n  canActivate(\r\n    _next: ActivatedRouteSnapshot,\r\n    state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {\r\n      return this.authService.isAuthenticated()\r\n        .pipe(tap(isAuthenticated => this.handleAuthorization(isAuthenticated, state)));\r\n  }\r\n\r\n  private handleAuthorization(isAuthenticated: boolean, state: RouterStateSnapshot) {\r\n    if (!isAuthenticated) {\r\n      const settings = this.settingsProvider.settings;\r\n      this.router.navigate(settings.applicationPaths.LoginPathComponents, {\r\n        queryParams: {\r\n          [QueryParameterNames.ReturnUrl]: state.url\r\n        }\r\n      });\r\n    }\r\n  }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { AuthenticationResultStatus, AuthenticationService } from '../authentication.service';\r\nimport { AuthenticationSettingsProvider, LoginActions, QueryParameterNames } from '../authentication.settings';\r\nimport { NavigationState } from '../navigationState';\r\n\r\n// The main responsibility of this component is to handle the user's login process.\r\n// This is the starting point for the login process. Any component that needs to authenticate\r\n// a user can simply perform a redirect to this component with a returnUrl query parameter and\r\n// let the component perform the login and return back to the return url.\r\n@Component({\r\n  selector: 'app-login',\r\n  templateUrl: './login.component.html',\r\n  styleUrls: ['./login.component.css']\r\n})\r\nexport class LoginComponent implements OnInit {\r\n  public message = new BehaviorSubject<string | Error | null>(null);\r\n\r\n  constructor(\r\n    private authenticationService: AuthenticationService,\r\n    private activatedRoute: ActivatedRoute,\r\n    private router: Router,\r\n    private authSettingsProvider: AuthenticationSettingsProvider) { }\r\n\r\n  async ngOnInit() {\r\n    const action = this.activatedRoute.snapshot.url[1];\r\n    switch (action.path) {\r\n      case LoginActions.Login:\r\n        await this.login(this.getReturnUrl());\r\n        break;\r\n      case LoginActions.LoginCallback:\r\n        await this.processLoginCallback();\r\n        break;\r\n      case LoginActions.LoginFailed:\r\n        const message = this.activatedRoute.snapshot.queryParamMap.get(QueryParameterNames.Message);\r\n        this.message.next(message);\r\n        break;\r\n      case LoginActions.Profile:\r\n        this.redirectToProfile();\r\n        break;\r\n      case LoginActions.Register:\r\n        this.redirectToRegister();\r\n        break;\r\n      default:\r\n        throw new Error(`Invalid action '${action}'`);\r\n    }\r\n  }\r\n\r\n  private async login(returnUrl: string): Promise<void> {\r\n    const state: NavigationState = { returnUrl };\r\n    const result = await this.authenticationService.signIn(state);\r\n    this.message.next(null);\r\n\r\n    const applicationPaths = this.authSettingsProvider.settings.applicationPaths;\r\n    switch (result.status) {\r\n      case AuthenticationResultStatus.Redirect:\r\n        break;\r\n      case AuthenticationResultStatus.Success:\r\n        await this.navigateToReturnUrl(returnUrl);\r\n        break;\r\n      case AuthenticationResultStatus.Fail:\r\n        await this.router.navigate(applicationPaths.LoginFailedPathComponents, {\r\n          queryParams: { [QueryParameterNames.Message]: result.message }\r\n        });\r\n        break;\r\n      default:\r\n        throw new Error(`Invalid status result ${(result as any).status}.`);\r\n    }\r\n  }\r\n\r\n  private async processLoginCallback(): Promise<void> {\r\n    const url = window.location.href;\r\n    const result = await this.authenticationService.completeSignIn(url);\r\n    switch (result.status) {\r\n      case AuthenticationResultStatus.Redirect:\r\n        // There should not be any redirects as completeSignIn never redirects.\r\n        throw new Error('Should not redirect.');\r\n      case AuthenticationResultStatus.Success:\r\n        await this.navigateToReturnUrl(this.getReturnUrl(result.state));\r\n        break;\r\n      case AuthenticationResultStatus.Fail:\r\n        this.message.next(result.message);\r\n        break;\r\n    }\r\n  }\r\n\r\n  private redirectToRegister(): any {\r\n    const applicationPaths = this.authSettingsProvider.settings.applicationPaths;\r\n    this.redirectToApiAuthorizationPath(\r\n      `${applicationPaths.IdentityRegisterPath}?returnUrl=${encodeURI('/' + applicationPaths.Login)}`);\r\n  }\r\n\r\n  private redirectToProfile(): void {\r\n    const applicationPaths = this.authSettingsProvider.settings.applicationPaths;\r\n    this.redirectToApiAuthorizationPath(applicationPaths.IdentityManagePath);\r\n  }\r\n\r\n  private async navigateToReturnUrl(returnUrl: string) {\r\n    // It's important that we do a replace here so that we remove the callback uri with the\r\n    // fragment containing the tokens from the browser history.\r\n    await this.router.navigateByUrl(returnUrl, {\r\n      replaceUrl: true\r\n    });\r\n  }\r\n\r\n  private getReturnUrl(state?: NavigationState): string {\r\n    const applicationPaths = this.authSettingsProvider.settings.applicationPaths;\r\n    const fromQuery = (this.activatedRoute.snapshot.queryParams as NavigationState).returnUrl;\r\n    // If the url is comming from the query string, check that is either\r\n    // a relative url or an absolute url\r\n    if (fromQuery &&\r\n      !(fromQuery.startsWith(`${window.location.origin}/`) ||\r\n        /\\/[^\\/].*/.test(fromQuery))) {\r\n      // This is an extra check to prevent open redirects.\r\n      throw new Error('Invalid return url. The return url needs to have the same origin as the current page.');\r\n    }\r\n    return (state && state.returnUrl) ||\r\n      fromQuery ||\r\n      applicationPaths.DefaultLoginRedirectPath;\r\n  }\r\n\r\n  private redirectToApiAuthorizationPath(apiAuthorizationPath: string) {\r\n    // It's important that we do a replace here so that when the user hits the back arrow on the\r\n    // browser they get sent back to where it was on the app instead of to an endpoint on this\r\n    // component.\r\n    const redirectUrl = `${window.location.origin}${apiAuthorizationPath}`;\r\n    window.location.replace(redirectUrl);\r\n  }\r\n}\r\n","<p>{{ message | async }}</p>","import { Component, OnInit } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { take } from 'rxjs/operators';\r\nimport { AuthenticationResultStatus, AuthenticationService } from '../authentication.service';\r\nimport { AuthenticationSettingsProvider, LogoutActions } from '../authentication.settings';\r\nimport { NavigationState } from '../navigationState';\r\n\r\n// The main responsibility of this component is to handle the user's logout process.\r\n// This is the starting point for the logout process, which is usually initiated when a\r\n// user clicks on the logout button on the LoginMenu component.\r\n@Component({\r\n  selector: 'app-logout',\r\n  templateUrl: './logout.component.html',\r\n  styleUrls: ['./logout.component.css']\r\n})\r\nexport class LogoutComponent implements OnInit {\r\n  public message = new BehaviorSubject<string | Error | null>(null);\r\n\r\n  constructor(\r\n    private authenticationService: AuthenticationService,\r\n    private activatedRoute: ActivatedRoute,\r\n    private router: Router,\r\n    private authSettingsProvider: AuthenticationSettingsProvider) { }\r\n\r\n  async ngOnInit() {\r\n    const action = this.activatedRoute.snapshot.url[1];\r\n    switch (action.path) {\r\n      case LogoutActions.Logout:\r\n        if (!!window.history.state.local) {\r\n          await this.logout(this.getReturnUrl());\r\n        } else {\r\n          // This prevents regular links to <app>/authentication/logout from triggering a logout\r\n          this.message.next('The logout was not initiated from within the page.');\r\n        }\r\n\r\n        break;\r\n      case LogoutActions.LogoutCallback:\r\n        await this.processLogoutCallback();\r\n        break;\r\n      case LogoutActions.LoggedOut:\r\n        this.message.next('You successfully logged out!');\r\n        break;\r\n      default:\r\n        throw new Error(`Invalid action '${action}'`);\r\n    }\r\n  }\r\n\r\n  private async logout(returnUrl: string): Promise<void> {\r\n    const state: NavigationState = { returnUrl };\r\n    const isauthenticated = await this.authenticationService.isAuthenticated().pipe(\r\n      take(1)\r\n    ).toPromise();\r\n    if (isauthenticated) {\r\n      const result = await this.authenticationService.signOut(state);\r\n      switch (result.status) {\r\n        case AuthenticationResultStatus.Redirect:\r\n          break;\r\n        case AuthenticationResultStatus.Success:\r\n          await this.navigateToReturnUrl(returnUrl);\r\n          break;\r\n        case AuthenticationResultStatus.Fail:\r\n          this.message.next(result.message);\r\n          break;\r\n        default:\r\n          throw new Error('Invalid authentication result status.');\r\n      }\r\n    } else {\r\n      this.message.next('You successfully logged out!');\r\n    }\r\n  }\r\n\r\n  private async processLogoutCallback(): Promise<void> {\r\n    const url = window.location.href;\r\n    const result = await this.authenticationService.completeSignOut(url);\r\n    switch (result.status) {\r\n      case AuthenticationResultStatus.Redirect:\r\n        // There should not be any redirects as the only time completeAuthentication finishes\r\n        // is when we are doing a redirect sign in flow.\r\n        throw new Error('Should not redirect.');\r\n      case AuthenticationResultStatus.Success:\r\n        await this.navigateToReturnUrl(this.getReturnUrl(result.state));\r\n        break;\r\n      case AuthenticationResultStatus.Fail:\r\n        this.message.next(result.message);\r\n        break;\r\n      default:\r\n        throw new Error('Invalid authentication result status.');\r\n    }\r\n  }\r\n\r\n  private async navigateToReturnUrl(returnUrl: string) {\r\n    await this.router.navigateByUrl(returnUrl, {\r\n      replaceUrl: true\r\n    });\r\n  }\r\n\r\n  private getReturnUrl(state?: NavigationState): string {\r\n    const fromQuery = (this.activatedRoute.snapshot.queryParams as NavigationState).returnUrl;\r\n    // If the url is comming from the query string, check that is either\r\n    // a relative url or an absolute url\r\n    if (fromQuery &&\r\n      !(fromQuery.startsWith(`${window.location.origin}/`) ||\r\n        /\\/[^\\/].*/.test(fromQuery))) {\r\n      // This is an extra check to prevent open redirects.\r\n      throw new Error('Invalid return url. The return url needs to have the same origin as the current page.');\r\n    }\r\n    return (state && state.returnUrl) ||\r\n      fromQuery ||\r\n      this.authSettingsProvider.settings.applicationPaths.LoggedOut;\r\n  }\r\n}\r\n","<p>{{ message | async }}</p>","import { Component, OnInit } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map, tap } from 'rxjs/operators';\r\nimport { AuthenticationService } from '../authentication.service';\r\n\r\n@Component({\r\n  selector: 'app-login-menu',\r\n  templateUrl: './login-menu.component.html',\r\n  styleUrls: ['./login-menu.component.css']\r\n})\r\nexport class LoginMenuComponent implements OnInit {\r\n  public isAuthenticated?: Observable<boolean>;\r\n  public userName?: Observable<string | undefined>;\r\n\r\n  constructor(private authenticationService: AuthenticationService) { }\r\n\r\n  ngOnInit() {\r\n    this.isAuthenticated = this.authenticationService.isAuthenticated();\r\n    this.userName = this.authenticationService.getUser().pipe(map(u => u?.name));\r\n  }\r\n}\r\n","<ul class=\"navbar-nav\" *ngIf=\"isAuthenticated | async\">\r\n    <li class=\"nav-item\">\r\n        <a  class=\"nav-link\" [routerLink]='[\"/authentication/profile\"]' title=\"Manage\">Hello {{ userName | async }}</a>\r\n    </li>\r\n    <li class=\"nav-item\">\r\n        <a  class=\"nav-link\" [routerLink]='[\"/authentication/logout\"]' [state]='{ local: true }' title=\"Logout\">Logout</a>\r\n    </li>\r\n</ul>\r\n<ul class=\"navbar-nav\" *ngIf=\"!(isAuthenticated | async)\">\r\n  <li class=\"nav-item\">\r\n        <a class=\"nav-link\" [routerLink]='[\"/authentication/register\"]'>Register</a>\r\n    </li>\r\n    <li class=\"nav-item\">\r\n        <a class=\"nav-link\" [routerLink]='[\"/authentication/login\"]'>Login</a>\r\n    </li>\r\n</ul>\r\n","import { Injector, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { LoginMenuComponent } from './login-menu/login-menu.component';\r\nimport { LoginComponent } from './login/login.component';\r\nimport { LogoutComponent } from './logout/logout.component';\r\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { RouterModule } from '@angular/router';\r\nimport { AuthenticationSettingsProvider } from './authentication.settings';\r\nimport { AppIdProvider } from './appIdProvider.service';\r\nimport { resolveAppService } from '@kephas/ngx-core';\r\nimport { AuthenticationService } from './authentication.service';\r\nimport { AuthorizeGuard } from './authorize.guard';\r\nimport { AuthorizeInterceptor } from './authorize.interceptor';\r\n\r\nconst applicationPaths = AuthenticationSettingsProvider.instance.settings.applicationPaths;\r\n\r\n@NgModule({\r\n  imports: [\r\n    CommonModule,\r\n    HttpClientModule,\r\n    RouterModule.forChild(\r\n      [\r\n        { path: applicationPaths.Register, component: LoginComponent },\r\n        { path: applicationPaths.Profile, component: LoginComponent },\r\n        { path: applicationPaths.Login, component: LoginComponent },\r\n        { path: applicationPaths.LoginFailed, component: LoginComponent },\r\n        { path: applicationPaths.LoginCallback, component: LoginComponent },\r\n        { path: applicationPaths.LogOut, component: LogoutComponent },\r\n        { path: applicationPaths.LoggedOut, component: LogoutComponent },\r\n        { path: applicationPaths.LogOutCallback, component: LogoutComponent }\r\n      ]\r\n    )\r\n  ],\r\n  declarations: [LoginMenuComponent, LoginComponent, LogoutComponent],\r\n  exports: [LoginMenuComponent, LoginComponent, LogoutComponent],\r\n  providers: [\r\n    {\r\n      provide: AppIdProvider,\r\n      useFactory: resolveAppService(AppIdProvider),\r\n      deps: [Injector]\r\n    },\r\n    AuthenticationSettingsProvider,\r\n    AuthenticationService,\r\n    AuthorizeGuard,\r\n    {\r\n      provide: HTTP_INTERCEPTORS,\r\n      multi: true,\r\n      useClass: AuthorizeInterceptor,\r\n     }\r\n  ]\r\n})\r\nexport class OidcModule { }\r\n","/*\r\n * Public API Surface of angular-oidc\r\n */\r\n\r\nexport * from './lib/appIdProvider.service';\r\nexport * from './lib/authentication.settings';\r\nexport * from './lib/navigationState';\r\nexport * from './lib/authentication.service';\r\nexport * from './lib/authorize.interceptor';\r\nexport * from './lib/authorize.guard';\r\n\r\nexport * from './lib/login/login.component';\r\nexport * from './lib/logout/logout.component';\r\nexport * from './lib/login-menu/login-menu.component';\r\n\r\nexport * from './lib/oidc.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}