. */ declare(strict_types=1); namespace FireflyIII\Services\IP; use Exception; use GuzzleHttp\Client; use GuzzleHttp\Exception\GuzzleException; use Log; /** * Class IpifyOrg */ class IpifyOrg implements IPRetrievalInterface { /** * Returns the user's IP address. * * @noinspection MultipleReturnStatementsInspection * @return null|string */ public function getIP(): ?string { try { $client = new Client; $res = $client->request('GET', 'https://api.ipify.org'); } catch (GuzzleException|Exception $e) { Log::warning(sprintf('The ipify.org service could not retrieve external IP: %s', $e->getMessage())); Log::warning($e->getTraceAsString()); return null; } if (200 !== $res->getStatusCode()) { Log::warning(sprintf('Could not retrieve external IP: %d %s', $res->getStatusCode(), $res->getBody()->getContents())); return null; } return (string)$res->getBody()->getContents(); } }