Commit ec9774e5 by Karsa Zoltán István

add rest api for users and groups

parent e7ca9813
from rest_framework.renderers import JSONRenderer from rest_framework.renderers import JSONRenderer
from rest_framework import serializers from rest_framework import serializers
from django.contrib.auth.models import Group, User
from vm.models import Instance, InstanceTemplate, Lease, Interface, Node from vm.models import Instance, InstanceTemplate, Lease, Interface, Node
from firewall.models import Vlan from firewall.models import Vlan
from storage.models import Disk from storage.models import Disk
class GroupSerializer(serializers.ModelSerializer):
class Meta:
model = Group
fields = ('id', 'name', 'user_set')
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'email', 'is_staff', 'groups')
class NodeSerializer(serializers.ModelSerializer): class NodeSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Node model = Node
......
...@@ -59,7 +59,7 @@ from .views import ( ...@@ -59,7 +59,7 @@ from .views import (
DownloadDiskREST, GetInstanceREST, GetInterfaceREST, ShutdownInstanceREST, DownloadDiskREST, GetInstanceREST, GetInterfaceREST, ShutdownInstanceREST,
GetLeaseREST, GetDiskRest, DeployInstanceREST, CreateDiskREST, GetLeaseREST, GetDiskRest, DeployInstanceREST, CreateDiskREST,
VlanREST, ResizeDiskREST, GetVlanREST, VlanREST, ResizeDiskREST, GetVlanREST,
StorageDetail, DiskDetail, StorageDetail, DiskDetail, UserREST, GroupREST,
MessageList, MessageDetail, MessageCreate, MessageDelete, MessageList, MessageDetail, MessageCreate, MessageDelete,
EnableTwoFactorView, DisableTwoFactorView, EnableTwoFactorView, DisableTwoFactorView,
AclUserGroupAutocomplete, AclUserAutocomplete, AclUserGroupAutocomplete, AclUserAutocomplete,
...@@ -69,6 +69,8 @@ from .views.node import node_ops, NodeREST, GetNodeREST ...@@ -69,6 +69,8 @@ from .views.node import node_ops, NodeREST, GetNodeREST
from .views.vm import vm_ops, vm_mass_ops from .views.vm import vm_ops, vm_mass_ops
urlpatterns = [ urlpatterns = [
path('acpi/user/', UserREST.as_view()),
path('acpi/group/', GroupREST.as_view()),
path('acpi/vm/', InstanceREST.as_view()), path('acpi/vm/', InstanceREST.as_view()),
path('acpi/node/', NodeREST.as_view()), path('acpi/node/', NodeREST.as_view()),
path('acpi/node/<int:pk>/', GetNodeREST.as_view()), path('acpi/node/<int:pk>/', GetNodeREST.as_view()),
......
...@@ -27,7 +27,7 @@ from django.contrib.auth.models import User, Group ...@@ -27,7 +27,7 @@ from django.contrib.auth.models import User, Group
from django.contrib.messages.views import SuccessMessageMixin from django.contrib.messages.views import SuccessMessageMixin
from django.core.exceptions import PermissionDenied, SuspiciousOperation from django.core.exceptions import PermissionDenied, SuspiciousOperation
from django.urls import reverse, reverse_lazy from django.urls import reverse, reverse_lazy
from django.http import HttpResponse, Http404 from django.http import HttpResponse, Http404, JsonResponse
from django.shortcuts import redirect from django.shortcuts import redirect
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.views.generic import UpdateView, TemplateView from django.views.generic import UpdateView, TemplateView
...@@ -35,6 +35,12 @@ from django.views.generic.detail import SingleObjectMixin ...@@ -35,6 +35,12 @@ from django.views.generic.detail import SingleObjectMixin
from django_tables2 import SingleTableView from django_tables2 import SingleTableView
from itertools import chain from itertools import chain
from rest_framework import status
from rest_framework.views import APIView
from rest_framework.parsers import JSONParser
from rest_framework.authentication import TokenAuthentication, BasicAuthentication
from rest_framework.permissions import IsAdminUser
from vm.models import Instance, InstanceTemplate from vm.models import Instance, InstanceTemplate
from .util import (CheckedDetailView, AclUpdateView, search_user, from .util import (CheckedDetailView, AclUpdateView, search_user,
saml_available, DeleteViewBase) saml_available, DeleteViewBase)
...@@ -46,6 +52,8 @@ from ..models import FutureMember, GroupProfile ...@@ -46,6 +52,8 @@ from ..models import FutureMember, GroupProfile
from ..store_api import Store, NoStoreException from ..store_api import Store, NoStoreException
from ..tables import GroupListTable from ..tables import GroupListTable
from dashboard.serializers import GroupSerializer
try: try:
# Python 2: "unicode" is built-in # Python 2: "unicode" is built-in
unicode unicode
...@@ -55,6 +63,23 @@ except NameError: ...@@ -55,6 +63,23 @@ except NameError:
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class GroupREST(APIView):
authentication_classes = [TokenAuthentication,BasicAuthentication]
permission_classes = [IsAdminUser]
def get(self, request, format=None):
if request.query_params.get('name'):
try:
group = Group.objects.filter(name__istartswith=request.query_params.get('name')).get()
serializer = GroupSerializer(group, many=False)
return JsonResponse(serializer.data, safe=False)
except:
return JsonResponse({}, status=404)
groups = Group.objects.all()
serializer = GroupSerializer(groups, many=True)
return JsonResponse(serializer.data, safe=False)
class GroupCodeMixin(object): class GroupCodeMixin(object):
@classmethod @classmethod
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
import json import json
import logging import logging
from multiprocessing import context
import pyotp import pyotp
...@@ -31,7 +32,7 @@ from django.core.exceptions import PermissionDenied, SuspiciousOperation ...@@ -31,7 +32,7 @@ from django.core.exceptions import PermissionDenied, SuspiciousOperation
from django.urls import reverse, reverse_lazy from django.urls import reverse, reverse_lazy
from django.core.paginator import Paginator, InvalidPage from django.core.paginator import Paginator, InvalidPage
from django.db.models import Q from django.db.models import Q
from django.http import HttpResponse, HttpResponseRedirect, Http404 from django.http import HttpResponse, HttpResponseRedirect, Http404, JsonResponse
from django.shortcuts import redirect, get_object_or_404 from django.shortcuts import redirect, get_object_or_404
from django.templatetags.static import static from django.templatetags.static import static
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
...@@ -41,6 +42,12 @@ from django.views.generic import ( ...@@ -41,6 +42,12 @@ from django.views.generic import (
) )
from simplesshkey.models import UserKey from simplesshkey.models import UserKey
from rest_framework import status
from rest_framework.views import APIView
from rest_framework.parsers import JSONParser
from rest_framework.authentication import TokenAuthentication, BasicAuthentication
from rest_framework.permissions import IsAdminUser
from braces.views import LoginRequiredMixin, PermissionRequiredMixin from braces.views import LoginRequiredMixin, PermissionRequiredMixin
from django_tables2 import SingleTableView, LazyPaginator from django_tables2 import SingleTableView, LazyPaginator
...@@ -58,6 +65,7 @@ from ..tables import ( ...@@ -58,6 +65,7 @@ from ..tables import (
) )
from rest_framework.authtoken.models import Token from rest_framework.authtoken.models import Token
from .util import saml_available, DeleteViewBase, LoginView from .util import saml_available, DeleteViewBase, LoginView
from dashboard.serializers import UserSerializer
try: try:
# Python 2: "unicode" is built-in # Python 2: "unicode" is built-in
...@@ -67,8 +75,21 @@ except NameError: ...@@ -67,8 +75,21 @@ except NameError:
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class UserREST(APIView):
authentication_classes = [TokenAuthentication,BasicAuthentication]
permission_classes = [IsAdminUser]
def get(self, request, format=None):
if request.query_params.get('username'):
try:
user = User.objects.filter(username__istartswith=request.query_params.get('username')).get()
serializer = UserSerializer(user, many=False)
return JsonResponse(serializer.data, safe=False)
except:
return JsonResponse({}, status=404)
users = User.objects.all()
serializer = UserSerializer(users, many=True)
return JsonResponse(serializer.data, safe=False)
def set_session_expiry(request, user): def set_session_expiry(request, user):
if user.is_superuser: if user.is_superuser:
......
...@@ -92,7 +92,6 @@ logger = logging.getLogger(__name__) ...@@ -92,7 +92,6 @@ logger = logging.getLogger(__name__)
from rest_framework import status from rest_framework import status
from rest_framework.views import APIView from rest_framework.views import APIView
from rest_framework.decorators import api_view, authentication_classes, permission_classes
from rest_framework.parsers import JSONParser from rest_framework.parsers import JSONParser
from rest_framework.authentication import TokenAuthentication, BasicAuthentication from rest_framework.authentication import TokenAuthentication, BasicAuthentication
from rest_framework.permissions import IsAdminUser from rest_framework.permissions import IsAdminUser
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment