First list existing devices, then try to get a new one.

This commit is contained in:
James Cole
2018-03-10 07:33:49 +01:00
parent be97dd1c57
commit 30e49846e0
2 changed files with 28 additions and 11 deletions

View File

@@ -187,7 +187,7 @@ class BunqPrerequisites implements PrerequisitesInterface
* *
* @throws FireflyException * @throws FireflyException
*/ */
private function getExistingDevice(): DeviceServerId private function getExistingDevice(): ?DeviceServerId
{ {
Log::debug('Now in getExistingDevice()'); Log::debug('Now in getExistingDevice()');
$installationToken = $this->getInstallationToken(); $installationToken = $this->getInstallationToken();
@@ -205,7 +205,8 @@ class BunqPrerequisites implements PrerequisitesInterface
return $device->getId(); return $device->getId();
} }
} }
throw new FireflyException('Cannot find existing Server Device that can be used by this instance of Firefly III.');
return null;
} }
/** /**
@@ -342,13 +343,21 @@ class BunqPrerequisites implements PrerequisitesInterface
return $deviceServerId->data; return $deviceServerId->data;
} }
Log::debug('Device server ID is null, we have to register.'); Log::debug('Device server ID is null, we have to find an existing one or register a new one.');
$installationToken = $this->getInstallationToken(); $installationToken = $this->getInstallationToken();
$serverPublicKey = $this->getServerPublicKey(); $serverPublicKey = $this->getServerPublicKey();
$apiKey = Preferences::getForUser($this->user, 'bunq_api_key', ''); $apiKey = Preferences::getForUser($this->user, 'bunq_api_key', '');
Log::debug('Going to create new DeviceServerRequest()'); // try get the current from a list:
$request = new DeviceServerRequest; $deviceServerId = $this->getExistingDevice();
if (null !== $deviceServerId) {
Log::debug('Found device server ID in existing devices list.');
return $deviceServerId;
}
Log::debug('Going to create new DeviceServerRequest() because nothing found in existing list.');
$request = new DeviceServerRequest;
$request->setPrivateKey($this->getPrivateKey()); $request->setPrivateKey($this->getPrivateKey());
$request->setDescription('Firefly III v' . config('firefly.version') . ' for ' . $this->user->email); $request->setDescription('Firefly III v' . config('firefly.version') . ' for ' . $this->user->email);
$request->setSecret($apiKey->data); $request->setSecret($apiKey->data);
@@ -363,12 +372,12 @@ class BunqPrerequisites implements PrerequisitesInterface
} catch (FireflyException $e) { } catch (FireflyException $e) {
Log::error($e->getMessage()); Log::error($e->getMessage());
// we really have to quit at this point :( // we really have to quit at this point :(
throw new FireflyException($e->getMessage()); //throw new FireflyException($e->getMessage());
} }
if (null === $deviceServerId) { if(is_null($deviceServerId)) {
// try get the current from a list: throw new FireflyException('Was not able to register server with bunq. Please see the log files.');
$deviceServerId = $this->getExistingDevice();
} }
Preferences::setForUser($this->user, 'bunq_device_server_id', $deviceServerId); Preferences::setForUser($this->user, 'bunq_device_server_id', $deviceServerId);
Log::debug(sprintf('Server ID: %s', serialize($deviceServerId))); Log::debug(sprintf('Server ID: %s', serialize($deviceServerId)));

View File

@@ -25,6 +25,7 @@ namespace FireflyIII\Services\Bunq\Request;
use FireflyIII\Services\Bunq\Object\DeviceServer; use FireflyIII\Services\Bunq\Object\DeviceServer;
use FireflyIII\Services\Bunq\Token\InstallationToken; use FireflyIII\Services\Bunq\Token\InstallationToken;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Log;
/** /**
* Class ListDeviceServerRequest. * Class ListDeviceServerRequest.
@@ -40,23 +41,30 @@ class ListDeviceServerRequest extends BunqRequest
{ {
parent::__construct(); parent::__construct();
$this->devices = new Collection; $this->devices = new Collection;
Log::debug('Constructed ListDeviceServerRequest');
} }
/** /**
* @throws \FireflyIII\Exceptions\FireflyException
*/ */
public function call(): void public function call(): void
{ {
Log::debug('Now in ListDeviceServerRequest::call()');
$uri = 'device-server'; $uri = 'device-server';
$data = []; $data = [];
$headers = $this->getDefaultHeaders(); $headers = $this->getDefaultHeaders();
$headers['X-Bunq-Client-Authentication'] = $this->installationToken->getToken(); $headers['X-Bunq-Client-Authentication'] = $this->installationToken->getToken();
$response = $this->sendSignedBunqGet($uri, $data, $headers); $response = $this->sendSignedBunqGet($uri, $data, $headers);
Log::debug('Returned from sending device-server list request!');
// create device server objects: // create device server objects:
$raw = $this->getArrayFromResponse('DeviceServer', $response); $raw = $this->getArrayFromResponse('DeviceServer', $response);
Log::debug(sprintf('Count %d entries in response array.', count($raw)));
Log::debug('Full response', $response);
/** @var array $entry */ /** @var array $entry */
foreach ($raw as $entry) { foreach ($raw as $entry) {
$this->devices->push(new DeviceServer($entry)); $server = new DeviceServer($entry);
Log::debug(sprintf('Created server "%s" with IP "%s"', $server->getId()->getId(), $server->getIp()));
$this->devices->push($server);
} }
return; return;