From 503efe2d9d68d61116b13c448d0e333657cdc033 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 30 May 2018 13:59:00 -0400 Subject: [PATCH] Miscellaneous cleanup of the Webhook model --- netbox/extras/migrations/0012_webhooks.py | 16 ++++++------- netbox/extras/models.py | 28 ++++++++++++----------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/netbox/extras/migrations/0012_webhooks.py b/netbox/extras/migrations/0012_webhooks.py index 8ccee6ce8..568c13c65 100644 --- a/netbox/extras/migrations/0012_webhooks.py +++ b/netbox/extras/migrations/0012_webhooks.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.10 on 2018-05-23 16:35 +# Generated by Django 1.11.12 on 2018-05-30 17:55 from __future__ import unicode_literals from django.db import migrations, models @@ -18,15 +18,15 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=150, unique=True)), - ('type_create', models.BooleanField(default=False, help_text='A POST will be sent to the URL when the object type(s) is created.')), - ('type_update', models.BooleanField(default=False, help_text='A POST will be sent to the URL when the object type(s) is updated.')), - ('type_delete', models.BooleanField(default=False, help_text='A POST will be sent to the URL when the object type(s) is deleted.')), - ('payload_url', models.CharField(max_length=500, verbose_name='A POST will be sent to this URL based on the webhook criteria.')), + ('type_create', models.BooleanField(default=False, help_text='Call this webhook when a matching object is created.')), + ('type_update', models.BooleanField(default=False, help_text='Call this webhook when a matching object is updated.')), + ('type_delete', models.BooleanField(default=False, help_text='Call this webhook when a matching object is deleted.')), + ('payload_url', models.CharField(help_text='A POST will be sent to this URL when the webhook is called.', max_length=500, verbose_name='URL')), ('http_content_type', models.PositiveSmallIntegerField(choices=[(1, 'application/json'), (2, 'application/x-www-form-urlencoded')], default=1)), - ('secret', models.CharField(blank=True, help_text="When provided the request will include a 'X-Hook-Signature' header which is a HMAC hex digest of the payload body using the secret as the key. The secret is not transmitted in the request.", max_length=255)), + ('secret', models.CharField(blank=True, help_text="When provided, the request will include a 'X-Hook-Signature' header containing a HMAC hex digest of the payload body using the secret as the key. The secret is not transmitted in the request.", max_length=255)), ('enabled', models.BooleanField(default=True)), - ('ssl_verification', models.BooleanField(default=True, help_text='By default, use of proper SSL is verified. Disable with caution!')), - ('obj_type', models.ManyToManyField(help_text='The object(s) to which this Webhook applies.', related_name='webhooks', to='contenttypes.ContentType', verbose_name='Object(s)')), + ('ssl_verification', models.BooleanField(default=True, help_text='Enable SSL certificate verification. Disable with caution!')), + ('obj_type', models.ManyToManyField(help_text='The object(s) to which this Webhook applies.', related_name='webhooks', to='contenttypes.ContentType', verbose_name='Object types')), ], ), migrations.AlterUniqueTogether( diff --git a/netbox/extras/models.py b/netbox/extras/models.py index 1a1e13ec5..865ff9fbb 100644 --- a/netbox/extras/models.py +++ b/netbox/extras/models.py @@ -25,16 +25,18 @@ from .constants import * # Webhooks # +@python_2_unicode_compatible class Webhook(models.Model): """ - Webhook model that represents all the details for an endoint and how to make a request to - that endpoint with the configured payload. + A Webhook defines a request that will be sent to a remote application when an object is created, updated, and/or + delete in NetBox. The request will contain a representation of the object, which the remote application can act on. + Each Webhook can be limited to firing only on certain actions or certain object types. """ obj_type = models.ManyToManyField( - ContentType, + to=ContentType, related_name='webhooks', - verbose_name='Object(s)', + verbose_name='Object types', limit_choices_to={'model__in': WEBHOOK_MODELS}, help_text="The object(s) to which this Webhook applies." ) @@ -44,19 +46,20 @@ class Webhook(models.Model): ) type_create = models.BooleanField( default=False, - help_text="A POST will be sent to the URL when the object type(s) is created." + help_text="Call this webhook when a matching object is created." ) type_update = models.BooleanField( default=False, - help_text="A POST will be sent to the URL when the object type(s) is updated." + help_text="Call this webhook when a matching object is updated." ) type_delete = models.BooleanField( default=False, - help_text="A POST will be sent to the URL when the object type(s) is deleted." + help_text="Call this webhook when a matching object is deleted." ) payload_url = models.CharField( max_length=500, - verbose_name="A POST will be sent to this URL based on the webhook criteria." + verbose_name='URL', + help_text="A POST will be sent to this URL when the webhook is called." ) http_content_type = models.PositiveSmallIntegerField( choices=WEBHOOK_CT_CHOICES, @@ -65,8 +68,8 @@ class Webhook(models.Model): secret = models.CharField( max_length=255, blank=True, - help_text="When provided the request will include a 'X-Hook-Signature' " - "header which is a HMAC hex digest of the payload body using " + help_text="When provided, the request will include a 'X-Hook-Signature' " + "header containing a HMAC hex digest of the payload body using " "the secret as the key. The secret is not transmitted in " "the request." ) @@ -75,7 +78,7 @@ class Webhook(models.Model): ) ssl_verification = models.BooleanField( default=True, - help_text="By default, use of proper SSL is verified. Disable with caution!" + help_text="Enable SSL certificate verification. Disable with caution!" ) class Meta: @@ -88,10 +91,9 @@ class Webhook(models.Model): """ Validate model """ - if not self.type_create and not self.type_delete and not self.type_update: raise ValidationError( - "You must select at least one type. Either create, update, or delete." + "You must select at least one type: create, update, and/or delete." )