diff options
author | Maxence Lange <maxence@artificial-owl.com> | 2024-12-05 21:35:42 -0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-12-05 21:35:42 -0100 |
commit | 66e09eb440ff8ba957f7f22e31051531637faae6 (patch) | |
tree | b8eeb1e9c656ec833fd1cb552b4fed4c48f2a39b /lib | |
parent | bca864d76d1367a978aa0185a1085b6ec54ff6dd (diff) | |
parent | b61a2668dcbf8a5896739fd9b0ddbf0f8fff0e39 (diff) | |
download | nextcloud-server-66e09eb440ff8ba957f7f22e31051531637faae6.tar.gz nextcloud-server-66e09eb440ff8ba957f7f22e31051531637faae6.zip |
Merge pull request #49646 from nextcloud/fix/noid/trigger-field-insert
fix(signed-request): trigger metadata insert with default value manually
Diffstat (limited to 'lib')
-rw-r--r-- | lib/composer/composer/autoload_classmap.php | 1 | ||||
-rw-r--r-- | lib/composer/composer/autoload_static.php | 1 | ||||
-rw-r--r-- | lib/private/OCM/OCMDiscoveryService.php | 3 | ||||
-rw-r--r-- | lib/private/Security/Signature/SignatureManager.php | 3 | ||||
-rw-r--r-- | lib/unstable/Federation/ISignedCloudFederationProvider.php | 33 | ||||
-rw-r--r-- | lib/unstable/Security/Signature/Model/Signatory.php | 4 |
6 files changed, 41 insertions, 4 deletions
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php index a30eccfd838..94e6e1f1e41 100644 --- a/lib/composer/composer/autoload_classmap.php +++ b/lib/composer/composer/autoload_classmap.php @@ -12,6 +12,7 @@ return array( 'NCU\\Config\\Exceptions\\UnknownKeyException' => $baseDir . '/lib/unstable/Config/Exceptions/UnknownKeyException.php', 'NCU\\Config\\IUserConfig' => $baseDir . '/lib/unstable/Config/IUserConfig.php', 'NCU\\Config\\ValueType' => $baseDir . '/lib/unstable/Config/ValueType.php', + 'NCU\\Federation\\ISignedCloudFederationProvider' => $baseDir . '/lib/unstable/Federation/ISignedCloudFederationProvider.php', 'NCU\\Security\\Signature\\Enum\\DigestAlgorithm' => $baseDir . '/lib/unstable/Security/Signature/Enum/DigestAlgorithm.php', 'NCU\\Security\\Signature\\Enum\\SignatoryStatus' => $baseDir . '/lib/unstable/Security/Signature/Enum/SignatoryStatus.php', 'NCU\\Security\\Signature\\Enum\\SignatoryType' => $baseDir . '/lib/unstable/Security/Signature/Enum/SignatoryType.php', diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php index 9ca1852a071..246934b4848 100644 --- a/lib/composer/composer/autoload_static.php +++ b/lib/composer/composer/autoload_static.php @@ -53,6 +53,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2 'NCU\\Config\\Exceptions\\UnknownKeyException' => __DIR__ . '/../../..' . '/lib/unstable/Config/Exceptions/UnknownKeyException.php', 'NCU\\Config\\IUserConfig' => __DIR__ . '/../../..' . '/lib/unstable/Config/IUserConfig.php', 'NCU\\Config\\ValueType' => __DIR__ . '/../../..' . '/lib/unstable/Config/ValueType.php', + 'NCU\\Federation\\ISignedCloudFederationProvider' => __DIR__ . '/../../..' . '/lib/unstable/Federation/ISignedCloudFederationProvider.php', 'NCU\\Security\\Signature\\Enum\\DigestAlgorithm' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/Enum/DigestAlgorithm.php', 'NCU\\Security\\Signature\\Enum\\SignatoryStatus' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/Enum/SignatoryStatus.php', 'NCU\\Security\\Signature\\Enum\\SignatoryType' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/Enum/SignatoryType.php', diff --git a/lib/private/OCM/OCMDiscoveryService.php b/lib/private/OCM/OCMDiscoveryService.php index 55da887494a..af612416372 100644 --- a/lib/private/OCM/OCMDiscoveryService.php +++ b/lib/private/OCM/OCMDiscoveryService.php @@ -9,6 +9,7 @@ declare(strict_types=1); namespace OC\OCM; +use GuzzleHttp\Exception\ConnectException; use JsonException; use OCP\AppFramework\Http; use OCP\Http\Client\IClientService; @@ -50,7 +51,7 @@ class OCMDiscoveryService implements IOCMDiscoveryService { // if scheme not specified, we test both; try { return $this->discover('https://' . $remote, $skipCache); - } catch (OCMProviderException) { + } catch (OCMProviderException|ConnectException) { return $this->discover('http://' . $remote, $skipCache); } } diff --git a/lib/private/Security/Signature/SignatureManager.php b/lib/private/Security/Signature/SignatureManager.php index fa52bbfaa7c..91a06e29b4a 100644 --- a/lib/private/Security/Signature/SignatureManager.php +++ b/lib/private/Security/Signature/SignatureManager.php @@ -142,7 +142,7 @@ class SignatureManager implements ISignatureManager { if ($ttlSignatory > 0 && $knownSignatory->getLastUpdated() < (time() - $ttlSignatory)) { $signatory = $this->getSaneRemoteSignatory($signatoryManager, $signedRequest); $this->updateSignatoryMetadata($signatory); - $knownSignatory->setMetadata($signatory->getMetadata()); + $knownSignatory->setMetadata($signatory->getMetadata() ?? []); } $signedRequest->setSignatory($knownSignatory); @@ -353,6 +353,7 @@ class SignatureManager implements ISignatureManager { $time = time(); $signatory->setCreation($time); $signatory->setLastUpdated($time); + $signatory->setMetadata($signatory->getMetadata() ?? []); // trigger insert on field metadata using current or default value $this->mapper->insert($signatory); } diff --git a/lib/unstable/Federation/ISignedCloudFederationProvider.php b/lib/unstable/Federation/ISignedCloudFederationProvider.php new file mode 100644 index 00000000000..1ec50f606ae --- /dev/null +++ b/lib/unstable/Federation/ISignedCloudFederationProvider.php @@ -0,0 +1,33 @@ +<?php + +declare(strict_types=1); +/** + * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace NCU\Federation; + +use OCP\Federation\ICloudFederationProvider; + +/** + * Interface ICloudFederationProvider + * + * Enable apps to create their own cloud federation provider + * + * @experimental 31.0.0 + */ +interface ISignedCloudFederationProvider extends ICloudFederationProvider { + + /** + * returns federationId in direct relation (as recipient or as author) of a sharedSecret + * the federationId must be the one at the remote end + * + * @param string $sharedSecret + * @param array $payload + * + * @experimental 31.0.0 + * @return string + */ + public function getFederationIdFromSharedSecret(string $sharedSecret, array $payload): string; +} diff --git a/lib/unstable/Security/Signature/Model/Signatory.php b/lib/unstable/Security/Signature/Model/Signatory.php index d42be9c4544..c3a275082ae 100644 --- a/lib/unstable/Security/Signature/Model/Signatory.php +++ b/lib/unstable/Security/Signature/Model/Signatory.php @@ -42,7 +42,7 @@ use OCP\AppFramework\Db\Entity; * @method void setAccount(string $account) * @method string getAccount() * @method void setMetadata(array $metadata) - * @method array getMetadata() + * @method ?array getMetadata() * @method void setCreation(int $creation) * @method int getCreation() * @method void setLastUpdated(int $creation) @@ -59,7 +59,7 @@ class Signatory extends Entity implements JsonSerializable { protected string $account = ''; protected int $type = 9; protected int $status = 1; - protected array $metadata = []; + protected ?array $metadata = null; protected int $creation = 0; protected int $lastUpdated = 0; |