【问题标题】:Check if current user is owner of GitHub remote in zsh检查当前用户是否是 zsh 中 GitHub 远程的所有者
【发布时间】:2019-11-01 20:16:21
【问题描述】:

我正在尝试编写一个git pre-push 钩子,它在推送到origin 之前执行一些操作如果推送的人是回购的所有者。有没有办法在bash/zsh 中检查这个?

【问题讨论】:

  • 这远远超出了shell语言的范围。
  • @chepner 无赖。替代品呢?最简单的可能是node 脚本?
  • 这不叫认证吗?
  • 问题是回购的所有者没有明确定义。在 GitHub 等网站上,它指的是与存储库关联的用户帐户。在您的本地机器上,并没有真正的所有者,只有 克隆 远程的用户的帐户。您如何确定本地帐户是否与远程帐户相同?

标签: git github push zsh githooks


【解决方案1】:

如果用户使用 HTTPS,您可以这样做。您需要使用 authenticated user endpoint 来查找当前用户的用户 ID,例如使用 curl,然后通过检查 URL 来查看该用户是否与存储库的所有者相同。

要获取适当的凭据,您可以获取远程 URL(例如,https://github.com/git/git.git)并将其通过管道传输到 git credential fill 以查找用户名和密码,如下所示:

echo url=https://github.com/git/git.git | git credential fill

输出格式在git-credential 手册页中定义。这些凭据也应该能够用于 API 来发出您的请求,但请注意,由于 curl 需要在命令行上传递密码,因此您会将这些凭据公开给机器上的任何其他人。非 shell 选项可能是更注重安全性的选择。

从技术上讲,也有一些方法可以通过 SSH 确定这一点,但这些方法依赖于解析可能会更改的固定输出,因此,您应该假设您无法获取 SSH 远程的信息。

请注意,这会告诉您当前用户,您可以对照 URL 检查该用户,但它不会告诉您该用户是否对他们不拥有的 repo 具有管理权限(例如由组织)。由于您没有告诉我们您想用这些信息做什么,我们无法为您提供帮助,但如果您尝试使用 API,您可以这样做,看看它是否成功。

由于在这种情况下您使用的是用户的凭据存储,因此您需要明确告知用户您正在做什么,以便用户不会对您使用凭据感到惊讶。在未经用户知情和同意的情况下以我所描述的方式使用用户的凭据是不道德的,并且可能是非法的。

【讨论】:

  • 感谢您的详细回复,特别是指出有关 org repos 和安全性的缺点!我可能会选择更简单的选择,即在所有者的机器上设置一个未记录的环境变量 IS_OWNER 并检查它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-24
  • 2013-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多