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:
parent
f107be3d29
commit
332b38fd92
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue