19 lines
562 B
Python
19 lines
562 B
Python
import hmac
|
|
import hashlib
|
|
from typing import Any, Dict
|
|
|
|
|
|
def verify_signature(secret: str, payload: bytes, signature: str) -> bool:
|
|
if not secret:
|
|
return False
|
|
computed = hmac.new(secret.encode("utf-8"), payload, hashlib.sha256).hexdigest()
|
|
return hmac.compare_digest(computed, signature)
|
|
|
|
|
|
def parse_webhook(payload: Dict[str, Any]) -> Dict[str, Any]:
|
|
return {
|
|
"event": payload.get("action") or payload.get("event"),
|
|
"repository": payload.get("repository", {}).get("full_name"),
|
|
"ref": payload.get("ref"),
|
|
}
|