/**
  * {@inheritdoc}
  */
 public function getUser($token)
 {
     $request = new Request(self::USER_API_URI . '?access_token=' . $token, Request::METHOD_GET);
     $request = $this->request($request);
     $client = new Curl();
     $response = $client->send($request);
     $result = json_decode($response->getBody()->getContents(), true);
     if (isset($result['error'])) {
         throw new Exception(sprintf('[%s] %s', $result['error']['code'], $result['error']['message']));
     }
     return (new User($result))->setId(isset($result['id']) ? $result['id'] : null)->setEmail($result['emails'] ? $result['emails'][0]['value'] : null)->setAvatarUri($result['image'] ? $result['image']['url'] : null)->setUsername($result['emails'] ? $result['emails'][0]['value'] : null)->setName(isset($result['displayName']) ? $result['displayName'] : null);
 }
 /**
  * Get user email
  *
  * @param string $token Access token
  *
  * @return null|string
  * @throws Exception
  */
 protected function getEmail($token)
 {
     if (in_array(self::SCOPE_USER_EMAIL, $this->getScopes())) {
         $request = new Request(self::USER_API_URI . '/emails?access_token=' . $token, Request::METHOD_GET);
         $request = $this->request($request);
         $client = new Curl();
         $response = $client->send($request);
         $result = json_decode($response->getBody()->getContents(), true);
         if ($response->getStatusCode() !== 200) {
             throw new Exception(sprintf('%s (%s)', $result['message'], $result['documentation_url']));
         }
         foreach ($result as $email) {
             if ($email['primary'] && $email['verified']) {
                 return $email['email'];
             }
         }
     }
     return null;
 }