123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- <?php
- /**
- * Web API request.
- *
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Framework\Webapi;
- use Magento\Framework\App\AreaList;
- use Magento\Framework\App\RequestInterface;
- use Magento\Framework\Config\ScopeInterface;
- use Magento\Framework\HTTP\PhpEnvironment\Request as HttpRequest;
- use Magento\Framework\Stdlib\Cookie\CookieReaderInterface;
- use Magento\Framework\Phrase;
- use Magento\Framework\Stdlib\StringUtils;
- class Request extends HttpRequest implements RequestInterface
- {
- /**
- * Name of query parameter to specify services for which to generate schema
- */
- const REQUEST_PARAM_SERVICES = 'services';
- /**
- * services parameter value to indicate that a schema for all services should be generated
- */
- const ALL_SERVICES = 'all';
- /**
- * Modify pathInfo: strip down the front name and query parameters.
- *
- * @param CookieReaderInterface $cookieReader
- * @param StringUtils $converter
- * @param AreaList $areaList
- * @param ScopeInterface $configScope
- * @param null|string $uri
- */
- public function __construct(
- CookieReaderInterface $cookieReader,
- StringUtils $converter,
- AreaList $areaList,
- ScopeInterface $configScope,
- $uri = null
- ) {
- parent::__construct($cookieReader, $converter, $uri);
- $pathInfo = $this->getRequestUri();
- /** Remove base url and area from path */
- $areaFrontName = $areaList->getFrontName($configScope->getCurrentScope());
- $pathInfo = preg_replace("#.*?/{$areaFrontName}/?#", '/', $pathInfo);
- /** Remove GET parameters from path */
- $pathInfo = preg_replace('#\?.*#', '', $pathInfo);
- $this->setPathInfo($pathInfo);
- }
- /**
- * {@inheritdoc}
- *
- * Added CGI environment support.
- */
- public function getHeader($header, $default = false)
- {
- $headerValue = parent::getHeader($header, $default);
- if ($headerValue == false) {
- /** Workaround for hhvm environment */
- $header = 'REDIRECT_HTTP_' . strtoupper(str_replace('-', '_', $header));
- if (isset($_SERVER[$header])) {
- $headerValue = $_SERVER[$header];
- }
- }
- return $headerValue;
- }
- /**
- * Identify versions of resources that should be used for API configuration generation.
- *
- * @param string|null $default
- * @return array|string
- * @throws \Magento\Framework\Webapi\Exception When GET parameters are invalid
- */
- public function getRequestedServices($default = null)
- {
- $param = $this->getParam(self::REQUEST_PARAM_SERVICES, $default);
- return $this->_convertRequestParamToServiceArray($param);
- }
- /**
- * Extract the resources query param value and return associative array of the form 'resource' => 'version'
- *
- * @param string $param eg <pre> testModule1AllSoapAndRestV1,testModule2AllSoapNoRestV1 </pre>
- * @return string|array <pre> eg array (
- * 'testModule1AllSoapAndRestV1',
- * 'testModule2AllSoapNoRestV1',
- * )</pre>
- * @throws \Magento\Framework\Webapi\Exception
- */
- protected function _convertRequestParamToServiceArray($param)
- {
- $serviceSeparator = ',';
- $serviceVerPattern = "[a-zA-Z\d]*V[\d]+";
- $regexp = "/^({$serviceVerPattern})([{$serviceSeparator}]{$serviceVerPattern})*\$/";
- if ($param == 'all') {
- return $param;
- }
- //Check if the $param is of valid format
- if (empty($param) || !preg_match($regexp, $param)) {
- $message = new Phrase('Incorrect format of request URI or Requested services are missing.');
- throw new \Magento\Framework\Webapi\Exception($message);
- }
- //Split the $param string to create an array of 'service' => 'version'
- $serviceVersionArray = explode($serviceSeparator, $param);
- $serviceArray = [];
- foreach ($serviceVersionArray as $service) {
- $serviceArray[] = $service;
- }
- return $serviceArray;
- }
- }
|