def post_update(cfg, git_dir): #pragma: no cover """ post-update hook for the Gitosis admin directory. 1. Make an export of the admin repo to a clean directory. 2. Move the gitosis.conf file to it's destination. 3. Update the repository descriptions. 4. Update the projects.list file. 5. Update the repository export markers. 6. Update the Gitosis SSH keys. """ export = os.path.join(git_dir, 'gitosis-export') util.rmtree(export) repository.export(git_dir=git_dir, path=export) os.rename( os.path.join(export, 'gitosis.conf'), os.path.join(export, '..', 'gitosis.conf'), ) # re-read config to get up-to-date settings cfg.read(os.path.join(export, '..', 'gitosis.conf')) build_reposistory_data(cfg) authorized_keys = cfg.ssh_authorized_keys_path ssh.writeAuthorizedKeys( path=authorized_keys, keydir=os.path.join(export, 'keydir'), )
def test_simple(self): tmp = maketemp() path = os.path.join(tmp, 'authorized_keys') f = file(path, 'w') try: f.write('''\ # foo bar ### autogenerated by gitosis, DO NOT EDIT command="/foo/bar/baz/gitosis-serve wsmith",no-port-forwarding,\ no-X11-forwarding,no-agent-forwarding,no-pty %(key_2)s baz ''' % dict(key_2=KEY_2)) finally: f.close() keydir = os.path.join(tmp, 'one') mkdir(keydir) writeFile(os.path.join(keydir, 'jdoe.pub'), KEY_1 + '\n') ssh.writeAuthorizedKeys(path=path, keydir=keydir) got = readFile(path) eq( got, '''\ # foo bar baz ### autogenerated by gitosis, DO NOT EDIT command="gitosis-serve jdoe",no-port-forwarding,\ no-X11-forwarding,no-agent-forwarding,no-pty %(key_1)s ''' % dict(key_1=KEY_1))
def test_simple(self): tmp = maketemp() authorized_keys = path.join(tmp, 'authorized_keys') with open(authorized_keys, 'w') as f: f.write('''\ # foo bar ### autogenerated by gitosis, DO NOT EDIT command="PATH=/opt/local/bin /foo/bar/baz/gitosis-serve wsmith",no-port-forwarding,\ no-X11-forwarding,no-agent-forwarding,no-pty %s baz''' % KEY_2) keydir = path.join(tmp, 'one') mkdir(keydir) # okay so we write the key into a file in keyir with open(path.join(keydir, 'jdoe.pub'), 'w') as f: f.write(KEY_1 + '\n') ssh.writeAuthorizedKeys(authorized_keys, keydir) got = readFile(authorized_keys) eq(got, '''\ # foo bar baz ### autogenerated by gitosis, DO NOT EDIT command="PATH=/opt/local/bin gitosis-serve jdoe",no-port-forwarding,\ no-X11-forwarding,no-agent-forwarding,no-pty %s''' % KEY_1)
def post_update(cfg, git_dir): export = os.path.join(git_dir, 'gitosis-export') try: shutil.rmtree(export) except OSError as e: if e.errno == errno.ENOENT: pass else: raise repository.export(git_dir=git_dir, path=export) os.rename( os.path.join(export, 'gitosis.conf'), os.path.join(export, '..', 'gitosis.conf'), ) # re-read config to get up-to-date settings cfg.read(os.path.join(export, '..', 'gitosis.conf')) gitweb.set_descriptions(config=cfg, ) generated = util.getGeneratedFilesDir(config=cfg) gitweb.generate_project_list( config=cfg, path=os.path.join(generated, 'projects.list'), ) gitdaemon.set_export_ok(config=cfg, ) authorized_keys = util.getSSHAuthorizedKeysPath(config=cfg) ssh.writeAuthorizedKeys( path=authorized_keys, keydir=os.path.join(export, 'keydir'), )
def gitosis_sync(gitosis_conf, gitosis_keydir): from gitosis import ssh from gitosis import gitweb from gitosis import gitdaemon from gitosis import util import ConfigParser cfg = ConfigParser.RawConfigParser () cfg.read(gitosis_conf) util.RepositoryDir(cfg, ( gitdaemon.DaemonProp(), gitweb.GitwebProp(), gitweb.DescriptionProp(), gitweb.OwnerProp() )).travel() generated = util.getGeneratedFilesDir(config=cfg) gitweb.ProjectList( os.path.join(generated, 'projects.list') ).refresh() authorized_keys = util.getSSHAuthorizedKeysPath(config=cfg) ssh.writeAuthorizedKeys( path=authorized_keys, keydir=gitosis_keydir, )
def gitosis_sync(gitosis_conf, gitosis_keydir): from gitosis import ssh from gitosis import gitweb from gitosis import gitdaemon from gitosis import util import ConfigParser cfg = ConfigParser.RawConfigParser() cfg.read(gitosis_conf) util.RepositoryDir( cfg, (gitdaemon.DaemonProp(), gitweb.GitwebProp(), gitweb.DescriptionProp(), gitweb.OwnerProp())).travel() generated = util.getGeneratedFilesDir(config=cfg) gitweb.ProjectList(os.path.join(generated, 'projects.list')).refresh() authorized_keys = util.getSSHAuthorizedKeysPath(config=cfg) ssh.writeAuthorizedKeys( path=authorized_keys, keydir=gitosis_keydir, )
def test_simple(self): tmp = maketemp() path = os.path.join(tmp, "authorized_keys") f = file(path, "w") try: f.write( """\ # foo bar ### autogenerated by gitosis, DO NOT EDIT command="/foo/bar/baz/gitosis-serve wsmith",no-port-forwarding,\ no-X11-forwarding,no-agent-forwarding,no-pty %(key_2)s baz """ % dict(key_2=KEY_2) ) finally: f.close() keydir = os.path.join(tmp, "one") mkdir(keydir) writeFile(os.path.join(keydir, "jdoe.pub"), KEY_1 + "\n") ssh.writeAuthorizedKeys(path=path, keydir=keydir) got = readFile(path) eq( got, """\ # foo bar baz ### autogenerated by gitosis, DO NOT EDIT command="gitosis-serve jdoe",no-port-forwarding,\ no-X11-forwarding,no-agent-forwarding,no-pty %(key_1)s """ % dict(key_1=KEY_1), )
def test_simple(self): tmp = maketemp() path = os.path.join(tmp, 'authorized_keys') f = file(path, 'w') try: f.write('''\ # foo bar ### autogenerated by gitosis, DO NOT EDIT command="/foo/bar/baz/gitosis-serve wsmith",no-port-forwarding,\ no-X11-forwarding,no-agent-forwarding,no-pty %(key_2)s baz ''' % dict(key_2=KEY_2)) finally: f.close() keydir = os.path.join(tmp, 'one') mkdir(keydir) writeFile(os.path.join(keydir, 'jdoe.pub'), KEY_1+'\n') ssh.writeAuthorizedKeys( path=path, keydir=keydir) got = readFile(path) eq(got, '''# foo\nbar\nbaz\n### autogenerated by gitosis, DO NOT EDIT\ncommand="gitosis-serve jdoe",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty %(key_1)s\n''' % dict(key_1=KEY_1))
generated = util.getGeneratedFilesDir(config=cfg) gitweb.generate_project_list( config=cfg, path=os.path.join(generated, 'projects.list'), ) gitdaemon.set_export_ok( config=cfg, ) if htaccess.gen_htaccess_if_enabled(config=cfg): group.generate_group_list( config=cfg, path=os.path.join(generated, 'groups'), ) authorized_keys = util.getSSHAuthorizedKeysPath(config=cfg) ssh.writeAuthorizedKeys( path=authorized_keys, keydir=os.path.join(export, 'keydir'), ) def update_mirrors(cfg, git_dir): mirror.push_mirrors(cfg, git_dir) class Main(app.App): def create_parser(self): parser = super(Main, self).create_parser() parser.set_usage('%prog [OPTS] HOOK') parser.set_description( 'Perform gitosis actions for a git hook') return parser def handle_args(self, parser, cfg, options, args):
# re-read config to get up-to-date settings cfg.read(os.path.join(export, '..', 'gitosis.conf')) gitweb.set_descriptions( config=cfg, ) generated = util.getGeneratedFilesDir(config=cfg) gitweb.generate_project_list( config=cfg, path=os.path.join(generated, 'projects.list'), ) gitdaemon.set_export_ok( config=cfg, ) authorized_keys = util.getSSHAuthorizedKeysPath(config=cfg) ssh.writeAuthorizedKeys( path=authorized_keys, keydir=os.path.join(export, 'keydir'), ) class Main(app.App): def create_parser(self): parser = super(Main, self).create_parser() parser.set_usage('%prog [OPTS] HOOK') parser.set_description( 'Perform gitosis actions for a git hook') return parser def handle_args(self, parser, cfg, options, args): try: (hook,) = args except ValueError: parser.error('Missing argument HOOK.')
os.rename( os.path.join(export, 'gitosis.conf'), os.path.join(export, '..', 'gitosis.conf'), ) cfg.read(os.path.join(export, '..', 'gitosis.conf')) gitweb.set_descriptions( config=cfg, ) generated = util.getGeneratedFilesDir(config=cfg) gitweb.write_project_list(cfg, os.path.join(generated, 'projects.list')) gitdaemon.set_export_ok(cfg) authorized_keys = util.getSSHAuthorizedKeysPath(config=cfg) ssh.writeAuthorizedKeys(authorized_keys, os.path.join(export, 'keydir')) class Main(app.App): def create_parser(self): parser = super(Main, self).create_parser() parser.set_usage('%prog [OPTS] HOOK') parser.set_description( 'Perform gitosis actions for a git hook') return parser def handle_args(self, parser, cfg, options, args): try: (hook,) = args except ValueError: parser.error('Missing argument HOOK.')
cfg.read(os.path.join(export, '..', 'gitosis.conf')) gitweb.set_descriptions( config=cfg, ) generated = util.getGeneratedFilesDir(config=cfg) gitweb.generate_project_list( config=cfg, path=os.path.join(generated, 'projects.list'), ) gitdaemon.set_export_ok( config=cfg, ) authorized_keys = util.getSSHAuthorizedKeysPath(config=cfg) ssh.writeAuthorizedKeys( cfg=cfg, path=authorized_keys, keydir=os.path.join(export, 'keydir'), sshadmin=os.path.join(export, 'sshadmin.pub') ) class Main(app.App): def create_parser(self): parser = super(Main, self).create_parser() parser.set_usage('%prog [OPTS] HOOK') parser.set_description( 'Perform gitosis actions for a git hook') return parser def handle_args(self, parser, cfg, options, args): try: (hook,) = args except ValueError:
def regenerate_keys(cfg): authorized_keys = util.getSSHAuthorizedKeysPath(config=cfg) ssh.writeAuthorizedKeys( path=authorized_keys, keydir=cfg.get('gitosis', 'keydir'), )