Browse Source

Fixes #486: Prompt for secret key only if updating a secret's value

Jeremy Stretch 8 years ago
parent
commit
ab90a06c54

+ 7 - 4
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);

+ 6 - 4
netbox/secrets/forms.py

@@ -47,8 +47,9 @@ class SecretRoleForm(forms.ModelForm, BootstrapMixin):
 #
 
 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 SecretForm(forms.ModelForm, BootstrapMixin):
         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 @@ class SecretFromCSVForm(forms.ModelForm):
 
 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):

+ 1 - 1
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 %}
-<form action="." method="post" class="form form-horizontal requires-private-key">
+<form action="." method="post" class="form form-horizontal">
     {% csrf_token %}
     {{ form.private_key }}
     <div class="row">

+ 1 - 1
netbox/templates/secrets/secret_import.html

@@ -17,7 +17,7 @@
                 </div>
             </div>
         {% endif %}
-		<form action="." method="post" class="form requires-private-key">
+		<form action="." method="post" class="form">
 		    {% csrf_token %}
 		    {% render_form form %}
 		    <div class="form-group">

+ 1 - 1
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: