You are here

public function ClientManager::getRequestSignature in Acquia Content Hub 8

Extracts HMAC signature from the request.

Parameters

\Symfony\Component\HttpFoundation\Request $request: The Request to evaluate signature.

string $secret_key: The Secret Key.

Return value

string A base64 encoded string signature.

Overrides ClientManagerInterface::getRequestSignature

File

src/Client/ClientManager.php, line 244

Class

ClientManager
Provides a service for managing pending server tasks.

Namespace

Drupal\acquia_contenthub\Client

Code

public function getRequestSignature(Request $request, $secret_key = '') {

  // Extract signature information from the request.
  $headers = array_map('current', $request->headers
    ->all());
  $http_verb = $request
    ->getMethod();

  // Adding the Request Query string.
  $path = $request
    ->getRequestUri();
  $body = $request
    ->getContent();

  // If the headers are not given, then the request is probably not coming
  // from the Content Hub. Replace them for empty string to fail validation.
  $content_type = isset($headers['content-type']) ? $headers['content-type'] : '';
  $date = isset($headers['date']) ? $headers['date'] : '';
  $message_array = [
    $http_verb,
    md5($body),
    $content_type,
    $date,
    '',
    $path,
  ];
  $message = implode("\n", $message_array);
  $s = hash_hmac('sha256', $message, $secret_key, TRUE);
  $signature = base64_encode($s);
  return $signature;
}