1
0
Fork 0

AuthHelper: Allow fall-through GitLab-specific HTTP headers for auth

Previously, `AuthHelper` consumed the authentication credentials for GitLab domains and added access tokens as GitLab-specific headers.
[Composer repositories now supported in GitLab](https://php.watch/articles/composer-gitlab-repositories) require standard Authorization headers with a personal access to function, which failed to work due to out GitLab-specific headers.

With this commit, AuthHelper checks if the password is an access token, and falls through to HTTP basic authentication even if the domain name is a GitLab domain name.
pull/9156/head
Ayesh Karunaratne 2020-08-27 11:45:49 +07:00
parent 90332f1dbd
commit 931a1ff1f8
No known key found for this signature in database
GPG Key ID: 2CA18B2097A7429A
2 changed files with 13 additions and 2 deletions

View File

@ -205,7 +205,10 @@ class AuthHelper
$headers[] = 'Authorization: token '.$auth['username']; $headers[] = 'Authorization: token '.$auth['username'];
$authenticationDisplayMessage = 'Using GitHub token authentication'; $authenticationDisplayMessage = 'Using GitHub token authentication';
} }
} elseif (in_array($origin, $this->config->get('gitlab-domains'), true)) { } elseif (
in_array($origin, $this->config->get('gitlab-domains'), true)
&& in_array($auth['password'], array('oauth2', 'private-token', 'gitlab-ci-token'), true)
) {
if ($auth['password'] === 'oauth2') { if ($auth['password'] === 'oauth2') {
$headers[] = 'Authorization: Bearer '.$auth['username']; $headers[] = 'Authorization: Bearer '.$auth['username'];
$authenticationDisplayMessage = 'Using GitLab OAuth token authentication'; $authenticationDisplayMessage = 'Using GitLab OAuth token authentication';

View File

@ -280,6 +280,14 @@ class AuthHelperTest extends TestCase
'password' => 'my_password' 'password' => 'my_password'
) )
), ),
array(
'https://gitlab.com',
'gitlab.com',
array(
'username' => 'my_username',
'password' => 'my_password'
)
),
); );
} }
@ -302,7 +310,7 @@ class AuthHelperTest extends TestCase
$this->config->expects($this->once()) $this->config->expects($this->once())
->method('get') ->method('get')
->with('gitlab-domains') ->with('gitlab-domains')
->willReturn(array()); ->willReturn(array($origin));
$this->io->expects($this->once()) $this->io->expects($this->once())
->method('writeError') ->method('writeError')