Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions netbox/netbox/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@
from django_rq.queues import get_connection
from drf_spectacular.types import OpenApiTypes
from drf_spectacular.utils import extend_schema
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.reverse import reverse
from rest_framework.views import APIView
from rq.worker import Worker

from netbox.api.authentication import IsAuthenticatedOrLoginNotRequired
from netbox.plugins.utils import get_installed_plugins
from users.api.serializers import UserSerializer
from utilities.apps import get_installed_apps


Expand Down Expand Up @@ -62,3 +64,15 @@ def get(self, request):
'python-version': platform.python_version(),
'rq-workers-running': Worker.count(get_connection('default')),
})


class AuthenticationCheckView(APIView):
"""
Return the user making the request, if authenticated successfully.
"""
permission_classes = [IsAuthenticated]

@extend_schema(responses={200: OpenApiTypes.OBJECT})
def get(self, request):
serializer = UserSerializer(request.user, context={'request': request})
return Response(serializer.data)
12 changes: 12 additions & 0 deletions netbox/netbox/tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,18 @@ def test_status(self):

self.assertEqual(response.status_code, 200)

def test_authentication_check(self):
url = reverse('api-authentication-check')

# Test an unauthenticated request
response = self.client.get(f'{url}')
self.assertEqual(response.status_code, 403)

# Test an authenticated request
response = self.client.get(f'{url}', **self.header)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['id'], self.user.pk)


class OptionalLimitOffsetPaginationTest(TestCase):

Expand Down
3 changes: 2 additions & 1 deletion netbox/netbox/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from drf_spectacular.views import SpectacularAPIView, SpectacularRedocView, SpectacularSwaggerView

from account.views import LoginView, LogoutView
from netbox.api.views import APIRootView, StatusView
from netbox.api.views import APIRootView, AuthenticationCheckView, StatusView
from netbox.graphql.schema import schema
from netbox.graphql.views import NetBoxGraphQLView
from netbox.plugins.urls import plugin_patterns, plugin_api_patterns
Expand Down Expand Up @@ -53,6 +53,7 @@
path('api/vpn/', include('vpn.api.urls')),
path('api/wireless/', include('wireless.api.urls')),
path('api/status/', StatusView.as_view(), name='api-status'),
path('api/authentication-check/', AuthenticationCheckView.as_view(), name='api-authentication-check'),

# REST API schema
path(
Expand Down
Loading