use OCP\Federation\ICloudIdManager;
use OCP\Http\Client\IClientService;
use OCP\IConfig;
+use OCP\ILogger;
use OCP\IUserSession;
use OCP\Share;
private $currentUserRemote;
/** @var ICloudIdManager */
private $cloudIdManager;
+ /** @var ILogger */
+ private $logger;
public function __construct(IConfig $config,
IClientService $clientService,
IUserSession $userSession,
- ICloudIdManager $cloudIdManager) {
+ ICloudIdManager $cloudIdManager,
+ ILogger $logger) {
$this->config = $config;
$this->clientService = $clientService;
$this->cloudIdManager = $cloudIdManager;
$currentUserCloudId = $userSession->getUser()->getCloudId();
$this->currentUserRemote = $cloudIdManager->resolveCloudId($currentUserCloudId)->getRemote();
+ $this->logger = $logger;
}
public function search($search, $limit, $offset, ISearchResult $searchResult) {
$isGlobalScaleEnabled = $this->config->getSystemValue('gs.enabled', false);
- $isLookupServerEnabled = $this->config->getAppValue('files_sharing', 'lookupServerEnabled', 'no');
+ $isLookupServerEnabled = $this->config->getAppValue('files_sharing', 'lookupServerEnabled', 'no') === 'yes';
// if case of Global Scale we always search the lookup server
- if ($isLookupServerEnabled !== 'yes' && !$isGlobalScaleEnabled) {
+ if (!$isLookupServerEnabled && !$isGlobalScaleEnabled) {
return false;
}
$body = json_decode($response->getBody(), true);
foreach ($body as $lookup) {
- $remote = $this->cloudIdManager->resolveCloudId($lookup['federationId'])->getRemote();
- if ($this->currentUserRemote === $remote) continue;
+ try {
+ $remote = $this->cloudIdManager->resolveCloudId($lookup['federationId'])->getRemote();
+ } catch (\Exception $e) {
+ $this->logger->error('Can not parse federated cloud ID "' . $lookup['federationId'] . '"');
+ $this->logger->error($e->getMessage());
+ continue;
+ }
+ if ($this->currentUserRemote === $remote) {
+ continue;
+ }
$name = isset($lookup['name']['value']) ? $lookup['name']['value'] : '';
$label = empty($name) ? $lookup['federationId'] : $name . ' (' . $lookup['federationId'] . ')';
$result[] = [
use OCP\Http\Client\IClientService;
use OCP\Http\Client\IResponse;
use OCP\IConfig;
+use OCP\ILogger;
use OCP\IUser;
use OCP\IUserSession;
use OCP\Share;
protected $cloudIdManager;
/** @var LookupPlugin */
protected $plugin;
+ /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */
+ protected $logger;
public function setUp() {
parent::setUp();
$this->userSession = $this->createMock(IUserSession::class);
$this->cloudIdManager = $this->createMock(ICloudIdManager::class);
$this->config = $this->createMock(IConfig::class);
+ $this->logger = $this->createMock(ILogger::class);
$this->clientService = $this->createMock(IClientService::class);
$cloudId = $this->createMock(ICloudId::class);
$cloudId->expects($this->any())->method('getRemote')->willReturn('myNextcloud.net');
});
- $this->plugin = new LookupPlugin($this->config, $this->clientService, $this->userSession, $this->cloudIdManager);
+ $this->plugin = new LookupPlugin(
+ $this->config,
+ $this->clientService,
+ $this->userSession,
+ $this->cloudIdManager,
+ $this->logger
+ );
}
/**