From 3188a589345b38f7873f9e3fbc9dbeac243e87bb Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 18 Aug 2016 16:43:41 -0400 Subject: [PATCH] Fixes #486: Prompt for secret key only if updating a secret's value --- netbox/project-static/js/secrets.js | 11 +++++++---- netbox/secrets/forms.py | 10 ++++++---- netbox/templates/secrets/secret_edit.html | 2 +- netbox/templates/secrets/secret_import.html | 2 +- netbox/utilities/forms.py | 2 +- 5 files changed, 16 insertions(+), 11 deletions(-) diff --git a/netbox/project-static/js/secrets.js b/netbox/project-static/js/secrets.js index 7f67cdcda55..fadcc0d39a8 100644 --- a/netbox/project-static/js/secrets.js +++ b/netbox/project-static/js/secrets.js @@ -25,17 +25,20 @@ $(document).ready(function() { }); // Adding/editing a secret - $('form.requires-private-key').submit(function(event) { + private_key_field = $('#id_private_key'); + private_key_field.parents('form').submit(function(event) { + console.log("form submitted"); var private_key = sessionStorage.getItem('private_key'); if (private_key) { - $('#id_private_key').val(private_key); - } else { + private_key_field.val(private_key); + } else if ($('form .requires-private-key:first').val()) { + console.log("we need a key!"); $('#privkey_modal').modal('show'); return false; } }); - // Prompt the user to enter a private RSA key for decryption + // Saving a private RSA key locally $('#submit_privkey').click(function() { var private_key = $('#user_privkey').val(); sessionStorage.setItem('private_key', private_key); diff --git a/netbox/secrets/forms.py b/netbox/secrets/forms.py index 06c963957cf..1e45fe1630d 100644 --- a/netbox/secrets/forms.py +++ b/netbox/secrets/forms.py @@ -47,8 +47,9 @@ class Meta: # class SecretForm(forms.ModelForm, BootstrapMixin): - private_key = forms.CharField(widget=forms.HiddenInput()) - plaintext = forms.CharField(max_length=65535, required=False, label='Plaintext') + private_key = forms.CharField(required=False, widget=forms.HiddenInput()) + plaintext = forms.CharField(max_length=65535, required=False, label='Plaintext', + widget=forms.TextInput(attrs={'class': 'requires-private-key'})) plaintext2 = forms.CharField(max_length=65535, required=False, label='Plaintext (verify)') class Meta: @@ -56,7 +57,8 @@ class Meta: fields = ['role', 'name', 'plaintext', 'plaintext2'] def clean(self): - validate_rsa_key(self.cleaned_data['private_key']) + if self.cleaned_data['plaintext']: + validate_rsa_key(self.cleaned_data['private_key']) def clean_plaintext2(self): plaintext = self.cleaned_data['plaintext'] @@ -84,7 +86,7 @@ def save(self, *args, **kwargs): class SecretImportForm(BulkImportForm, BootstrapMixin): private_key = forms.CharField(widget=forms.HiddenInput()) - csv = CSVDataField(csv_form=SecretFromCSVForm) + csv = CSVDataField(csv_form=SecretFromCSVForm, widget=forms.Textarea(attrs={'class': 'requires-private-key'})) class SecretBulkEditForm(forms.Form, BootstrapMixin): diff --git a/netbox/templates/secrets/secret_edit.html b/netbox/templates/secrets/secret_edit.html index 9a3df1a4550..c2426391f15 100644 --- a/netbox/templates/secrets/secret_edit.html +++ b/netbox/templates/secrets/secret_edit.html @@ -5,7 +5,7 @@ {% block title %}{% if secret.pk %}Editing {{ secret }}{% else %}Add a Secret{% endif %}{% endblock %} {% block content %} -
+ {% csrf_token %} {{ form.private_key }}
diff --git a/netbox/templates/secrets/secret_import.html b/netbox/templates/secrets/secret_import.html index 56e4194e493..9c7f6764049 100644 --- a/netbox/templates/secrets/secret_import.html +++ b/netbox/templates/secrets/secret_import.html @@ -17,7 +17,7 @@

Secret Import

{% endif %} - + {% csrf_token %} {% render_form form %}
diff --git a/netbox/utilities/forms.py b/netbox/utilities/forms.py index f1c942fe65b..4cbc1028bcd 100644 --- a/netbox/utilities/forms.py +++ b/netbox/utilities/forms.py @@ -130,11 +130,11 @@ class CSVDataField(forms.CharField): '"New York, NY",new-york-ny,Other stuff' => ['New York, NY', 'new-york-ny', 'Other stuff'] """ csv_form = None + widget = forms.Textarea def __init__(self, csv_form, *args, **kwargs): self.csv_form = csv_form self.columns = self.csv_form().fields.keys() - self.widget = forms.Textarea super(CSVDataField, self).__init__(*args, **kwargs) self.strip = False if not self.label: