【问题标题】:Getting authenticated user in mercurial hook在 mercurial 钩子中获取经过身份验证的用户
【发布时间】:2013-07-16 14:12:58
【问题描述】:

我有一个 Apache httpd+mod_wsgi+Mercurial 设置,我想在一个钩子中获得经过身份验证的用户,特别是 pretxnchangegroup 钩子。我读过(很可能是错误的)os.environ['REMOTE_USER'] 应该包含该信息,但看起来不像。

我目前有一个扩展程序,将os.environ 打印到stderr

import sys
import os

def pretxnchangegroup_hook(ui, repo, **kwargs):
    print >> sys.stderr, 'pretxnchangegroup activated'
    print >> sys.stderr, os.environ

def reposetup(ui, repo):
    ui.setconfig('hooks', 'incoming.accesscontrol', pretxnchangegroup_hook)

使用hg -v push此代码输出:

remote: calling hook incoming.accesscontrol: <function pretxnchangegroup_hook at 0x7f8310221230>
remote: pretxnchangegroup activated
remote: {'LANG': 'C', 'TERM': 'xterm', 'SHLVL': '2', 'PWD': '/', 'PATH': '/sbin:/usr/sbin:/bin:/usr/bin', '_': '/usr/sbin/httpd'}

【问题讨论】:

  • 我认为os.environ['REMOTE_USER'] 应该这样做。这可能是一个愚蠢的问题,但您的身份验证是否有效 - 即您是否需要输入用户名和密码才能访问 Mercurial 服务器?
  • 一个WSGI应用下,不在os.environ中。它在环境字典中,作为每个请求的参数传递给 WSGI 应用程序。你如何在 Mercurial 代码中访问它我有节点的想法。
  • @SteveKaye:是的,身份验证正在工作。
  • @GrahamDumpleton:好吧,至少我现在知道 os.environ 不是查找该信息的好地方

标签: python apache mercurial hook mercurial-hook


【解决方案1】:

好的,我希望这会对除我之外的任何人有所帮助,因为我无法在其他任何地方找到提到的这个。

经过身份验证的用户 (REMOTE_USER) 和许多其他信息可以通过 repo.ui.environ 映射获得,其中 repo 是传递给挂钩的参数。

我想这张地图和 mod_cgi 下os.environ 中的地图是一样的。

【讨论】:

  • 嘿!您能否详细说明如何实现这一目标?我遇到了同样的问题,但我无法弄清楚repo 参数必须如何传递给钩子。我尝试在我的钩子中打印sys.argv,但它只有一个条目,其中 ofc 是脚本名称和路径。非常感谢!
  • 你不应该把任何东西传递给钩子,这是 Mercurial 的责任。你只需在reposetup注册它,你的钩子方法的第二个参数就是你的repo对象。
  • 我明白了,谢谢。我不理解(或不知道)mercurials externalin-process 钩子的区别。在hg.rc 和这里的钩子中有一个很好的语法示例:hgbook.red-bean.com/read/…
猜你喜欢
  • 2011-05-07
  • 2018-11-26
  • 1970-01-01
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-07
  • 2021-01-10
  • 1970-01-01
相关资源
最近更新 更多