From 2e61f9443ccb460e6fe9367ef167fc05083dc689 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Tue, 25 Jul 2023 11:55:06 -0400 Subject: [PATCH] Misc cleanup --- .../account/{usertoken.html => token.html} | 0 .../{usertoken_list.html => token_list.html} | 0 netbox/users/models.py | 1 + netbox/users/tables.py | 26 +++++++++++++------ netbox/users/tests/test_views.py | 8 +++--- netbox/users/views.py | 8 +++--- 6 files changed, 26 insertions(+), 17 deletions(-) rename netbox/templates/users/account/{usertoken.html => token.html} (100%) rename netbox/templates/users/account/{usertoken_list.html => token_list.html} (100%) diff --git a/netbox/templates/users/account/usertoken.html b/netbox/templates/users/account/token.html similarity index 100% rename from netbox/templates/users/account/usertoken.html rename to netbox/templates/users/account/token.html diff --git a/netbox/templates/users/account/usertoken_list.html b/netbox/templates/users/account/token_list.html similarity index 100% rename from netbox/templates/users/account/usertoken_list.html rename to netbox/templates/users/account/token_list.html diff --git a/netbox/users/models.py b/netbox/users/models.py index 107d1b565..982b9f7bb 100644 --- a/netbox/users/models.py +++ b/netbox/users/models.py @@ -26,6 +26,7 @@ __all__ = ( 'ObjectPermission', 'Token', 'UserConfig', + 'UserToken', ) diff --git a/netbox/users/tables.py b/netbox/users/tables.py index b850befeb..f411c077c 100644 --- a/netbox/users/tables.py +++ b/netbox/users/tables.py @@ -1,4 +1,5 @@ import django_tables2 as tables +from django.utils.translation import gettext as _ from netbox.tables import NetBoxTable, columns from users.models import NetBoxGroup, NetBoxUser, ObjectPermission, Token, UserToken @@ -31,28 +32,30 @@ class TokenActionsColumn(columns.ActionsColumn): class UserTokenTable(NetBoxTable): + """ + Table for users to manager their own API tokens under account views. + """ key = columns.TemplateColumn( - verbose_name='Key', + verbose_name=_('Key'), template_code=TOKEN, ) write_enabled = columns.BooleanColumn( - verbose_name='Write' + verbose_name=_('Write Enabled') ) created = columns.DateColumn( - verbose_name='Created', + verbose_name=_('Created'), ) - expired = columns.DateColumn( - verbose_name='Expired', + expires = columns.DateColumn( + verbose_name=_('Expires'), ) last_used = columns.DateTimeColumn( - verbose_name='Last used', + verbose_name=_('Last Used'), ) allowed_ips = columns.TemplateColumn( - verbose_name='Allowed IPs', + verbose_name=_('Allowed IPs'), template_code=ALLOWED_IPS ) actions = TokenActionsColumn( - verbose_name='Actions', actions=('edit', 'delete'), extra_buttons=COPY_BUTTON ) @@ -65,6 +68,13 @@ class UserTokenTable(NetBoxTable): class TokenTable(UserTokenTable): + """ + General-purpose table for API token management. + """ + user = tables.Column( + linkify=True, + verbose_name=_('User') + ) class Meta(NetBoxTable.Meta): model = Token diff --git a/netbox/users/tests/test_views.py b/netbox/users/tests/test_views.py index d0b1526a5..2997052eb 100644 --- a/netbox/users/tests/test_views.py +++ b/netbox/users/tests/test_views.py @@ -2,7 +2,7 @@ from django.contrib.auth.models import Group from django.contrib.contenttypes.models import ContentType from users.models import * -from utilities.testing import ViewTestCases +from utilities.testing import ViewTestCases, create_test_user class UserTestCase( @@ -167,11 +167,9 @@ class TokenTestCase( @classmethod def setUpTestData(cls): users = ( - NetBoxUser(username='username1', first_name='first1', last_name='last1', email='user1@foo.com', password='pass1xxx'), - NetBoxUser(username='username2', first_name='first2', last_name='last2', email='user2@foo.com', password='pass2xxx'), + create_test_user('User 1'), + create_test_user('User 2'), ) - NetBoxUser.objects.bulk_create(users) - tokens = ( Token(key='123456790123456789012345678901234567890A', user=users[0]), Token(key='123456790123456789012345678901234567890B', user=users[0]), diff --git a/netbox/users/views.py b/netbox/users/views.py index acc45405e..bc5cf1eeb 100644 --- a/netbox/users/views.py +++ b/netbox/users/views.py @@ -259,7 +259,7 @@ class UserTokenListView(LoginRequiredMixin, View): table = tables.UserTokenTable(tokens) table.configure(request) - return render(request, 'users/account/usertoken_list.html', { + return render(request, 'users/account/token_list.html', { 'tokens': tokens, 'active_tab': 'api-tokens', 'table': table, @@ -270,10 +270,10 @@ class UserTokenListView(LoginRequiredMixin, View): class UserTokenView(LoginRequiredMixin, View): def get(self, request, pk): - token = get_object_or_404(UserToken, pk=pk) + token = get_object_or_404(UserToken.objects.filter(user=request.user), pk=pk) key = token.key if settings.ALLOW_TOKEN_RETRIEVAL else None - return render(request, 'users/account/usertoken.html', { + return render(request, 'users/account/token.html', { 'object': token, 'key': key, }) @@ -312,7 +312,7 @@ class UserTokenEditView(LoginRequiredMixin, View): messages.success(request, msg) if not pk and not settings.ALLOW_TOKEN_RETRIEVAL: - return render(request, 'users/account/usertoken.html', { + return render(request, 'users/account/token.html', { 'object': token, 'key': token.key, 'return_url': reverse('users:token_list'),