只显示用户可通过Gitolite访问的gitweb中的repos

时间:2014-08-11 16:36:46

标签: apache ubuntu gitolite gitweb

我有gitolite设置并使用基于SSH密钥的身份验证。我可以通过gitolite-admin.git repo和conf文件控制对repos的访问。所有这些都比SSH更好用,但我想用GitWeb作为查看回购的快捷方式。

GitWeb现在运行良好,但通过Web界面显示所有存储库。所以我的目标是:

  • 通过PAM在apache2中验证用户,我已经让Ubuntu服务器验证了aginst AD并且所有用户都可用。这应该不是问题。
  • 使用使用check gitolite权限登录的用户名
  • 在网络界面中显示适当的REPOS。

有没有人有这个出发点? Apache部分不应该是困难的,我将它设置为对/ gitweb / url进行身份验证。我不知道如何传递该用户名并对gitolite进行授权。有什么想法吗?

谢谢,

1 个答案:

答案 0 :(得分: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 configuration file)。
您可以打印with a 'die' line

“找不到Gitolite / Rc.pm”表示perl使用的INC变量不包含$ ENV {GL_LIBDIR}; (设为~/gitolite/lib<any_place_where_gitolite_was_installed>/lib) 这就是为什么有一个行in the same gitweb/gitweb.conf.pl文件将其添加到INC

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

从Nat45928编辑:在我的情况下,我需要将我的主路径插入所有'@H @'条目。这马上解决了我的所有问题。