123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- <?php
- /**
- * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors
- * SPDX-FileCopyrightText: 2016 ownCloud, Inc.
- * SPDX-License-Identifier: AGPL-3.0-only
- */
- namespace OCA\Files_External\Lib\Backend;
- use OCA\Files_External\Lib\Auth\AuthMechanism;
- use OCA\Files_External\Lib\DependencyTrait;
- use OCA\Files_External\Lib\FrontendDefinitionTrait;
- use OCA\Files_External\Lib\IdentifierTrait;
- use OCA\Files_External\Lib\IFrontendDefinition;
- use OCA\Files_External\Lib\IIdentifier;
- use OCA\Files_External\Lib\PriorityTrait;
- use OCA\Files_External\Lib\StorageConfig;
- use OCA\Files_External\Lib\StorageModifierTrait;
- use OCA\Files_External\Lib\VisibilityTrait;
- use OCP\Files\Storage\IStorage;
- /**
- * Storage backend
- *
- * A backend can have services injected during construction,
- * such as \OCP\IDB for database operations. This allows a backend
- * to perform advanced operations based on provided information.
- *
- * An authentication scheme defines the parameter interface, common to the
- * storage implementation, the backend and the authentication mechanism.
- * A storage implementation expects parameters according to the authentication
- * scheme, which are provided from the authentication mechanism.
- *
- * This class uses the following traits:
- * - VisibilityTrait
- * Restrict usage to admin-only/none
- * - FrontendDefinitionTrait
- * Specify configuration parameters and other definitions
- * - PriorityTrait
- * Allow objects to prioritize over others with the same mountpoint
- * - DependencyTrait
- * The object requires certain dependencies to be met
- * - StorageModifierTrait
- * Object can affect storage mounting
- */
- class Backend implements \JsonSerializable, IIdentifier, IFrontendDefinition {
- use VisibilityTrait;
- use FrontendDefinitionTrait;
- use PriorityTrait;
- use DependencyTrait;
- use StorageModifierTrait;
- use IdentifierTrait;
- /** @var string storage class */
- private $storageClass;
- /** @var array 'scheme' => true, supported authentication schemes */
- private $authSchemes = [];
- /** @var AuthMechanism|callable authentication mechanism fallback */
- private $legacyAuthMechanism;
- /**
- * @return class-string<IStorage>
- */
- public function getStorageClass() {
- return $this->storageClass;
- }
- /**
- * @param string $class
- * @return $this
- */
- public function setStorageClass($class) {
- $this->storageClass = $class;
- return $this;
- }
- /**
- * @return array
- */
- public function getAuthSchemes() {
- if (empty($this->authSchemes)) {
- return [AuthMechanism::SCHEME_NULL => true];
- }
- return $this->authSchemes;
- }
- /**
- * @param string $scheme
- * @return self
- */
- public function addAuthScheme($scheme) {
- $this->authSchemes[$scheme] = true;
- return $this;
- }
- /**
- * @param array $parameters storage parameters, for dynamic mechanism selection
- * @return AuthMechanism
- */
- public function getLegacyAuthMechanism(array $parameters = []) {
- if (is_callable($this->legacyAuthMechanism)) {
- return call_user_func($this->legacyAuthMechanism, $parameters);
- }
- return $this->legacyAuthMechanism;
- }
- public function setLegacyAuthMechanism(AuthMechanism $authMechanism): self {
- $this->legacyAuthMechanism = $authMechanism;
- return $this;
- }
- /**
- * @param callable $callback dynamic auth mechanism selection
- */
- public function setLegacyAuthMechanismCallback(callable $callback): self {
- $this->legacyAuthMechanism = $callback;
- return $this;
- }
- /**
- * Serialize into JSON for client-side JS
- */
- public function jsonSerialize(): array {
- $data = $this->jsonSerializeDefinition();
- $data += $this->jsonSerializeIdentifier();
- $data['backend'] = $data['name']; // legacy compat
- $data['priority'] = $this->getPriority();
- $data['authSchemes'] = $this->getAuthSchemes();
- return $data;
- }
- /**
- * Check if parameters are satisfied in a StorageConfig
- *
- * @param StorageConfig $storage
- * @return bool
- */
- public function validateStorage(StorageConfig $storage) {
- return $this->validateStorageDefinition($storage);
- }
- }
|