From d0c3c3f93bf2cc9b360ad95ab02bc9807b3cb39a Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Tue, 25 Jul 2023 10:26:31 -0400 Subject: [PATCH] Remove UserToken proxy model --- netbox/netbox/navigation/menu.py | 2 +- .../users/{usertoken.html => token.html} | 0 netbox/users/forms/bulk_import.py | 2 +- netbox/users/migrations/0004_usertoken.py | 23 ---------------- netbox/users/models.py | 26 +++++++------------ netbox/users/tables.py | 4 +-- netbox/users/tests/test_views.py | 10 +++---- netbox/users/urls.py | 12 ++++----- netbox/users/views.py | 25 +++++++++--------- 9 files changed, 36 insertions(+), 68 deletions(-) rename netbox/templates/users/{usertoken.html => token.html} (100%) delete mode 100644 netbox/users/migrations/0004_usertoken.py diff --git a/netbox/netbox/navigation/menu.py b/netbox/netbox/navigation/menu.py index 0274083ef..e63fc38b8 100644 --- a/netbox/netbox/navigation/menu.py +++ b/netbox/netbox/navigation/menu.py @@ -416,7 +416,7 @@ ADMIN_MENU = Menu( label=_('Tokens'), items=( MenuItem( - link='users:usertoken_list', + link='users:token_list', link_text=_('Tokens'), permissions=['users.view_token'] ), diff --git a/netbox/templates/users/usertoken.html b/netbox/templates/users/token.html similarity index 100% rename from netbox/templates/users/usertoken.html rename to netbox/templates/users/token.html diff --git a/netbox/users/forms/bulk_import.py b/netbox/users/forms/bulk_import.py index c5709ab7f..c50ab463a 100644 --- a/netbox/users/forms/bulk_import.py +++ b/netbox/users/forms/bulk_import.py @@ -42,5 +42,5 @@ class UserTokenImportForm(CSVModelForm): ) class Meta: - model = UserToken + model = Token fields = ('key', 'user', 'expires', 'description',) diff --git a/netbox/users/migrations/0004_usertoken.py b/netbox/users/migrations/0004_usertoken.py deleted file mode 100644 index 5e69f9d32..000000000 --- a/netbox/users/migrations/0004_usertoken.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 4.2.2 on 2023-07-06 05:10 - -from django.db import migrations - - -class Migration(migrations.Migration): - dependencies = [ - ('users', '0004_netboxgroup_netboxuser'), - ] - - operations = [ - migrations.CreateModel( - name='UserToken', - fields=[], - options={ - 'verbose_name': 'Token', - 'proxy': True, - 'indexes': [], - 'constraints': [], - }, - bases=('users.token',), - ), - ] diff --git a/netbox/users/models.py b/netbox/users/models.py index 2aa56cd6b..c9f932cdf 100644 --- a/netbox/users/models.py +++ b/netbox/users/models.py @@ -26,7 +26,6 @@ __all__ = ( 'ObjectPermission', 'Token', 'UserConfig', - 'UserToken', ) @@ -274,13 +273,20 @@ class Token(models.Model): blank=True, null=True, verbose_name='Allowed IPs', - help_text=_('Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for no restrictions. ' - 'Ex: "10.1.1.0/24, 192.168.10.16/32, 2001:DB8:1::/64"'), + help_text=_( + 'Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for no restrictions. ' + 'Ex: "10.1.1.0/24, 192.168.10.16/32, 2001:DB8:1::/64"' + ), ) + objects = RestrictedQuerySet.as_manager() + def __str__(self): return self.key if settings.ALLOW_TOKEN_RETRIEVAL else self.partial + def get_absolute_url(self): + return reverse('users:token', args=[self.pk]) + @property def partial(self): return f'**********************************{self.key[-6:]}' if self.key else '' @@ -315,20 +321,6 @@ class Token(models.Model): return False -class UserToken(Token): - """ - Proxy Token for NetBox admin UI - """ - class Meta: - verbose_name = 'Token' - proxy = True - - def get_absolute_url(self): - return reverse('users:usertoken', args=[self.pk]) - - objects = RestrictedQuerySet.as_manager() - - # # Permissions # diff --git a/netbox/users/tables.py b/netbox/users/tables.py index 1c7f165d4..6ba1b2add 100644 --- a/netbox/users/tables.py +++ b/netbox/users/tables.py @@ -1,7 +1,7 @@ import django_tables2 as tables from netbox.tables import NetBoxTable, columns -from users.models import NetBoxGroup, NetBoxUser, ObjectPermission, Token, UserToken +from users.models import NetBoxGroup, NetBoxUser, ObjectPermission, Token __all__ = ( 'GroupTable', @@ -84,7 +84,7 @@ class UserTokenTable(NetBoxTable): ) class Meta(NetBoxTable.Meta): - model = UserToken + model = Token fields = [ 'pk', 'id', 'key', 'user', 'description', 'write_enabled', 'created', 'expires', 'last_used', 'allowed_ips', ] diff --git a/netbox/users/tests/test_views.py b/netbox/users/tests/test_views.py index 6226a52ac..d0b1526a5 100644 --- a/netbox/users/tests/test_views.py +++ b/netbox/users/tests/test_views.py @@ -161,7 +161,7 @@ class TokenTestCase( ViewTestCases.BulkEditObjectsViewTestCase, ViewTestCases.BulkDeleteObjectsViewTestCase, ): - model = UserToken + model = Token maxDiff = None @classmethod @@ -173,11 +173,11 @@ class TokenTestCase( NetBoxUser.objects.bulk_create(users) tokens = ( - UserToken(key='123456790123456789012345678901234567890A', user=users[0]), - UserToken(key='123456790123456789012345678901234567890B', user=users[0]), - UserToken(key='123456790123456789012345678901234567890C', user=users[1]), + Token(key='123456790123456789012345678901234567890A', user=users[0]), + Token(key='123456790123456789012345678901234567890B', user=users[0]), + Token(key='123456790123456789012345678901234567890C', user=users[1]), ) - UserToken.objects.bulk_create(tokens) + Token.objects.bulk_create(tokens) cls.form_data = { 'user': users[0].pk, diff --git a/netbox/users/urls.py b/netbox/users/urls.py index 131f05a89..bb21f72c1 100644 --- a/netbox/users/urls.py +++ b/netbox/users/urls.py @@ -16,12 +16,12 @@ urlpatterns = [ path('api-tokens//', include(get_model_urls('users', 'token'))), # Tokens - path('user-tokens/', views.UserTokenListView.as_view(), name='usertoken_list'), - path('user-tokens/add/', views.UserTokenEditView.as_view(), name='usertoken_add'), - path('user-tokens/import/', views.UserTokenBulkImportView.as_view(), name='usertoken_import'), - path('user-tokens/edit/', views.UserTokenBulkEditView.as_view(), name='usertoken_bulk_edit'), - path('user-tokens/delete/', views.UserTokenBulkDeleteView.as_view(), name='usertoken_bulk_delete'), - path('user-tokens//', include(get_model_urls('users', 'usertoken'))), + path('tokens/', views.UserTokenListView.as_view(), name='token_list'), + path('tokens/add/', views.UserTokenEditView.as_view(), name='token_add'), + path('tokens/import/', views.UserTokenBulkImportView.as_view(), name='token_import'), + path('tokens/edit/', views.UserTokenBulkEditView.as_view(), name='token_bulk_edit'), + path('tokens/delete/', views.UserTokenBulkDeleteView.as_view(), name='token_bulk_delete'), + path('tokens//', include(get_model_urls('users', 'token'))), # Users path('users/', views.UserListView.as_view(), name='netboxuser_list'), diff --git a/netbox/users/views.py b/netbox/users/views.py index 7f14adcdd..f77e8503d 100644 --- a/netbox/users/views.py +++ b/netbox/users/views.py @@ -24,7 +24,7 @@ from netbox.views import generic from utilities.forms import ConfirmationForm from utilities.views import register_model_view from . import filtersets, forms, tables -from .models import Token, UserConfig, NetBoxGroup, NetBoxUser, ObjectPermission, UserToken +from .models import Token, UserConfig, NetBoxGroup, NetBoxUser, ObjectPermission # @@ -360,44 +360,44 @@ class TokenDeleteView(LoginRequiredMixin, View): # class UserTokenListView(generic.ObjectListView): - queryset = UserToken.objects.all() + queryset = Token.objects.all() filterset = filtersets.UserTokenFilterSet filterset_form = forms.UserTokenFilterForm table = tables.UserTokenTable -@register_model_view(UserToken) +@register_model_view(Token) class UserTokenView(generic.ObjectView): - queryset = UserToken.objects.all() + queryset = Token.objects.all() def get_extra_context(self, request, instance): return {} -@register_model_view(UserToken, 'edit') +@register_model_view(Token, 'edit') class UserTokenEditView(generic.ObjectEditView): - queryset = UserToken.objects.all() + queryset = Token.objects.all() form = forms.UserTokenForm -@register_model_view(UserToken, 'delete') +@register_model_view(Token, 'delete') class UserTokenDeleteView(generic.ObjectDeleteView): - queryset = UserToken.objects.all() + queryset = Token.objects.all() class UserTokenBulkImportView(generic.BulkImportView): - queryset = UserToken.objects.all() + queryset = Token.objects.all() model_form = forms.UserTokenImportForm class UserTokenBulkEditView(generic.BulkEditView): - queryset = UserToken.objects.all() + queryset = Token.objects.all() table = tables.TokenTable form = forms.UserTokenBulkEditForm class UserTokenBulkDeleteView(generic.BulkDeleteView): - queryset = UserToken.objects.all() + queryset = Token.objects.all() table = tables.UserTokenTable @@ -459,7 +459,6 @@ class UserBulkDeleteView(generic.BulkDeleteView): # Groups # - class GroupListView(generic.ObjectListView): queryset = NetBoxGroup.objects.annotate(users_count=Count('user')) filterset = filtersets.GroupFilterSet @@ -494,11 +493,11 @@ class GroupBulkDeleteView(generic.BulkDeleteView): filterset = filtersets.GroupFilterSet table = tables.GroupTable + # # ObjectPermissions # - class ObjectPermissionListView(generic.ObjectListView): queryset = ObjectPermission.objects.all() filterset = filtersets.ObjectPermissionFilterSet