Proxy VCS SSH requests
Summary: Fixes T7034. Like HTTP, proxy requests to the correct host if a repository has an Almanac service host. Test Plan: Ran VCS requests through the proxy. Reviewers: btrahan Reviewed By: btrahan Subscribers: epriestley Maniphest Tasks: T7034 Differential Revision: https://secure.phabricator.com/D11543
This commit is contained in:
		@@ -8,15 +8,6 @@ $keys = id(new PhabricatorAuthSSHKeyQuery())
 | 
			
		||||
  ->setViewer(PhabricatorUser::getOmnipotentUser())
 | 
			
		||||
  ->execute();
 | 
			
		||||
 | 
			
		||||
foreach ($keys as $key => $ssh_key) {
 | 
			
		||||
  // For now, filter out any keys which don't belong to users. Eventually we
 | 
			
		||||
  // may allow devices to use this channel.
 | 
			
		||||
  if (!($ssh_key->getObject() instanceof PhabricatorUser)) {
 | 
			
		||||
    unset($keys[$key]);
 | 
			
		||||
    continue;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if (!$keys) {
 | 
			
		||||
  echo pht('No keys found.')."\n";
 | 
			
		||||
  exit(1);
 | 
			
		||||
@@ -24,11 +15,26 @@ if (!$keys) {
 | 
			
		||||
 | 
			
		||||
$bin = $root.'/bin/ssh-exec';
 | 
			
		||||
foreach ($keys as $ssh_key) {
 | 
			
		||||
  $user = $ssh_key->getObject()->getUsername();
 | 
			
		||||
 | 
			
		||||
  $key_argv = array();
 | 
			
		||||
  $key_argv[] = '--phabricator-ssh-user';
 | 
			
		||||
  $key_argv[] = $user;
 | 
			
		||||
  $object = $ssh_key->getObject();
 | 
			
		||||
  if ($object instanceof PhabricatorUser) {
 | 
			
		||||
    $key_argv[] = '--phabricator-ssh-user';
 | 
			
		||||
    $key_argv[] = $object->getUsername();
 | 
			
		||||
  } else if ($object instanceof AlmanacDevice) {
 | 
			
		||||
    if (!$ssh_key->getIsTrusted()) {
 | 
			
		||||
      // If this key is not a trusted device key, don't allow SSH
 | 
			
		||||
      // authentication.
 | 
			
		||||
      continue;
 | 
			
		||||
    }
 | 
			
		||||
    $key_argv[] = '--phabricator-ssh-device';
 | 
			
		||||
    $key_argv[] = $object->getName();
 | 
			
		||||
  } else {
 | 
			
		||||
    // We don't know what sort of key this is; don't permit SSH auth.
 | 
			
		||||
    continue;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  $key_argv[] = '--phabricator-ssh-key';
 | 
			
		||||
  $key_argv[] = $ssh_key->getID();
 | 
			
		||||
 | 
			
		||||
  $cmd = csprintf('%s %Ls', $bin, $key_argv);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user