add gitlab token auth for git clone
parent
e0c44f2a25
commit
dec2b5cd50
|
@ -153,6 +153,28 @@ class Git
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} elseif (preg_match('{^(https?)://' . self::getGitLabDomainsRegex($this->config) . '/(.*)}', $url, $match)) {
|
||||||
|
if (!$this->io->hasAuthentication($match[2])) {
|
||||||
|
$gitLabUtil = new GitLab($this->io, $this->config, $this->process);
|
||||||
|
$message = 'Cloning failed, enter your GitLab credentials to access private repos';
|
||||||
|
|
||||||
|
if (!$gitLabUtil->authorizeOAuth($match[2]) && $this->io->isInteractive()) {
|
||||||
|
$gitLabUtil->authorizeOAuthInteractively($match[1], $match[2], $message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->io->hasAuthentication($match[2])) {
|
||||||
|
$auth = $this->io->getAuthentication($match[2]);
|
||||||
|
if($auth['password'] === 'private-token' || $auth['password'] === 'oauth2') {
|
||||||
|
$authUrl = $match[1] . '://' . rawurlencode($auth['password']) . ':' . rawurlencode($auth['username']) . '@' . $match[2] . '/' . $match[3]; // swap username and password
|
||||||
|
} else {
|
||||||
|
$authUrl = $match[1] . '://' . rawurlencode($auth['username']) . ':' . rawurlencode($auth['password']) . '@' . $match[2] . '/' . $match[3];
|
||||||
|
}
|
||||||
|
$command = call_user_func($commandCallable, $authUrl);
|
||||||
|
if (0 === $this->process->execute($command, $ignoredOutput, $cwd)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
} elseif ($this->isAuthenticationFailure($url, $match)) { // private non-github repo that failed to authenticate
|
} elseif ($this->isAuthenticationFailure($url, $match)) { // private non-github repo that failed to authenticate
|
||||||
if (strpos($match[2], '@')) {
|
if (strpos($match[2], '@')) {
|
||||||
list($authParts, $match[2]) = explode('@', $match[2], 2);
|
list($authParts, $match[2]) = explode('@', $match[2], 2);
|
||||||
|
@ -304,6 +326,11 @@ class Git
|
||||||
return '(' . implode('|', array_map('preg_quote', $config->get('github-domains'))) . ')';
|
return '(' . implode('|', array_map('preg_quote', $config->get('github-domains'))) . ')';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function getGitLabDomainsRegex(Config $config)
|
||||||
|
{
|
||||||
|
return '(' . implode('|', array_map('preg_quote', $config->get('gitlab-domains'))) . ')';
|
||||||
|
}
|
||||||
|
|
||||||
public static function sanitizeUrl($message)
|
public static function sanitizeUrl($message)
|
||||||
{
|
{
|
||||||
return preg_replace_callback('{://(?P<user>[^@]+?):(?P<password>.+?)@}', function ($m) {
|
return preg_replace_callback('{://(?P<user>[^@]+?):(?P<password>.+?)@}', function ($m) {
|
||||||
|
|
Loading…
Reference in New Issue