diff --git a/src/Authentication/NamiGuard.php b/src/Authentication/NamiGuard.php index a956b1a..1a3ebc8 100644 --- a/src/Authentication/NamiGuard.php +++ b/src/Authentication/NamiGuard.php @@ -4,11 +4,14 @@ namespace Zoomyboy\LaravelNami\Authentication; use Illuminate\Auth\GuardHelpers; use Illuminate\Auth\SessionGuard; +use Illuminate\Cache\Repository as CacheRepository; use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Contracts\Auth\Guard; +use Illuminate\Session\Store as SessionStore; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Str; +use Zoomyboy\LaravelNami\LoginException; use Zoomyboy\LaravelNami\Nami; use Zoomyboy\LaravelNami\NamiUser; @@ -16,11 +19,18 @@ class NamiGuard { use GuardHelpers; - protected $cache; - protected $user; - protected $session; + protected CacheRepository $cache; - public function __construct($session, $cache) { + /** + * The currently authenticated user. + * + * @var ?NamiUser + */ + protected $user; + + protected SessionStore $session; + + public function __construct(SessionStore $session, CacheRepository $cache) { $this->session = $session; $this->cache = $cache; } @@ -28,14 +38,15 @@ class NamiGuard { /** * Set the current user. * - * @param \Illuminate\Contracts\Auth\Authenticatable $user + * @param NamiUser|null $user * @return void */ - public function setUser(NamiUser $user) { + public function setUser(?NamiUser $user): void + { $this->user = $user; } - public function user() + public function user(): ?NamiUser { if (! is_null($this->user)) { return $this->user; @@ -44,42 +55,60 @@ class NamiGuard { $cache = $this->resolveCache(); if (!$cache) { - return; + return null; } return NamiUser::fromPayload($cache); } - public function attempt(array $credentials = [], $remember = false) { - $api = Nami::login($credentials['mglnr'], $credentials['password']); + /** + * @param array $credentials + * @param bool $remember + */ + public function attempt(array $credentials = [], bool $remember = false): bool + { + try { + $api = Nami::login($credentials['mglnr'], $credentials['password']); - $payload = [ - 'credentials' => $credentials - ]; + $payload = [ + 'credentials' => $credentials + ]; - $this->setUser(NamiUser::fromPayload($payload)); - $key = $this->newCacheKey(); - Cache::forever("namiauth-{$key}", $payload); - $this->updateSession($key); + $this->setUser(NamiUser::fromPayload($payload)); + $key = $this->newCacheKey(); + Cache::forever("namiauth-{$key}", $payload); + $this->updateSession($key); - return true; + return true; + } catch (LoginException $e) { + return false; + } } - protected function updateSession($data) + protected function updateSession(string $data): void { $this->session->put($this->getName(), $data); $this->session->migrate(true); } - public function getName() { + public function getName(): string + { return 'auth_key'; } - private function resolveCache() { + public function logout(): void + { + $this->session->forget($this->getName()); + $this->setUser(null); + } + + private function resolveCache(): ?string + { return $this->cache->get('namiauth-'.$this->session->get($this->getName())); } - private function newCacheKey() { + private function newCacheKey(): string + { return Str::random(16); }