public function __invoke(array $input) { $payload = new Payload(); if (!$this->isOkay($input)) { return $payload->setExtras(['template' => 'error'])->setStatus(Payload::NOT_AUTHENTICATED)->setInput($input); } if (!$this->isValidState($input)) { return $payload->setExtras(['template' => 'error'])->setStatus(Payload::NOT_VALID)->setInput($input)->setMessages(['error' => 'Invalid state detected']); } $provider = $input['provider']; $code = $input['code']; $token = $this->provider->getAccessToken('authorization_code', compact('code')); // Store the token to later actions $this->session->merge('tokens', [$provider => $token]); return $payload->setStatus(Payload::AUTHENTICATED)->setOutput(compact('provider')); }
public function __invoke(array $input) { $payload = new Payload(); if (!$this->isAuthenticated($input)) { return $payload->setExtras(['template' => 'error'])->setStatus(Payload::NOT_VALID)->setInput($input)->setMessages(['token' => 'No token found for this provider']); } $provider = $input['provider']; $token = $this->session->get('tokens')[$provider]; try { $owner = $this->provider->getResourceOwner($token); } catch (IdentityProviderException $e) { if ($e->getCode() === 401) { $this->session->merge('tokens', [$provider => null]); return $payload->setExtras(['template' => 'error'])->setStatus(Payload::NOT_AUTHENTICATED)->setInput($input)->setMessages(['token' => 'Token for this provider is invalid, token removed']); } return $payload->setExtras(['template' => 'error'])->setStatus(Payload::ERROR)->setOutput($e->getResponseBody()); } // Collect output $id = $owner->getId(); $details = $owner->toArray(); return $payload->setExtras(['template' => 'user'])->setStatus(Payload::SUCCESS)->setOutput(compact('provider', 'id', 'details')); }