From a060a62561b4c8cd3391c8e2c02556a51f433b53 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Thu, 5 Nov 2015 10:10:00 +0100 Subject: [PATCH] wip --- src/authentic2/api_urls.py | 1 + src/authentic2/api_views.py | 69 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 69 insertions(+), 1 deletion(-) diff --git a/src/authentic2/api_urls.py b/src/authentic2/api_urls.py index 0e470cf..ccddb10 100644 --- a/src/authentic2/api_urls.py +++ b/src/authentic2/api_urls.py @@ -10,3 +10,4 @@ urlpatterns = patterns('', url(r'^user/$', api_views.user, name='a2-api-user'), ) +urlpatterns += api_views.router.urls diff --git a/src/authentic2/api_views.py b/src/authentic2/api_views.py index b404837..4c84a77 100644 --- a/src/authentic2/api_views.py +++ b/src/authentic2/api_views.py @@ -1,4 +1,5 @@ '''Views for Authentic2 API''' +import json import smtplib from django.db import models @@ -11,12 +12,15 @@ from django.views.decorators.cache import cache_control from django_rbac.utils import get_ou_model from rest_framework import serializers +from rest_framework.viewsets import ModelViewSet +from rest_framework.routers import SimpleRouter from rest_framework.generics import GenericAPIView +from rest_framework.mixins import ListModelMixin, CreateModelMixin from rest_framework.response import Response from rest_framework import authentication, permissions, status from rest_framework.exceptions import PermissionDenied -from . import utils, decorators +from . import utils, decorators, models class HasUserAddPermission(permissions.BasePermission): @@ -202,3 +206,66 @@ def user(request): if request.user.is_anonymous(): return {} return request.user.to_json() + + +def get_user_class(): + user_class = get_user_model() + for at in models.Attribute.objects.filter(kind='string'): + def get_property(self): + try: + return json.loads(models.AttributeValue.objects.with_owner(self).get(attribute=at).content) + except models.AttributeValue.DoesNotExist: + return '' + def set_property(self, value): + at.set_value(self, value) + setattr(user_class, at.name, property(get_property, set_property)) + return user_class + + +class UserSerializer(serializers.ModelSerializer): + zob = serializers.CharField() + + def create(self, validated_data): + extra_field = {} + for at in models.Attribute.objects.filter(kind='string'): + if at.name in validated_data: + extra_field[at.name] = validated_data.pop(at.name) + instance = super(UserSerializer, self).create(validated_data) + for key, value in extra_field.iteritems(): + setattr(instance, key, value) + print validated_data + if 'password' in validated_data: + instance.set_password(validated_data['password']) + instance.save() + return instance + + def update(self, instance, validated_data): + extra_field = {} + for at in models.Attribute.objects.filter(kind='string'): + if at.name in validated_data: + extra_field[at.name] = validated_data.pop(at.name) + super(UserSerializer, self).update(instance, validated_data) + for key, value in extra_field.iteritems(): + setattr(instance, key, value) + if 'password' in validated_data: + instance.set_password(validated_data['password']) + instance.save() + return instance + + class Meta: + model = get_user_model() + exclude = ('date_joined', 'user_permissions', 'groups', 'last_login') + + + +class UsersAPI(ModelViewSet): + def get_serializer_class(self): + return UserSerializer + + def get_queryset(sel): + User = get_user_class() + return User.objects.all() + + +router = SimpleRouter() +router.register(r'users', UsersAPI, base_name='a2-api-users') -- 2.1.4