From a28509019af5f1a3fc735444a8c7b802e4baf015 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 12 Mar 2020 21:14:14 -0400 Subject: [PATCH] Closes #4363: Standardize secret creation URL --- netbox/dcim/urls.py | 2 -- netbox/secrets/forms.py | 8 +++++++- netbox/secrets/urls.py | 1 + netbox/secrets/views.py | 19 +++++++++---------- netbox/templates/dcim/device.html | 2 +- netbox/templates/inc/nav_menu.html | 1 + netbox/templates/secrets/secret_edit.html | 7 +------ 7 files changed, 20 insertions(+), 20 deletions(-) diff --git a/netbox/dcim/urls.py b/netbox/dcim/urls.py index e16367d04..c59d67917 100644 --- a/netbox/dcim/urls.py +++ b/netbox/dcim/urls.py @@ -2,7 +2,6 @@ from django.urls import path from extras.views import ObjectChangeLogView, ImageAttachmentEditView from ipam.views import ServiceCreateView -from secrets.views import secret_add from . import views from .models import ( Cable, ConsolePort, ConsoleServerPort, Device, DeviceRole, DeviceType, FrontPort, Interface, Manufacturer, Platform, @@ -179,7 +178,6 @@ urlpatterns = [ path('devices//status/', views.DeviceStatusView.as_view(), name='device_status'), path('devices//lldp-neighbors/', views.DeviceLLDPNeighborsView.as_view(), name='device_lldp_neighbors'), path('devices//config/', views.DeviceConfigView.as_view(), name='device_config'), - path('devices//add-secret/', secret_add, name='device_addsecret'), path('devices//services/assign/', ServiceCreateView.as_view(), name='device_service_assign'), path('devices//images/add/', ImageAttachmentEditView.as_view(), name='device_add_image', kwargs={'model': Device}), diff --git a/netbox/secrets/forms.py b/netbox/secrets/forms.py index 88e5325ec..a8db8124b 100644 --- a/netbox/secrets/forms.py +++ b/netbox/secrets/forms.py @@ -71,6 +71,12 @@ class SecretRoleCSVForm(forms.ModelForm): # class SecretForm(BootstrapMixin, CustomFieldModelForm): + device = DynamicModelChoiceField( + queryset=Device.objects.all(), + widget=APISelect( + api_url="/api/dcim/devices/" + ) + ) plaintext = forms.CharField( max_length=SECRET_PLAINTEXT_MAX_LENGTH, required=False, @@ -100,7 +106,7 @@ class SecretForm(BootstrapMixin, CustomFieldModelForm): class Meta: model = Secret fields = [ - 'role', 'name', 'plaintext', 'plaintext2', 'tags', + 'device', 'role', 'name', 'plaintext', 'plaintext2', 'tags', ] def __init__(self, *args, **kwargs): diff --git a/netbox/secrets/urls.py b/netbox/secrets/urls.py index 4ed08da7f..a19ec6ae0 100644 --- a/netbox/secrets/urls.py +++ b/netbox/secrets/urls.py @@ -17,6 +17,7 @@ urlpatterns = [ # Secrets path('secrets/', views.SecretListView.as_view(), name='secret_list'), + path('secrets/add/', views.secret_add, name='secret_add'), path('secrets/import/', views.SecretBulkImportView.as_view(), name='secret_import'), path('secrets/edit/', views.SecretBulkEditView.as_view(), name='secret_bulk_edit'), path('secrets/delete/', views.SecretBulkDeleteView.as_view(), name='secret_bulk_delete'), diff --git a/netbox/secrets/views.py b/netbox/secrets/views.py index d66326c68..ed59f4392 100644 --- a/netbox/secrets/views.py +++ b/netbox/secrets/views.py @@ -8,9 +8,8 @@ from django.shortcuts import get_object_or_404, redirect, render from django.urls import reverse from django.views.generic import View -from dcim.models import Device from utilities.views import ( - BulkDeleteView, BulkEditView, BulkImportView, ObjectDeleteView, ObjectEditView, ObjectListView, + BulkDeleteView, BulkEditView, BulkImportView, GetReturnURLMixin, ObjectDeleteView, ObjectEditView, ObjectListView, ) from . import filters, forms, tables from .decorators import userkey_required @@ -89,12 +88,9 @@ class SecretView(PermissionRequiredMixin, View): @permission_required('secrets.add_secret') @userkey_required() -def secret_add(request, pk): +def secret_add(request): - # Retrieve device - device = get_object_or_404(Device, pk=pk) - - secret = Secret(device=device) + secret = Secret() session_key = get_session_key(request) if request.method == 'POST': @@ -123,17 +119,20 @@ def secret_add(request, pk): messages.success(request, "Added new secret: {}.".format(secret)) if '_addanother' in request.POST: - return redirect('dcim:device_addsecret', pk=device.pk) + return redirect('secrets:secret_add') else: return redirect('secrets:secret', pk=secret.pk) else: - form = forms.SecretForm(instance=secret) + initial_data = { + 'device': request.GET.get('device'), + } + form = forms.SecretForm(initial=initial_data) return render(request, 'secrets/secret_edit.html', { 'secret': secret, 'form': form, - 'return_url': device.get_absolute_url(), + 'return_url': GetReturnURLMixin().get_return_url(request, secret) }) diff --git a/netbox/templates/dcim/device.html b/netbox/templates/dcim/device.html index c657e9fc5..a34c01a70 100644 --- a/netbox/templates/dcim/device.html +++ b/netbox/templates/dcim/device.html @@ -426,7 +426,7 @@ {% csrf_token %}