File

src/lib/fs/caas/caas-forbidden.handler.ts

Description

This HTTP handler manages forbidden errors (403) and catches CaaS forbidden errors by displaying an error message.

Extends

HttpErrorHandler

Index

Properties
Methods

Constructor

constructor(fsSpartacusBridgeConfig: FsSpartacusBridgeConfig, tppStatusService: TppStatusService, baseSiteService: BaseSiteService, globalMessageService: GlobalMessageService)

Creates an instance of a CaasForbiddenHandler.

Parameters :
Name Type Optional Description
fsSpartacusBridgeConfig FsSpartacusBridgeConfig No

The Spartacus bridge configuration to use.

tppStatusService TppStatusService No

The TPP status service to use.

baseSiteService BaseSiteService No

The base site service to use.

globalMessageService GlobalMessageService No

The global message service to use.

Methods

getPriority
getPriority()

This method returns the priority of this handler. Priority is NORMAL.

Returns : Priority

The priority of this handler, which is NORMAL.

Private handleCaasError
handleCaasError(previewMode: boolean)
Parameters :
Name Type Optional
previewMode boolean No
Returns : void
handleError
handleError(request: HttpRequest, errorResponse: HttpErrorResponse)

This method handles an error by displaying an error message. If the error is related to the CaaS a specific message is shown.

Parameters :
Name Type Optional Description
request HttpRequest<any> No

The request which leads to the error.

errorResponse HttpErrorResponse No

The received error response.

Returns : void
Private handleNonCaasError
handleNonCaasError()
Returns : void
Private isCaasRequest
isCaasRequest(request: HttpRequest)
Parameters :
Name Type Optional
request HttpRequest<any> No
Returns : any

Properties

errorMessageKey
Type : string
Default value : 'forbidden'
responseStatus
Type : number
Default value : 403
import { TppStatusService } from '../cms/page/tpp-status-service';
import { BaseSiteService, GlobalMessageService, GlobalMessageType, HttpErrorHandler, Priority } from '@spartacus/core';
import { Injectable } from '@angular/core';
import { HttpErrorResponse, HttpRequest } from '@angular/common/http';
import { FsSpartacusBridgeConfig } from 'fs-spartacus-common';
import { first, take } from 'rxjs/operators';

/**
 * This HTTP handler manages forbidden errors (403) and catches CaaS forbidden errors by displaying an error message.
 *
 * @export
 * @class CaasForbiddenHandler
 * @extends {HttpErrorHandler}
 */
@Injectable({
  providedIn: 'root',
})
export class CaasForbiddenHandler extends HttpErrorHandler {
  responseStatus = 403;
  errorMessageKey = 'forbidden';

  /**
   * Creates an instance of a CaasForbiddenHandler.
   *
   * @param {FsSpartacusBridgeConfig} fsSpartacusBridgeConfig The Spartacus bridge configuration to use.
   * @param {TppStatusService} tppStatusService The TPP status service to use.
   * @param {BaseSiteService} baseSiteService The base site service to use.
   * @param {GlobalMessageService} globalMessageService The global message service to use.
   * @memberof CaasForbiddenHandler
   */
  constructor(
    private fsSpartacusBridgeConfig: FsSpartacusBridgeConfig,
    private tppStatusService: TppStatusService,
    private baseSiteService: BaseSiteService,
    globalMessageService: GlobalMessageService
  ) {
    super(globalMessageService);
  }

  /**
   * This method returns the priority of this handler.
   * Priority is NORMAL.
   *
   * @return {Priority} The priority of this handler, which is NORMAL.
   * @memberof CaasForbiddenHandler
   */
  getPriority(): Priority {
    return Priority.NORMAL;
  }

  /**
   * This method handles an error by displaying an error message.
   * If the error is related to the CaaS a specific message is shown.
   *
   * @param {HttpRequest<any>} request The request which leads to the error.
   * @param {HttpErrorResponse} errorResponse The received error response.
   * @memberof CaasForbiddenHandler
   */
  handleError(request: HttpRequest<any>, errorResponse: HttpErrorResponse): void {
    this.tppStatusService
      .isFirstSpiritPreview()
      .pipe(take(1))
      .subscribe((previewMode: boolean) => {
        if (this.isCaasRequest(request)) {
          this.handleCaasError(previewMode);
        } else {
          this.handleNonCaasError();
        }
      });
  }

  private isCaasRequest(request: HttpRequest<any>) {
    let baseSite;
    this.baseSiteService
      .getActive()
      .pipe(first())
      .subscribe((activeBaseSite) => (baseSite = activeBaseSite));
    return request && request.url.includes(this.fsSpartacusBridgeConfig.bridge[baseSite].caas.baseUrl);
  }

  private handleCaasError(previewMode: boolean) {
    if (previewMode) {
      this.globalMessageService.add({ key: `fsCaas.httpHandlers.${this.errorMessageKey}` }, GlobalMessageType.MSG_TYPE_ERROR);
    }
  }

  private handleNonCaasError() {
    this.globalMessageService.add({ key: `httpHandlers.${this.errorMessageKey}` }, GlobalMessageType.MSG_TYPE_ERROR);
  }
}

results matching ""

    No results matching ""