123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- <?php
- /**
- * Refer to LICENSE.txt distributed with the Temando Shipping module for notice of license
- */
- namespace Temando\Shipping\Rest;
- use Psr\Log\LoggerInterface;
- use Psr\Log\LogLevel;
- use Temando\Shipping\Rest\Adapter\AuthenticationApiInterface;
- use Temando\Shipping\Rest\Exception\AdapterException;
- use Temando\Shipping\Rest\Exception\RestClientErrorException;
- use Temando\Shipping\Rest\Request\AuthRequestInterface;
- use Temando\Shipping\Rest\Response\DataObject\Session;
- use Temando\Shipping\Rest\Response\Document\Errors;
- use Temando\Shipping\Rest\Response\Document\GetSession;
- use Temando\Shipping\Rest\SchemaMapper\ParserInterface;
- use Temando\Shipping\Webservice\Config\WsConfigInterface;
- /**
- * Temando REST API Authentication Adapter
- *
- * @package Temando\Shipping\Rest
- * @author Christoph Aßmann <christoph.assmann@netresearch.de>
- * @author Sebastian Ertner <sebastian.ertner@netresearch.de>
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
- * @link http://www.temando.com/
- */
- class AuthAdapter implements AuthenticationApiInterface
- {
- /**
- * @var string
- */
- private $endpoint;
- /**
- * @var string
- */
- private $apiVersion;
- /**
- * @var RestClientInterface
- */
- private $restClient;
- /**
- * @var ParserInterface
- */
- private $responseParser;
- /**
- * @var LoggerInterface
- */
- private $logger;
- /**
- * AuthAdapter constructor.
- * @param WsConfigInterface $config
- * @param RestClientInterface $restClient
- * @param ParserInterface $responseParser
- * @param LoggerInterface $logger
- */
- public function __construct(
- WsConfigInterface $config,
- RestClientInterface $restClient,
- ParserInterface $responseParser,
- LoggerInterface $logger
- ) {
- $this->endpoint = $config->getSessionEndpoint();
- $this->apiVersion = $config->getApiVersion();
- $this->restClient = $restClient;
- $this->responseParser = $responseParser;
- $this->logger = $logger;
- }
- /**
- * @param AuthRequestInterface $request
- * @return Session
- * @throws AdapterException
- */
- public function startSession(AuthRequestInterface $request)
- {
- $uri = sprintf('%s/sessions', $this->endpoint);
- $requestBody = $request->getRequestBody();
- $headers = [
- 'Cache-Control' => 'no-cache',
- 'Content-Type' => 'application/vnd.api+json',
- 'Accept' => 'application/vnd.api+json',
- 'Version' => $this->apiVersion,
- ];
- $this->logger->log(LogLevel::DEBUG, sprintf("%s\n%s", $uri, $requestBody));
- try {
- $rawResponse = $this->restClient->post($uri, $requestBody, $headers);
- $this->logger->log(LogLevel::DEBUG, $rawResponse);
- /** @var GetSession $response */
- $response = $this->responseParser->parse($rawResponse, GetSession::class);
- $session = $response->getData();
- } catch (RestClientErrorException $e) {
- $this->logger->log(LogLevel::ERROR, $e->getMessage());
- /** @var Errors $response */
- $response = $this->responseParser->parse($e->getMessage(), Errors::class);
- throw AdapterException::errorResponse($response, $e);
- } catch (\Exception $e) {
- throw AdapterException::create($e);
- }
- return $session;
- }
- /**
- * @return bool
- */
- public function endSession()
- {
- return false;
- }
- }
|