From cd01f62fdef8d96405588569d0af62f900c5d9ff Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Wed, 18 Mar 2020 14:36:40 +0100 Subject: [PATCH] Move user view to uncloud_auth --- uncloud/uncloud/urls.py | 5 ++++- uncloud/uncloud_auth/serializers.py | 14 ++++++++++++++ uncloud/uncloud_auth/views.py | 16 ++++++++++++++++ uncloud/uncloud_pay/models.py | 4 +--- uncloud/uncloud_pay/serializers.py | 14 -------------- uncloud/uncloud_pay/views.py | 6 ------ 6 files changed, 35 insertions(+), 24 deletions(-) create mode 100644 uncloud/uncloud_auth/serializers.py create mode 100644 uncloud/uncloud_auth/views.py diff --git a/uncloud/uncloud/urls.py b/uncloud/uncloud/urls.py index 29575e9..856e59c 100644 --- a/uncloud/uncloud/urls.py +++ b/uncloud/uncloud/urls.py @@ -22,6 +22,7 @@ from uncloud_vm import views as vmviews from uncloud_pay import views as payviews from ungleich_service import views as serviceviews from opennebula import views as oneviews +from uncloud_auth import views as authviews router = routers.DefaultRouter() @@ -56,7 +57,6 @@ router.register(r'service/matrix', serviceviews.MatrixServiceProductViewSet, bas # Pay -router.register(r'user', payviews.UserViewSet, basename='user') router.register(r'payment-method', payviews.PaymentMethodViewSet, basename='payment-method') router.register(r'bill', payviews.BillViewSet, basename='bill') router.register(r'order', payviews.OrderViewSet, basename='order') @@ -73,6 +73,9 @@ router.register(r'admin/order', payviews.AdminOrderViewSet, basename='admin/orde router.register(r'admin/vmhost', vmviews.VMHostViewSet) router.register(r'admin/opennebula', oneviews.VMViewSet, basename='opennebula') +# User/Account +router.register(r'user', authviews.UserViewSet, basename='user') + urlpatterns = [ path('', include(router.urls)), diff --git a/uncloud/uncloud_auth/serializers.py b/uncloud/uncloud_auth/serializers.py new file mode 100644 index 0000000..cd05112 --- /dev/null +++ b/uncloud/uncloud_auth/serializers.py @@ -0,0 +1,14 @@ +from django.contrib.auth import get_user_model +from rest_framework import serializers +from uncloud_pay.models import get_balance_for_user + +class UserSerializer(serializers.ModelSerializer): + class Meta: + model = get_user_model() + fields = ['username', 'email', 'balance'] + + # Display current 'balance' + balance = serializers.SerializerMethodField('get_balance') + + def get_balance(self, user): + return get_balance_for_user(user) diff --git a/uncloud/uncloud_auth/views.py b/uncloud/uncloud_auth/views.py new file mode 100644 index 0000000..40b8408 --- /dev/null +++ b/uncloud/uncloud_auth/views.py @@ -0,0 +1,16 @@ +from rest_framework import viewsets, permissions, status +from .serializers import * + +class UserViewSet(viewsets.ReadOnlyModelViewSet): + serializer_class = UserSerializer + permission_classes = [permissions.IsAuthenticated] + + def get_queryset(self): + if self.request.user.is_superuser: + obj = get_user_model().objects.all() + else: + # This is a bit stupid: we have a user, we create a queryset by + # matching on the username. + obj = get_user_model().objects.filter(username=self.request.user.username) + + return obj diff --git a/uncloud/uncloud_pay/models.py b/uncloud/uncloud_pay/models.py index 17afbcb..63f351a 100644 --- a/uncloud/uncloud_pay/models.py +++ b/uncloud/uncloud_pay/models.py @@ -44,10 +44,8 @@ class ProductStatus(models.TextChoices): ACTIVE = 'ACTIVE', _('Active') DELETED = 'DELETED', _('Deleted') -### -# Users. -def get_balance_for(user): +def get_balance_for_user(user): bills = reduce( lambda acc, entry: acc + entry.total, Bill.objects.filter(owner=user), diff --git a/uncloud/uncloud_pay/serializers.py b/uncloud/uncloud_pay/serializers.py index 60ddc75..a0a8635 100644 --- a/uncloud/uncloud_pay/serializers.py +++ b/uncloud/uncloud_pay/serializers.py @@ -2,20 +2,6 @@ from django.contrib.auth import get_user_model from rest_framework import serializers from .models import * -### -# Users. - -class UserSerializer(serializers.ModelSerializer): - class Meta: - model = get_user_model() - fields = ['username', 'email', 'balance'] - - # Display current 'balance' - balance = serializers.SerializerMethodField('get_balance') - - def get_balance(self, user): - return get_balance_for(user) - ### # Payments and Payment Methods. diff --git a/uncloud/uncloud_pay/views.py b/uncloud/uncloud_pay/views.py index 57c284d..e86a464 100644 --- a/uncloud/uncloud_pay/views.py +++ b/uncloud/uncloud_pay/views.py @@ -48,12 +48,6 @@ class OrderViewSet(viewsets.ReadOnlyModelViewSet): def get_queryset(self): return Order.objects.filter(owner=self.request.user) -class UserViewSet(viewsets.ReadOnlyModelViewSet): - serializer_class = UserSerializer - permission_classes = [permissions.IsAuthenticated] - - def get_queryset(self): - return get_user_model().objects.all() class PaymentMethodViewSet(viewsets.ModelViewSet): permission_classes = [permissions.IsAuthenticated]