Example #1
0
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'),
        )
Example #2
0
    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))
Example #3
0
    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)
Example #4
0
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'),
    )
Example #5
0
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,
	)
Example #6
0
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,
    )
Example #7
0
    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),
        )
Example #8
0
    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))
Example #9
0
    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):
Example #10
0
    # 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.')
Example #11
0
    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.')
Example #12
0
    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:
Example #13
0
def regenerate_keys(cfg):
    authorized_keys = util.getSSHAuthorizedKeysPath(config=cfg)
    ssh.writeAuthorizedKeys(
        path=authorized_keys,
        keydir=cfg.get('gitosis', 'keydir'),
        )