From bd1ee4fc013f169f1c052dc763c3e9ed602502c9 Mon Sep 17 00:00:00 2001 From: Tommi Virtanen Date: Wed, 30 May 2007 13:57:31 +0300 Subject: Initial import. --- gitosis/access.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 gitosis/access.py (limited to 'gitosis/access.py') diff --git a/gitosis/access.py b/gitosis/access.py new file mode 100644 index 0000000..14280ad --- /dev/null +++ b/gitosis/access.py @@ -0,0 +1,32 @@ +from ConfigParser import NoSectionError, NoOptionError + +from gitosis import group + +def haveAccess(config, user, mode, path): + """ + Map request for write access to allowed path. + + Note for read-only access, the caller should check for write + access too. + + Returns ``None`` for no access, or the physical repository path + for access granted to that repository. + """ + for groupname in group.getMembership(config=config, user=user): + try: + repos = config.get('group %s' % groupname, mode) + except (NoSectionError, NoOptionError): + repos = [] + else: + repos = repos.split() + + if path in repos: + return path + + try: + mapping = config.get('group %s' % groupname, + 'map %s %s' % (mode, path)) + except (NoSectionError, NoOptionError): + pass + else: + return mapping -- cgit v1.2.3