只显示用户通过Gitolite拥有访问权限的gitweb仓库

3
我已经设置了gitolite,并使用基于SSH密钥的身份验证。我可以通过gitolite-admin.git存储库和conf文件控制对repos的访问。所有这些在SSH上都很好运行,但我想使用GitWeb作为快速查看repos的方式。
现在GitWeb工作正常,但通过Web界面显示所有存储库。因此,我的目标是:
  • 通过PAM在apache2中对用户进行身份验证,我已经将Ubuntu服务器对AD进行了身份验证,所有用户都可用。这不应该成为问题。
  • 使用登录的用户名检查gitolite权限
  • 在Web界面中显示相应的REPOS。
任何人有这方面的起点吗?部署Apache不应该很困难,我将对其进行全局认证。我不知道如何传递用户名并对其进行gitolite授权。有什么想法吗?
谢谢,
Nathan
1个回答

1
是的,这是可能的,但您需要完成gitweb配置脚本以调用gitolite。
关键在于gitweb_config.perl文件:如果该文件存在,gitweb将包含并调用它。 请参阅我的gitweb/gitweb_config.perl文件:
our $home_link_str = "ITSVC projects";
our $site_name = "ITSVC Gitweb";
use lib (".");
require "gitweb.conf.pl";

gitweb/gitweb.conf.pl(自定义脚本)中,我定义了由gitweb调用的官方回调函数:export_auth_hook:该函数将调用gitolite。
use Gitolite::Common;
use Gitolite::Conf::Load;
#$ENV{GL_USER} = $cgi->remote_user || "gitweb";

$export_auth_hook = sub {
  my $repo = shift;
  my $user = $ENV{GL_USER};
  # gitweb passes us the full repo path; so we strip the beginning
  # and the end, to get the repo name as it is specified in gitolite conf
  return unless $repo =~ s/^\Q$projectroot\E\/?(.+)\.git$/$1/;

  # check for (at least) "R" permission
  my $ret = &access( $repo, $user, 'R', 'any' );
  my $res = $ret !~ /DENIED/;

  return ($ret !~ /DENIED/);
};

从评论中可以看出:

GL_USER 是由以下代码行设置的:

$ENV{GL_USER} = $cgi->remote_user || "gitweb";

$cgi->remote_user会获取由任何已完成身份验证的Apache Auth模块设置的环境变量REMOTE_USER(就像在Apache配置文件中一样)。
您可以使用"die"语句打印它

"

\"Could not find Gitolite/Rc.pm\"的意思是perl使用的INC变量中不包含$ENV{GL_LIBDIR};(设置为~/gitolite/lib<any_place_where_gitolite_was_installed>/lib)。
这就是为什么有一行在同一个gitweb/gitweb.conf.pl文件中将其添加到INC中的原因:

"
unshift @INC, $ENV{GL_LIBDIR};
use lib $ENV{GL_LIBDIR};
use Gitolite::Rc;

从Nat45928编辑:在我的情况下,我需要将我的主目录插入到所有的'@H@'条目中。这立即解决了我的所有问题。


好的,我想我理解了所有的内容。GitWeb如何知道初始用户名以开始所有这些操作? - nat45928
1
由于 $ENV{GL_USER} = $cgi->remote_user || "gitweb"; 这一行代码:认证应该在调用 gitweb 之前由 Apache 完成:请参见 https://github.com/VonC/compileEverything/blob/c1ec1e4bb4dedea93bc251d8395c9c7627c08440/apache/env.conf.tpl#L99-L134:最后一行调用了 gitweb DirectoryIndex gitweb.cgi - VonC
啊,好的。$cgi->remote_user 是从使用“AuthType form”条目设置的Apache2会话中提取信息的吗?因此,任何类型的Apache Auth模块都可以使用?感谢您的帮助! - nat45928
1
@nat45928 是的,只要那个Auth模块(http://httpd.apache.org/docs/current/howto/auth.html)设置了`$REMOTE_USER`变量。 - VonC
1
@nat45928 是的,$cgi->remote_user 将包含 $REMOTE_USER 的内容。我通常设置一些 die 调试行来检查它的内容,例如 https://github.com/VonC/compileEverything/blob/c1ec1e4bb4dedea93bc251d8395c9c7627c08440/gitweb/gitweb.conf.pl.tpl#L17 - VonC
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接