diff options
Diffstat (limited to 'apps/files_external')
-rw-r--r-- | apps/files_external/appinfo/register_command.php | 2 | ||||
-rw-r--r-- | apps/files_external/command/verify.php | 145 | ||||
-rw-r--r-- | apps/files_external/l10n/de.js | 7 | ||||
-rw-r--r-- | apps/files_external/l10n/de.json | 7 | ||||
-rw-r--r-- | apps/files_external/l10n/fr.js | 8 | ||||
-rw-r--r-- | apps/files_external/l10n/fr.json | 8 | ||||
-rw-r--r-- | apps/files_external/l10n/pt_BR.js | 5 | ||||
-rw-r--r-- | apps/files_external/l10n/pt_BR.json | 5 |
8 files changed, 179 insertions, 8 deletions
diff --git a/apps/files_external/appinfo/register_command.php b/apps/files_external/appinfo/register_command.php index 5f6f42bf8c1..927ce9869f9 100644 --- a/apps/files_external/appinfo/register_command.php +++ b/apps/files_external/appinfo/register_command.php @@ -29,6 +29,7 @@ use OCA\Files_External\Command\Export; use OCA\Files_External\Command\Delete; use OCA\Files_External\Command\Create; use OCA\Files_External\Command\Backends; +use OCA\Files_External\Command\Verify; $userManager = OC::$server->getUserManager(); $userSession = OC::$server->getUserSession(); @@ -51,3 +52,4 @@ $application->add(new Export($globalStorageService, $userStorageService, $userSe $application->add(new Delete($globalStorageService, $userStorageService, $userSession, $userManager)); $application->add(new Create($globalStorageService, $userStorageService, $userManager, $userSession, $backendService)); $application->add(new Backends($backendService)); +$application->add(new Verify($globalStorageService)); diff --git a/apps/files_external/command/verify.php b/apps/files_external/command/verify.php new file mode 100644 index 00000000000..f985cb401af --- /dev/null +++ b/apps/files_external/command/verify.php @@ -0,0 +1,145 @@ +<?php +/** + * @author Robin Appelman <icewind@owncloud.com> + * + * @copyright Copyright (c) 2016, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OCA\Files_External\Command; + +use OC\Core\Command\Base; +use OCA\Files_External\Lib\Auth\AuthMechanism; +use OCA\Files_External\Lib\Backend\Backend; +use OCA\Files_External\Lib\InsufficientDataForMeaningfulAnswerException; +use OCA\Files_external\Lib\StorageConfig; +use OCA\Files_external\NotFoundException; +use OCA\Files_external\Service\GlobalStoragesService; +use OCP\Files\StorageNotAvailableException; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Helper\Table; +use Symfony\Component\Console\Helper\TableHelper; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +class Verify extends Base { + /** + * @var GlobalStoragesService + */ + protected $globalService; + + function __construct(GlobalStoragesService $globalService) { + parent::__construct(); + $this->globalService = $globalService; + } + + protected function configure() { + $this + ->setName('files_external:verify') + ->setDescription('Verify mount configuration') + ->addArgument( + 'mount_id', + InputArgument::REQUIRED, + 'The id of the mount to check' + )->addOption( + 'config', + 'c', + InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, + 'Additional config option to set before checking in key=value pairs, required for certain auth backends such as login credentails' + ); + parent::configure(); + } + + protected function execute(InputInterface $input, OutputInterface $output) { + $mountId = $input->getArgument('mount_id'); + $configInput = $input->getOption('config'); + + try { + $mount = $this->globalService->getStorage($mountId); + } catch (NotFoundException $e) { + $output->writeln('<error>Mount with id "' . $mountId . ' not found, check "occ files_external:list" to get available mounts"</error>'); + return 404; + } + + $this->updateStorageStatus($mount, $configInput, $output); + + $this->writeArrayInOutputFormat($input, $output, [ + 'status' => StorageNotAvailableException::getStateCodeName($mount->getStatus()), + 'code' => $mount->getStatus(), + 'message' => $mount->getStatusMessage() + ]); + } + + private function manipulateStorageConfig(StorageConfig $storage) { + /** @var AuthMechanism */ + $authMechanism = $storage->getAuthMechanism(); + $authMechanism->manipulateStorageConfig($storage); + /** @var Backend */ + $backend = $storage->getBackend(); + $backend->manipulateStorageConfig($storage); + } + + private function updateStorageStatus(StorageConfig &$storage, $configInput, OutputInterface $output) { + try { + try { + $this->manipulateStorageConfig($storage); + } catch (InsufficientDataForMeaningfulAnswerException $e) { + if (count($configInput) === 0) { // extra config options might solve the error + throw $e; + } + } + + foreach ($configInput as $configOption) { + if (!strpos($configOption, '=')) { + $output->writeln('<error>Invalid mount configuration option "' . $configOption . '"</error>'); + return; + } + list($key, $value) = explode('=', $configOption, 2); + $storage->setBackendOption($key, $value); + } + + /** @var Backend */ + $backend = $storage->getBackend(); + // update status (can be time-consuming) + $storage->setStatus( + \OC_Mount_Config::getBackendStatus( + $backend->getStorageClass(), + $storage->getBackendOptions(), + false + ) + ); + } catch (InsufficientDataForMeaningfulAnswerException $e) { + $status = $e->getCode() ? $e->getCode() : StorageNotAvailableException::STATUS_INDETERMINATE; + $storage->setStatus( + $status, + $e->getMessage() + ); + } catch (StorageNotAvailableException $e) { + $storage->setStatus( + $e->getCode(), + $e->getMessage() + ); + } catch (\Exception $e) { + // FIXME: convert storage exceptions to StorageNotAvailableException + $storage->setStatus( + StorageNotAvailableException::STATUS_ERROR, + get_class($e) . ': ' . $e->getMessage() + ); + } + } +} diff --git a/apps/files_external/l10n/de.js b/apps/files_external/l10n/de.js index 709450948ee..1a8f6f28394 100644 --- a/apps/files_external/l10n/de.js +++ b/apps/files_external/l10n/de.js @@ -31,8 +31,12 @@ OC.L10N.register( "Saving..." : "Speichern…", "Save" : "Speichern", "There was an error with message: " : "Es ist ein Fehler mit folgender Meldung aufgetreten:", + "external-storage" : "Externer Speicher", "Username" : "Benutzername", "Password" : "Passwort", + "Credentials saved" : "Anmeldeinformationen gespeichert", + "Credentials saving failed" : "speichern der Anmeldeinformationen fehlgeschlagen", + "Credentials required" : "Anmeldeinformationen benötigt", "Access key" : "Zugangsschlüssel", "Secret key" : "Geheimer Schlüssel", "None" : "Keine", @@ -46,6 +50,7 @@ OC.L10N.register( "Tenant name" : "Name des Mieters", "Rackspace" : "Rackspace", "API key" : "API-Schlüssel", + "Global Credentails" : "Globale Anmeldeinformtionen", "Username and password" : "Benutzername und Passwort", "RSA public key" : "RSA öffentlicher Schlüssel", "Public key" : "Öffentlicher Schlüssel", @@ -78,6 +83,7 @@ OC.L10N.register( "Username as share" : "Benutzername als Freigabe", "OpenStack Object Storage" : "Openstack-Objektspeicher", "Service name" : "Service Name", + "Request timeout (seconds)" : "Anfrage -Timeout ( Sekunden)", "<b>Note:</b> " : "<b>Hinweis:</b> ", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich zur Installation an Deinen Systemadministrator.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich sich zur Installation an Deinen Systemadministrator.", @@ -88,6 +94,7 @@ OC.L10N.register( "Storage type" : "Du hast noch keinen externen Speicher", "Scope" : "Anwendungsbereich", "External Storage" : "Externer Speicher", + "Global Credentials" : "Globale Anmeldeinformationen", "Folder name" : "Ordnername", "Authentication" : "Authentifizierung", "Configuration" : "Konfiguration", diff --git a/apps/files_external/l10n/de.json b/apps/files_external/l10n/de.json index 9c645c31298..c6517f40fc0 100644 --- a/apps/files_external/l10n/de.json +++ b/apps/files_external/l10n/de.json @@ -29,8 +29,12 @@ "Saving..." : "Speichern…", "Save" : "Speichern", "There was an error with message: " : "Es ist ein Fehler mit folgender Meldung aufgetreten:", + "external-storage" : "Externer Speicher", "Username" : "Benutzername", "Password" : "Passwort", + "Credentials saved" : "Anmeldeinformationen gespeichert", + "Credentials saving failed" : "speichern der Anmeldeinformationen fehlgeschlagen", + "Credentials required" : "Anmeldeinformationen benötigt", "Access key" : "Zugangsschlüssel", "Secret key" : "Geheimer Schlüssel", "None" : "Keine", @@ -44,6 +48,7 @@ "Tenant name" : "Name des Mieters", "Rackspace" : "Rackspace", "API key" : "API-Schlüssel", + "Global Credentails" : "Globale Anmeldeinformtionen", "Username and password" : "Benutzername und Passwort", "RSA public key" : "RSA öffentlicher Schlüssel", "Public key" : "Öffentlicher Schlüssel", @@ -76,6 +81,7 @@ "Username as share" : "Benutzername als Freigabe", "OpenStack Object Storage" : "Openstack-Objektspeicher", "Service name" : "Service Name", + "Request timeout (seconds)" : "Anfrage -Timeout ( Sekunden)", "<b>Note:</b> " : "<b>Hinweis:</b> ", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich zur Installation an Deinen Systemadministrator.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich sich zur Installation an Deinen Systemadministrator.", @@ -86,6 +92,7 @@ "Storage type" : "Du hast noch keinen externen Speicher", "Scope" : "Anwendungsbereich", "External Storage" : "Externer Speicher", + "Global Credentials" : "Globale Anmeldeinformationen", "Folder name" : "Ordnername", "Authentication" : "Authentifizierung", "Configuration" : "Konfiguration", diff --git a/apps/files_external/l10n/fr.js b/apps/files_external/l10n/fr.js index 5328746e5be..ae780704b80 100644 --- a/apps/files_external/l10n/fr.js +++ b/apps/files_external/l10n/fr.js @@ -29,7 +29,7 @@ OC.L10N.register( "Error generating key pair" : "Erreur lors de la génération des clés", "Enable encryption" : "Activer le chiffrement", "Enable previews" : "Activer les prévisualisations", - "Enable sharing" : "Activer le Partage", + "Enable sharing" : "Permettre le partage", "Check for changes" : "Rechercher les modifications", "Never" : "Jamais", "Once every direct access" : "Une fois à chaque accès direct", @@ -45,14 +45,14 @@ OC.L10N.register( "Couldn't get the list of external mount points: {type}" : "Impossible de récupérer la liste des points de montage externes : {type}", "There was an error with message: " : "Il y a eu une erreur avec le message :", "External mount error" : "Erreur de point de montage externe", - "external-storage" : "Stockage externe", + "external-storage" : "external-storage", "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Impossible d'obtenir la liste des points de montage des disques réseaux Windows : Réponse vide du serveur", "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Certains points de montage externes configurés ne sont pas connectés. Veuillez cliquer sur la(les) ligne(s) rouge(s) pour plus d'informations", "Please enter the credentials for the {mount} mount" : "Veuillez entrer les identifiants pour le montage {mount}", "Username" : "Nom d'utilisateur", "Password" : "Mot de passe", "Credentials saved" : "Identifiants sauvegardés", - "Credentials saving failed" : "La sauvegarde des Identifiants a échoué", + "Credentials saving failed" : "La sauvegarde des identifiants a échoué", "Credentials required" : "Des informations d'identification sont requises", "Access key" : "Clé d'accès", "Secret key" : "Clé secrète", @@ -73,7 +73,7 @@ OC.L10N.register( "Log-in credentials, save in database" : "Identifiants de connexion, sauvegardés dans la base de données", "Username and password" : "Nom d'utilisateur et mot de passe", "Log-in credentials, save in session" : "Identifiants de connexion, sauvegardés pour la session", - "User entered, store in database" : "Identifiant utilisateur entré, enregistré dans la base de données", + "User entered, store in database" : "Fourni par l'utilisateur, enregistré dans la base de données", "RSA public key" : "Clé publique RSA", "Public key" : "Clef publique", "Amazon S3" : "Amazon S3", diff --git a/apps/files_external/l10n/fr.json b/apps/files_external/l10n/fr.json index bfbfe0c85ca..53438506bb3 100644 --- a/apps/files_external/l10n/fr.json +++ b/apps/files_external/l10n/fr.json @@ -27,7 +27,7 @@ "Error generating key pair" : "Erreur lors de la génération des clés", "Enable encryption" : "Activer le chiffrement", "Enable previews" : "Activer les prévisualisations", - "Enable sharing" : "Activer le Partage", + "Enable sharing" : "Permettre le partage", "Check for changes" : "Rechercher les modifications", "Never" : "Jamais", "Once every direct access" : "Une fois à chaque accès direct", @@ -43,14 +43,14 @@ "Couldn't get the list of external mount points: {type}" : "Impossible de récupérer la liste des points de montage externes : {type}", "There was an error with message: " : "Il y a eu une erreur avec le message :", "External mount error" : "Erreur de point de montage externe", - "external-storage" : "Stockage externe", + "external-storage" : "external-storage", "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Impossible d'obtenir la liste des points de montage des disques réseaux Windows : Réponse vide du serveur", "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Certains points de montage externes configurés ne sont pas connectés. Veuillez cliquer sur la(les) ligne(s) rouge(s) pour plus d'informations", "Please enter the credentials for the {mount} mount" : "Veuillez entrer les identifiants pour le montage {mount}", "Username" : "Nom d'utilisateur", "Password" : "Mot de passe", "Credentials saved" : "Identifiants sauvegardés", - "Credentials saving failed" : "La sauvegarde des Identifiants a échoué", + "Credentials saving failed" : "La sauvegarde des identifiants a échoué", "Credentials required" : "Des informations d'identification sont requises", "Access key" : "Clé d'accès", "Secret key" : "Clé secrète", @@ -71,7 +71,7 @@ "Log-in credentials, save in database" : "Identifiants de connexion, sauvegardés dans la base de données", "Username and password" : "Nom d'utilisateur et mot de passe", "Log-in credentials, save in session" : "Identifiants de connexion, sauvegardés pour la session", - "User entered, store in database" : "Identifiant utilisateur entré, enregistré dans la base de données", + "User entered, store in database" : "Fourni par l'utilisateur, enregistré dans la base de données", "RSA public key" : "Clé publique RSA", "Public key" : "Clef publique", "Amazon S3" : "Amazon S3", diff --git a/apps/files_external/l10n/pt_BR.js b/apps/files_external/l10n/pt_BR.js index 8706a554d1e..484550ad109 100644 --- a/apps/files_external/l10n/pt_BR.js +++ b/apps/files_external/l10n/pt_BR.js @@ -45,10 +45,15 @@ OC.L10N.register( "Couldn't get the list of external mount points: {type}" : "Não foi possível obter a lista de pontos de montagem externos: {type}", "There was an error with message: " : "Houve um erro com a mensagem:", "External mount error" : "Erro de montagem externa", + "external-storage" : "armazenamento-externo", "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Não foi possível obter a lista unidades de pontos de montagem da rede do Windows: resposta vazia a partir do servidor", "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Alguns dos pontos de montagem externos configurados não estão conectados. Por favor clique na linha vermelha(s) para mais informações", + "Please enter the credentials for the {mount} mount" : "Por favor, insira as credenciais para montar {mount}", "Username" : "Nome de Usuário", "Password" : "Senha", + "Credentials saved" : "Credenciais salvas", + "Credentials saving failed" : "A gravação das credenciais falhou", + "Credentials required" : "Credenciais são exigidas", "Access key" : "Chave da acesso", "Secret key" : "Chave secreta", "Builtin" : "Construídas em", diff --git a/apps/files_external/l10n/pt_BR.json b/apps/files_external/l10n/pt_BR.json index 9cdbf5d7a11..70bb4422730 100644 --- a/apps/files_external/l10n/pt_BR.json +++ b/apps/files_external/l10n/pt_BR.json @@ -43,10 +43,15 @@ "Couldn't get the list of external mount points: {type}" : "Não foi possível obter a lista de pontos de montagem externos: {type}", "There was an error with message: " : "Houve um erro com a mensagem:", "External mount error" : "Erro de montagem externa", + "external-storage" : "armazenamento-externo", "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Não foi possível obter a lista unidades de pontos de montagem da rede do Windows: resposta vazia a partir do servidor", "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Alguns dos pontos de montagem externos configurados não estão conectados. Por favor clique na linha vermelha(s) para mais informações", + "Please enter the credentials for the {mount} mount" : "Por favor, insira as credenciais para montar {mount}", "Username" : "Nome de Usuário", "Password" : "Senha", + "Credentials saved" : "Credenciais salvas", + "Credentials saving failed" : "A gravação das credenciais falhou", + "Credentials required" : "Credenciais são exigidas", "Access key" : "Chave da acesso", "Secret key" : "Chave secreta", "Builtin" : "Construídas em", |