KazakovDenis
@KazakovDenis
Python developer

Как адаптировать Ruby-скрипт валидации подписи Github webhooks под Python3?

Написал небольшое приложение на Фласке, чтобы вытаскивать с репозитория основное приложение, когда приходит вебхук о том, что в мастер сделан коммит. На Гитхабе есть мануал на Руби, но не получается адаптировать его к Python3.

Попробовал сделать следующим образом:
from flask import Flask, request
from hmac import HMAC, compare_digest
from hashlib import sha1

app = Flask(__name__)

def verify_signature(req):
     received_sign = req.headers.get('X-Hub-Signature').split('sha1=')[-1].strip()
     secret = 'my_secret_string'.encode()
     expected_sign = HMAC(key=secret, msg=req.data, digestmod=sha1).hexdigest()
     return compare_digest(received_sign, expected_sign)

@app.route('/webhook', methods=['POST', 'GET'])
def webhook():
    if request.method == 'POST':
        if verify_signature(request):
            do_smth()
            return 'Successfully', 200
        return 'Forbidden', 403
    return 'Not allowed', 405

Также пробовал через sha1(...).hexdigest() и compare_digest() из модуля secrets, но хэши всегда отличаются.
Что делаю не так?
  • Вопрос задан
  • 38 просмотров
Решения вопроса 1
KazakovDenis
@KazakovDenis Автор вопроса
Python developer
Поправил код в вопросе, теперь работает
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы