summaryrefslogtreecommitdiff
path: root/lib.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib.py')
-rw-r--r--lib.py56
1 files changed, 55 insertions, 1 deletions
diff --git a/lib.py b/lib.py
index 4982e32..611e8a1 100644
--- a/lib.py
+++ b/lib.py
@@ -1,4 +1,5 @@
import os
+import subprocess
import sys
import cliapp
@@ -15,6 +16,59 @@ vars = Variables(datadir)
+
+def ssh_key_file_for_user(user):
+ return os.path.abspath('{}.key'.format(user))
+
+
+def get_admin_ssh_key():
+ return os.environ['ADMIN_SSH_KEY']
+
+
+def get_user_ssh_key(user):
+ if user is None:
+ return get_admin_ssh_key()
+ else:
+ return ssh_key_file_for_user(user)
+
+
+def ssh_keygen(user):
+ filename = ssh_key_file_for_user(user)
+ cliapp.runcmd(['ssh-keygen', '-f', filename, '-N', '', '-C', user])
+ with open(filename + '.pub') as f:
+ return f.read()
+
+
+def env_ssh_command(user):
+ argv = [
+ 'ssh',
+ '-o', 'PasswordAuthentication=no',
+ '-o', 'IdentitiesOnly=yes',
+ '-i', get_user_ssh_key(user),
+ ]
+ return ' '.join(argv)
+
+
+
+def git_as(user, args, **kwargs):
+ server = os.environ['GITANO_SERVER']
+ env = dict(os.environ)
+ env['GIT_SSH_COMMAND'] = env_ssh_command(user)
+ return cliapp.runcmd_unchecked(
+ ['git'] + args,
+ stderr=subprocess.STDOUT,
+ env=env,
+ **kwargs)
+
+
+
+def git_as_checked(user, args, **kwargs):
+ exit, out, err = git_as(user, args, **kwargs)
+ sys.stdout.write('STDOUT from git:\n{}'.format(out))
+ sys.stderr.write('STDERR from git:\n{}'.format(err))
+ assertEqual(exit, 0)
+
+
def gitano(user, args, stdin=None):
server = os.environ['GITANO_SERVER']
kwargs = {
@@ -22,7 +76,7 @@ def gitano(user, args, stdin=None):
'ssh_options': [
'-oPasswordAuthentication=no',
'-oIdentitiesOnly=yes',
- '-i', self.get_user_ssh_key(user),
+ '-i', get_user_ssh_key(user),
],
}
if stdin is not None: