我目前有一个机器人可以自动执行一些GitHub操作,比如合并拉取请求,在打开PR时通知Slack的员工,那种事情(这是一个自定义风格的Hubot实例)
当工作人员给他合并拉取请求的命令时,他首先检查他们是否属于对该存储库具有写入权限的团队.它有效,但代码不是很好.
首先,他获得组织中的所有团队,循环遍历它们,将所有用户分配给该团队,如果他发现用户发出合并命令,则他会检查该团队是否具有写入权限.如果不是,则认证是好的.
这是最好的方式吗?我觉得它可以简单得多.
我正在使用GitHub webhook将事件传递给我的应用程序(GitHub的Hubot的一个实例),并使用sha1秘密进行保护.
我正在使用以下代码验证传入webhooks上的哈希值
crypto = require('crypto')
signature = "sha1=" + crypto.createHmac('sha1', process.env.HUBOT_GITHUB_SECRET).update( new Buffer request.body ).digest('hex')
unless request.headers['x-hub-signature'] is signature
response.send "Signature not valid"
return
Run Code Online (Sandbox Code Playgroud)
在webhook中传递的X-Hub-Signature标头看起来像这样
X-Hub-Signature:sha1 = 1cffc5d4c77a3f696ecd9c19dbc2575d22ffebd4
我按照GitHub的文档准确传递密钥和数据,但哈希总是不同.
这是GitHub的文档. https://developer.github.com/v3/repos/hooks/#example
这是我最有可能误解的部分
secret:作为X-Hub-Signature标头与HTTP请求一起传递的可选字符串.使用秘密作为密钥,将此标头的值计算为正文的HMAC十六进制摘要.
谁能看到我哪里出错了?