[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class DrydockSFTPFilesystemInterface extends DrydockFilesystemInterface { 4 5 private $passphraseSSHKey; 6 7 private function openCredentialsIfNotOpen() { 8 if ($this->passphraseSSHKey !== null) { 9 return; 10 } 11 12 $credential = id(new PassphraseCredentialQuery()) 13 ->setViewer(PhabricatorUser::getOmnipotentUser()) 14 ->withIDs(array($this->getConfig('credential'))) 15 ->needSecrets(true) 16 ->executeOne(); 17 18 if ($credential->getProvidesType() !== 19 PassphraseCredentialTypeSSHPrivateKey::PROVIDES_TYPE) { 20 throw new Exception('Only private key credentials are supported.'); 21 } 22 23 $this->passphraseSSHKey = PassphraseSSHKey::loadFromPHID( 24 $credential->getPHID(), 25 PhabricatorUser::getOmnipotentUser()); 26 } 27 28 private function getExecFuture($path) { 29 $this->openCredentialsIfNotOpen(); 30 31 return new ExecFuture( 32 'sftp -o "StrictHostKeyChecking no" -P %s -i %P %P@%s', 33 $this->getConfig('port'), 34 $this->passphraseSSHKey->getKeyfileEnvelope(), 35 $this->passphraseSSHKey->getUsernameEnvelope(), 36 $this->getConfig('host')); 37 } 38 39 public function readFile($path) { 40 $target = new TempFile(); 41 $future = $this->getExecFuture($path); 42 $future->write(csprintf('get %s %s', $path, $target)); 43 $future->resolvex(); 44 return Filesystem::readFile($target); 45 } 46 47 public function saveFile($path, $name) { 48 $data = $this->readFile($path); 49 $file = PhabricatorFile::newFromFileData( 50 $data, 51 array('name' => $name)); 52 $file->setName($name); 53 $file->save(); 54 return $file; 55 } 56 57 public function writeFile($path, $data) { 58 $source = new TempFile(); 59 Filesystem::writeFile($source, $data); 60 $future = $this->getExecFuture($path); 61 $future->write(csprintf('put %s %s', $source, $path)); 62 $future->resolvex(); 63 } 64 65 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Nov 30 09:20:46 2014 | Cross-referenced by PHPXref 0.7.1 |