2
0
Эх сурвалжийг харах

Add http_method field to Webhook

Jeremy Stretch 6 жил өмнө
parent
commit
211311be9f

+ 12 - 4
netbox/extras/admin.py

@@ -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',
+            )
         })
     )
 

+ 21 - 0
netbox/extras/choices.py

@@ -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'),
+    )

+ 5 - 0
netbox/extras/migrations/0038_webhook_template_support.py

@@ -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',

+ 6 - 0
netbox/extras/models.py

@@ -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,

+ 4 - 2
netbox/extras/webhooks_worker.py

@@ -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: