diff options
33 files changed, 427 insertions, 486 deletions
diff --git a/app/Auth/GitHub.php b/app/Auth/GitHub.php deleted file mode 100644 index 816cc9c1..00000000 --- a/app/Auth/GitHub.php +++ /dev/null @@ -1,163 +0,0 @@ -<?php - -namespace Auth; - -use Event\AuthEvent; -use OAuth\Common\Storage\Session; -use OAuth\Common\Consumer\Credentials; -use OAuth\Common\Http\Uri\UriFactory; -use OAuth\ServiceFactory; -use OAuth\Common\Http\Exception\TokenResponseException; - -/** - * GitHub backend - * - * @package auth - */ -class GitHub extends Base -{ - /** - * Backend name - * - * @var string - */ - const AUTH_NAME = 'Github'; - - /** - * Authenticate a GitHub user - * - * @access public - * @param string $github_id GitHub user id - * @return boolean - */ - public function authenticate($github_id) - { - $user = $this->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 - * @todo Don't overwrite existing email/name with empty GitHub data - */ - public function updateUser($user_id, array $profile) - { - return $this->user->update(array( - 'id' => $user_id, - 'github_id' => $profile['id'], - 'email' => $profile['email'], - 'name' => $profile['name'], - )); - } - - /** - * Get the GitHub service instance - * - * @access public - * @return \OAuth\OAuth2\Service\GitHub - */ - public function getService() - { - $uriFactory = new UriFactory(); - $currentUri = $uriFactory->createFromSuperGlobalArray($_SERVER); - $currentUri->setQuery('controller=user&action=gitHub'); - - $storage = new Session(false); - - $credentials = new Credentials( - GITHUB_CLIENT_ID, - GITHUB_CLIENT_SECRET, - $currentUri->getAbsoluteUri() - ); - - $serviceFactory = new ServiceFactory(); - - return $serviceFactory->createService( - 'gitHub', - $credentials, - $storage, - array('') - ); - } - - /** - * Get the authorization URL - * - * @access public - * @return \OAuth\Common\Http\Uri\Uri - */ - public function getAuthorizationUrl() - { - return $this->getService()->getAuthorizationUri(); - } - - /** - * Get GitHub profile information from the API - * - * @access public - * @param string $code GitHub authorization code - * @return bool|array - */ - public function getGitHubProfile($code) - { - try { - $gitHubService = $this->getService(); - $gitHubService->requestAccessToken($code); - - return json_decode($gitHubService->request('user'), true); - } - catch (TokenResponseException $e) { - return false; - } - } - - /** - * Revokes this user's GitHub tokens for Kanboard - * - * @access public - * @return bool|array - * @todo Currently this simply removes all our tokens for this user, ideally it should - * restrict itself to the one in question - */ - public function revokeGitHubAccess() - { - try { - $gitHubService = $this->getService(); - - $basicAuthHeader = array('Authorization' => 'Basic ' . - base64_encode(GITHUB_CLIENT_ID.':'.GITHUB_CLIENT_SECRET)); - - return json_decode($gitHubService->request('/applications/'.GITHUB_CLIENT_ID.'/tokens', 'DELETE', null, $basicAuthHeader), true); - } - catch (TokenResponseException $e) { - return false; - } - } -} diff --git a/app/Auth/Github.php b/app/Auth/Github.php new file mode 100644 index 00000000..44bcc6c8 --- /dev/null +++ b/app/Auth/Github.php @@ -0,0 +1,122 @@ +<?php + +namespace Auth; + +use Event\AuthEvent; + +/** + * Github backend + * + * @package auth + */ +class Github extends Base +{ + /** + * Backend name + * + * @var string + */ + const AUTH_NAME = 'Github'; + + /** + * OAuth2 instance + * + * @access private + * @var \Core\OAuth2 + */ + private $service; + + /** + * Authenticate a Github user + * + * @access public + * @param string $github_id Github user id + * @return boolean + */ + public function authenticate($github_id) + { + $user = $this->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), + 'https://github.com/login/oauth/authorize', + 'https://github.com/login/oauth/access_token', + 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( + 'https://api.github.com/user', + array($this->getService()->getAuthorizationHeader()) + ); + } +} diff --git a/app/Auth/Google.php b/app/Auth/Google.php index dd8f3834..972dd748 100644 --- a/app/Auth/Google.php +++ b/app/Auth/Google.php @@ -22,6 +22,7 @@ class Google extends Base /** * OAuth2 instance * + * @access private * @var \Core\OAuth2 */ private $service; @@ -71,11 +72,13 @@ class Google extends Base */ public function updateUser($user_id, array $profile) { + $user = $this->user->getById($user_id); + return $this->user->update(array( 'id' => $user_id, 'google_id' => $profile['id'], - 'email' => $profile['email'], - 'name' => $profile['name'], + 'email' => $profile['email'] ?: $user['email'], + 'name' => $profile['name'] ?: $user['name'], )); } @@ -114,7 +117,7 @@ class Google extends Base return $this->httpClient->getJson( 'https://www.googleapis.com/oauth2/v1/userinfo', - array($this->getService()->getAuthorizationHeader() - )); + array($this->getService()->getAuthorizationHeader()) + ); } } diff --git a/app/Controller/Oauth.php b/app/Controller/Oauth.php index 32947d1a..00ccd694 100644 --- a/app/Controller/Oauth.php +++ b/app/Controller/Oauth.php @@ -21,6 +21,16 @@ class Oauth extends Base } /** + * Link or authenticate a Github account + * + * @access public + */ + public function github() + { + $this->step1('github'); + } + + /** * Unlink external account * * @access public diff --git a/app/Controller/User.php b/app/Controller/User.php index 7a17d98e..946373ef 100644 --- a/app/Controller/User.php +++ b/app/Controller/User.php @@ -360,69 +360,4 @@ class User extends Base 'user' => $user, ))); } - - /** - * GitHub authentication - * - * @access public - */ - public function github() - { - $code = $this->request->getStringParam('code'); - - if ($code) { - $profile = $this->authentication->backend('gitHub')->getGitHubProfile($code); - - if (is_array($profile)) { - - // If the user is already logged, link the account otherwise authenticate - if ($this->userSession->isLogged()) { - - if ($this->authentication->backend('gitHub')->updateUser($this->userSession->getId(), $profile)) { - $this->session->flash(t('Your GitHub account was successfully linked to your profile.')); - } - else { - $this->session->flashError(t('Unable to link your GitHub Account.')); - } - - $this->response->redirect($this->helper->url->to('user', 'external', array('user_id' => $this->userSession->getId()))); - } - else if ($this->authentication->backend('gitHub')->authenticate($profile['id'])) { - $this->response->redirect($this->helper->url->to('app', 'index')); - } - else { - $this->response->html($this->template->layout('auth/index', array( - 'errors' => array('login' => t('GitHub authentication failed')), - 'values' => array(), - 'no_layout' => true, - 'redirect_query' => '', - 'title' => t('Login') - ))); - } - } - } - - $this->response->redirect($this->authentication->backend('gitHub')->getAuthorizationUrl()); - } - - /** - * Unlink a GitHub account - * - * @access public - */ - public function unlinkGithub() - { - $this->checkCSRFParam(); - - $this->authentication->backend('gitHub')->revokeGitHubAccess(); - - if ($this->authentication->backend('gitHub')->unlink($this->userSession->getId())) { - $this->session->flash(t('Your GitHub account is no longer linked to your profile.')); - } - else { - $this->session->flashError(t('Unable to unlink your GitHub Account.')); - } - - $this->response->redirect($this->helper->url->to('user', 'external', array('user_id' => $this->userSession->getId()))); - } } diff --git a/app/Core/OAuth2.php b/app/Core/OAuth2.php index a0b33e31..a7d04f33 100644 --- a/app/Core/OAuth2.php +++ b/app/Core/OAuth2.php @@ -19,6 +19,18 @@ class OAuth2 extends Base private $tokenType; private $accessToken; + /** + * Create OAuth2 service + * + * @access public + * @param string $clientId + * @param string $secret + * @param string $callbackUrl + * @param string $authUrl + * @param string $tokenUrl + * @param array $scopes + * @return OAuth2 + */ public function createService($clientId, $secret, $callbackUrl, $authUrl, $tokenUrl, array $scopes) { $this->clientId = $clientId; @@ -31,6 +43,12 @@ class OAuth2 extends Base return $this; } + /** + * Get authorization url + * + * @access public + * @return string + */ public function getAuthorizationUrl() { $params = array( @@ -43,15 +61,28 @@ class OAuth2 extends Base return $this->authUrl.'?'.http_build_query($params); } + /** + * Get authorization header + * + * @access public + * @return string + */ public function getAuthorizationHeader() { - if ($this->tokenType === 'Bearer') { + if (strtolower($this->tokenType) === 'bearer') { return 'Authorization: Bearer '.$this->accessToken; } return ''; } + /** + * Get access token + * + * @access public + * @param string $code + * @return string + */ public function getAccessToken($code) { if (empty($this->accessToken) && ! empty($code)) { @@ -64,7 +95,7 @@ class OAuth2 extends Base 'grant_type' => 'authorization_code', ); - $response = json_decode($this->httpClient->postForm($this->tokenUrl, $params), true); + $response = json_decode($this->httpClient->postForm($this->tokenUrl, $params, array('Accept: application/json')), true); $this->tokenType = isset($response['token_type']) ? $response['token_type'] : ''; $this->accessToken = isset($response['access_token']) ? $response['access_token'] : ''; @@ -72,4 +103,18 @@ class OAuth2 extends Base return $this->accessToken; } + + /** + * Set access token + * + * @access public + * @param string $token + * @param string $type + * @return string + */ + public function setAccessToken($token, $type = 'bearer') + { + $this->accessToken = $token; + $this->tokenType = $type; + } } diff --git a/app/Locale/da_DK/translations.php b/app/Locale/da_DK/translations.php index 91d7b98a..ec742059 100644 --- a/app/Locale/da_DK/translations.php +++ b/app/Locale/da_DK/translations.php @@ -338,14 +338,14 @@ return array( 'Maximum size: ' => 'Maksimum størrelse: ', 'Unable to upload the file.' => 'Filen kunne ikke uploades.', 'Display another project' => 'Vis et andet projekt...', - 'Your GitHub account was successfully linked to your profile.' => 'Din GitHub-konto er forbundet til din profil.', - 'Unable to link your GitHub Account.' => 'Det var ikke muligt er forbinde til din GitHub-konto.', - 'GitHub authentication failed' => 'GitHub autentificering mislykkedes', - 'Your GitHub account is no longer linked to your profile.' => 'Din GitHub-konto er ikke længere forbundet til din profil.', - 'Unable to unlink your GitHub Account.' => 'Det var ikke muligt at fjerne forbindelsen til din GitHub-konto.', - 'Login with my GitHub Account' => 'Login med min GitHub-konto', - 'Link my GitHub Account' => 'Forbind min GitHub-konto', - 'Unlink my GitHub Account' => 'Fjern forbindelsen til min GitHub-konto', + 'Your Github account was successfully linked to your profile.' => 'Din Github-konto er forbundet til din profil.', + 'Unable to link your Github Account.' => 'Det var ikke muligt er forbinde til din Github-konto.', + 'Github authentication failed' => 'Github autentificering mislykkedes', + 'Your Github account is no longer linked to your profile.' => 'Din Github-konto er ikke længere forbundet til din profil.', + 'Unable to unlink your Github Account.' => 'Det var ikke muligt at fjerne forbindelsen til din Github-konto.', + 'Login with my Github Account' => 'Login med min Github-konto', + 'Link my Github Account' => 'Forbind min Github-konto', + 'Unlink my Github Account' => 'Fjern forbindelsen til min Github-konto', 'Created by %s' => 'Oprettet af %s', 'Last modified on %B %e, %Y at %k:%M %p' => 'Sidst redigeret %d.%m.%Y - %H:%M', 'Tasks Export' => 'Opgave eksport', @@ -403,7 +403,7 @@ return array( 'Enabled' => 'Aktiv', 'Disabled' => 'Deaktiveret', 'Google account linked' => 'Google-konto forbundet', - 'Github account linked' => 'GitHub-konto forbundet', + 'Github account linked' => 'Github-konto forbundet', 'Username:' => 'Brugernavn', 'Name:' => 'Navn:', 'Email:' => 'Email:', @@ -417,7 +417,7 @@ return array( 'Password modification' => 'Adgangskode ændring', 'External authentications' => 'Ekstern autentificering', 'Google Account' => 'Google-konto', - 'Github Account' => 'GitHub-konto', + 'Github Account' => 'Github-konto', 'Never connected.' => 'Aldrig forbundet.', 'No account linked.' => 'Ingen kontoer forfundet.', 'Account linked.' => 'Konto forbundet.', diff --git a/app/Locale/de_DE/translations.php b/app/Locale/de_DE/translations.php index 37c37568..a4355224 100644 --- a/app/Locale/de_DE/translations.php +++ b/app/Locale/de_DE/translations.php @@ -338,14 +338,14 @@ return array( 'Maximum size: ' => 'Maximalgröße: ', 'Unable to upload the file.' => 'Hochladen der Datei nicht möglich.', 'Display another project' => 'Zu Projekt wechseln', - 'Your GitHub account was successfully linked to your profile.' => 'GitHub-Account erfolgreich mit dem Profil verbunden.', - 'Unable to link your GitHub Account.' => 'Verbindung mit diesem GitHub-Account nicht möglich.', - 'GitHub authentication failed' => 'Zugriff mit GitHub fehlgeschlagen', - 'Your GitHub account is no longer linked to your profile.' => 'GitHub-Account ist nicht mehr mit dem Profil verbunden.', - 'Unable to unlink your GitHub Account.' => 'Trennung der Verbindung zum GitHub-Account ist nicht möglich.', - 'Login with my GitHub Account' => 'Anmelden mit meinem GitHub-Account', - 'Link my GitHub Account' => 'Mit meinem GitHub-Account verbinden', - 'Unlink my GitHub Account' => 'Verbindung mit meinem GitHub-Account trennen', + 'Your Github account was successfully linked to your profile.' => 'Github-Account erfolgreich mit dem Profil verbunden.', + 'Unable to link your Github Account.' => 'Verbindung mit diesem Github-Account nicht möglich.', + 'Github authentication failed' => 'Zugriff mit Github fehlgeschlagen', + 'Your Github account is no longer linked to your profile.' => 'Github-Account ist nicht mehr mit dem Profil verbunden.', + 'Unable to unlink your Github Account.' => 'Trennung der Verbindung zum Github-Account ist nicht möglich.', + 'Login with my Github Account' => 'Anmelden mit meinem Github-Account', + 'Link my Github Account' => 'Mit meinem Github-Account verbinden', + 'Unlink my Github Account' => 'Verbindung mit meinem Github-Account trennen', 'Created by %s' => 'Erstellt durch %s', 'Last modified on %B %e, %Y at %k:%M %p' => 'Letzte Änderung am %d.%m.%Y um %H:%M', 'Tasks Export' => 'Aufgaben exportieren', diff --git a/app/Locale/es_ES/translations.php b/app/Locale/es_ES/translations.php index 36259a8a..dd8c1e09 100644 --- a/app/Locale/es_ES/translations.php +++ b/app/Locale/es_ES/translations.php @@ -338,14 +338,14 @@ return array( 'Maximum size: ' => 'Tamaño máximo', 'Unable to upload the file.' => 'No pude cargar el fichero.', 'Display another project' => 'Mostrar otro proyecto', - 'Your GitHub account was successfully linked to your profile.' => 'Tu cuenta de GitHub ha sido correctamente vinculada con tu perfil', - 'Unable to link your GitHub Account.' => 'Imposible vincular tu cuenta de GitHub', - 'GitHub authentication failed' => 'Falló la autenticación de GitHub', - 'Your GitHub account is no longer linked to your profile.' => 'Tu cuenta de GitHub ya no está vinculada a tu perfil', - 'Unable to unlink your GitHub Account.' => 'Imposible desvincular tu cuenta de GitHub', - 'Login with my GitHub Account' => 'Ingresar con mi cuenta de GitHub', - 'Link my GitHub Account' => 'Vincular mi cuenta de GitHub', - 'Unlink my GitHub Account' => 'Desvincular mi cuenta de GitHub', + 'Your Github account was successfully linked to your profile.' => 'Tu cuenta de Github ha sido correctamente vinculada con tu perfil', + 'Unable to link your Github Account.' => 'Imposible vincular tu cuenta de Github', + 'Github authentication failed' => 'Falló la autenticación de Github', + 'Your Github account is no longer linked to your profile.' => 'Tu cuenta de Github ya no está vinculada a tu perfil', + 'Unable to unlink your Github Account.' => 'Imposible desvincular tu cuenta de Github', + 'Login with my Github Account' => 'Ingresar con mi cuenta de Github', + 'Link my Github Account' => 'Vincular mi cuenta de Github', + 'Unlink my Github Account' => 'Desvincular mi cuenta de Github', 'Created by %s' => 'Creado por %s', 'Last modified on %B %e, %Y at %k:%M %p' => 'Última modificación %B %e, %Y a las %k:%M %p', 'Tasks Export' => 'Exportar tareas', diff --git a/app/Locale/fi_FI/translations.php b/app/Locale/fi_FI/translations.php index beb61d96..b35b5bfd 100644 --- a/app/Locale/fi_FI/translations.php +++ b/app/Locale/fi_FI/translations.php @@ -338,14 +338,14 @@ return array( 'Maximum size: ' => 'Maksimikoko: ', 'Unable to upload the file.' => 'Tiedoston lataus epäonnistui.', 'Display another project' => 'Näytä toinen projekti', - 'Your GitHub account was successfully linked to your profile.' => 'Github-tilisi on onnistuneesti liitetty profiiliisi', - 'Unable to link your GitHub Account.' => 'Github-tilin liittäminen epäonnistui', - 'GitHub authentication failed' => 'Github-todennus epäonnistui', - 'Your GitHub account is no longer linked to your profile.' => 'Github-tiliäsi ei ole enää liitetty profiiliisi.', - 'Unable to unlink your GitHub Account.' => 'Github-tilisi liitoksen poisto epäonnistui', - 'Login with my GitHub Account' => 'Kirjaudu sisään Github-tililläni', - 'Link my GitHub Account' => 'Liitä Github-tilini', - 'Unlink my GitHub Account' => 'Poista liitos Github-tiliini', + 'Your Github account was successfully linked to your profile.' => 'Github-tilisi on onnistuneesti liitetty profiiliisi', + 'Unable to link your Github Account.' => 'Github-tilin liittäminen epäonnistui', + 'Github authentication failed' => 'Github-todennus epäonnistui', + 'Your Github account is no longer linked to your profile.' => 'Github-tiliäsi ei ole enää liitetty profiiliisi.', + 'Unable to unlink your Github Account.' => 'Github-tilisi liitoksen poisto epäonnistui', + 'Login with my Github Account' => 'Kirjaudu sisään Github-tililläni', + 'Link my Github Account' => 'Liitä Github-tilini', + 'Unlink my Github Account' => 'Poista liitos Github-tiliini', 'Created by %s' => 'Luonut: %s', 'Last modified on %B %e, %Y at %k:%M %p' => 'Viimeksi muokattu %B %e, %Y kello %H:%M', 'Tasks Export' => 'Tehtävien vienti', diff --git a/app/Locale/fr_FR/translations.php b/app/Locale/fr_FR/translations.php index d0776d51..29cfedc4 100644 --- a/app/Locale/fr_FR/translations.php +++ b/app/Locale/fr_FR/translations.php @@ -338,14 +338,14 @@ return array( 'Maximum size: ' => 'Taille maximum : ', 'Unable to upload the file.' => 'Impossible de transférer le fichier.', 'Display another project' => 'Afficher un autre projet', - 'Your GitHub account was successfully linked to your profile.' => 'Votre compte Github est désormais lié avec votre profile.', - 'Unable to link your GitHub Account.' => 'Impossible de lier votre compte Github.', - 'GitHub authentication failed' => 'L\'authentification avec Github à échouée', - 'Your GitHub account is no longer linked to your profile.' => 'Votre compte Github n\'est plus relié avec votre profile.', - 'Unable to unlink your GitHub Account.' => 'Impossible de déconnecter votre compte Github.', - 'Login with my GitHub Account' => 'Se connecter avec mon compte Github', - 'Link my GitHub Account' => 'Lier mon compte Github', - 'Unlink my GitHub Account' => 'Ne plus utiliser mon compte Github', + 'Your Github account was successfully linked to your profile.' => 'Votre compte Github est désormais lié avec votre profile.', + 'Unable to link your Github Account.' => 'Impossible de lier votre compte Github.', + 'Github authentication failed' => 'L\'authentification avec Github à échouée', + 'Your Github account is no longer linked to your profile.' => 'Votre compte Github n\'est plus relié avec votre profile.', + 'Unable to unlink your Github Account.' => 'Impossible de déconnecter votre compte Github.', + 'Login with my Github Account' => 'Se connecter avec mon compte Github', + 'Link my Github Account' => 'Lier mon compte Github', + 'Unlink my Github Account' => 'Ne plus utiliser mon compte Github', 'Created by %s' => 'Créé par %s', 'Last modified on %B %e, %Y at %k:%M %p' => 'Modifié le %d/%m/%Y à %H:%M', 'Tasks Export' => 'Exportation des tâches', diff --git a/app/Locale/hu_HU/translations.php b/app/Locale/hu_HU/translations.php index 73215f89..f4856e27 100644 --- a/app/Locale/hu_HU/translations.php +++ b/app/Locale/hu_HU/translations.php @@ -338,14 +338,14 @@ return array( 'Maximum size: ' => 'Maximális méret: ', 'Unable to upload the file.' => 'Fájl feltöltése nem lehetséges.', 'Display another project' => 'Másik projekt megjelenítése', - 'Your GitHub account was successfully linked to your profile.' => 'GitHub fiók sikeresen csatolva a profilhoz.', - 'Unable to link your GitHub Account.' => 'Nem lehet csatolni a GitHub fiókot.', - 'GitHub authentication failed' => 'GitHub azonosítás sikertelen', - 'Your GitHub account is no longer linked to your profile.' => 'GitHub fiók már nincs profilhoz kapcsolva.', - 'Unable to unlink your GitHub Account.' => 'GitHub fiók leválasztása nem lehetséges.', - 'Login with my GitHub Account' => 'Jelentkezzen be GitHub fiókkal', - 'Link my GitHub Account' => 'GitHub fiók csatolása', - 'Unlink my GitHub Account' => 'GitHub fiók leválasztása', + 'Your Github account was successfully linked to your profile.' => 'Github fiók sikeresen csatolva a profilhoz.', + 'Unable to link your Github Account.' => 'Nem lehet csatolni a Github fiókot.', + 'Github authentication failed' => 'Github azonosítás sikertelen', + 'Your Github account is no longer linked to your profile.' => 'Github fiók már nincs profilhoz kapcsolva.', + 'Unable to unlink your Github Account.' => 'Github fiók leválasztása nem lehetséges.', + 'Login with my Github Account' => 'Jelentkezzen be Github fiókkal', + 'Link my Github Account' => 'Github fiók csatolása', + 'Unlink my Github Account' => 'Github fiók leválasztása', 'Created by %s' => 'Készítette: %s', 'Last modified on %B %e, %Y at %k:%M %p' => 'Utolsó módosítás: %Y. %m. %d. %H:%M', 'Tasks Export' => 'Feladatok exportálása', @@ -403,7 +403,7 @@ return array( 'Enabled' => 'Engedélyezve', 'Disabled' => 'Letiltva', 'Google account linked' => 'Google fiók összekapcsolva', - 'Github account linked' => 'GitHub fiók összekapcsolva', + 'Github account linked' => 'Github fiók összekapcsolva', 'Username:' => 'Felhasználónév:', 'Name:' => 'Név:', 'Email:' => 'E-mail:', @@ -458,12 +458,12 @@ return array( '%s changed the assignee of the task %s to %s' => '%s a felelőst %s módosította: %s', 'New password for the user "%s"' => 'Felhasználó új jelszava: %s', 'Choose an event' => 'Válasszon eseményt', - 'Github commit received' => 'GitHub commit érkezett', - 'Github issue opened' => 'GitHub issue nyitás', - 'Github issue closed' => 'GitHub issue zárás', - 'Github issue reopened' => 'GitHub issue újranyitva', - 'Github issue assignee change' => 'GitHub issue felelős változás', - 'Github issue label change' => 'GitHub issue címke változás', + 'Github commit received' => 'Github commit érkezett', + 'Github issue opened' => 'Github issue nyitás', + 'Github issue closed' => 'Github issue zárás', + 'Github issue reopened' => 'Github issue újranyitva', + 'Github issue assignee change' => 'Github issue felelős változás', + 'Github issue label change' => 'Github issue címke változás', 'Create a task from an external provider' => 'Feladat létrehozása külsős számára', 'Change the assignee based on an external username' => 'Felelős módosítása külső felhasználónév alapján', 'Change the category based on an external label' => 'Kategória módosítása külső címke alapján', diff --git a/app/Locale/it_IT/translations.php b/app/Locale/it_IT/translations.php index 0fe5547b..67aef582 100644 --- a/app/Locale/it_IT/translations.php +++ b/app/Locale/it_IT/translations.php @@ -338,14 +338,14 @@ return array( 'Maximum size: ' => 'Dimensioni massime', 'Unable to upload the file.' => 'Non si può caricare il file.', 'Display another project' => 'Mostrare un altro progetto', - 'Your GitHub account was successfully linked to your profile.' => 'Il suo account di Github è stato collegato correttamente col tuo profilo.', - 'Unable to link your GitHub Account.' => 'Non si può collegarre il tuo account di Github.', - 'GitHub authentication failed' => 'Autenticazione con GitHub non riuscita', - 'Your GitHub account is no longer linked to your profile.' => 'Il tuo account di Github non è più collegato al tuo profilo.', - 'Unable to unlink your GitHub Account.' => 'Non si può collegare il tuo account di Github.', - 'Login with my GitHub Account' => 'Entrare col tuo account di Github', - 'Link my GitHub Account' => 'Collegare il mio account Github', - 'Unlink my GitHub Account' => 'Scollegare il mio account di Github', + 'Your Github account was successfully linked to your profile.' => 'Il suo account di Github è stato collegato correttamente col tuo profilo.', + 'Unable to link your Github Account.' => 'Non si può collegarre il tuo account di Github.', + 'Github authentication failed' => 'Autenticazione con Github non riuscita', + 'Your Github account is no longer linked to your profile.' => 'Il tuo account di Github non è più collegato al tuo profilo.', + 'Unable to unlink your Github Account.' => 'Non si può collegare il tuo account di Github.', + 'Login with my Github Account' => 'Entrare col tuo account di Github', + 'Link my Github Account' => 'Collegare il mio account Github', + 'Unlink my Github Account' => 'Scollegare il mio account di Github', 'Created by %s' => 'Creato da %s', 'Last modified on %B %e, %Y at %k:%M %p' => 'Ultima modifica il %d/%m/%Y alle %H:%M', 'Tasks Export' => 'Esportazione di compiti', diff --git a/app/Locale/ja_JP/translations.php b/app/Locale/ja_JP/translations.php index 6c9a205e..3110d491 100644 --- a/app/Locale/ja_JP/translations.php +++ b/app/Locale/ja_JP/translations.php @@ -338,14 +338,14 @@ return array( 'Maximum size: ' => '最大: ', 'Unable to upload the file.' => 'ファイルのアップロードに失敗しました。', 'Display another project' => '別のプロジェクトを表示', - 'Your GitHub account was successfully linked to your profile.' => 'GitHub アカウントとリンクしました。', - 'Unable to link your GitHub Account.' => 'GitHub アカウントとリンクできませんでした。', - 'GitHub authentication failed' => 'GitHub アカウントの認証に失敗しました。', - 'Your GitHub account is no longer linked to your profile.' => 'GitHub アカウントへのリンクが解除されました。', - 'Unable to unlink your GitHub Account.' => 'GitHub アカウントのリンク解除に失敗しました。', - 'Login with my GitHub Account' => 'Github アカウントでログインする', - 'Link my GitHub Account' => 'Github アカウントをリンクする', - 'Unlink my GitHub Account' => 'Github アカウントとのリンクを解除する', + 'Your Github account was successfully linked to your profile.' => 'Github アカウントとリンクしました。', + 'Unable to link your Github Account.' => 'Github アカウントとリンクできませんでした。', + 'Github authentication failed' => 'Github アカウントの認証に失敗しました。', + 'Your Github account is no longer linked to your profile.' => 'Github アカウントへのリンクが解除されました。', + 'Unable to unlink your Github Account.' => 'Github アカウントのリンク解除に失敗しました。', + 'Login with my Github Account' => 'Github アカウントでログインする', + 'Link my Github Account' => 'Github アカウントをリンクする', + 'Unlink my Github Account' => 'Github アカウントとのリンクを解除する', 'Created by %s' => '%s が作成', 'Last modified on %B %e, %Y at %k:%M %p' => ' %Y/%m/%d %H:%M に変更', 'Tasks Export' => 'タスクの出力', @@ -403,7 +403,7 @@ return array( 'Enabled' => '有効', 'Disabled' => '無効', 'Google account linked' => 'Google アカウントがリンク', - 'Github account linked' => 'GitHub のアカウントがリンク', + 'Github account linked' => 'Github のアカウントがリンク', 'Username:' => 'ユーザ名:', 'Name:' => '名前:', 'Email:' => 'Email:', @@ -417,7 +417,7 @@ return array( 'Password modification' => 'パスワードの変更', 'External authentications' => '外部認証', 'Google Account' => 'Google アカウント', - 'Github Account' => 'GitHub アカウント', + 'Github Account' => 'Github アカウント', 'Never connected.' => '未接続。', 'No account linked.' => 'アカウントがリンクしていません。', 'Account linked.' => 'アカウントがリンクしました。', diff --git a/app/Locale/nl_NL/translations.php b/app/Locale/nl_NL/translations.php index 7a31b975..43ee9d78 100644 --- a/app/Locale/nl_NL/translations.php +++ b/app/Locale/nl_NL/translations.php @@ -338,14 +338,14 @@ return array( 'Maximum size: ' => 'Maximale grootte : ', 'Unable to upload the file.' => 'Uploaden van bestand niet gelukt.', 'Display another project' => 'Een ander project weergeven', - 'Your GitHub account was successfully linked to your profile.' => 'Uw Github Account is succesvol gelinkt aan uw profiel.', - 'Unable to link your GitHub Account.' => 'Linken van uw Github Account niet gelukt.', - 'GitHub authentication failed' => 'Github Authenticatie niet gelukt', - 'Your GitHub account is no longer linked to your profile.' => 'Uw Github Account is niet langer gelinkt aan uw profiel.', - 'Unable to unlink your GitHub Account.' => 'Verwijdern van de link met uw Github Account niet gelukt.', - 'Login with my GitHub Account' => 'Login met mijn Github Account', - 'Link my GitHub Account' => 'Link met mijn Github', - 'Unlink my GitHub Account' => 'Link met mijn Github verwijderen', + 'Your Github account was successfully linked to your profile.' => 'Uw Github Account is succesvol gelinkt aan uw profiel.', + 'Unable to link your Github Account.' => 'Linken van uw Github Account niet gelukt.', + 'Github authentication failed' => 'Github Authenticatie niet gelukt', + 'Your Github account is no longer linked to your profile.' => 'Uw Github Account is niet langer gelinkt aan uw profiel.', + 'Unable to unlink your Github Account.' => 'Verwijdern van de link met uw Github Account niet gelukt.', + 'Login with my Github Account' => 'Login met mijn Github Account', + 'Link my Github Account' => 'Link met mijn Github', + 'Unlink my Github Account' => 'Link met mijn Github verwijderen', 'Created by %s' => 'Aangemaakt door %s', 'Last modified on %B %e, %Y at %k:%M %p' => 'Laatst gewijzigd op %d/%m/%Y à %H:%M', 'Tasks Export' => 'Taken exporteren', diff --git a/app/Locale/pl_PL/translations.php b/app/Locale/pl_PL/translations.php index 637eefb4..8875c227 100644 --- a/app/Locale/pl_PL/translations.php +++ b/app/Locale/pl_PL/translations.php @@ -338,14 +338,14 @@ return array( 'Maximum size: ' => 'Maksymalny rozmiar: ', 'Unable to upload the file.' => 'Nie można wczytać pliku.', 'Display another project' => 'Wyświetl inny projekt', - 'Your GitHub account was successfully linked to your profile.' => 'Konto Github podłączone pomyślnie.', - 'Unable to link your GitHub Account.' => 'Nie można połączyć z kontem Github.', - 'GitHub authentication failed' => 'Autentykacja Github nieudana', - 'Your GitHub account is no longer linked to your profile.' => 'Konto Github nie jest już podłączone do twojego profilu.', - 'Unable to unlink your GitHub Account.' => 'Nie można odłączyć konta Github.', - 'Login with my GitHub Account' => 'Zaloguj przy użyciu konta Github', - 'Link my GitHub Account' => 'Podłącz konto Github', - 'Unlink my GitHub Account' => 'Odłącz konto Github', + 'Your Github account was successfully linked to your profile.' => 'Konto Github podłączone pomyślnie.', + 'Unable to link your Github Account.' => 'Nie można połączyć z kontem Github.', + 'Github authentication failed' => 'Autentykacja Github nieudana', + 'Your Github account is no longer linked to your profile.' => 'Konto Github nie jest już podłączone do twojego profilu.', + 'Unable to unlink your Github Account.' => 'Nie można odłączyć konta Github.', + 'Login with my Github Account' => 'Zaloguj przy użyciu konta Github', + 'Link my Github Account' => 'Podłącz konto Github', + 'Unlink my Github Account' => 'Odłącz konto Github', 'Created by %s' => 'Utworzone przez %s', 'Last modified on %B %e, %Y at %k:%M %p' => 'Ostatnio zmienione %e %B %Y o %k:%M', 'Tasks Export' => 'Eksport zadań', diff --git a/app/Locale/pt_BR/translations.php b/app/Locale/pt_BR/translations.php index 78b8961d..2253e6cc 100644 --- a/app/Locale/pt_BR/translations.php +++ b/app/Locale/pt_BR/translations.php @@ -338,14 +338,14 @@ return array( 'Maximum size: ' => 'Tamanho máximo:', 'Unable to upload the file.' => 'Não foi possível carregar o arquivo.', 'Display another project' => 'Exibir outro projeto', - 'Your GitHub account was successfully linked to your profile.' => 'A sua Conta do GitHub foi associada com sucesso ao seu perfil.', - 'Unable to link your GitHub Account.' => 'Não foi possível associar sua Conta do GitHub.', - 'GitHub authentication failed' => 'Autenticação do GitHub falhou', - 'Your GitHub account is no longer linked to your profile.' => 'A sua Conta do GitHub não está mais associada ao seu perfil.', - 'Unable to unlink your GitHub Account.' => 'Não foi possível desassociar a sua Conta do GitHub.', - 'Login with my GitHub Account' => 'Entrar com minha Conta do GitHub', - 'Link my GitHub Account' => 'Associar à minha Conta do GitHub', - 'Unlink my GitHub Account' => 'Desassociar a minha Conta do GitHub', + 'Your Github account was successfully linked to your profile.' => 'A sua Conta do Github foi associada com sucesso ao seu perfil.', + 'Unable to link your Github Account.' => 'Não foi possível associar sua Conta do Github.', + 'Github authentication failed' => 'Autenticação do Github falhou', + 'Your Github account is no longer linked to your profile.' => 'A sua Conta do Github não está mais associada ao seu perfil.', + 'Unable to unlink your Github Account.' => 'Não foi possível desassociar a sua Conta do Github.', + 'Login with my Github Account' => 'Entrar com minha Conta do Github', + 'Link my Github Account' => 'Associar à minha Conta do Github', + 'Unlink my Github Account' => 'Desassociar a minha Conta do Github', 'Created by %s' => 'Criado por %s', 'Last modified on %B %e, %Y at %k:%M %p' => 'Última modificação em %B %e, %Y às %k: %M %p', 'Tasks Export' => 'Exportar Tarefas', diff --git a/app/Locale/ru_RU/translations.php b/app/Locale/ru_RU/translations.php index 9b8b3e4f..27935102 100644 --- a/app/Locale/ru_RU/translations.php +++ b/app/Locale/ru_RU/translations.php @@ -338,14 +338,14 @@ return array( 'Maximum size: ' => 'Максимальный размер: ', 'Unable to upload the file.' => 'Не удалось загрузить файл.', 'Display another project' => 'Показать другой проект', - 'Your GitHub account was successfully linked to your profile.' => 'Ваш GitHub привязан к вашему профилю.', - 'Unable to link your GitHub Account.' => 'Не удалось привязать ваш профиль к GitHub.', - 'GitHub authentication failed' => 'Аутентификация в GitHub не удалась', - 'Your GitHub account is no longer linked to your profile.' => 'Ваш GitHub отвязан от вашего профиля.', - 'Unable to unlink your GitHub Account.' => 'Не удалось отвязать ваш профиль от GitHub.', - 'Login with my GitHub Account' => 'Аутентификация через GitHub', - 'Link my GitHub Account' => 'Привязать мой профиль к GitHub', - 'Unlink my GitHub Account' => 'Отвязать мой профиль от GitHub', + 'Your Github account was successfully linked to your profile.' => 'Ваш Github привязан к вашему профилю.', + 'Unable to link your Github Account.' => 'Не удалось привязать ваш профиль к Github.', + 'Github authentication failed' => 'Аутентификация в Github не удалась', + 'Your Github account is no longer linked to your profile.' => 'Ваш Github отвязан от вашего профиля.', + 'Unable to unlink your Github Account.' => 'Не удалось отвязать ваш профиль от Github.', + 'Login with my Github Account' => 'Аутентификация через Github', + 'Link my Github Account' => 'Привязать мой профиль к Github', + 'Unlink my Github Account' => 'Отвязать мой профиль от Github', 'Created by %s' => 'Создано %s', 'Last modified on %B %e, %Y at %k:%M %p' => 'Последнее изменение %d/%m/%Y в %H:%M', 'Tasks Export' => 'Экспорт задач', @@ -403,7 +403,7 @@ return array( 'Enabled' => 'Включен', 'Disabled' => 'Выключены', 'Google account linked' => 'Профиль Google связан', - 'Github account linked' => 'Профиль GitHub связан', + 'Github account linked' => 'Профиль Github связан', 'Username:' => 'Имя пользователя:', 'Name:' => 'Имя:', 'Email:' => 'E-mail:', @@ -417,7 +417,7 @@ return array( 'Password modification' => 'Изменение пароля', 'External authentications' => 'Внешняя аутентификация', 'Google Account' => 'Профиль Google', - 'Github Account' => 'Профиль GitHub', + 'Github Account' => 'Профиль Github', 'Never connected.' => 'Ранее не соединялось.', 'No account linked.' => 'Нет связанных профилей.', 'Account linked.' => 'Профиль связан.', @@ -458,12 +458,12 @@ return array( '%s changed the assignee of the task %s to %s' => '%s сменил назначенного для задачи %s на %s', 'New password for the user "%s"' => 'Новый пароль для пользователя "%s"', 'Choose an event' => 'Выберите событие', - 'Github commit received' => 'GitHub: коммит получен', - 'Github issue opened' => 'GitHub: новая проблема', - 'Github issue closed' => 'GitHub: проблема закрыта', - 'Github issue reopened' => 'GitHub: проблема переоткрыта', - 'Github issue assignee change' => 'GitHub: сменить ответственного за проблему', - 'Github issue label change' => 'GitHub: ярлык проблемы изменен', + 'Github commit received' => 'Github: коммит получен', + 'Github issue opened' => 'Github: новая проблема', + 'Github issue closed' => 'Github: проблема закрыта', + 'Github issue reopened' => 'Github: проблема переоткрыта', + 'Github issue assignee change' => 'Github: сменить ответственного за проблему', + 'Github issue label change' => 'Github: ярлык проблемы изменен', 'Create a task from an external provider' => 'Создать задачу из внешнего источника', 'Change the assignee based on an external username' => 'Изменить назначенного основываясь на внешнем имени пользователя', 'Change the category based on an external label' => 'Изменить категорию основываясь на внешнем ярлыке', @@ -508,8 +508,8 @@ return array( 'Everybody have access to this project.' => 'Любой может получить доступ к этому проекту.', 'Webhooks' => 'Webhooks', 'API' => 'API', - 'Github webhooks' => 'GitHub webhooks', - 'Help on Github webhooks' => 'Помощь по GitHub webhooks', + 'Github webhooks' => 'Github webhooks', + 'Help on Github webhooks' => 'Помощь по Github webhooks', 'Create a comment from an external provider' => 'Создать комментарий из внешнего источника', 'Github issue comment created' => 'Github issue комментарий создан', 'Project management' => 'Управление проектом', diff --git a/app/Locale/sr_Latn_RS/translations.php b/app/Locale/sr_Latn_RS/translations.php index 758689c4..2229ae34 100644 --- a/app/Locale/sr_Latn_RS/translations.php +++ b/app/Locale/sr_Latn_RS/translations.php @@ -338,14 +338,14 @@ return array( 'Maximum size: ' => 'Maksimalna veličina: ', 'Unable to upload the file.' => 'Nije moguće snimiti fajl.', 'Display another project' => 'Prikaži drugi projekat', - 'Your GitHub account was successfully linked to your profile.' => 'Konto Github podłączone pomyślnie.', - 'Unable to link your GitHub Account.' => 'Nie można połączyć z kontem Github.', - 'GitHub authentication failed' => 'Autentykacja Github nieudana', - 'Your GitHub account is no longer linked to your profile.' => 'Konto Github nie jest już podłączone do twojego profilu.', - 'Unable to unlink your GitHub Account.' => 'Nie można odłączyć konta Github.', - 'Login with my GitHub Account' => 'Zaloguj przy użyciu konta Github', - 'Link my GitHub Account' => 'Podłącz konto Github', - 'Unlink my GitHub Account' => 'Odłącz konto Github', + 'Your Github account was successfully linked to your profile.' => 'Konto Github podłączone pomyślnie.', + 'Unable to link your Github Account.' => 'Nie można połączyć z kontem Github.', + 'Github authentication failed' => 'Autentykacja Github nieudana', + 'Your Github account is no longer linked to your profile.' => 'Konto Github nie jest już podłączone do twojego profilu.', + 'Unable to unlink your Github Account.' => 'Nie można odłączyć konta Github.', + 'Login with my Github Account' => 'Zaloguj przy użyciu konta Github', + 'Link my Github Account' => 'Podłącz konto Github', + 'Unlink my Github Account' => 'Odłącz konto Github', 'Created by %s' => 'Kreirao %s', 'Last modified on %B %e, %Y at %k:%M %p' => 'Poslednja izmena %e %B %Y o %k:%M', 'Tasks Export' => 'Izvoz zadataka', diff --git a/app/Locale/sv_SE/translations.php b/app/Locale/sv_SE/translations.php index 4690edea..da9b5ba9 100644 --- a/app/Locale/sv_SE/translations.php +++ b/app/Locale/sv_SE/translations.php @@ -338,14 +338,14 @@ return array( 'Maximum size: ' => 'Maxstorlek: ', 'Unable to upload the file.' => 'Kunde inte ladda upp filen.', 'Display another project' => 'Visa ett annat projekt', - 'Your GitHub account was successfully linked to your profile.' => 'Ditt GitHub-konto har anslutits till din profil.', - 'Unable to link your GitHub Account.' => 'Kunde inte ansluta ditt GitHub-konto.', - 'GitHub authentication failed' => 'GitHub-verifiering misslyckades', - 'Your GitHub account is no longer linked to your profile.' => 'Ditt GitHub-konto är inte längre anslutet till din profil.', - 'Unable to unlink your GitHub Account.' => 'Kunde inte koppla ifrån ditt GitHub-konto.', - 'Login with my GitHub Account' => 'Logga in med mitt GitHub-konto', - 'Link my GitHub Account' => 'Anslut mitt GitHub-konto', - 'Unlink my GitHub Account' => 'Koppla ifrån mitt GitHub-konto', + 'Your Github account was successfully linked to your profile.' => 'Ditt Github-konto har anslutits till din profil.', + 'Unable to link your Github Account.' => 'Kunde inte ansluta ditt Github-konto.', + 'Github authentication failed' => 'Github-verifiering misslyckades', + 'Your Github account is no longer linked to your profile.' => 'Ditt Github-konto är inte längre anslutet till din profil.', + 'Unable to unlink your Github Account.' => 'Kunde inte koppla ifrån ditt Github-konto.', + 'Login with my Github Account' => 'Logga in med mitt Github-konto', + 'Link my Github Account' => 'Anslut mitt Github-konto', + 'Unlink my Github Account' => 'Koppla ifrån mitt Github-konto', 'Created by %s' => 'Skapad av %s', 'Last modified on %B %e, %Y at %k:%M %p' => 'Senaste ändring %Y-%m-%d kl %H:%M', 'Tasks Export' => 'Exportera uppgifter', @@ -865,8 +865,8 @@ return array( 'By @%s on Bitbucket' => 'Av @%s på Bitbucket', 'Bitbucket Issue' => 'Bitbucket fråga', 'Commit made by @%s on Bitbucket' => 'Bidrag gjort av @%s på Bitbucket', - 'Commit made by @%s on Github' => 'Bidrag gjort av @%s på GitHub', - 'By @%s on Github' => 'Av @%s på GitHub', + 'Commit made by @%s on Github' => 'Bidrag gjort av @%s på Github', + 'By @%s on Github' => 'Av @%s på Github', 'Commit made by @%s on Gitlab' => 'Bidrag gjort av @%s på Gitlab', 'Add a comment log when moving the task between columns' => 'Lägg till en kommentarslogg när en uppgift flyttas mellan kolumner', 'Move the task to another column when the category is changed' => 'Flyttas uppgiften till en annan kolumn när kategorin ändras', diff --git a/app/Locale/th_TH/translations.php b/app/Locale/th_TH/translations.php index c1eb3183..9b23dd5a 100644 --- a/app/Locale/th_TH/translations.php +++ b/app/Locale/th_TH/translations.php @@ -338,14 +338,14 @@ return array( 'Maximum size: ' => 'ขนาดสูงสุด:', 'Unable to upload the file.' => 'ไม่สามารถอัพโหลดไฟล์ได้', 'Display another project' => 'แสดงโปรเจคอื่น', - 'Your GitHub account was successfully linked to your profile.' => 'กิทฮับแอคเคาท์เชื่อมต่อกับประวัติเรียบร้อยแล้ว', - 'Unable to link your GitHub Account.' => 'ไม่สามารถเชื่อมต่อกับกิทฮับแอคเคาท์ได้', - 'GitHub authentication failed' => 'การยืนยันกิทฮับผิดพลาด', - 'Your GitHub account is no longer linked to your profile.' => 'กิทฮับแอคเคาท์ไม่ได้มีการเชื่อมโยงไปยังโปรไฟล์ของคุณ', - 'Unable to unlink your GitHub Account.' => 'ไม่สามารถยกเลิกการเชื่อมต่อกิทฮับแอคเคาท์ได้', - 'Login with my GitHub Account' => 'เข้าใช้ด้วยกิทฮับแอคเคาท์', - 'Link my GitHub Account' => 'เชื่อมกับกิทฮับแอคเคาท์', - 'Unlink my GitHub Account' => 'ยกเลิกการเชื่อมกับกิทอับแอคเคาท์', + 'Your Github account was successfully linked to your profile.' => 'กิทฮับแอคเคาท์เชื่อมต่อกับประวัติเรียบร้อยแล้ว', + 'Unable to link your Github Account.' => 'ไม่สามารถเชื่อมต่อกับกิทฮับแอคเคาท์ได้', + 'Github authentication failed' => 'การยืนยันกิทฮับผิดพลาด', + 'Your Github account is no longer linked to your profile.' => 'กิทฮับแอคเคาท์ไม่ได้มีการเชื่อมโยงไปยังโปรไฟล์ของคุณ', + 'Unable to unlink your Github Account.' => 'ไม่สามารถยกเลิกการเชื่อมต่อกิทฮับแอคเคาท์ได้', + 'Login with my Github Account' => 'เข้าใช้ด้วยกิทฮับแอคเคาท์', + 'Link my Github Account' => 'เชื่อมกับกิทฮับแอคเคาท์', + 'Unlink my Github Account' => 'ยกเลิกการเชื่อมกับกิทอับแอคเคาท์', 'Created by %s' => 'สร้างโดย %s', 'Last modified on %B %e, %Y at %k:%M %p' => 'แก้ไขล่าสุดวันที่ %B %e, %Y เวลา %k:%M %p', 'Tasks Export' => 'ส่งออกงาน', diff --git a/app/Locale/tr_TR/translations.php b/app/Locale/tr_TR/translations.php index 9335c201..6278aee1 100644 --- a/app/Locale/tr_TR/translations.php +++ b/app/Locale/tr_TR/translations.php @@ -338,14 +338,14 @@ return array( 'Maximum size: ' => 'Maksimum boyutu', 'Unable to upload the file.' => 'Karşıya yükleme başarısız', 'Display another project' => 'Başka bir proje göster', - 'Your GitHub account was successfully linked to your profile.' => 'GitHub Hesabınız Profilinize bağlandı.', - 'Unable to link your GitHub Account.' => 'GitHub hesabınızla bağ oluşturulamadı.', - // 'GitHub authentication failed' => '', - // 'Your GitHub account is no longer linked to your profile.' => '', - // 'Unable to unlink your GitHub Account.' => '', - // 'Login with my GitHub Account' => '', - // 'Link my GitHub Account' => '', - // 'Unlink my GitHub Account' => '', + 'Your Github account was successfully linked to your profile.' => 'Github Hesabınız Profilinize bağlandı.', + 'Unable to link your Github Account.' => 'Github hesabınızla bağ oluşturulamadı.', + // 'Github authentication failed' => '', + // 'Your Github account is no longer linked to your profile.' => '', + // 'Unable to unlink your Github Account.' => '', + // 'Login with my Github Account' => '', + // 'Link my Github Account' => '', + // 'Unlink my Github Account' => '', 'Created by %s' => '%s tarafından oluşturuldu', 'Last modified on %B %e, %Y at %k:%M %p' => 'Son değişiklik tarihi %d.%m.%Y, saati %H:%M', 'Tasks Export' => 'Görevleri dışa aktar', diff --git a/app/Locale/zh_CN/translations.php b/app/Locale/zh_CN/translations.php index 155628dc..770c7e40 100644 --- a/app/Locale/zh_CN/translations.php +++ b/app/Locale/zh_CN/translations.php @@ -338,14 +338,14 @@ return array( 'Maximum size: ' => '大小上限:', 'Unable to upload the file.' => '无法上传文件', 'Display another project' => '显示其它项目', - 'Your GitHub account was successfully linked to your profile.' => 'GitHub账号已经成功链接到您的用户', - 'Unable to link your GitHub Account.' => '无法链接到GitHub账户', - 'GitHub authentication failed' => 'GitHub认证失败', - 'Your GitHub account is no longer linked to your profile.' => 'Github账号已经不再链接到您的用户', - 'Unable to unlink your GitHub Account.' => '无法链接GitHub账号', - 'Login with my GitHub Account' => '用Github账号登录', - 'Link my GitHub Account' => '链接GitHub账号', - 'Unlink my GitHub Account' => '取消GitHub账号链接', + 'Your Github account was successfully linked to your profile.' => 'Github账号已经成功链接到您的用户', + 'Unable to link your Github Account.' => '无法链接到Github账户', + 'Github authentication failed' => 'Github认证失败', + 'Your Github account is no longer linked to your profile.' => 'Github账号已经不再链接到您的用户', + 'Unable to unlink your Github Account.' => '无法链接Github账号', + 'Login with my Github Account' => '用Github账号登录', + 'Link my Github Account' => '链接Github账号', + 'Unlink my Github Account' => '取消Github账号链接', 'Created by %s' => '创建者:%s', 'Last modified on %B %e, %Y at %k:%M %p' => '最后修改:%Y/%m/%d/ %H:%M', 'Tasks Export' => '任务导出', diff --git a/app/Model/Acl.php b/app/Model/Acl.php index 579b5d90..dfdc82d2 100644 --- a/app/Model/Acl.php +++ b/app/Model/Acl.php @@ -18,13 +18,12 @@ class Acl extends Base */ private $public_acl = array( 'auth' => array('login', 'check'), - 'user' => array('github'), 'task' => array('readonly'), 'board' => array('readonly'), 'webhook' => '*', 'ical' => '*', 'feed' => '*', - 'oauth' => array('google'), + 'oauth' => array('google', 'github'), ); /** diff --git a/app/Model/User.php b/app/Model/User.php index 4c32942c..36b7194c 100644 --- a/app/Model/User.php +++ b/app/Model/User.php @@ -122,13 +122,13 @@ class User extends Base } /** - * Get a specific user by the GitHub id + * Get a specific user by the Github id * * @access public - * @param string $github_id GitHub user id + * @param string $github_id Github user id * @return array|boolean */ - public function getByGitHubId($github_id) + public function getByGithubId($github_id) { if (empty($github_id)) { return false; diff --git a/app/Template/auth/index.php b/app/Template/auth/index.php index ed923f07..9dcdfa37 100644 --- a/app/Template/auth/index.php +++ b/app/Template/auth/index.php @@ -16,12 +16,16 @@ <?= $this->form->checkbox('remember_me', t('Remember Me'), 1, true) ?><br/> - <?php if (GOOGLE_AUTH): ?> - <?= $this->url->link(t('Login with my Google Account'), 'oauth', 'google') ?> - <?php endif ?> - - <?php if (GITHUB_AUTH): ?> - <?= $this->url->link(t('Login with my GitHub Account'), 'user', 'gitHub') ?> + <?php if (GOOGLE_AUTH || GITHUB_AUTH): ?> + <ul> + <?php if (GOOGLE_AUTH): ?> + <li><?= $this->url->link(t('Login with my Google Account'), 'oauth', 'google') ?></li> + <?php endif ?> + + <?php if (GITHUB_AUTH): ?> + <li><?= $this->url->link(t('Login with my Github Account'), 'oauth', 'gitHub') ?></li> + <?php endif ?> + </ul> <?php endif ?> <div class="form-actions"> diff --git a/app/Template/user/external.php b/app/Template/user/external.php index 18d40d79..3b872e85 100644 --- a/app/Template/user/external.php +++ b/app/Template/user/external.php @@ -24,9 +24,9 @@ <p class="listing"> <?php if ($this->user->isCurrentUser($user['id'])): ?> <?php if (empty($user['github_id'])): ?> - <?= $this->url->link(t('Link my GitHub Account'), 'user', 'github', array(), true) ?> + <?= $this->url->link(t('Link my Github Account'), 'oauth', 'github', array(), true) ?> <?php else: ?> - <?= $this->url->link(t('Unlink my GitHub Account'), 'user', 'unlinkGitHub', array(), true) ?> + <?= $this->url->link(t('Unlink my Github Account'), 'oauth', 'unlink', array('backend' => 'github'), true) ?> <?php endif ?> <?php else: ?> <?= empty($user['github_id']) ? t('No account linked.') : t('Account linked.') ?> diff --git a/app/common.php b/app/common.php index 186d0f85..29b2c54e 100644 --- a/app/common.php +++ b/app/common.php @@ -115,4 +115,8 @@ if (ENABLE_URL_REWRITE) { // Ical routes $container['router']->addRoute('ical/project/:token', 'ical', 'project', array('token')); $container['router']->addRoute('ical/user/:token', 'ical', 'user', array('token')); + + // Auth routes + $container['router']->addRoute('oauth/google', 'oauth', 'google'); + $container['router']->addRoute('oauth/github', 'oauth', 'github'); } diff --git a/app/constants.php b/app/constants.php index cd1c0d1c..20eb7db2 100644 --- a/app/constants.php +++ b/app/constants.php @@ -41,7 +41,7 @@ defined('GOOGLE_AUTH') or define('GOOGLE_AUTH', false); defined('GOOGLE_CLIENT_ID') or define('GOOGLE_CLIENT_ID', ''); defined('GOOGLE_CLIENT_SECRET') or define('GOOGLE_CLIENT_SECRET', ''); -// GitHub authentication +// Github authentication defined('GITHUB_AUTH') or define('GITHUB_AUTH', false); defined('GITHUB_CLIENT_ID') or define('GITHUB_CLIENT_ID', ''); defined('GITHUB_CLIENT_SECRET') or define('GITHUB_CLIENT_SECRET', ''); diff --git a/composer.json b/composer.json index bca866e7..ced788c6 100644 --- a/composer.json +++ b/composer.json @@ -11,7 +11,6 @@ "fguillot/picodb" : "1.0.0", "fguillot/simpleLogger" : "0.0.2", "fguillot/simple-validator" : "0.0.3", - "lusitanian/oauth" : "0.3.5", "nickcernis/html-to-markdown" : "2.2.1", "pimple/pimple" : "~3.0", "swiftmailer/swiftmailer" : "@stable", diff --git a/composer.lock b/composer.lock index bc5e8e60..28a44f01 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "0048471872ea99cd30c53c0398c7d9f2", + "hash": "305f839bfc9c4acb5d9357e1174c42da", "packages": [ { "name": "christian-riesen/base32", @@ -405,68 +405,6 @@ "time": "2015-05-30 19:25:09" }, { - "name": "lusitanian/oauth", - "version": "v0.3.5", - "source": { - "type": "git", - "url": "https://github.com/Lusitanian/PHPoAuthLib.git", - "reference": "ac5a1cd5a4519143728dce2213936eea302edf8a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Lusitanian/PHPoAuthLib/zipball/ac5a1cd5a4519143728dce2213936eea302edf8a", - "reference": "ac5a1cd5a4519143728dce2213936eea302edf8a", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "3.7.*", - "predis/predis": "0.8.*@dev", - "symfony/http-foundation": "~2.1" - }, - "suggest": { - "ext-openssl": "Allows for usage of secure connections with the stream-based HTTP client.", - "predis/predis": "Allows using the Redis storage backend.", - "symfony/http-foundation": "Allows using the Symfony Session storage backend." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.1-dev" - } - }, - "autoload": { - "psr-0": { - "OAuth": "src", - "OAuth\\Unit": "tests" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "David Desberg", - "email": "david@daviddesberg.com" - }, - { - "name": "Pieter Hordijk", - "email": "info@pieterhordijk.com" - } - ], - "description": "PHP 5.3+ oAuth 1/2 Library", - "keywords": [ - "Authentication", - "authorization", - "oauth", - "security" - ], - "time": "2014-09-05 15:19:58" - }, - { "name": "nickcernis/html-to-markdown", "version": "2.2.1", "source": { @@ -651,16 +589,16 @@ }, { "name": "symfony/console", - "version": "v2.7.1", + "version": "v2.7.2", "source": { "type": "git", "url": "https://github.com/symfony/Console.git", - "reference": "564398bc1f33faf92fc2ec86859983d30eb81806" + "reference": "8cf484449130cabfd98dcb4694ca9945802a21ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Console/zipball/564398bc1f33faf92fc2ec86859983d30eb81806", - "reference": "564398bc1f33faf92fc2ec86859983d30eb81806", + "url": "https://api.github.com/repos/symfony/Console/zipball/8cf484449130cabfd98dcb4694ca9945802a21ed", + "reference": "8cf484449130cabfd98dcb4694ca9945802a21ed", "shasum": "" }, "require": { @@ -704,20 +642,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2015-06-10 15:30:22" + "time": "2015-07-09 16:07:40" }, { "name": "symfony/event-dispatcher", - "version": "v2.7.1", + "version": "v2.7.2", "source": { "type": "git", "url": "https://github.com/symfony/EventDispatcher.git", - "reference": "be3c5ff8d503c46768aeb78ce6333051aa6f26d9" + "reference": "9310b5f9a87ec2ea75d20fec0b0017c77c66dac3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/be3c5ff8d503c46768aeb78ce6333051aa6f26d9", - "reference": "be3c5ff8d503c46768aeb78ce6333051aa6f26d9", + "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/9310b5f9a87ec2ea75d20fec0b0017c77c66dac3", + "reference": "9310b5f9a87ec2ea75d20fec0b0017c77c66dac3", "shasum": "" }, "require": { @@ -762,22 +700,22 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2015-06-08 09:37:21" + "time": "2015-06-18 19:21:56" } ], "packages-dev": [ { "name": "symfony/stopwatch", - "version": "v2.7.1", + "version": "v2.7.2", "source": { "type": "git", "url": "https://github.com/symfony/Stopwatch.git", - "reference": "c653f1985f6c2b7dbffd04d48b9c0a96aaef814b" + "reference": "b07a866719bbac5294c67773340f97b871733310" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Stopwatch/zipball/c653f1985f6c2b7dbffd04d48b9c0a96aaef814b", - "reference": "c653f1985f6c2b7dbffd04d48b9c0a96aaef814b", + "url": "https://api.github.com/repos/symfony/Stopwatch/zipball/b07a866719bbac5294c67773340f97b871733310", + "reference": "b07a866719bbac5294c67773340f97b871733310", "shasum": "" }, "require": { @@ -813,7 +751,7 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2015-06-04 20:11:48" + "time": "2015-07-01 18:23:16" } ], "aliases": [], diff --git a/tests/units/AclTest.php b/tests/units/AclTest.php index 72c897c0..05e8561e 100644 --- a/tests/units/AclTest.php +++ b/tests/units/AclTest.php @@ -39,6 +39,8 @@ class AclTest extends Base $this->assertFalse($acl->isPublicAction('board', 'show')); $this->assertTrue($acl->isPublicAction('feed', 'project')); $this->assertTrue($acl->isPublicAction('feed', 'user')); + $this->assertTrue($acl->isPublicAction('oauth', 'github')); + $this->assertTrue($acl->isPublicAction('oauth', 'google')); } public function testAdminActions() diff --git a/tests/units/OAuth2Test.php b/tests/units/OAuth2Test.php new file mode 100644 index 00000000..0275f426 --- /dev/null +++ b/tests/units/OAuth2Test.php @@ -0,0 +1,43 @@ +<?php + +require_once __DIR__.'/Base.php'; + +use Core\OAuth2; + +class OAuth2Test extends Base +{ + public function testAuthUrl() + { + $oauth = new OAuth2($this->container); + $oauth->createService('A', 'B', 'C', 'D', 'E', array('f', 'g')); + $this->assertEquals('D?response_type=code&client_id=A&redirect_uri=C&scope=f+g', $oauth->getAuthorizationUrl()); + } + + public function testAuthHeader() + { + $oauth = new OAuth2($this->container); + $oauth->createService('A', 'B', 'C', 'D', 'E', array('f', 'g')); + + $oauth->setAccessToken('foobar', 'BeaRer'); + $this->assertEquals('Authorization: Bearer foobar', $oauth->getAuthorizationHeader()); + + $oauth->setAccessToken('foobar', 'unknown'); + $this->assertEquals('', $oauth->getAuthorizationHeader()); + } + + public function testAccessToken() + { + $oauth = new OAuth2($this->container); + $oauth->createService('A', 'B', 'C', 'D', 'E', array('f', 'g')); + $oauth->getAccessToken('something'); + + $data = $this->container['httpClient']->getData(); + $this->assertEquals('something', $data['code']); + $this->assertEquals('A', $data['client_id']); + $this->assertEquals('B', $data['client_secret']); + $this->assertEquals('C', $data['redirect_uri']); + $this->assertEquals('authorization_code', $data['grant_type']); + + $this->assertEquals('E', $this->container['httpClient']->getUrl()); + } +} |