mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Converted GetSessionKey and RSAKeyGeneratorView to ViewSets
This commit is contained in:
@ -92,7 +92,7 @@ $(document).ready(function() {
|
|||||||
$('#generate_keypair').click(function() {
|
$('#generate_keypair').click(function() {
|
||||||
$('#new_keypair_modal').modal('show');
|
$('#new_keypair_modal').modal('show');
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: netbox_api_path + 'secrets/generate-keys/',
|
url: netbox_api_path + 'secrets/generate-rsa-key-pair/',
|
||||||
type: 'GET',
|
type: 'GET',
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
success: function (response, status) {
|
success: function (response, status) {
|
||||||
|
@ -6,15 +6,14 @@ from . import views
|
|||||||
|
|
||||||
|
|
||||||
router = routers.DefaultRouter()
|
router = routers.DefaultRouter()
|
||||||
|
|
||||||
router.register(r'secret-roles', views.SecretRoleViewSet)
|
router.register(r'secret-roles', views.SecretRoleViewSet)
|
||||||
router.register(r'secrets', views.SecretViewSet)
|
router.register(r'secrets', views.SecretViewSet)
|
||||||
|
router.register(r'get-session-key', views.GetSessionKeyViewSet, base_name='get-session-key')
|
||||||
|
router.register(r'generate-rsa-key-pair', views.GenerateRSAKeyPairViewSet, base_name='generate-rsa-key-pair')
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
|
||||||
url(r'', include(router.urls)),
|
url(r'', include(router.urls)),
|
||||||
|
|
||||||
# Miscellaneous
|
|
||||||
url(r'^get-session-key/$', views.GetSessionKey.as_view(), name='get_session_key'),
|
|
||||||
url(r'^generate-keys/$', views.RSAKeyGeneratorView.as_view(), name='generate_keys'),
|
|
||||||
|
|
||||||
]
|
]
|
||||||
|
@ -7,14 +7,12 @@ from rest_framework.authentication import BasicAuthentication, SessionAuthentica
|
|||||||
from rest_framework.permissions import IsAuthenticated
|
from rest_framework.permissions import IsAuthenticated
|
||||||
from rest_framework.renderers import JSONRenderer
|
from rest_framework.renderers import JSONRenderer
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.views import APIView
|
from rest_framework.viewsets import ViewSet, ModelViewSet
|
||||||
from rest_framework.viewsets import ModelViewSet
|
|
||||||
|
|
||||||
from extras.api.renderers import FormlessBrowsableAPIRenderer, FreeRADIUSClientsRenderer
|
from extras.api.renderers import FormlessBrowsableAPIRenderer, FreeRADIUSClientsRenderer
|
||||||
from secrets.filters import SecretFilter
|
from secrets.filters import SecretFilter
|
||||||
from secrets.models import Secret, SecretRole, SessionKey, UserKey
|
from secrets.models import Secret, SecretRole, SessionKey, UserKey
|
||||||
from utilities.api import WritableSerializerMixin
|
from utilities.api import WritableSerializerMixin
|
||||||
|
|
||||||
from . import serializers
|
from . import serializers
|
||||||
|
|
||||||
|
|
||||||
@ -107,13 +105,25 @@ class SecretViewSet(WritableSerializerMixin, ModelViewSet):
|
|||||||
return Response(serializer.data)
|
return Response(serializer.data)
|
||||||
|
|
||||||
|
|
||||||
class GetSessionKey(APIView):
|
class GetSessionKeyViewSet(ViewSet):
|
||||||
"""
|
"""
|
||||||
Cache an encrypted copy of the master key derived from the submitted private key.
|
Retrieve a temporary session key to use for encrypting and decrypting secrets via the API. The user's private RSA
|
||||||
|
key is POSTed with the name `private_key`. An example:
|
||||||
|
|
||||||
|
curl -v -X POST -H "Authorization: Token <token>" -H "Accept: application/json; indent=4" \\
|
||||||
|
--data-urlencode "private_key@<filename>" https://netbox/api/secrets/get-session-key/
|
||||||
|
|
||||||
|
This request will yield a session key to be included in an `X-Session-Key` header in future requests, as well as its
|
||||||
|
expiration time:
|
||||||
|
|
||||||
|
{
|
||||||
|
"expiration_time": "2017-03-09T10:42:23.095267Z",
|
||||||
|
"session_key": "+8t4SI6XikgVmB5+/urhozx9O5qCQANyOk1MNe6taRf="
|
||||||
|
}
|
||||||
"""
|
"""
|
||||||
permission_classes = [IsAuthenticated]
|
permission_classes = [IsAuthenticated]
|
||||||
|
|
||||||
def post(self, request):
|
def create(self, request):
|
||||||
|
|
||||||
# Read private key
|
# Read private key
|
||||||
private_key = request.POST.get('private_key', None)
|
private_key = request.POST.get('private_key', None)
|
||||||
@ -150,13 +160,18 @@ class GetSessionKey(APIView):
|
|||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
class RSAKeyGeneratorView(APIView):
|
class GenerateRSAKeyPairViewSet(ViewSet):
|
||||||
"""
|
"""
|
||||||
Generate a new RSA key pair for a user. Authenticated because it's a ripe avenue for DoS.
|
This endpoint can be used to generate a new RSA key pair. The keys are returned in PEM format.
|
||||||
|
|
||||||
|
{
|
||||||
|
"public_key": "<public key>",
|
||||||
|
"private_key": "<private key>"
|
||||||
|
}
|
||||||
"""
|
"""
|
||||||
permission_classes = [IsAuthenticated]
|
permission_classes = [IsAuthenticated]
|
||||||
|
|
||||||
def get(self, request):
|
def list(self, request):
|
||||||
|
|
||||||
# Determine what size key to generate
|
# Determine what size key to generate
|
||||||
key_size = request.GET.get('key_size', 2048)
|
key_size = request.GET.get('key_size', 2048)
|
||||||
|
Reference in New Issue
Block a user