diff vendor/consolidation/site-process/src/Transport/SshTransport.php @ 5:12f9dff5fda9 tip

Update to Drupal core 8.7.1
author Chris Cannam
date Thu, 09 May 2019 15:34:47 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/consolidation/site-process/src/Transport/SshTransport.php	Thu May 09 15:34:47 2019 +0100
@@ -0,0 +1,92 @@
+<?php
+
+namespace Consolidation\SiteProcess\Transport;
+
+use Consolidation\SiteProcess\SiteProcess;
+use Consolidation\SiteProcess\Util\Escape;
+use Consolidation\SiteAlias\SiteAliasInterface;
+use Consolidation\SiteProcess\Util\Shell;
+use Consolidation\Config\ConfigInterface;
+
+/**
+ * SshTransport knows how to wrap a command such that it runs on a remote
+ * system via the ssh cli.
+ */
+class SshTransport implements TransportInterface
+{
+    protected $tty;
+    protected $siteAlias;
+
+    public function __construct(SiteAliasInterface $siteAlias)
+    {
+        $this->siteAlias = $siteAlias;
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function configure(SiteProcess $process)
+    {
+        $this->tty = $process->isTty();
+    }
+
+    /**
+     * inheritdoc
+     */
+    public function wrap($args)
+    {
+        $transport = ['ssh'];
+        $transportOptions = $this->getTransportOptions();
+        $commandToExecute = $this->getCommandToExecute($args);
+
+        return array_merge(
+            $transport,
+            $transportOptions,
+            $commandToExecute
+        );
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function addChdir($cd_remote, $args)
+    {
+        return array_merge(
+            [
+                'cd',
+                $cd_remote,
+                Shell::op('&&'),
+            ],
+            $args
+        );
+    }
+
+    /**
+     * getTransportOptions returns the transport options for the tranport
+     * mechanism itself
+     */
+    protected function getTransportOptions()
+    {
+        $transportOptions = [
+            Shell::preEscaped($this->siteAlias->get('ssh.options', '-o PasswordAuthentication=no')),
+            $this->siteAlias->remoteHostWithUser(),
+        ];
+        if ($this->tty) {
+            array_unshift($transportOptions, '-t');
+        }
+        return $transportOptions;
+    }
+
+    /**
+     * getCommandToExecute processes the arguments for the command to
+     * be executed such that they are appropriate for the transport mechanism.
+     */
+    protected function getCommandToExecute($args)
+    {
+        // Escape each argument for the target system and then join
+        $args = Escape::argsForSite($this->siteAlias, $args);
+        $commandToExecute = implode(' ', $args);
+
+        return [$commandToExecute];
+    }
+}