mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-24 17:38:37 -06:00
Introduced FreeRADIUSClientsRenderer
This commit is contained in:
parent
eec3ce375c
commit
8d99502916
@ -33,7 +33,7 @@ class BINDZoneRenderer(renderers.BaseRenderer):
|
|||||||
|
|
||||||
class FlatJSONRenderer(renderers.BaseRenderer):
|
class FlatJSONRenderer(renderers.BaseRenderer):
|
||||||
"""
|
"""
|
||||||
Flattens a nested JSON reponse.
|
Flattens a nested JSON response.
|
||||||
"""
|
"""
|
||||||
format = 'json_flat'
|
format = 'json_flat'
|
||||||
media_type = 'application/json'
|
media_type = 'application/json'
|
||||||
@ -49,3 +49,28 @@ class FlatJSONRenderer(renderers.BaseRenderer):
|
|||||||
yield key, val
|
yield key, val
|
||||||
|
|
||||||
return json.dumps([dict(flatten(i)) for i in data])
|
return json.dumps([dict(flatten(i)) for i in data])
|
||||||
|
|
||||||
|
|
||||||
|
class FreeRADIUSClientsRenderer(renderers.BaseRenderer):
|
||||||
|
"""
|
||||||
|
Generate a FreeRADIUS clients.conf file from a list of Secrets.
|
||||||
|
"""
|
||||||
|
media_type = 'text/plain'
|
||||||
|
format = 'freeradius'
|
||||||
|
|
||||||
|
CLIENT_TEMPLATE = """client {name} {{
|
||||||
|
ipaddr = {ip}
|
||||||
|
secret = {secret}
|
||||||
|
}}"""
|
||||||
|
|
||||||
|
def render(self, data, media_type=None, renderer_context=None):
|
||||||
|
clients = []
|
||||||
|
for secret in data:
|
||||||
|
if secret['device']['primary_ip'] and secret['plaintext']:
|
||||||
|
client = self.CLIENT_TEMPLATE.format(
|
||||||
|
name=secret['device']['name'],
|
||||||
|
ip=secret['device']['primary_ip']['address'].split('/')[0],
|
||||||
|
secret=secret['plaintext']
|
||||||
|
)
|
||||||
|
clients.append(client)
|
||||||
|
return '\n'.join(clients)
|
||||||
|
@ -6,8 +6,10 @@ from rest_framework import generics
|
|||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from rest_framework.permissions import IsAuthenticated, BasePermission
|
from rest_framework.permissions import IsAuthenticated, BasePermission
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
from rest_framework.settings import api_settings
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
|
|
||||||
|
from extras.api.renderers import FreeRADIUSClientsRenderer
|
||||||
from secrets.filters import SecretFilter
|
from secrets.filters import SecretFilter
|
||||||
from secrets.models import Secret, SecretRole, UserKey
|
from secrets.models import Secret, SecretRole, UserKey
|
||||||
from .serializers import SecretRoleSerializer, SecretSerializer
|
from .serializers import SecretRoleSerializer, SecretSerializer
|
||||||
@ -47,6 +49,7 @@ class SecretListView(generics.GenericAPIView):
|
|||||||
serializer_class = SecretSerializer
|
serializer_class = SecretSerializer
|
||||||
filter_class = SecretFilter
|
filter_class = SecretFilter
|
||||||
permission_classes = [SecretViewPermission]
|
permission_classes = [SecretViewPermission]
|
||||||
|
renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES + [FreeRADIUSClientsRenderer]
|
||||||
|
|
||||||
def get(self, request, private_key=None, *args, **kwargs):
|
def get(self, request, private_key=None, *args, **kwargs):
|
||||||
queryset = self.filter_queryset(self.get_queryset())
|
queryset = self.filter_queryset(self.get_queryset())
|
||||||
@ -90,6 +93,7 @@ class SecretDetailView(generics.GenericAPIView):
|
|||||||
queryset = Secret.objects.select_related('device', 'role')
|
queryset = Secret.objects.select_related('device', 'role')
|
||||||
serializer_class = SecretSerializer
|
serializer_class = SecretSerializer
|
||||||
permission_classes = [SecretViewPermission]
|
permission_classes = [SecretViewPermission]
|
||||||
|
renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES + [FreeRADIUSClientsRenderer]
|
||||||
|
|
||||||
def get(self, request, pk, private_key=None, *args, **kwargs):
|
def get(self, request, pk, private_key=None, *args, **kwargs):
|
||||||
secret = get_object_or_404(Secret, pk=pk)
|
secret = get_object_or_404(Secret, pk=pk)
|
||||||
|
Loading…
Reference in New Issue
Block a user