github.py 文件源码

python
阅读 47 收藏 0 点赞 0 评论 0

项目:jerrybuild 作者: fboender 项目源码 文件源码
def normalize(request, jobdef):
    if request.headers['X-Github-Event'] == 'ping':
        response.status = 200
        response.body = "pong"
        return False

    env = {}
    raw_body = request.body.read()
    body = json.load(request.body)
    secret = bytes(jobdef.custom_params['secret'])

    if request.headers['X-Github-Event'] != 'push':
        raise NotImplementedError("Only push and ping events are currently supported")

    # Verify hash signature
    hashtype, signature = request.headers['X-Hub-Signature'].split('=', 1)
    if hashtype != 'sha1':
        raise ValueError("Invalid hashtype received")

    res = hmac.new(secret, msg=raw_body, digestmod=hashlib.sha1)
    # Python <2.7 doesn't have a secure compare for hmac, so we just compare
    # manually. This leaves this code vulnerable to timing attacks,
    # unfortunately.
    if str(res.hexdigest()) != str(signature):
        raise ValueError("Invalid secret")

    env['provider'] = 'github'
    env["event"] = request.headers['X-Github-Event']
    env['repo_type'] = 'git'
    env['repo_url'] = body['repository']['clone_url']
    env['repo_url_ssh'] = body['repository']['ssh_url']
    env['repo_url_http'] = body['repository']['clone_url']
    env['ref'] = body['ref']
    env['commit'] = body['after']

    mail_to = []
    mail_to.append(body['repository']['owner']['email'])
    mail_to.append(body['pusher']['email'])
    env['mail_to'] = ', '.join(mail_to)

    return env
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号