headless_cms-1.0.3/modules/headless_cms_preview/src/PreviewToken/PreviewTokenNegotiator.php

modules/headless_cms_preview/src/PreviewToken/PreviewTokenNegotiator.php
<?php

declare(strict_types=1);

namespace Drupal\headless_cms_preview\PreviewToken;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;

/**
 * Negotiates a preview token from a request.
 */
class PreviewTokenNegotiator {

  const HEADER_NAME = 'X-Headless-Preview-Token';

  public function __construct(
    protected RequestStack $requestStack,
    protected PreviewTokenManagerInterface $previewTokenManager,
  ) {}

  /**
   * Check if the request has a preview token.
   *
   * This method is less expensive than `negotiateFromRequest()` because it
   * does not decode the token. Use if you only need to check if the request
   * has a preview token.
   */
  public function requestHasPreviewToken(?Request $request = NULL): bool {
    $request = $request ?? $this->requestStack->getCurrentRequest();

    return $request?->headers->has(self::HEADER_NAME) ?? FALSE;
  }

  /**
   * Negotiate preview token from passed or current http request.
   */
  public function negotiateFromRequest(?Request $request = NULL): ?PreviewToken {
    $request = $request ?? $this->requestStack->getCurrentRequest();
    $previewToken = $this->doNegotiateFromRequest($request);

    if ($previewToken) {
      $request->attributes->set('headless_preview_token', $previewToken);
    }

    return $previewToken;
  }

  /**
   * Negotiate preview token from http request.
   */
  protected function doNegotiateFromRequest(Request $request): ?PreviewToken {
    $tokenValue = $request->headers->get(self::HEADER_NAME);

    if ($tokenValue) {
      return $this->previewTokenManager->decode($tokenValue);
    }

    return NULL;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc