Add http_method field to Webhook

This commit is contained in:
Jeremy Stretch 2020-02-24 20:42:24 -05:00
parent 9a532b1eb2
commit 211311be9f
5 changed files with 48 additions and 6 deletions

View File

@ -47,16 +47,24 @@ class WebhookAdmin(admin.ModelAdmin):
form = WebhookForm
fieldsets = (
(None, {
'fields': ('name', 'obj_type', 'enabled')
'fields': (
'name', 'obj_type', 'enabled',
)
}),
('Events', {
'fields': ('type_create', 'type_update', 'type_delete')
'fields': (
'type_create', 'type_update', 'type_delete',
)
}),
('HTTP Request', {
'fields': ('payload_url', 'http_content_type', 'additional_headers', 'body_template', 'secret')
'fields': (
'http_method', 'payload_url', 'http_content_type', 'additional_headers', 'body_template', 'secret',
)
}),
('SSL', {
'fields': ('ssl_verification', 'ca_file_path')
'fields': (
'ssl_verification', 'ca_file_path',
)
})
)

View File

@ -118,3 +118,24 @@ class TemplateLanguageChoices(ChoiceSet):
LANGUAGE_DJANGO: 10,
LANGUAGE_JINJA2: 20,
}
#
# Webhooks
#
class WebhookHttpMethodChoices(ChoiceSet):
METHOD_GET = 'GET'
METHOD_POST = 'POST'
METHOD_PUT = 'PUT'
METHOD_PATCH = 'PATCH'
METHOD_DELETE = 'DELETE'
CHOICES = (
(METHOD_GET, 'GET'),
(METHOD_POST, 'POST'),
(METHOD_PUT, 'PUT'),
(METHOD_PATCH, 'PATCH'),
(METHOD_DELETE, 'DELETE'),
)

View File

@ -21,6 +21,11 @@ class Migration(migrations.Migration):
]
operations = [
migrations.AddField(
model_name='webhook',
name='http_method',
field=models.CharField(default='POST', max_length=30),
),
migrations.AddField(
model_name='webhook',
name='body_template',

View File

@ -85,6 +85,12 @@ class Webhook(models.Model):
enabled = models.BooleanField(
default=True
)
http_method = models.CharField(
max_length=30,
choices=WebhookHttpMethodChoices,
default=WebhookHttpMethodChoices.METHOD_POST,
verbose_name='HTTP method'
)
http_content_type = models.CharField(
max_length=100,
default=HTTP_CONTENT_TYPE_JSON,

View File

@ -43,13 +43,15 @@ def process_webhook(webhook, data, model_name, event, timestamp, username, reque
# Prepare the HTTP request
params = {
'method': 'POST',
'method': webhook.http_method,
'url': webhook.payload_url,
'headers': headers,
'data': body,
}
logger.info(
"Sending webhook to {}: {} {}".format(params['url'], context['model'], context['event'])
"Sending {} request to {} ({} {})".format(
params['method'], params['url'], context['model'], context['event']
)
)
logger.debug(params)
try: