Locations: edit connection settings without losing the history

A changed password or host name could only be handled by adding a new
location, which starts an empty repository and, with a retention lock at
the provider, keeps the old one billed. Edit now changes a location in
place (web interface and occ backup:target:edit). The settings are only
saved when they lead to the same repository; a failed connection and a
missing repository give separate errors, and the folder is not created
while checking. Stored passwords are never sent to the browser: an empty
password field keeps the stored value.
This commit is contained in:
2026-10-08 12:56:15 +02:00
parent a8da8cb54a
commit 9775cdc475
13 changed files with 300 additions and 43 deletions
+11 -1
View File
@@ -21,11 +21,12 @@ final class StorageBackend implements IBackend {
public function __construct(
private IStorage $storage,
private string $base = '',
bool $createBase = true,
) {
$this->base = trim($base, '/');
self::validate($this->base, true);
$this->atomicPut = $storage->instanceOfStorage(\OCA\Files_External\Lib\Storage\AmazonS3::class);
if ($this->base !== '') {
if ($createBase && $this->base !== '') {
$this->mkdirs($this->base);
}
}
@@ -109,6 +110,15 @@ final class StorageBackend implements IBackend {
}
}
/** Whether the storage accepts the connection settings (files_external's own check). */
public function canConnect(): bool {
try {
return !method_exists($this->storage, 'test') || (bool)$this->storage->test();
} catch (\Throwable) {
return false;
}
}
public function exists(string $path): bool {
return $this->storage->file_exists($this->abs($path));
}