media_acquiadam-8.x-1.46/src/AcquiadamAuthService.php

src/AcquiadamAuthService.php
<?php

namespace Drupal\media_acquiadam;

use Drupal\Core\Config\ImmutableConfig;

/**
 * The service to authenticate on Acquia DAM.
 *
 * @package Drupal\media_acquiadam
 */
class AcquiadamAuthService implements AcquiadamAuthServiceInterface {

  /**
   * The client_id used to identify Drupal module.
   *
   * @var string
   */
  const CLIENT_ID = 'd2df039fd77de48986459e68823a3380.app.widen.com';

  /**
   * The client_secret used to identify Drupal module.
   *
   * @var string
   */
  const CLIENT_SECRET = '9f2c7101ea3be48a9f98424f8d158afd1ef7daf4';

  /**
   * Constructor.
   */
  public function __construct() {
  }

  /**
   * Returns acquiadam setting config where it stores the authentication data.
   *
   * @return \Drupal\Core\Config\ImmutableConfig
   *   An immutable configuration object.
   */
  public static function getConfig(): ImmutableConfig {
    return \Drupal::config('media_acquiadam.settings');
  }

  /**
   * Gets endpoint or path.
   *
   * @param string $method
   *   The method to be called in the API.
   *
   * @return string
   *   The absolute path of the endpoint of the method.
   */
  public static function getEndpoint(string $method): string {
    // Generate the endpoint SSL URL of the given method.
    $config = self::getConfig();
    $acquiadam_domain = $config->get('domain');

    if (isset($acquiadam_domain)) {
      return 'https://' . $acquiadam_domain . '/api/rest/' . $method;
    }

    \Drupal::messenger()->addError(t('Acquia DAM endpoint must be configured'));

    return '';
  }

  /**
   * Provides the authorization link with Acquia DAM.
   *
   * @param string $return_link
   *   The url where it should redirect after the authentication.
   *
   * @return string
   *   The absolute URL used for authorization.
   */
  public static function generateAuthUrl(string $return_link): string {
    $config = self::getConfig();
    $acquiadam_domain = $config->get('domain');
    $client_id = self::CLIENT_ID;
    return $acquiadam_domain ? "https://$acquiadam_domain/allowaccess?client_id=$client_id&redirect_uri=$return_link" : '';

  }

  /**
   * Purge Acquia DAM authorization connection.
   *
   * @param string $access_token
   *   Acquiadam user token.
   *
   * @return bool
   *   Returns boolean based on access authorization.
   */
  public static function cancel(string $access_token): bool {
    if (empty($access_token)) {
      \Drupal::messenger()->addError(t('No token was provided.'));
      return FALSE;
    }

    $endpoint = self::getEndpoint('oauth/logout');

    // Initiate and process the response of the HTTP request.
    $response = \Drupal::httpClient()
      ->post($endpoint, [
        'headers' => [
          'Authorization' => 'Bearer ' . $access_token,
        ],
      ]);

    $http_status = $response->getStatusCode();

    // Display an error message if request fail.
    if ($http_status != '200') {
      $error_msg = t('Error Response from Authorization call [@status]', ['@status' => $http_status]);
      \Drupal::messenger()->addError($error_msg);

      return FALSE;
    }

    return TRUE;
  }

  /**
   * Authenticates the user.
   *
   * @param string $auth_code
   *   The authorization code.
   *
   * @return object
   *   The response data of the authentication attempt.
   */
  public static function authenticate(string $auth_code): object {
    // Generate the token endpoint SSL URL of the request.
    $endpoint = self::getEndpoint('oauth/token');

    $data = [
      'authorization_code' => $auth_code,
      'grant_type' => 'authorization_code',
    ];

    // Initiate and process the response of the HTTP request.
    $response = \Drupal::httpClient()
      ->post($endpoint, [
        'auth' => [self::CLIENT_ID, self::CLIENT_SECRET],
        'body' => json_encode($data),
        'headers' => [
          'Content-Type' => 'application/json',
        ],
      ]);

    $http_status = $response->getStatusCode();

    // Display an error message if request fail.
    if ($http_status != '200') {
      $error_msg = t('Error Response from Authorization call [@status]', ['@status' => $http_status]);
      \Drupal::messenger()->addError($error_msg);
    }

    return json_decode($response->getBody());
  }

}

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

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