Browse Source

Update related docs and config definitions

moyo 8 years ago
parent
commit
c4ac59601f

+ 6 - 0
doc/06-config.md

@@ -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

+ 5 - 0
res/composer-schema.json

@@ -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."

+ 3 - 3
src/Composer/Command/ConfigCommand.php

@@ -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');
                 }
                 }

+ 2 - 2
src/Composer/Config/JsonConfigSource.php

@@ -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]);

+ 5 - 0
src/Composer/IO/BaseIO.php

@@ -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']);