%PDF- %PDF-
Direktori : /www/varak.net/nextcloud.varak.net/3rdparty/php-opencloud/openstack/src/Common/Api/ |
Current File : /www/varak.net/nextcloud.varak.net/3rdparty/php-opencloud/openstack/src/Common/Api/Operation.php |
<?php declare(strict_types=1); namespace OpenStack\Common\Api; /** * This class represents an OpenStack API operation. It encapsulates most aspects of the REST operation: its HTTP * method, the URL path, its top-level JSON key, and all of its {@see Parameter} objects. * * An operation not only represents a remote operation, but it also provides the mechanism for executing it * over HTTP. To do this, it uses a {@see ClientInterface} that allows a {@see GuzzleHttp\Message\Request} * to be created from the user values provided. Once this request is assembled, it is then sent to the * remote API and the response is returned to whoever first invoked the Operation class. */ class Operation { /** @var string The HTTP method */ private $method; /** @var string The URL path */ private $path; /** @var string The top-level JSON key */ private $jsonKey; /** @var []Parameter The parameters of this operation */ private $params; /** @var bool Whether this operation should skip authentication */ private $skipAuth; /** * @param array $definition The data definition (in array form) that will populate this * operation. Usually this is retrieved from an {@see ApiInterface} * object method. */ public function __construct(array $definition) { $this->method = $definition['method']; $this->path = $definition['path']; if (isset($definition['jsonKey'])) { $this->jsonKey = $definition['jsonKey']; } $this->params = self::toParamArray($definition['params']); $this->skipAuth = $definition['skipAuth'] ?? false; } public function getPath(): string { return $this->path; } public function getMethod(): string { return $this->method; } /** * Indicates if operation must be run without authentication. This is useful for getting authentication tokens. */ public function getSkipAuth(): bool { return $this->skipAuth; } /** * Indicates whether this operation supports a parameter. * * @param string $key The name of a parameter */ public function hasParam(string $key): bool { return isset($this->params[$key]); } /** * @return Parameter */ public function getParam(string $name) { return isset($this->params[$name]) ? $this->params[$name] : null; } public function getJsonKey(): string { return $this->jsonKey ?: ''; } /** * A convenience method that will take a generic array of data and convert it into an array of * {@see Parameter} objects. * * @param array $data A generic data array */ public static function toParamArray(array $data): array { $params = []; foreach ($data as $name => $param) { $params[$name] = new Parameter($param + ['name' => $name]); } return $params; } /** * This method will validate all of the user-provided values and throw an exception if any * failures are detected. This is useful for basic sanity-checking before a request is * serialized and sent to the API. * * @param array $userValues The user-defined values * * @return bool TRUE if validation passes * * @throws \Exception If validate fails */ public function validate(array $userValues): bool { foreach ($this->params as $paramName => $param) { if (array_key_exists($paramName, $userValues)) { $param->validate($userValues[$paramName]); } elseif ($param->isRequired()) { throw new \Exception(sprintf('"%s" is a required option, but it was not provided', $paramName)); } } return true; } }