Esempio n. 1
0
 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'));
 }
Esempio n. 2
0
 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'));
 }