handle unavailable fed shares while testing for availability (#25277)

* More explicit http status codes

* handle unavailable fed shares while testing for availability
This commit is contained in:
Robin Appelman 2016-06-27 21:34:28 +02:00 committed by Thomas Müller
parent 3c399be6ec
commit 88ef163276
2 changed files with 20 additions and 5 deletions

View File

@ -32,6 +32,7 @@ use OC\Files\Storage\DAV;
use OC\ForbiddenException; use OC\ForbiddenException;
use OCA\FederatedFileSharing\DiscoveryManager; use OCA\FederatedFileSharing\DiscoveryManager;
use OCA\Files_Sharing\ISharedStorage; use OCA\Files_Sharing\ISharedStorage;
use OCP\AppFramework\Http;
use OCP\Files\NotFoundException; use OCP\Files\NotFoundException;
use OCP\Files\StorageInvalidException; use OCP\Files\StorageInvalidException;
use OCP\Files\StorageNotAvailableException; use OCP\Files\StorageNotAvailableException;
@ -181,6 +182,20 @@ class Storage extends DAV implements ISharedStorage {
} }
} }
public function test() {
try {
parent::test();
} catch (StorageInvalidException $e) {
// check if it needs to be removed
$this->checkStorageAvailability();
throw $e;
} catch (StorageNotAvailableException $e) {
// check if it needs to be removed or just temp unavailable
$this->checkStorageAvailability();
throw $e;
}
}
/** /**
* Check whether this storage is permanently or temporarily * Check whether this storage is permanently or temporarily
* unavailable * unavailable
@ -310,10 +325,10 @@ class Storage extends DAV implements ISharedStorage {
'connect_timeout' => 10, 'connect_timeout' => 10,
]); ]);
} catch (\GuzzleHttp\Exception\RequestException $e) { } catch (\GuzzleHttp\Exception\RequestException $e) {
if ($e->getCode() === 401 || $e->getCode() === 403) { if ($e->getCode() === Http::STATUS_UNAUTHORIZED || $e->getCode() === Http::STATUS_FORBIDDEN) {
throw new ForbiddenException(); throw new ForbiddenException();
} }
if ($e->getCode() === 404) { if ($e->getCode() === Http::STATUS_NOT_FOUND) {
throw new NotFoundException(); throw new NotFoundException();
} }
// throw this to be on the safe side: the share will still be visible // throw this to be on the safe side: the share will still be visible

View File

@ -814,13 +814,13 @@ class DAV extends Common {
private function convertException(Exception $e, $path = '') { private function convertException(Exception $e, $path = '') {
Util::writeLog('files_external', $e->getMessage(), Util::ERROR); Util::writeLog('files_external', $e->getMessage(), Util::ERROR);
if ($e instanceof ClientHttpException) { if ($e instanceof ClientHttpException) {
if ($e->getHttpStatus() === 423) { if ($e->getHttpStatus() === Http::STATUS_LOCKED) {
throw new \OCP\Lock\LockedException($path); throw new \OCP\Lock\LockedException($path);
} }
if ($e->getHttpStatus() === 401) { if ($e->getHttpStatus() === Http::STATUS_UNAUTHORIZED) {
// either password was changed or was invalid all along // either password was changed or was invalid all along
throw new StorageInvalidException(get_class($e) . ': ' . $e->getMessage()); throw new StorageInvalidException(get_class($e) . ': ' . $e->getMessage());
} else if ($e->getHttpStatus() === 405) { } else if ($e->getHttpStatus() === Http::STATUS_METHOD_NOT_ALLOWED) {
// ignore exception for MethodNotAllowed, false will be returned // ignore exception for MethodNotAllowed, false will be returned
return; return;
} }