user->getByGithubId($github_id); if (! empty($user)) { $this->userSession->refresh($user); $this->container['dispatcher']->dispatch('auth.success', new AuthEvent(self::AUTH_NAME, $user['id'])); return true; } return false; } /** * Unlink a Github account for a given user * * @access public * @param integer $user_id User id * @return boolean */ public function unlink($user_id) { return $this->user->update(array( 'id' => $user_id, 'github_id' => '', )); } /** * Update the user table based on the Github profile information * * @access public * @param integer $user_id User id * @param array $profile Github profile * @return boolean */ public function updateUser($user_id, array $profile) { $user = $this->user->getById($user_id); return $this->user->update(array( 'id' => $user_id, 'github_id' => $profile['id'], 'email' => $profile['email'] ?: $user['email'], 'name' => $profile['name'] ?: $user['name'], )); } /** * Get OAuth2 configured service * * @access public * @return \Core\OAuth2 */ public function getService() { if (empty($this->service)) { $this->service = $this->oauth->createService( GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET, $this->helper->url->to('oauth', 'github', array(), '', true), GITHUB_OAUTH_AUTHORIZE_URL, GITHUB_OAUTH_TOKEN_URL, array() ); } return $this->service; } /** * Get Github profile * * @access public * @param string $code * @return array */ public function getProfile($code) { $this->getService()->getAccessToken($code); return $this->httpClient->getJson( GITHUB_API_URL.'user', array($this->getService()->getAuthorizationHeader()) ); } }