Hello community,
here is the log from the commit of package platformsh-cli for
openSUSE:Leap:15.2 checked in at 2020-01-19 15:48:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:15.2/platformsh-cli (Old)
and /work/SRC/openSUSE:Leap:15.2/.platformsh-cli.new.26092 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "platformsh-cli"
Sun Jan 19 15:48:55 2020 rev:37 rq:765556 version:3.51.3
Changes:
--------
--- /work/SRC/openSUSE:Leap:15.2/platformsh-cli/platformsh-cli.changes
2020-01-17 12:06:08.920628431 +0100
+++
/work/SRC/openSUSE:Leap:15.2/.platformsh-cli.new.26092/platformsh-cli.changes
2020-01-19 15:50:29.977809819 +0100
@@ -1,0 +2,14 @@
+Fri Jan 17 20:44:18 UTC 2020 - [email protected]
+
+- Update to version 3.51.3:
+ * Release v3.51.3
+ * Release v3.51.2
+ * Implement PKCE for browser login
+ * Avoid unnecessary HTTP exception message
+ * Allow PLATFORMSH_CLI_HOME variable to override the home directory (#886)
+ * Remove recommendations for auth:password-login command
+ * Fix gitlab example (#894)
+ * Fix proxy setting when there is more than 1
+ * Allow PLATFORMSH_CLI_API_URL to override the base API URL
+
+-------------------------------------------------------------------
Old:
----
platformsh-cli-3.51.1.tar.xz
New:
----
platformsh-cli-3.51.3.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ platformsh-cli.spec ++++++
--- /var/tmp/diff_new_pack.GXaO9Z/_old 2020-01-19 15:50:30.429810087 +0100
+++ /var/tmp/diff_new_pack.GXaO9Z/_new 2020-01-19 15:50:30.433810089 +0100
@@ -17,7 +17,7 @@
Name: platformsh-cli
-Version: 3.51.1
+Version: 3.51.3
Release: 0
Summary: Tool for managing Platform.sh services from the command line
# See licenses.txt for dependency licenses.
++++++ _service ++++++
--- /var/tmp/diff_new_pack.GXaO9Z/_old 2020-01-19 15:50:30.449810098 +0100
+++ /var/tmp/diff_new_pack.GXaO9Z/_new 2020-01-19 15:50:30.449810098 +0100
@@ -2,7 +2,7 @@
<service name="tar_scm" mode="disabled">
<param name="versionformat">@PARENT_TAG@</param>
<param name="versionrewrite-pattern">v(.*)</param>
- <param name="revision">refs/tags/v3.51.1</param>
+ <param name="revision">refs/tags/v3.51.3</param>
<param name="url">git://github.com/platformsh/platformsh-cli.git</param>
<param name="scm">git</param>
<param name="changesgenerate">enable</param>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.GXaO9Z/_old 2020-01-19 15:50:30.461810106 +0100
+++ /var/tmp/diff_new_pack.GXaO9Z/_new 2020-01-19 15:50:30.465810108 +0100
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param name="url">git://github.com/platformsh/platformsh-cli.git</param>
- <param
name="changesrevision">3a004ebc8d3264622cd66fb9585179f205093483</param>
+ <param
name="changesrevision">d30ca740b27f5e6ec2e338b377a4c784d8eb3a68</param>
</service>
</servicedata>
++++++ platformsh-cli-3.51.1.tar.xz -> platformsh-cli-3.51.3.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformsh-cli-3.51.1/README.md
new/platformsh-cli-3.51.3/README.md
--- old/platformsh-cli-3.51.1/README.md 2020-01-15 16:55:46.000000000 +0100
+++ new/platformsh-cli-3.51.3/README.md 2020-01-17 16:36:13.000000000 +0100
@@ -91,7 +91,6 @@
auth:browser-login (login) Log in to Platform.sh via a browser
auth:info Display your account information
auth:logout (logout) Log out of Platform.sh
- auth:password-login Log in to Platform.sh using a
username and password
backup
backup:create (backup) Make a backup of an environment
backup:list (backups) List available backups of an
environment
@@ -214,14 +213,15 @@
local server and a browser, allowing you to log in to Platform.sh via the
normal login form, including via services like Bitbucket, GitHub and Google.
-2. `platform auth:password-login`: this allows you to log in with a username
and
- password, and a two-factor token if applicable.
-
-3. [API tokens](https://docs.platform.sh/gettingstarted/cli/api-tokens.html):
+2. [API tokens](https://docs.platform.sh/gettingstarted/cli/api-tokens.html):
these allow non-interactive authentication. See
[Customization](#customization) below for how to use an API token. Remember
to
use a separate machine account if you want to limit the token's access.
+3. `platform auth:password-login`: this allows you to log in with a username
and
+ password, and a two-factor token if applicable. This is deprecated, and will
+ be removed from the API in future.
+
## Customization
You can configure the CLI via the user configuration file
`~/.platformsh/config.yaml`.
@@ -268,6 +268,7 @@
* `PLATFORMSH_CLI_DEBUG`: set to 1 to enable cURL debugging. _Warning_: this
will print all request information in the terminal, including sensitive access
tokens.
* `PLATFORMSH_CLI_DISABLE_CACHE`: set to 1 to disable caching
+* `PLATFORMSH_CLI_HOME`: override the home directory (inside which the
.platformsh directory is stored)
* `PLATFORMSH_CLI_NO_COLOR`: set to 1 to disable colors in output
* `PLATFORMSH_CLI_NO_INTERACTION`: set to 1 to disable interaction (useful for
scripting). _Warning_: this will bypass any confirmation questions.
* `PLATFORMSH_CLI_SESSION_ID`: change user session (default 'default')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformsh-cli-3.51.1/dist/installer.php
new/platformsh-cli-3.51.3/dist/installer.php
--- old/platformsh-cli-3.51.1/dist/installer.php 2020-01-15
16:55:46.000000000 +0100
+++ new/platformsh-cli-3.51.3/dist/installer.php 2020-01-17
16:36:13.000000000 +0100
@@ -47,6 +47,7 @@
}
class Installer {
+ private $envPrefix;
private $manifestUrl;
private $configDir;
private $executable;
@@ -57,8 +58,9 @@
public function __construct(array $args = []) {
$this->argv = !empty($args) ? $args : $GLOBALS['argv'];
- if (getenv('PLATFORMSH_CLI_MANIFEST_URL') !== false) {
- $this->manifestUrl = getenv('PLATFORMSH_CLI_MANIFEST_URL');
+ $this->envPrefix = 'PLATFORMSH_CLI_';
+ if (getenv($this->envPrefix . 'MANIFEST_URL') !== false) {
+ $this->manifestUrl = getenv($this->envPrefix . 'MANIFEST_URL');
} elseif ($manifestOption = $this->getOption('manifest')) {
$this->manifestUrl = $manifestOption;
} else {
@@ -505,13 +507,13 @@
* The user's home directory as an absolute path, or false on failure.
*/
private function getHomeDirectory() {
- if ($home = getenv('HOME')) {
- return $home;
- }
- elseif ($userProfile = getenv('USERPROFILE')) {
- return $userProfile;
+ $vars = [$this->envPrefix . 'HOME', 'HOME', 'USERPROFILE'];
+ foreach ($vars as $var) {
+ if ($home = getenv($var)) {
+ return realpath($home) ?: $home;
+ }
}
- elseif (!empty($_SERVER['HOMEDRIVE']) && !empty($_SERVER['HOMEPATH']))
{
+ if (!empty($_SERVER['HOMEDRIVE']) && !empty($_SERVER['HOMEPATH'])) {
return $_SERVER['HOMEDRIVE'] . $_SERVER['HOMEPATH'];
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformsh-cli-3.51.1/dist/manifest.json
new/platformsh-cli-3.51.3/dist/manifest.json
--- old/platformsh-cli-3.51.1/dist/manifest.json 2020-01-15
16:55:46.000000000 +0100
+++ new/platformsh-cli-3.51.3/dist/manifest.json 2020-01-17
16:36:13.000000000 +0100
@@ -17,10 +17,10 @@
},
{
"name": "platform.phar",
- "sha1": "88380dc17038a2ea65c16cba5870728fb4546b21",
- "sha256":
"bb5d18d3a820686288b5752982fc3e375accba4aa1adbbf5cb3c3450af4a10fb",
- "url":
"https://github.com/platformsh/platformsh-cli/releases/download/v3.51.1/platform.phar",
- "version": "3.51.1",
+ "sha1": "8de789f62a8870893a794d3aa2c1ee8ec126a2d8",
+ "sha256":
"0e368c04582107efc02caa56fdaf7df918f51855ec78ba4b05cb433d4b0d5cd1",
+ "url":
"https://github.com/platformsh/platformsh-cli/releases/download/v3.51.3/platform.phar",
+ "version": "3.51.3",
"php": {
"min": "5.5.9"
},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/platformsh-cli-3.51.1/resources/oauth-listener/index.php
new/platformsh-cli-3.51.3/resources/oauth-listener/index.php
--- old/platformsh-cli-3.51.1/resources/oauth-listener/index.php
2020-01-15 16:55:46.000000000 +0100
+++ new/platformsh-cli-3.51.3/resources/oauth-listener/index.php
2020-01-17 16:36:13.000000000 +0100
@@ -10,6 +10,7 @@
private $file;
private $localUrl;
private $response;
+ private $codeChallenge;
public function __construct() {
$required = [
@@ -17,6 +18,7 @@
'CLI_OAUTH_AUTH_URL',
'CLI_OAUTH_CLIENT_ID',
'CLI_OAUTH_FILE',
+ 'CLI_OAUTH_CODE_CHALLENGE',
];
if ($missing = array_diff($required, array_keys($_ENV))) {
throw new \RuntimeException('Invalid environment, missing: ' .
implode(', ', $missing));
@@ -25,6 +27,7 @@
$this->authUrl = $_ENV['CLI_OAUTH_AUTH_URL'];
$this->clientId = $_ENV['CLI_OAUTH_CLIENT_ID'];
$this->file = $_ENV['CLI_OAUTH_FILE'];
+ $this->codeChallenge = $_ENV['CLI_OAUTH_CODE_CHALLENGE'];
$this->localUrl = $localUrl = 'http://127.0.0.1:' .
$_SERVER['SERVER_PORT'];
$this->response = new Response();
}
@@ -39,6 +42,8 @@
'state' => $this->state,
'client_id' => $this->clientId,
'response_type' => 'code',
+ 'code_challenge' => $this->codeChallenge,
+ 'code_challenge_method' => 'S256',
], null, '&', PHP_QUERY_RFC3986);
}
@@ -53,6 +58,10 @@
$this->reportError('Invalid state parameter');
return;
}
+ if (isset($_GET['code_challenge']) && $_GET['code_challenge'] !==
$this->codeChallenge) {
+ $this->reportError('Invalid returned code_challenge
parameter');
+ return;
+ }
if (!file_put_contents($this->file, $_GET['code'], LOCK_EX)) {
$this->reportError('Failed to write authorization code to
file');
return;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/platformsh-cli-3.51.1/src/Command/Auth/BrowserLoginCommand.php
new/platformsh-cli-3.51.3/src/Command/Auth/BrowserLoginCommand.php
--- old/platformsh-cli-3.51.1/src/Command/Auth/BrowserLoginCommand.php
2020-01-15 16:55:46.000000000 +0100
+++ new/platformsh-cli-3.51.3/src/Command/Auth/BrowserLoginCommand.php
2020-01-17 16:36:13.000000000 +0100
@@ -8,6 +8,7 @@
use Platformsh\Cli\Service\Filesystem;
use Platformsh\Cli\Service\Url;
use Platformsh\Cli\Util\PortUtil;
+use Platformsh\Client\Exception\ApiResponseException;
use Platformsh\Client\Session\SessionInterface;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
@@ -21,7 +22,6 @@
{
$service = $this->config()->get('service.name');
$applicationName = $this->config()->get('application.name');
- $executable = $this->config()->get('application.executable');
$this->setName('auth:browser-login');
if ($this->config()->get('application.login_method') === 'browser') {
@@ -32,9 +32,7 @@
->addOption('force', 'f', InputOption::VALUE_NONE, 'Log in again,
even if already logged in');
Url::configureInput($this->getDefinition());
- $help = 'Use this command to log in to the ' . $applicationName . '
using a browser.'
- . "\n\nAlternatively, to log in with a username and password in
the terminal, use:\n <info>"
- . $executable . ' auth:password-login</info>';
+ $help = 'Use this command to log in to the ' . $applicationName . '
using a browser.';
if ($aHelp = $this->getApiTokenHelp()) {
$help .= "\n\n" . $aHelp;
}
@@ -132,9 +130,11 @@
'-t',
$listenerDir
]);
+ $codeVerifier = $this->generateCodeVerifier();
$process->setEnv([
'CLI_OAUTH_APP_NAME' => $this->config()->get('application.name'),
- 'CLI_OAUTH_STATE' => $this->getRandomState(),
+ 'CLI_OAUTH_STATE' => $this->generateCodeVerifier(), // the state
can just be any random string
+ 'CLI_OAUTH_CODE_CHALLENGE' =>
$this->convertVerifierToChallenge($codeVerifier),
'CLI_OAUTH_AUTH_URL' =>
$this->config()->get('api.oauth2_auth_url'),
'CLI_OAUTH_CLIENT_ID' =>
$this->config()->get('api.oauth2_client_id'),
'CLI_OAUTH_FILE' => $codeFile,
@@ -170,9 +170,9 @@
$this->stdErr->writeln('');
$this->stdErr->writeln('<options=bold>Help:</>');
$this->stdErr->writeln(' Use Ctrl+C to quit this process.');
- $executable = $this->config()->get('application.executable');
- $this->stdErr->writeln(sprintf(' To log in within the terminal
instead, quit and run: <info>%s auth:password-login</info>', $executable));
- $this->stdErr->writeln(sprintf(' For more info, quit and run:
<info>%s help login</info>', $executable));
+ if ($aHelp = $this->getApiTokenHelp()) {
+ $this->stdErr->writeln("\n" . preg_replace('/^/m', ' ', $aHelp));
+ }
$this->stdErr->writeln('');
// Wait for the file to be filled with an OAuth2 authorization code.
@@ -204,7 +204,7 @@
// Using the authorization code, request an access token.
$this->stdErr->writeln('Login information received. Verifying...');
- $token = $this->getAccessToken($code, $localUrl);
+ $token = $this->getAccessToken($code, $codeVerifier, $localUrl);
// Finalize login: call logOut() on the old connector, clear the cache
// and save the new credentials.
@@ -271,35 +271,69 @@
* Exchange the authorization code for an access token.
*
* @param string $authCode
+ * @param string $codeVerifier
* @param string $redirectUri
*
* @return array
*/
- private function getAccessToken($authCode, $redirectUri)
+ private function getAccessToken($authCode, $codeVerifier, $redirectUri)
{
- return (new Client())->post(
- $this->config()->get('api.oauth2_token_url'),
- [
- 'body' => [
- 'grant_type' => 'authorization_code',
- 'code' => $authCode,
- 'client_id' =>
$this->config()->get('api.oauth2_client_id'),
- 'redirect_uri' => $redirectUri,
- ],
- 'auth' => false,
- 'verify' => !$this->config()->get('api.skip_ssl'),
- ]
- )->json();
+ $client = new Client();
+ $request = $client->createRequest('post',
$this->config()->get('api.oauth2_token_url'), [
+ 'body' => [
+ 'grant_type' => 'authorization_code',
+ 'code' => $authCode,
+ 'client_id' => $this->config()->get('api.oauth2_client_id'),
+ 'redirect_uri' => $redirectUri,
+ 'code_verifier' => $codeVerifier,
+ ],
+ 'auth' => false,
+ 'verify' => !$this->config()->get('api.skip_ssl'),
+ ]);
+
+ try {
+ $response = $client->send($request);
+
+ return $response->json();
+ } catch (BadResponseException $e) {
+ throw ApiResponseException::create($request, $e->getResponse(),
$e);
+ }
}
/**
- * Get a random state to use with the OAuth2 code request.
+ * Get a PKCE code verifier to use with the OAuth2 code request.
*
* @return string
*/
- private function getRandomState()
+ private function generateCodeVerifier()
{
// This uses paragonie/random_compat as a polyfill for PHP < 7.0.
- return bin2hex(random_bytes(128));
+ return $this->base64UrlEncode(random_bytes(32));
+ }
+
+ /**
+ * Base64URL-encodes a string according to the PKCE spec.
+ *
+ * @see https://tools.ietf.org/html/rfc7636
+ *
+ * @param string $data
+ *
+ * @return string
+ */
+ private function base64UrlEncode($data)
+ {
+ return str_replace(['+', '/'], ['-', '_'], rtrim(base64_encode($data),
'='));
+ }
+
+ /**
+ * Generates a PKCE code challenge using the S256 transformation on a
verifier.
+ *
+ * @param string $verifier
+ *
+ * @return string
+ */
+ private function convertVerifierToChallenge($verifier)
+ {
+ return $this->base64UrlEncode(hash('sha256', $verifier, true));
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/platformsh-cli-3.51.1/src/Command/Auth/PasswordLoginCommand.php
new/platformsh-cli-3.51.3/src/Command/Auth/PasswordLoginCommand.php
--- old/platformsh-cli-3.51.1/src/Command/Auth/PasswordLoginCommand.php
2020-01-15 16:55:46.000000000 +0100
+++ new/platformsh-cli-3.51.3/src/Command/Auth/PasswordLoginCommand.php
2020-01-17 16:36:13.000000000 +0100
@@ -10,6 +10,7 @@
class PasswordLoginCommand extends CommandBase
{
protected $stability = 'deprecated';
+ protected $hiddenInList = true;
protected function configure()
{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/platformsh-cli-3.51.1/src/Command/Integration/IntegrationAddCommand.php
new/platformsh-cli-3.51.3/src/Command/Integration/IntegrationAddCommand.php
--- old/platformsh-cli-3.51.1/src/Command/Integration/IntegrationAddCommand.php
2020-01-15 16:55:46.000000000 +0100
+++ new/platformsh-cli-3.51.3/src/Command/Integration/IntegrationAddCommand.php
2020-01-17 16:36:13.000000000 +0100
@@ -24,7 +24,7 @@
);
$this->addExample(
'Add an integration with a GitLab repository',
- '--type gitlab --repository mygroup/example-repo --token
22fe4d70dfbc20e4f668568a0b5422e2 --base-url https://gitlab.example.com'
+ '--type gitlab --server-project mygroup/example-repo --token
22fe4d70dfbc20e4f668568a0b5422e2 --base-url https://gitlab.example.com'
);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/platformsh-cli-3.51.1/src/Command/Self/SelfInstallCommand.php
new/platformsh-cli-3.51.3/src/Command/Self/SelfInstallCommand.php
--- old/platformsh-cli-3.51.1/src/Command/Self/SelfInstallCommand.php
2020-01-15 16:55:46.000000000 +0100
+++ new/platformsh-cli-3.51.3/src/Command/Self/SelfInstallCommand.php
2020-01-17 16:36:13.000000000 +0100
@@ -2,7 +2,6 @@
namespace Platformsh\Cli\Command\Self;
use Platformsh\Cli\Command\CommandBase;
-use Platformsh\Cli\Service\Filesystem;
use Platformsh\Cli\Util\OsUtil;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
@@ -129,7 +128,7 @@
$configDirRelative = $this->config()->getUserConfigDir(false);
$rcDestination = $configDirRelative . '/' . 'shell-config.rc';
- $suggestedShellConfig = 'HOME=${HOME:-' .
escapeshellarg(Filesystem::getHomeDirectory()) . '}';
+ $suggestedShellConfig = 'HOME=${HOME:-' .
escapeshellarg($this->config()->getHomeDirectory()) . '}';
$suggestedShellConfig .= PHP_EOL . sprintf(
'export PATH=%s:"$PATH"',
'"$HOME/"' . escapeshellarg($configDirRelative . '/bin')
@@ -297,7 +296,7 @@
// Replace the home directory with ~, if not on Windows.
if (DIRECTORY_SEPARATOR !== '\\') {
$realpath = realpath($filename);
- $homeDir = Filesystem::getHomeDirectory();
+ $homeDir = $this->config()->getHomeDirectory();
if ($realpath && strpos($realpath, $homeDir) === 0) {
$arg = '~/' . ltrim(substr($realpath, strlen($homeDir)), '/');
}
@@ -326,7 +325,7 @@
if (getcwd() === dirname($filename)) {
return basename($filename);
}
- $homeDir = Filesystem::getHomeDirectory();
+ $homeDir = $this->config()->getHomeDirectory();
if (strpos($filename, $homeDir) === 0) {
return str_replace($homeDir, '~', $filename);
}
@@ -348,7 +347,7 @@
$envPrefix = $this->config()->get('service.env_prefix');
if (getenv($envPrefix . 'PROJECT') !== false
&& getenv($envPrefix . 'APP_DIR') !== false
- && getenv($envPrefix . 'APP_DIR') ===
Filesystem::getHomeDirectory()) {
+ && getenv($envPrefix . 'APP_DIR') ===
$this->config()->getHomeDirectory()) {
return getenv($envPrefix . 'APP_DIR') . '/.environment';
}
@@ -370,7 +369,7 @@
array_unshift($candidates, '.zprofile');
}
- $homeDir = Filesystem::getHomeDirectory();
+ $homeDir = $this->config()->getHomeDirectory();
foreach ($candidates as $candidate) {
if (file_exists($homeDir . DIRECTORY_SEPARATOR . $candidate)) {
$this->debug('Found existing config file: ' . $homeDir .
DIRECTORY_SEPARATOR . $candidate);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/platformsh-cli-3.51.1/src/Command/SshKey/SshKeyAddCommand.php
new/platformsh-cli-3.51.3/src/Command/SshKey/SshKeyAddCommand.php
--- old/platformsh-cli-3.51.1/src/Command/SshKey/SshKeyAddCommand.php
2020-01-15 16:55:46.000000000 +0100
+++ new/platformsh-cli-3.51.3/src/Command/SshKey/SshKeyAddCommand.php
2020-01-17 16:36:13.000000000 +0100
@@ -30,9 +30,7 @@
$publicKeyPath = $input->getArgument('path');
if (empty($publicKeyPath)) {
- /** @var \Platformsh\Cli\Service\Filesystem $fs */
- $fs = $this->getService('fs');
- $defaultKeyPath = $fs->getHomeDirectory() . '/.ssh/' .
self::DEFAULT_BASENAME;
+ $defaultKeyPath = $this->config()->getHomeDirectory() . '/.ssh/' .
self::DEFAULT_BASENAME;
$defaultPublicKeyPath = $defaultKeyPath . '.pub';
// Look for an existing local key.
@@ -180,9 +178,7 @@
? str_replace('.key', '.' . $number . 'key', $basename)
: $basename . '.' . $number;
}
- /** @var \Platformsh\Cli\Service\Filesystem $fs */
- $fs = $this->getService('fs');
- $filename = $fs->getHomeDirectory() . '/.ssh/' . $basename;
+ $filename = $this->config()->getHomeDirectory() . '/.ssh/' . $basename;
if (file_exists($filename)) {
return $this->getNewKeyPath(++$number);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/platformsh-cli-3.51.1/src/Console/EventSubscriber.php
new/platformsh-cli-3.51.3/src/Console/EventSubscriber.php
--- old/platformsh-cli-3.51.1/src/Console/EventSubscriber.php 2020-01-15
16:55:46.000000000 +0100
+++ new/platformsh-cli-3.51.3/src/Console/EventSubscriber.php 2020-01-17
16:36:13.000000000 +0100
@@ -88,9 +88,6 @@
$error
));
$event->stopPropagation();
- } else {
- $event->setError(new HttpException(null, $error));
- $event->stopPropagation();
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformsh-cli-3.51.1/src/Service/Api.php
new/platformsh-cli-3.51.3/src/Service/Api.php
--- old/platformsh-cli-3.51.1/src/Service/Api.php 2020-01-15
16:55:46.000000000 +0100
+++ new/platformsh-cli-3.51.3/src/Service/Api.php 2020-01-17
16:36:13.000000000 +0100
@@ -244,7 +244,7 @@
/**
* Finds a proxy address based on the http_proxy or https_proxy
environment variables.
*
- * @return string|null
+ * @return string|array|null
*/
private function getProxy() {
// The proxy variables should be ignored in a non-CLI context.
@@ -253,11 +253,11 @@
}
$proxies = [];
foreach (['https', 'http'] as $scheme) {
- $proxies[$scheme] = str_replace('http://', 'tcp://',
getenv($scheme . '_proxy'));
+ $proxies[$scheme] = str_replace($scheme . '://', 'tcp://',
getenv($scheme . '_proxy'));
}
$proxies = array_filter($proxies);
if (count($proxies)) {
- return count($proxies) == 1 ? reset($proxies) : $proxies;
+ return count($proxies) === 1 ? reset($proxies) : $proxies;
}
return null;
@@ -281,7 +281,13 @@
],
];
$proxy = $this->getProxy();
- if ($proxy !== null) {
+ if (is_array($proxy)) {
+ if (isset($proxy['https'])) {
+ $opts['http']['proxy'] = $proxy['https'];
+ } elseif (isset($proxy['http'])) {
+ $opts['http']['proxy'] = $proxy['http'];
+ }
+ } elseif (is_string($proxy) && $proxy !== '') {
$opts['http']['proxy'] = $proxy;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformsh-cli-3.51.1/src/Service/Config.php
new/platformsh-cli-3.51.3/src/Service/Config.php
--- old/platformsh-cli-3.51.1/src/Service/Config.php 2020-01-15
16:55:46.000000000 +0100
+++ new/platformsh-cli-3.51.3/src/Service/Config.php 2020-01-17
16:36:13.000000000 +0100
@@ -101,6 +101,32 @@
}
/**
+ * @return string The absolute path to the user's home directory
+ */
+ public function getHomeDirectory()
+ {
+ $prefix = isset(self::$config['application']['env_prefix']) ?
self::$config['application']['env_prefix'] : '';
+ $envVars = [$prefix . 'HOME', 'HOME', 'USERPROFILE'];
+ foreach ($envVars as $envVar) {
+ $value = getenv($envVar);
+ if (array_key_exists($envVar, $this->env)) {
+ $value = $this->env[$envVar];
+ }
+ if (is_string($value) && $value !== '') {
+ if (!is_dir($value)) {
+ throw new \RuntimeException(
+ sprintf('Invalid environment variable %s: %s (not a
directory)', $envVar, $value)
+ );
+ }
+
+ return realpath($value) ?: $value;
+ }
+ }
+
+ throw new \RuntimeException(sprintf('Could not determine home
directory. Set the %s environment variable.', $prefix . 'HOME'));
+ }
+
+ /**
* Get the directory where the CLI is normally installed and configured.
*
* @param bool $absolute Whether to return an absolute path. If false,
@@ -112,7 +138,7 @@
{
$path = $this->get('application.user_config_dir');
- return $absolute ? $this->fs()->getHomeDirectory() . '/' . $path :
$path;
+ return $absolute ? $this->getHomeDirectory() . '/' . $path : $path;
}
/**
@@ -186,6 +212,7 @@
'DRUSH' => 'local.drush_executable',
'SESSION_ID' => 'api.session_id',
'SKIP_SSL' => 'api.skip_ssl',
+ 'API_URL' => 'api.base_url',
'ACCOUNTS_API' => 'api.accounts_api_url',
'ACCOUNTS_API_URL' => 'api.accounts_api_url',
'OAUTH2_AUTH_URL' => 'api.oauth2_auth_url',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformsh-cli-3.51.1/src/Service/Drush.php
new/platformsh-cli-3.51.3/src/Service/Drush.php
--- old/platformsh-cli-3.51.1/src/Service/Drush.php 2020-01-15
16:55:46.000000000 +0100
+++ new/platformsh-cli-3.51.3/src/Service/Drush.php 2020-01-17
16:36:13.000000000 +0100
@@ -67,7 +67,7 @@
public function getHomeDir()
{
- return $this->homeDir ?: Filesystem::getHomeDirectory();
+ return $this->homeDir ?: $this->config->getHomeDirectory();
}
/**
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformsh-cli-3.51.1/src/Service/Filesystem.php
new/platformsh-cli-3.51.3/src/Service/Filesystem.php
--- old/platformsh-cli-3.51.1/src/Service/Filesystem.php 2020-01-15
16:55:46.000000000 +0100
+++ new/platformsh-cli-3.51.3/src/Service/Filesystem.php 2020-01-17
16:36:13.000000000 +0100
@@ -117,26 +117,6 @@
}
/**
- * @return string The absolute path to the user's home directory
- */
- public static function getHomeDirectory()
- {
- foreach (['HOME', 'USERPROFILE'] as $envVar) {
- if ($value = getenv($envVar)) {
- if (!is_dir($value)) {
- throw new \RuntimeException(
- sprintf('Invalid environment variable %s: %s (not a
directory)', $envVar, $value)
- );
- }
-
- return $value;
- }
- }
-
- throw new \RuntimeException('Could not determine home directory');
- }
-
- /**
* @param string $dir
* @param int $mode
*/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformsh-cli-3.51.1/src/Service/State.php
new/platformsh-cli-3.51.3/src/Service/State.php
--- old/platformsh-cli-3.51.1/src/Service/State.php 2020-01-15
16:55:46.000000000 +0100
+++ new/platformsh-cli-3.51.3/src/Service/State.php 2020-01-17
16:36:13.000000000 +0100
@@ -85,6 +85,6 @@
*/
protected function getFilename()
{
- return Filesystem::getHomeDirectory() . '/' .
$this->config->get('application.user_state_file');
+ return $this->config->getHomeDirectory() . '/' .
$this->config->get('application.user_state_file');
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformsh-cli-3.51.1/tests/ConfigTest.php
new/platformsh-cli-3.51.3/tests/ConfigTest.php
--- old/platformsh-cli-3.51.1/tests/ConfigTest.php 2020-01-15
16:55:46.000000000 +0100
+++ new/platformsh-cli-3.51.3/tests/ConfigTest.php 2020-01-17
16:36:13.000000000 +0100
@@ -18,6 +18,19 @@
$this->assertEquals(123, $config->getWithDefault('nonexistent', 123));
}
+ public function testGetHomeDirectory()
+ {
+ $homeDir = (new Config(['HOME' => '.']))->getHomeDirectory();
+ $this->assertNotEmpty($homeDir, 'Home directory returned');
+ $this->assertNotEquals('.', $homeDir, 'Home directory not relative');
+
+ $homeDir = (new Config(['PLATFORMSH_CLI_HOME' => __DIR__ . '/data',
'HOME' => __DIR__]))->getHomeDirectory();
+ $this->assertEquals(__DIR__ . '/data', $homeDir, 'Home directory
overridden');
+
+ $homeDir = (new Config(['PLATFORMSH_CLI_HOME' => '', 'HOME' =>
__DIR__]))->getHomeDirectory();
+ $this->assertEquals(__DIR__, $homeDir, 'Empty value treated as
nonexistent');
+ }
+
/**
* Test that selected environment variables can override initial config.
*/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/platformsh-cli-3.51.1/tests/Service/FilesystemServiceTest.php
new/platformsh-cli-3.51.3/tests/Service/FilesystemServiceTest.php
--- old/platformsh-cli-3.51.1/tests/Service/FilesystemServiceTest.php
2020-01-15 16:55:46.000000000 +0100
+++ new/platformsh-cli-3.51.3/tests/Service/FilesystemServiceTest.php
2020-01-17 16:36:13.000000000 +0100
@@ -34,16 +34,6 @@
}
/**
- * Test FilesystemHelper::getHomeDirectory().
- */
- public function testGetHomeDirectory()
- {
- $homeDir = $this->fs->getHomeDirectory();
- $this->assertNotEmpty($homeDir, 'Home directory returned');
- $this->assertNotEmpty(realpath($homeDir), 'Home directory exists');
- }
-
- /**
* Test FilesystemHelper::remove() on directories.
*/
public function testRemoveDir()
++++++ platformsh-cli-vendor.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/vendor/autoload.php new/vendor/autoload.php
--- old/vendor/autoload.php 2020-01-15 22:17:20.781516873 +0100
+++ new/vendor/autoload.php 2020-01-17 21:44:21.767464197 +0100
@@ -4,4 +4,4 @@
require_once __DIR__ . '/composer/autoload_real.php';
-return ComposerAutoloaderInit39e92c99682824c4989cae75c4e9fb03::getLoader();
+return ComposerAutoloaderInitd8c966fdb01eb7066c738e0e8bfc76d7::getLoader();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/vendor/composer/autoload_real.php
new/vendor/composer/autoload_real.php
--- old/vendor/composer/autoload_real.php 2020-01-15 22:17:20.781516873
+0100
+++ new/vendor/composer/autoload_real.php 2020-01-17 21:44:21.767464197
+0100
@@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
-class ComposerAutoloaderInit39e92c99682824c4989cae75c4e9fb03
+class ComposerAutoloaderInitd8c966fdb01eb7066c738e0e8bfc76d7
{
private static $loader;
@@ -19,15 +19,15 @@
return self::$loader;
}
-
spl_autoload_register(array('ComposerAutoloaderInit39e92c99682824c4989cae75c4e9fb03',
'loadClassLoader'), true, true);
+
spl_autoload_register(array('ComposerAutoloaderInitd8c966fdb01eb7066c738e0e8bfc76d7',
'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
-
spl_autoload_unregister(array('ComposerAutoloaderInit39e92c99682824c4989cae75c4e9fb03',
'loadClassLoader'));
+
spl_autoload_unregister(array('ComposerAutoloaderInitd8c966fdb01eb7066c738e0e8bfc76d7',
'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION')
&& (!function_exists('zend_loader_file_encoded') ||
!zend_loader_file_encoded());
if ($useStaticLoader) {
require_once __DIR__ . '/autoload_static.php';
-
call_user_func(\Composer\Autoload\ComposerStaticInit39e92c99682824c4989cae75c4e9fb03::getInitializer($loader));
+
call_user_func(\Composer\Autoload\ComposerStaticInitd8c966fdb01eb7066c738e0e8bfc76d7::getInitializer($loader));
} else {
$map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
@@ -48,19 +48,19 @@
$loader->register(true);
if ($useStaticLoader) {
- $includeFiles =
Composer\Autoload\ComposerStaticInit39e92c99682824c4989cae75c4e9fb03::$files;
+ $includeFiles =
Composer\Autoload\ComposerStaticInitd8c966fdb01eb7066c738e0e8bfc76d7::$files;
} else {
$includeFiles = require __DIR__ . '/autoload_files.php';
}
foreach ($includeFiles as $fileIdentifier => $file) {
- composerRequire39e92c99682824c4989cae75c4e9fb03($fileIdentifier,
$file);
+ composerRequired8c966fdb01eb7066c738e0e8bfc76d7($fileIdentifier,
$file);
}
return $loader;
}
}
-function composerRequire39e92c99682824c4989cae75c4e9fb03($fileIdentifier,
$file)
+function composerRequired8c966fdb01eb7066c738e0e8bfc76d7($fileIdentifier,
$file)
{
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
require $file;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/vendor/composer/autoload_static.php
new/vendor/composer/autoload_static.php
--- old/vendor/composer/autoload_static.php 2020-01-15 22:17:20.781516873
+0100
+++ new/vendor/composer/autoload_static.php 2020-01-17 21:44:21.767464197
+0100
@@ -4,7 +4,7 @@
namespace Composer\Autoload;
-class ComposerStaticInit39e92c99682824c4989cae75c4e9fb03
+class ComposerStaticInitd8c966fdb01eb7066c738e0e8bfc76d7
{
public static $files = array (
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' .
'/symfony/polyfill-ctype/bootstrap.php',
@@ -193,9 +193,9 @@
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
- $loader->prefixLengthsPsr4 =
ComposerStaticInit39e92c99682824c4989cae75c4e9fb03::$prefixLengthsPsr4;
- $loader->prefixDirsPsr4 =
ComposerStaticInit39e92c99682824c4989cae75c4e9fb03::$prefixDirsPsr4;
- $loader->classMap =
ComposerStaticInit39e92c99682824c4989cae75c4e9fb03::$classMap;
+ $loader->prefixLengthsPsr4 =
ComposerStaticInitd8c966fdb01eb7066c738e0e8bfc76d7::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 =
ComposerStaticInitd8c966fdb01eb7066c738e0e8bfc76d7::$prefixDirsPsr4;
+ $loader->classMap =
ComposerStaticInitd8c966fdb01eb7066c738e0e8bfc76d7::$classMap;
}, null, ClassLoader::class);
}