通过推送将数据传递给 gitolite-VREF

Pass data to gitolite-VREF via push

对于我现有的 gitolite3 安装,我想添加匿名访问,仅限于一定数量的存储库。所有这些存储库都应该允许读取,而写入操作应该受到保护。

为此,我考虑将令牌推送到 gitolite-repositories。 VREF 收到令牌并检查它是否有效。如果是,则允许对存储库进行写操作。 gitolite-conf 应如下所示:

repo @anonrepos
    RW = @all

    option deny-rules = 1
    - VREF/MYTOKENREF = @all

(如果配置有错误,那是我从他们所在的电脑上复制错了)
对于我想到的 vref:

#!/usr/bin/python3

token = input()
if is_valid(token): # TODO: define is_valid
    exit(0) # Allow the push
else:
    exit(1) # Deny it

理论就这么多。当我尝试推送时,出现错误,因为 pythons input() 引发了 EOFError。所以我不能通过标准输入而不是通过 sys.argv 将信息传递给 vref。

还是我错了?有什么方法可以将令牌传递给我的 vref,也许是通过一些 git-command-line-trickery?或者如果我确定背后的人是 legitimate,我是否可以通过其他方式允许匿名推送(实际上每个人都可以推送,所以我需要保护这些存储库)?我正在考虑将即将推送的提交的提交 ID 列入白名单,但这不是一种灵活的方法。

注意:别人push的流程应该是这样的:有人给我发消息说要push到仓库,我创建一个token发给他最后他使用提供的令牌成功推送到存储库。

另一种方法是定义一组您不填充的用户。

repo test-ldap-devel
    RW+    =    @devel

要确定用户是否在该开发组中(并授权推送),您编写一个程序,给定用户名,查询用户引用和 returns space 分隔用户所属的组列表。
然后将此程序的完整路径放入名为 GROUPLIST_PGMrc 变量中,如下所示:

GROUPLIST_PGM           =>  '/home/git/bin/ldap-query-groups',

这通常是在考虑 LDAP 引用的情况下完成的(如 in this example),但您可以使用任何其他引用。

这可以取代似乎难以传递的令牌概念。

你应该读一读精品手册。 Gitolite VREF 是 update 钩子的扩展,因此在命令行而不是通过标准输入获取它们的输入。

http://gitolite.com/gitolite/vref/#what-arguments-are-passed-to-the-vref-maker

https://git-scm.com/docs/githooks