. */ declare(strict_types=1); namespace FireflyIII\Services\Password; use Log; use Requests; use Requests_Exception; /** * Class PwndVerifierV2. */ class PwndVerifierV2 implements Verifier { /** * Verify the given password against (some) service. * * @param string $password * * @return bool */ public function validPassword(string $password): bool { $hash = sha1($password); $prefix = substr($hash, 0, 5); $rest = substr($hash, 5); $uri = sprintf('https://api.pwnedpasswords.com/range/%s', $prefix); $opt = ['useragent' => 'Firefly III v' . config('firefly.version'), 'timeout' => 2]; Log::debug(sprintf('hash prefix is %s', $prefix)); Log::debug(sprintf('rest is %s', $rest)); try { $result = Requests::get($uri, $opt); } catch (Requests_Exception $e) { return true; } Log::debug(sprintf('Status code returned is %d', $result->status_code)); if (404 === $result->status_code) { return true; } $strpos = stripos($result->body, $rest); if ($strpos === false) { Log::debug(sprintf('%s was not found in result body. Return true.', $rest)); return true; } Log::debug('Could not find %s, return FALSE.'); return false; } }