def view_edit_record(request, dns_server, zone_name, record_name=None, record_type=None, record_data=None, record_ttl=None): """View to edit an RR record to DNS zone.""" this_server = get_object_or_404(models.BindServer, hostname=dns_server) if request.method == 'POST': if "in-addr.arpa" in zone_name or "ip6.arpa" in zone_name: form = forms.FormAddReverseRecord(request.POST) else: form = forms.FormAddForwardRecord(request.POST) if form.is_valid(): form_cleaned = form.cleaned_data try: helpers.add_record(form_cleaned["dns_server"], str(form_cleaned["zone_name"]), str(form_cleaned["record_name"]), str(form_cleaned["record_type"]), str(form_cleaned["record_data"]), form_cleaned["ttl"], form_cleaned["key_name"], form_cleaned["create_reverse"]) except (exceptions.KeyringException, exceptions.RecordException) as exc: messages.error( request, "Modifying %s.%s failed: %s" % (form_cleaned["record_name"], zone_name, exc)) else: messages.success( request, "%s.%s was modified successfully." % (form_cleaned["record_name"], zone_name)) return redirect('zone_list', dns_server=dns_server, zone_name=zone_name) else: messages.error(request, "Form data was invalid. Check all inputs.") else: key_id = models.BindServer.objects.get( hostname=dns_server).default_transfer_key.id form = forms.FormAddForwardRecord( initial={ 'zone_name': zone_name, 'record_name': record_name, 'record_data': record_data, 'ttl': record_ttl, 'record_type': record_type, 'key_name': key_id }) return render(request, "bcommon/add_record_form.html", { "dns_server": this_server, "form": form })
def test_InvalidValue_FormAddRecord(self): """Pass FormAddRecord invalid values, compare error response dicts.""" form_data = { "dns_server": "server1", "record_name": "record1$$$", "record_type": 123, "zone_name": "domain.local", "record_data": "A.B.C.D", "ttl": "A", "key_name": None, "create_reverse": True } expected_form_errors = { "record_data": [u"Enter a valid IPv4 or IPv6 address."], "record_name": [u"Enter a valid value."], "record_type": [ u"Select a valid choice. 123 is not one of the available choices." ], "ttl": [u'Select a valid choice. A is not one of the available choices.'] } testform_2 = forms.FormAddForwardRecord(form_data) testform_2.is_valid() self.assertFalse(testform_2.is_valid()) self.assertEquals(expected_form_errors, testform_2.errors)
def test_Valid_FormAddRecord(self): """Test FormAddRecord with valid data, with/without create_reverse.""" form_data = { "dns_server": "server1", "record_name": "record1", "record_type": "A", "zone_name": "domain.local", "record_data": "10.254.254.254", "ttl": 3600, "key_name": None, "create_reverse": False } testform_1 = forms.FormAddForwardRecord(form_data) self.assertTrue(testform_1.is_valid()) form_data = { "dns_server": "server1", "record_name": "record1", "record_type": "A", "zone_name": "domain.local", "record_data": "10.254.254.254", "ttl": 3600, "key_name": None, "create_reverse": True } testform_2 = forms.FormAddForwardRecord(form_data) self.assertTrue(testform_2.is_valid()) form_data = { "dns_server": "server1", "record_name": 41, "record_type": "PTR", "zone_name": "1.254.10.in-addr.arpa", "record_data": "reverse41.domain1.local", "ttl": 3600, "key_name": None } reverseform_1 = forms.FormAddReverseRecord(form_data) reverseform_1.is_valid() self.assertTrue(reverseform_1.is_valid())
def view_add_record(request, dns_server, zone_name): """View to allow to add A records.""" if not request.user.is_staff and not request.user.is_superuser: return render(request, "403.html", status=403) this_server = get_object_or_404(models.BindServer, hostname=dns_server) if request.method == 'POST': if "in-addr.arpa" in zone_name or "ip6.arpa" in zone_name: form = forms.FormAddReverseRecord(request.POST) else: form = forms.FormAddForwardRecord(request.POST) if form.is_valid(): form_cleaned = form.cleaned_data try: helpers.add_record(form_cleaned["dns_server"], str(form_cleaned["zone_name"]), str(form_cleaned["record_name"]), str(form_cleaned["record_type"]), str(form_cleaned["record_data"]), form_cleaned["ttl"], form_cleaned["key_name"], form_cleaned["create_reverse"]) except (KeyringException, RecordException) as exc: messages.error( request, "Adding %s.%s failed: %s" % (form_cleaned["record_name"], zone_name, exc)) else: messages.success( request, "%s.%s was added successfully." % (form_cleaned["record_name"], zone_name)) return redirect('zone_list', dns_server=dns_server, zone_name=zone_name) else: form = forms.FormAddForwardRecord(initial={'zone_name': zone_name}) return render(request, "bcommon/add_record_form.html", { "dns_server": this_server, "form": form })
def test_Valid_FormAddRecordWithReverseRecord(self): """Test FormAddRecord with valid data, with create_reverse.""" form_data = {"dns_server": "server1", "record_name": "record1", "record_type": "A", "zone_name": "domain.local", "record_data": "10.254.254.254", "ttl": 3600, "key_name": '1', "create_reverse": True} testform_2 = forms.FormAddForwardRecord(form_data) self.assertTrue(testform_2.is_valid())
def test_Valid_FormAddRecordWithoutTSIGKey(self): """Test FormAddRecord with invalid data, missing a TSIG key selection.""" form_data = {"dns_server": self.ns1, "record_name": "record1", "record_type": "A", "zone_name": "domain.local", "record_data": "10.254.254.254", "ttl": 3600, "key_name": '', "create_reverse": False} expected_form_errors = {"key_name": [u"This field is required."]} testform_1 = forms.FormAddForwardRecord(form_data) testform_1.is_valid() self.assertTrue(testform_1.errors) self.assertEquals(testform_1.errors, expected_form_errors)
def test_MissingData_FormAddRecord(self): """Submit FormAddRecord with missing record_data.""" form_data = { "dns_server": "server1", "record_name": "record1", "record_type": "A", "zone_name": "domain.local", "record_data": "", "ttl": 300, "key_name": None, "create_reverse": True } expected_form_errors = {"record_data": [u"This field is required."]} testform = forms.FormAddForwardRecord(form_data) testform.is_valid() self.assertFalse(testform.is_valid()) self.assertEquals(expected_form_errors, testform.errors)