1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

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

This commit is contained in:
Jeremy Stretch
2016-08-18 16:43:41 -04:00
parent 6dbf2043b9
commit ab90a06c54
5 changed files with 16 additions and 11 deletions

View File

@ -25,17 +25,20 @@ $(document).ready(function() {
}); });
// Adding/editing a secret // 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'); var private_key = sessionStorage.getItem('private_key');
if (private_key) { if (private_key) {
$('#id_private_key').val(private_key); private_key_field.val(private_key);
} else { } else if ($('form .requires-private-key:first').val()) {
console.log("we need a key!");
$('#privkey_modal').modal('show'); $('#privkey_modal').modal('show');
return false; return false;
} }
}); });
// Prompt the user to enter a private RSA key for decryption // Saving a private RSA key locally
$('#submit_privkey').click(function() { $('#submit_privkey').click(function() {
var private_key = $('#user_privkey').val(); var private_key = $('#user_privkey').val();
sessionStorage.setItem('private_key', private_key); sessionStorage.setItem('private_key', private_key);

View File

@ -47,8 +47,9 @@ class SecretRoleForm(forms.ModelForm, BootstrapMixin):
# #
class SecretForm(forms.ModelForm, BootstrapMixin): class SecretForm(forms.ModelForm, BootstrapMixin):
private_key = forms.CharField(widget=forms.HiddenInput()) private_key = forms.CharField(required=False, widget=forms.HiddenInput())
plaintext = forms.CharField(max_length=65535, required=False, label='Plaintext') 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)') plaintext2 = forms.CharField(max_length=65535, required=False, label='Plaintext (verify)')
class Meta: class Meta:
@ -56,6 +57,7 @@ class SecretForm(forms.ModelForm, BootstrapMixin):
fields = ['role', 'name', 'plaintext', 'plaintext2'] fields = ['role', 'name', 'plaintext', 'plaintext2']
def clean(self): def clean(self):
if self.cleaned_data['plaintext']:
validate_rsa_key(self.cleaned_data['private_key']) validate_rsa_key(self.cleaned_data['private_key'])
def clean_plaintext2(self): def clean_plaintext2(self):
@ -84,7 +86,7 @@ class SecretFromCSVForm(forms.ModelForm):
class SecretImportForm(BulkImportForm, BootstrapMixin): class SecretImportForm(BulkImportForm, BootstrapMixin):
private_key = forms.CharField(widget=forms.HiddenInput()) 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): class SecretBulkEditForm(forms.Form, BootstrapMixin):

View File

@ -5,7 +5,7 @@
{% block title %}{% if secret.pk %}Editing {{ secret }}{% else %}Add a Secret{% endif %}{% endblock %} {% block title %}{% if secret.pk %}Editing {{ secret }}{% else %}Add a Secret{% endif %}{% endblock %}
{% block content %} {% block content %}
<form action="." method="post" class="form form-horizontal requires-private-key"> <form action="." method="post" class="form form-horizontal">
{% csrf_token %} {% csrf_token %}
{{ form.private_key }} {{ form.private_key }}
<div class="row"> <div class="row">

View File

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

View File

@ -130,11 +130,11 @@ class CSVDataField(forms.CharField):
'"New York, NY",new-york-ny,Other stuff' => ['New York, NY', 'new-york-ny', 'Other stuff'] '"New York, NY",new-york-ny,Other stuff' => ['New York, NY', 'new-york-ny', 'Other stuff']
""" """
csv_form = None csv_form = None
widget = forms.Textarea
def __init__(self, csv_form, *args, **kwargs): def __init__(self, csv_form, *args, **kwargs):
self.csv_form = csv_form self.csv_form = csv_form
self.columns = self.csv_form().fields.keys() self.columns = self.csv_form().fields.keys()
self.widget = forms.Textarea
super(CSVDataField, self).__init__(*args, **kwargs) super(CSVDataField, self).__init__(*args, **kwargs)
self.strip = False self.strip = False
if not self.label: if not self.label: