diff options
Diffstat (limited to 'apps/files_external')
-rw-r--r-- | apps/files_external/appinfo/info.xml | 1 | ||||
-rw-r--r-- | apps/files_external/composer/composer/autoload_classmap.php | 1 | ||||
-rw-r--r-- | apps/files_external/composer/composer/autoload_static.php | 1 | ||||
-rw-r--r-- | apps/files_external/l10n/et_EE.js | 41 | ||||
-rw-r--r-- | apps/files_external/l10n/et_EE.json | 41 | ||||
-rw-r--r-- | apps/files_external/lib/Command/Dependencies.php | 56 | ||||
-rw-r--r-- | apps/files_external/lib/Lib/Backend/SMB.php | 23 | ||||
-rw-r--r-- | apps/files_external/lib/Lib/MissingDependency.php | 13 | ||||
-rw-r--r-- | apps/files_external/lib/Service/BackendService.php | 4 |
9 files changed, 169 insertions, 12 deletions
diff --git a/apps/files_external/appinfo/info.xml b/apps/files_external/appinfo/info.xml index eda96446ac0..e746f052619 100644 --- a/apps/files_external/appinfo/info.xml +++ b/apps/files_external/appinfo/info.xml @@ -53,6 +53,7 @@ External storage can be configured using the GUI or at the command line. This se <command>OCA\Files_External\Command\Verify</command> <command>OCA\Files_External\Command\Notify</command> <command>OCA\Files_External\Command\Scan</command> + <command>OCA\Files_External\Command\Dependencies</command> </commands> <settings> diff --git a/apps/files_external/composer/composer/autoload_classmap.php b/apps/files_external/composer/composer/autoload_classmap.php index 3e246225484..90f41f0e920 100644 --- a/apps/files_external/composer/composer/autoload_classmap.php +++ b/apps/files_external/composer/composer/autoload_classmap.php @@ -14,6 +14,7 @@ return array( 'OCA\\Files_External\\Command\\Config' => $baseDir . '/../lib/Command/Config.php', 'OCA\\Files_External\\Command\\Create' => $baseDir . '/../lib/Command/Create.php', 'OCA\\Files_External\\Command\\Delete' => $baseDir . '/../lib/Command/Delete.php', + 'OCA\\Files_External\\Command\\Dependencies' => $baseDir . '/../lib/Command/Dependencies.php', 'OCA\\Files_External\\Command\\Export' => $baseDir . '/../lib/Command/Export.php', 'OCA\\Files_External\\Command\\Import' => $baseDir . '/../lib/Command/Import.php', 'OCA\\Files_External\\Command\\ListCommand' => $baseDir . '/../lib/Command/ListCommand.php', diff --git a/apps/files_external/composer/composer/autoload_static.php b/apps/files_external/composer/composer/autoload_static.php index 86ad9eb3f78..7b5eb5feabe 100644 --- a/apps/files_external/composer/composer/autoload_static.php +++ b/apps/files_external/composer/composer/autoload_static.php @@ -29,6 +29,7 @@ class ComposerStaticInitFiles_External 'OCA\\Files_External\\Command\\Config' => __DIR__ . '/..' . '/../lib/Command/Config.php', 'OCA\\Files_External\\Command\\Create' => __DIR__ . '/..' . '/../lib/Command/Create.php', 'OCA\\Files_External\\Command\\Delete' => __DIR__ . '/..' . '/../lib/Command/Delete.php', + 'OCA\\Files_External\\Command\\Dependencies' => __DIR__ . '/..' . '/../lib/Command/Dependencies.php', 'OCA\\Files_External\\Command\\Export' => __DIR__ . '/..' . '/../lib/Command/Export.php', 'OCA\\Files_External\\Command\\Import' => __DIR__ . '/..' . '/../lib/Command/Import.php', 'OCA\\Files_External\\Command\\ListCommand' => __DIR__ . '/..' . '/../lib/Command/ListCommand.php', diff --git a/apps/files_external/l10n/et_EE.js b/apps/files_external/l10n/et_EE.js index 7e339e40b96..c43471fe499 100644 --- a/apps/files_external/l10n/et_EE.js +++ b/apps/files_external/l10n/et_EE.js @@ -3,12 +3,19 @@ OC.L10N.register( { "Grant access" : "Anna ligipääs", "Error configuring OAuth1" : "OAuth1 seadistamise tõrge", + "Please provide a valid app key and secret." : "Palun sisesta rakenduse ketiva võti ja saladus.", "Error configuring OAuth2" : "OAuth2 seadistamise tõrge", "Generate keys" : "Loo võtmed", "Error generating key pair" : "Viga võtmepaari loomisel", + "You are not logged in" : "Sa pole sisse logitud.", + "Permission denied" : "Õigus on keelatud", + "Storage with ID \"%d\" not found" : "Andmeruumi tunnusega „%d“ ei leidu", + "Invalid backend or authentication mechanism class" : "Vigane taustateenus või autentimismeetodi klass", "Invalid mount point" : "Vigane haakepunkt", "Objectstore forbidden" : "Objectstore on keelatud", "Invalid storage backend \"%s\"" : "Vigane salvestuskoha taustsüsteem \"%s\"", + "Not permitted to use backend \"%s\"" : "Pole luba kasutada „%s“ taustateenust", + "Not permitted to use authentication mechanism \"%s\"" : "Pole luba kasutada „%s“ autentimismeetodit", "Unsatisfied backend parameters" : "Rahuldamata taustarakenduse parameetrid", "Insufficient data: %s" : "Pole piisavalt andmeid: %s", "%s" : "%s", @@ -25,10 +32,17 @@ OC.L10N.register( "OpenStack v2" : "OpenStack v2", "Login" : "Logi sisse", "Password" : "Salasõna", + "Tenant name" : "Kliendi nimi", + "Identity endpoint URL" : "Tuvastuse otspunkti võrguaadress", "OpenStack v3" : "OpenStack v3", "Domain" : "Domeen", "Rackspace" : "Rackspace", "API key" : "API võti", + "Global credentials" : "Üldinekasutajanimi/salasõna", + "Log-in credentials, save in database" : "Salvesta sisselogimise kasutajanimi/salasõna andmebaasi", + "Login and password" : "Kasutajanimi ja salasõna", + "Log-in credentials, save in session" : "Salvesta sisselogimise kasutajanimi/salasõna sessioonis", + "Global credentials, manually entered" : "Käsitsi sisestatud üldine kasutajanimi/salasõna", "RSA public key" : "RSA avalik võti", "Public key" : "Avalik võti", "RSA private key" : "RSA privaatvõti", @@ -40,9 +54,11 @@ OC.L10N.register( "Region" : "Piirkond", "Enable SSL" : "SSL-i kasutamine", "Enable Path Style" : "Luba otsingtee stiilis", + "Legacy (v2) authentication" : "Pärandvormis autentimine (v2)", + "SSE-C encryption key" : "SSE-C krüptimisvõti", "WebDAV" : "WebDAV", "URL" : "URL", - "Remote subfolder" : "Mujahl olev alamkaust", + "Remote subfolder" : "Mujal olev alamkaust", "Secure https://" : "Turvaline https://", "FTP" : "FTP", "Host" : "Host", @@ -56,14 +72,26 @@ OC.L10N.register( "SMB/CIFS" : "SMB/CIFS", "Share" : "Jaga", "Show hidden files" : "Näita peidetud faile", + "Case sensitive file system" : "Tõstutundlik failisüsteem", + "Timeout" : "Aegumine", + "SMB/CIFS using OC login" : "SMB / CIFS kasutades OC sisselogimist", "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Teenuse nimi", + "Request timeout (seconds)" : "Päringu aegumine (sekundites)", + "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "cURL-i tugi on PHP-s on kas paigaldamata või pole kasutusele võetud. „%s“ haakimine pole võimalik. Palun oma peakasutajat, et ta teeks cURL-i toe tagamiseks vajalikud muudatused.", + "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "FTP tugi on PHP-s on kas paigaldamata või pole kasutusele võetud. „%s“ haakimine pole võimalik. Palun oma peakasutajat, et ta teeks FTP toe tagamiseks vajalikud muudatused.", "External storage" : "Väline andmehoidla", "External storage support" : "Väliste andmehoidlate tugi", "Adds basic external storage support" : "Lisab väliste andmehoidlate toe baasiteratsioonis", "Confirm" : "Kinnita", + "Storage credentials" : "Andmeruumi kasutajanimi/salasõna", + "To access the storage, you need to provide the authentication credentials." : "Selle andmeruumi jaoks pead autentimiseks lisama kasutajanime ja salasõna.", "Enter the storage login" : "Sisesta andmeruumi kasutajatunnus", "Enter the storage password" : "Sisesta andmeruumi kasutaja salasõna", + "Enter missing credentials" : "Lisa puuduvad kasutajanimi/salasõna", + "Credentials successfully set" : "Kasutajanime/salasõna lisamine õnnestus", + "Error while setting credentials: {error}" : "Viga kasutajanime/salasõna lisamisel: {error}", + "Checking storage …" : "Kontrollin andmeruumi…", "Open in Files" : "Ava failirakenduses", "External mount error" : "Välise seostamise tõrge", "Storage type" : "Andmehoidla tüüp", @@ -71,7 +99,9 @@ OC.L10N.register( "Scope" : "Skoop", "Personal" : "Isiklik", "System" : "Süsteem", - "Enable encryption" : "Luba krüpteerimine", + "(Group)" : "(Grupp)", + "Compatibility with Mac NFD encoding (slow)" : "Ühilduvus Mac NFD kodeeringuga (aeglane)", + "Enable encryption" : "Luba krüptimine", "Enable previews" : "Luba eelvaated", "Enable sharing" : "Luba jagamine", "Check for changes" : "Otsi uuendusi", @@ -79,10 +109,15 @@ OC.L10N.register( "Once every direct access" : "Kord iga otsese pöördumise korral", "Read only" : "kirjutuskaitstud", "Disconnect" : "Ühenda lahti", + "Unknown backend: {backendName}" : "Tundmatu taustateenus: {backendName}", "Admin defined" : "Admini poolt määratud", + "Delete storage?" : "Kas kustutame andmeruumi?", + "Click to recheck the configuration" : "Klõpsi seadistuste uuesti kontrollimiseks", "Saved" : "Salvestatud", - "Saving …" : "Salvestamine …", + "Saving …" : "Salvestan…", "Save" : "Salvesta", + "Failed to save global credentials" : "Üldise kasutajanime/salasõna salvestamine ei õnnestunud", + "Failed to save global credentials: {message}" : "Üldise kasutajanime/salasõna salvestamine ei õnnestunud: {message}", "Open documentation" : "Ava dokumentatsioon", "Folder name" : "Kausta nimi", "Authentication" : "Autentimine", diff --git a/apps/files_external/l10n/et_EE.json b/apps/files_external/l10n/et_EE.json index 4f5ae6f5243..108e1ad18aa 100644 --- a/apps/files_external/l10n/et_EE.json +++ b/apps/files_external/l10n/et_EE.json @@ -1,12 +1,19 @@ { "translations": { "Grant access" : "Anna ligipääs", "Error configuring OAuth1" : "OAuth1 seadistamise tõrge", + "Please provide a valid app key and secret." : "Palun sisesta rakenduse ketiva võti ja saladus.", "Error configuring OAuth2" : "OAuth2 seadistamise tõrge", "Generate keys" : "Loo võtmed", "Error generating key pair" : "Viga võtmepaari loomisel", + "You are not logged in" : "Sa pole sisse logitud.", + "Permission denied" : "Õigus on keelatud", + "Storage with ID \"%d\" not found" : "Andmeruumi tunnusega „%d“ ei leidu", + "Invalid backend or authentication mechanism class" : "Vigane taustateenus või autentimismeetodi klass", "Invalid mount point" : "Vigane haakepunkt", "Objectstore forbidden" : "Objectstore on keelatud", "Invalid storage backend \"%s\"" : "Vigane salvestuskoha taustsüsteem \"%s\"", + "Not permitted to use backend \"%s\"" : "Pole luba kasutada „%s“ taustateenust", + "Not permitted to use authentication mechanism \"%s\"" : "Pole luba kasutada „%s“ autentimismeetodit", "Unsatisfied backend parameters" : "Rahuldamata taustarakenduse parameetrid", "Insufficient data: %s" : "Pole piisavalt andmeid: %s", "%s" : "%s", @@ -23,10 +30,17 @@ "OpenStack v2" : "OpenStack v2", "Login" : "Logi sisse", "Password" : "Salasõna", + "Tenant name" : "Kliendi nimi", + "Identity endpoint URL" : "Tuvastuse otspunkti võrguaadress", "OpenStack v3" : "OpenStack v3", "Domain" : "Domeen", "Rackspace" : "Rackspace", "API key" : "API võti", + "Global credentials" : "Üldinekasutajanimi/salasõna", + "Log-in credentials, save in database" : "Salvesta sisselogimise kasutajanimi/salasõna andmebaasi", + "Login and password" : "Kasutajanimi ja salasõna", + "Log-in credentials, save in session" : "Salvesta sisselogimise kasutajanimi/salasõna sessioonis", + "Global credentials, manually entered" : "Käsitsi sisestatud üldine kasutajanimi/salasõna", "RSA public key" : "RSA avalik võti", "Public key" : "Avalik võti", "RSA private key" : "RSA privaatvõti", @@ -38,9 +52,11 @@ "Region" : "Piirkond", "Enable SSL" : "SSL-i kasutamine", "Enable Path Style" : "Luba otsingtee stiilis", + "Legacy (v2) authentication" : "Pärandvormis autentimine (v2)", + "SSE-C encryption key" : "SSE-C krüptimisvõti", "WebDAV" : "WebDAV", "URL" : "URL", - "Remote subfolder" : "Mujahl olev alamkaust", + "Remote subfolder" : "Mujal olev alamkaust", "Secure https://" : "Turvaline https://", "FTP" : "FTP", "Host" : "Host", @@ -54,14 +70,26 @@ "SMB/CIFS" : "SMB/CIFS", "Share" : "Jaga", "Show hidden files" : "Näita peidetud faile", + "Case sensitive file system" : "Tõstutundlik failisüsteem", + "Timeout" : "Aegumine", + "SMB/CIFS using OC login" : "SMB / CIFS kasutades OC sisselogimist", "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Teenuse nimi", + "Request timeout (seconds)" : "Päringu aegumine (sekundites)", + "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "cURL-i tugi on PHP-s on kas paigaldamata või pole kasutusele võetud. „%s“ haakimine pole võimalik. Palun oma peakasutajat, et ta teeks cURL-i toe tagamiseks vajalikud muudatused.", + "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "FTP tugi on PHP-s on kas paigaldamata või pole kasutusele võetud. „%s“ haakimine pole võimalik. Palun oma peakasutajat, et ta teeks FTP toe tagamiseks vajalikud muudatused.", "External storage" : "Väline andmehoidla", "External storage support" : "Väliste andmehoidlate tugi", "Adds basic external storage support" : "Lisab väliste andmehoidlate toe baasiteratsioonis", "Confirm" : "Kinnita", + "Storage credentials" : "Andmeruumi kasutajanimi/salasõna", + "To access the storage, you need to provide the authentication credentials." : "Selle andmeruumi jaoks pead autentimiseks lisama kasutajanime ja salasõna.", "Enter the storage login" : "Sisesta andmeruumi kasutajatunnus", "Enter the storage password" : "Sisesta andmeruumi kasutaja salasõna", + "Enter missing credentials" : "Lisa puuduvad kasutajanimi/salasõna", + "Credentials successfully set" : "Kasutajanime/salasõna lisamine õnnestus", + "Error while setting credentials: {error}" : "Viga kasutajanime/salasõna lisamisel: {error}", + "Checking storage …" : "Kontrollin andmeruumi…", "Open in Files" : "Ava failirakenduses", "External mount error" : "Välise seostamise tõrge", "Storage type" : "Andmehoidla tüüp", @@ -69,7 +97,9 @@ "Scope" : "Skoop", "Personal" : "Isiklik", "System" : "Süsteem", - "Enable encryption" : "Luba krüpteerimine", + "(Group)" : "(Grupp)", + "Compatibility with Mac NFD encoding (slow)" : "Ühilduvus Mac NFD kodeeringuga (aeglane)", + "Enable encryption" : "Luba krüptimine", "Enable previews" : "Luba eelvaated", "Enable sharing" : "Luba jagamine", "Check for changes" : "Otsi uuendusi", @@ -77,10 +107,15 @@ "Once every direct access" : "Kord iga otsese pöördumise korral", "Read only" : "kirjutuskaitstud", "Disconnect" : "Ühenda lahti", + "Unknown backend: {backendName}" : "Tundmatu taustateenus: {backendName}", "Admin defined" : "Admini poolt määratud", + "Delete storage?" : "Kas kustutame andmeruumi?", + "Click to recheck the configuration" : "Klõpsi seadistuste uuesti kontrollimiseks", "Saved" : "Salvestatud", - "Saving …" : "Salvestamine …", + "Saving …" : "Salvestan…", "Save" : "Salvesta", + "Failed to save global credentials" : "Üldise kasutajanime/salasõna salvestamine ei õnnestunud", + "Failed to save global credentials: {message}" : "Üldise kasutajanime/salasõna salvestamine ei õnnestunud: {message}", "Open documentation" : "Ava dokumentatsioon", "Folder name" : "Kausta nimi", "Authentication" : "Autentimine", diff --git a/apps/files_external/lib/Command/Dependencies.php b/apps/files_external/lib/Command/Dependencies.php new file mode 100644 index 00000000000..1bb57778129 --- /dev/null +++ b/apps/files_external/lib/Command/Dependencies.php @@ -0,0 +1,56 @@ +<?php +/** + * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-only + */ +namespace OCA\Files_External\Command; + +use OC\Core\Command\Base; +use OCA\Files_External\Service\BackendService; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class Dependencies extends Base { + public function __construct( + private readonly BackendService $backendService, + ) { + parent::__construct(); + } + + protected function configure(): void { + $this + ->setName('files_external:dependencies') + ->setDescription('Show information about the backend dependencies'); + parent::configure(); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $storageBackends = $this->backendService->getBackends(); + + $anyMissing = false; + + foreach ($storageBackends as $backend) { + if ($backend->getDeprecateTo() !== null) { + continue; + } + $missingDependencies = $backend->checkDependencies(); + if ($missingDependencies) { + $anyMissing = true; + $output->writeln($backend->getText() . ':'); + foreach ($missingDependencies as $missingDependency) { + if ($missingDependency->getMessage()) { + $output->writeln(" - <comment>{$missingDependency->getDependency()}</comment>: {$missingDependency->getMessage()}"); + } else { + $output->writeln(" - <comment>{$missingDependency->getDependency()}</comment>"); + } + } + } + } + + if (!$anyMissing) { + $output->writeln('<info>All dependencies are met</info>'); + } + + return self::SUCCESS; + } +} diff --git a/apps/files_external/lib/Lib/Backend/SMB.php b/apps/files_external/lib/Lib/Backend/SMB.php index b246b0638f0..3549f69cbe3 100644 --- a/apps/files_external/lib/Lib/Backend/SMB.php +++ b/apps/files_external/lib/Lib/Backend/SMB.php @@ -10,19 +10,20 @@ namespace OCA\Files_External\Lib\Backend; use Icewind\SMB\BasicAuth; use Icewind\SMB\KerberosApacheAuth; use Icewind\SMB\KerberosAuth; +use Icewind\SMB\Native\NativeServer; +use Icewind\SMB\Wrapped\Server; use OCA\Files_External\Lib\Auth\AuthMechanism; use OCA\Files_External\Lib\Auth\Password\Password; use OCA\Files_External\Lib\Auth\SMB\KerberosApacheAuth as KerberosApacheAuthMechanism; use OCA\Files_External\Lib\DefinitionParameter; use OCA\Files_External\Lib\InsufficientDataForMeaningfulAnswerException; -use OCA\Files_External\Lib\LegacyDependencyCheckPolyfill; +use OCA\Files_External\Lib\MissingDependency; +use OCA\Files_External\Lib\Storage\SystemBridge; use OCA\Files_External\Lib\StorageConfig; use OCP\IL10N; use OCP\IUser; class SMB extends Backend { - use LegacyDependencyCheckPolyfill; - public function __construct(IL10N $l, Password $legacyAuth) { $this ->setIdentifier('smb') @@ -122,4 +123,20 @@ class SMB extends Backend { $storage->setBackendOption('auth', $smbAuth); } + + public function checkDependencies() { + $system = \OCP\Server::get(SystemBridge::class); + if (NativeServer::available($system)) { + return []; + } elseif (Server::available($system)) { + $missing = new MissingDependency('php-smbclient'); + $missing->setOptional(true); + $missing->setMessage('The php-smbclient library provides improved compatibility and performance for SMB storages.'); + return [$missing]; + } else { + $missing = new MissingDependency('php-smbclient'); + $missing->setMessage('Either the php-smbclient library (preferred) or the smbclient binary is required for SMB storages.'); + return [$missing, new MissingDependency('smbclient')]; + } + } } diff --git a/apps/files_external/lib/Lib/MissingDependency.php b/apps/files_external/lib/Lib/MissingDependency.php index 5c2c6880f23..da4cbb1de46 100644 --- a/apps/files_external/lib/Lib/MissingDependency.php +++ b/apps/files_external/lib/Lib/MissingDependency.php @@ -12,13 +12,14 @@ namespace OCA\Files_External\Lib; class MissingDependency { /** @var string|null Custom message */ - private $message = null; + private ?string $message = null; + private bool $optional = false; /** * @param string $dependency */ public function __construct( - private $dependency, + private readonly string $dependency, ) { } @@ -38,4 +39,12 @@ class MissingDependency { $this->message = $message; return $this; } + + public function isOptional(): bool { + return $this->optional; + } + + public function setOptional(bool $optional): void { + $this->optional = $optional; + } } diff --git a/apps/files_external/lib/Service/BackendService.php b/apps/files_external/lib/Service/BackendService.php index 4726dbd4cad..586ce5330ad 100644 --- a/apps/files_external/lib/Service/BackendService.php +++ b/apps/files_external/lib/Service/BackendService.php @@ -12,6 +12,7 @@ use OCA\Files_External\Lib\Auth\AuthMechanism; use OCA\Files_External\Lib\Backend\Backend; use OCA\Files_External\Lib\Config\IAuthMechanismProvider; use OCA\Files_External\Lib\Config\IBackendProvider; +use OCA\Files_External\Lib\MissingDependency; use OCP\EventDispatcher\GenericEvent; use OCP\EventDispatcher\IEventDispatcher; use OCP\IAppConfig; @@ -187,7 +188,8 @@ class BackendService { */ public function getAvailableBackends() { return array_filter($this->getBackends(), function ($backend) { - return !$backend->checkDependencies(); + $missing = array_filter($backend->checkDependencies(), fn (MissingDependency $dependency) => !$dependency->isOptional()); + return count($missing) === 0; }); } |