Advanced User Guide¶
Secret key customization¶
You don’t have to configure anything, except base setting, but if you want to store webhook secret key in the DB, or you have several webhooks, then you may need your own secret key retrieve implementation.
By default, secret key is obtained from DJANGO_GITHUB_WEBHOOKS settings, or rather, it happens in a view method, called get_secret.
class GitHubWebhookView(View):
def get_secret(self) -> str:
"""
Returns webhook's secret key.
"""
secret = settings.DJANGO_GITHUB_WEBHOOKS.get("SECRET")
if secret is None:
raise ImproperlyConfigured("SECRET key for DJANGO_GITHUB_WEBHOOKS is not specified!")
else:
return secret
For example, we want to handle multiple webhooks and retrieve secret key from DB by webhook id.
First of all, we need a model:
from django.db import models
class Webhook(models.Model):
id = models.PositiveIntegerField(primary_key=True)
secret = models.CharField(max_length=40)
Then, we need to override github_webhooks.views.GitHubWebhookView:
from github_webhooks.views import GitHubWebhookView
from .models import Webhook
class CustomWebhookView(GitHubWebhookView):
def get_secret(self) -> str:
return Webhook.objects.get(id=self.kwargs["id"]).secret
And also we need to override URLS:
from django.urls import path
from .views import CustomWebhookView
urlpatterns = [
path("github/webhook/<int:id>/receive/", CustomWebhookView, name="github-webhook-receive"),
]
That’s it!