File

feature-libs/asm/root/services/asm-auth-storage.service.ts

Description

With AsmAuthStorageService apart from storing the token we also need to store information for which user is the token (regular user or CS Agent).

Overrides AuthStorageService.

Extends

AuthStorageService

Index

Properties
Methods

Methods

clearEmulatedUserToken
clearEmulatedUserToken()

When we start emulation from the UI (not by ASM login) we can't restore user session on cs agent logout. Only available solution is to drop session we could restore, to avoid account hijack.

Returns : void
getEmulatedUserToken
getEmulatedUserToken()

Get token for previously user session, when it was interrupted by CS agent login.

previously logged in user token.

getTokenTarget
getTokenTarget()

Get target user for current auth token.

observable with TokenTarget

setEmulatedUserToken
setEmulatedUserToken(token: AuthToken)

Save user token on CS agent login.

Parameters :
Name Type Optional
token AuthToken No
Returns : void
setTokenTarget
setTokenTarget(tokenTarget: TokenTarget)

Set new token target.

Parameters :
Name Type Optional
tokenTarget TokenTarget No
Returns : void
switchTokenTargetToCSAgent
switchTokenTargetToCSAgent()

Change token target to CS Agent.

Returns : void
switchTokenTargetToUser
switchTokenTargetToUser()

Change token target to user.

Returns : void
Protected decode
decode(key: string, value: any)
Inherited from AuthStorageService
Parameters :
Name Type Optional
key string No
value any No
Returns : any
Protected encode
encode(key: string, value: any)
Inherited from AuthStorageService
Parameters :
Name Type Optional
key string No
value any No
Returns : any
getItem
getItem(key: string)
Inherited from AuthStorageService

Get parameter from the token (eg. access_token)

Parameters :
Name Type Optional
key string No
Returns : any
getToken
getToken()
Inherited from AuthStorageService

Returns complete token (all fields).

observable emitting AuthToken

removeItem
removeItem(key: string)
Inherited from AuthStorageService

Removes parameter from the token (eg. access_token)

Parameters :
Name Type Optional
key string No
Returns : void
setItem
setItem(key: string, data: any)
Inherited from AuthStorageService

Sets parameter of the token (eg. access_token)

Parameters :
Name Type Optional
key string No
data any No
Returns : void
setToken
setToken(token: AuthToken)
Inherited from AuthStorageService

Set current value of token.

Parameters :
Name Type Optional
token AuthToken No
Returns : void

Properties

Protected _tokenTarget$
Type : Observable<TokenTarget>
Default value : new BehaviorSubject<TokenTarget>(TokenTarget.User)
Protected Optional emulatedUserToken
Type : AuthToken

When CS Agent logs in during regular user session we store the regular user token to restore the session after CS Agent logout.

This supports in-store use case when CS Agent want's to quickly help customer and then give an option to customer to continue the process.

Protected _token$
Type : Observable<AuthToken>
Default value : new BehaviorSubject<AuthToken>( {} as AuthToken )
Inherited from AuthStorageService
Protected Static Readonly nonStringifiedOAuthLibKeys
Type : []
Default value : [ 'PKCE_verifier', 'access_token', 'refresh_token', 'expires_at', 'access_token_stored_at', 'id_token', 'id_token_expires_at', 'id_token_stored_at', 'session_state', 'nonce', ]
Inherited from AuthStorageService

Extracted keys that are not JSON.stringify from reading the angular-oauth2-oidc source code

import { Injectable } from '@angular/core';
import { AuthStorageService, AuthToken } from '@spartacus/core';
import { BehaviorSubject, Observable } from 'rxjs';

/**
 * Indicates if auth token is for regular user or CS Agent.
 */
export enum TokenTarget {
  CSAgent = 'CSAgent',
  User = 'User',
}

/**
 * With AsmAuthStorageService apart from storing the token we also need to store
 * information for which user is the token (regular user or CS Agent).
 *
 * Overrides `AuthStorageService`.
 */
@Injectable({
  providedIn: 'root',
})
export class AsmAuthStorageService extends AuthStorageService {
  protected _tokenTarget$: Observable<TokenTarget> =
    new BehaviorSubject<TokenTarget>(TokenTarget.User);

  /**
   * When CS Agent logs in during regular user session we store the regular
   * user token to restore the session after CS Agent logout.
   *
   * This supports in-store use case when CS Agent want's to quickly help
   * customer and then give an option to customer to continue the process.
   */
  protected emulatedUserToken?: AuthToken;

  /**
   * Get target user for current auth token.
   *
   * @return observable with TokenTarget
   */
  getTokenTarget(): Observable<TokenTarget> {
    return this._tokenTarget$;
  }

  /**
   * Set new token target.
   *
   * @param tokenTarget
   */
  setTokenTarget(tokenTarget: TokenTarget): void {
    (this._tokenTarget$ as BehaviorSubject<TokenTarget>).next(tokenTarget);
  }

  /**
   * Get token for previously user session, when it was interrupted by CS agent login.
   *
   * @return previously logged in user token.
   */
  getEmulatedUserToken(): AuthToken | undefined {
    return this.emulatedUserToken;
  }

  /**
   * Save user token on CS agent login.
   *
   * @param token
   */
  setEmulatedUserToken(token: AuthToken): void {
    this.emulatedUserToken = token;
  }

  /**
   * Change token target to CS Agent.
   */
  switchTokenTargetToCSAgent(): void {
    (this._tokenTarget$ as BehaviorSubject<TokenTarget>).next(
      TokenTarget.CSAgent
    );
  }

  /**
   * Change token target to user.
   */
  switchTokenTargetToUser(): void {
    (this._tokenTarget$ as BehaviorSubject<TokenTarget>).next(TokenTarget.User);
  }

  /**
   * When we start emulation from the UI (not by ASM login) we can't restore user session on cs agent logout.
   * Only available solution is to drop session we could restore, to avoid account hijack.
   */
  clearEmulatedUserToken(): void {
    this.emulatedUserToken = undefined;
  }
}

result-matching ""

    No results matching ""