Merge pull request #5491 from moolex/support_gitlab_private_token
Support gitlab private-token for easier access via Gitlab APIpull/5503/merge
commit
cada55dde6
|
@ -67,6 +67,12 @@ A list of domain names and oauth keys. For example using `{"gitlab.com":
|
||||||
"oauthtoken"}` as the value of this option will use `oauthtoken` to access
|
"oauthtoken"}` as the value of this option will use `oauthtoken` to access
|
||||||
private repositories on gitlab.
|
private repositories on gitlab.
|
||||||
|
|
||||||
|
## gitlab-token
|
||||||
|
|
||||||
|
A list of domain names and private tokens. For example using `{"gitlab.com":
|
||||||
|
"privatetoken"}` as the value of this option will use `privatetoken` to access
|
||||||
|
private repositories on gitlab.
|
||||||
|
|
||||||
## disable-tls
|
## disable-tls
|
||||||
|
|
||||||
Defaults to `false`. If set to true all HTTPS URLs will be tried with HTTP
|
Defaults to `false`. If set to true all HTTPS URLs will be tried with HTTP
|
||||||
|
|
|
@ -141,6 +141,11 @@
|
||||||
"description": "A hash of domain name => gitlab API oauth tokens, typically {\"gitlab.com\":\"<token>\"}.",
|
"description": "A hash of domain name => gitlab API oauth tokens, typically {\"gitlab.com\":\"<token>\"}.",
|
||||||
"additionalProperties": true
|
"additionalProperties": true
|
||||||
},
|
},
|
||||||
|
"gitlab-token": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "A hash of domain name => gitlab private tokens, typically {\"gitlab.com\":\"<token>\"}.",
|
||||||
|
"additionalProperties": true
|
||||||
|
},
|
||||||
"disable-tls": {
|
"disable-tls": {
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"description": "Defaults to `false`. If set to true all HTTPS URLs will be tried with HTTP instead and no network level encryption is performed. Enabling this is a security risk and is NOT recommended. The better way is to enable the php_openssl extension in php.ini."
|
"description": "Defaults to `false`. If set to true all HTTPS URLs will be tried with HTTP instead and no network level encryption is performed. Enabling this is a security risk and is NOT recommended. The better way is to enable the php_openssl extension in php.ini."
|
||||||
|
|
|
@ -171,7 +171,7 @@ EOT
|
||||||
}
|
}
|
||||||
if ($input->getOption('global') && !$this->authConfigFile->exists()) {
|
if ($input->getOption('global') && !$this->authConfigFile->exists()) {
|
||||||
touch($this->authConfigFile->getPath());
|
touch($this->authConfigFile->getPath());
|
||||||
$this->authConfigFile->write(array('bitbucket-oauth' => new \ArrayObject, 'github-oauth' => new \ArrayObject, 'gitlab-oauth' => new \ArrayObject, 'http-basic' => new \ArrayObject));
|
$this->authConfigFile->write(array('bitbucket-oauth' => new \ArrayObject, 'github-oauth' => new \ArrayObject, 'gitlab-oauth' => new \ArrayObject, 'gitlab-token' => new \ArrayObject, 'http-basic' => new \ArrayObject));
|
||||||
Silencer::call('chmod', $this->authConfigFile->getPath(), 0600);
|
Silencer::call('chmod', $this->authConfigFile->getPath(), 0600);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -510,7 +510,7 @@ EOT
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle auth
|
// handle auth
|
||||||
if (preg_match('/^(bitbucket-oauth|github-oauth|gitlab-oauth|http-basic)\.(.+)/', $settingKey, $matches)) {
|
if (preg_match('/^(bitbucket-oauth|github-oauth|gitlab-oauth|gitlab-token|http-basic)\.(.+)/', $settingKey, $matches)) {
|
||||||
if ($input->getOption('unset')) {
|
if ($input->getOption('unset')) {
|
||||||
$this->authConfigSource->removeConfigSetting($matches[1].'.'.$matches[2]);
|
$this->authConfigSource->removeConfigSetting($matches[1].'.'.$matches[2]);
|
||||||
$this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
|
$this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
|
||||||
|
@ -524,7 +524,7 @@ EOT
|
||||||
}
|
}
|
||||||
$this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
|
$this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
|
||||||
$this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], array('consumer-key' => $values[0], 'consumer-secret' => $values[1]));
|
$this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], array('consumer-key' => $values[0], 'consumer-secret' => $values[1]));
|
||||||
} elseif ($matches[1] === 'github-oauth' || $matches[1] === 'gitlab-oauth') {
|
} elseif (in_array($matches[1], array('github-oauth', 'gitlab-oauth', 'gitlab-token'), true)) {
|
||||||
if (1 !== count($values)) {
|
if (1 !== count($values)) {
|
||||||
throw new \RuntimeException('Too many arguments, expected only one token');
|
throw new \RuntimeException('Too many arguments, expected only one token');
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,6 +63,7 @@ class Config
|
||||||
// bitbucket-oauth
|
// bitbucket-oauth
|
||||||
// github-oauth
|
// github-oauth
|
||||||
// gitlab-oauth
|
// gitlab-oauth
|
||||||
|
// gitlab-token
|
||||||
// http-basic
|
// http-basic
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -125,7 +126,7 @@ class Config
|
||||||
// override defaults with given config
|
// override defaults with given config
|
||||||
if (!empty($config['config']) && is_array($config['config'])) {
|
if (!empty($config['config']) && is_array($config['config'])) {
|
||||||
foreach ($config['config'] as $key => $val) {
|
foreach ($config['config'] as $key => $val) {
|
||||||
if (in_array($key, array('bitbucket-oauth', 'github-oauth', 'gitlab-oauth', 'http-basic')) && isset($this->config[$key])) {
|
if (in_array($key, array('bitbucket-oauth', 'github-oauth', 'gitlab-oauth', 'gitlab-token', 'http-basic')) && isset($this->config[$key])) {
|
||||||
$this->config[$key] = array_merge($this->config[$key], $val);
|
$this->config[$key] = array_merge($this->config[$key], $val);
|
||||||
} elseif ('preferred-install' === $key && isset($this->config[$key])) {
|
} elseif ('preferred-install' === $key && isset($this->config[$key])) {
|
||||||
if (is_array($val) || is_array($this->config[$key])) {
|
if (is_array($val) || is_array($this->config[$key])) {
|
||||||
|
|
|
@ -81,7 +81,7 @@ class JsonConfigSource implements ConfigSourceInterface
|
||||||
{
|
{
|
||||||
$authConfig = $this->authConfig;
|
$authConfig = $this->authConfig;
|
||||||
$this->manipulateJson('addConfigSetting', $name, $value, function (&$config, $key, $val) use ($authConfig) {
|
$this->manipulateJson('addConfigSetting', $name, $value, function (&$config, $key, $val) use ($authConfig) {
|
||||||
if (preg_match('{^(bitbucket-oauth|github-oauth|gitlab-oauth|http-basic|platform)\.}', $key)) {
|
if (preg_match('{^(bitbucket-oauth|github-oauth|gitlab-oauth|gitlab-token|http-basic|platform)\.}', $key)) {
|
||||||
list($key, $host) = explode('.', $key, 2);
|
list($key, $host) = explode('.', $key, 2);
|
||||||
if ($authConfig) {
|
if ($authConfig) {
|
||||||
$config[$key][$host] = $val;
|
$config[$key][$host] = $val;
|
||||||
|
@ -101,7 +101,7 @@ class JsonConfigSource implements ConfigSourceInterface
|
||||||
{
|
{
|
||||||
$authConfig = $this->authConfig;
|
$authConfig = $this->authConfig;
|
||||||
$this->manipulateJson('removeConfigSetting', $name, function (&$config, $key) use ($authConfig) {
|
$this->manipulateJson('removeConfigSetting', $name, function (&$config, $key) use ($authConfig) {
|
||||||
if (preg_match('{^(bitbucket-oauth|github-oauth|gitlab-oauth|http-basic|platform)\.}', $key)) {
|
if (preg_match('{^(bitbucket-oauth|github-oauth|gitlab-oauth|gitlab-token|http-basic|platform)\.}', $key)) {
|
||||||
list($key, $host) = explode('.', $key, 2);
|
list($key, $host) = explode('.', $key, 2);
|
||||||
if ($authConfig) {
|
if ($authConfig) {
|
||||||
unset($config[$key][$host]);
|
unset($config[$key][$host]);
|
||||||
|
|
|
@ -90,6 +90,7 @@ abstract class BaseIO implements IOInterface, LoggerInterface
|
||||||
$bitbucketOauth = $config->get('bitbucket-oauth') ?: array();
|
$bitbucketOauth = $config->get('bitbucket-oauth') ?: array();
|
||||||
$githubOauth = $config->get('github-oauth') ?: array();
|
$githubOauth = $config->get('github-oauth') ?: array();
|
||||||
$gitlabOauth = $config->get('gitlab-oauth') ?: array();
|
$gitlabOauth = $config->get('gitlab-oauth') ?: array();
|
||||||
|
$gitlabToken = $config->get('gitlab-token') ?: array();
|
||||||
$httpBasic = $config->get('http-basic') ?: array();
|
$httpBasic = $config->get('http-basic') ?: array();
|
||||||
|
|
||||||
// reload oauth tokens from config if available
|
// reload oauth tokens from config if available
|
||||||
|
@ -109,6 +110,10 @@ abstract class BaseIO implements IOInterface, LoggerInterface
|
||||||
$this->checkAndSetAuthentication($domain, $token, 'oauth2');
|
$this->checkAndSetAuthentication($domain, $token, 'oauth2');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach ($gitlabToken as $domain => $token) {
|
||||||
|
$this->checkAndSetAuthentication($domain, $token, 'private-token');
|
||||||
|
}
|
||||||
|
|
||||||
// reload http basic credentials from config if available
|
// reload http basic credentials from config if available
|
||||||
foreach ($httpBasic as $domain => $cred) {
|
foreach ($httpBasic as $domain => $cred) {
|
||||||
$this->checkAndSetAuthentication($domain, $cred['username'], $cred['password']);
|
$this->checkAndSetAuthentication($domain, $cred['username'], $cred['password']);
|
||||||
|
|
|
@ -64,6 +64,15 @@ class GitLab
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if available use token from composer config
|
||||||
|
$authTokens = $this->config->get('gitlab-token');
|
||||||
|
|
||||||
|
if (isset($authTokens[$originUrl])) {
|
||||||
|
$this->io->setAuthentication($originUrl, $authTokens[$originUrl], 'private-token');
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -714,6 +714,9 @@ class RemoteFilesystem
|
||||||
if ($auth['password'] === 'oauth2') {
|
if ($auth['password'] === 'oauth2') {
|
||||||
$headers[] = 'Authorization: Bearer '.$auth['username'];
|
$headers[] = 'Authorization: Bearer '.$auth['username'];
|
||||||
}
|
}
|
||||||
|
else if ($auth['password'] === 'private-token') {
|
||||||
|
$headers[] = 'PRIVATE-TOKEN: '.$auth['username'];
|
||||||
|
}
|
||||||
} elseif ('bitbucket.org' === $originUrl
|
} elseif ('bitbucket.org' === $originUrl
|
||||||
&& $this->fileUrl !== Bitbucket::OAUTH2_ACCESS_TOKEN_URL && 'x-token-auth' === $auth['username']
|
&& $this->fileUrl !== Bitbucket::OAUTH2_ACCESS_TOKEN_URL && 'x-token-auth' === $auth['username']
|
||||||
) {
|
) {
|
||||||
|
|
Loading…
Reference in New Issue