From 9ac659668f4596ee52f18344e135231cb4964394 Mon Sep 17 00:00:00 2001
From: Flavio Tarsetti <flavio.tarsetti@idiap.ch>
Date: Wed, 14 Jun 2017 18:00:53 +0200
Subject: [PATCH] [accounts] added PUT endpoint for godfather validation

---
 beat/web/accounts/api.py         | 45 ++++++++++++++++++++++++++++++++
 beat/web/accounts/api_urls.py    |  7 +++++
 beat/web/accounts/serializers.py | 11 ++++++--
 beat/web/settings/settings.py    |  2 ++
 4 files changed, 63 insertions(+), 2 deletions(-)

diff --git a/beat/web/accounts/api.py b/beat/web/accounts/api.py
index 0b20662be..fca48e617 100644
--- a/beat/web/accounts/api.py
+++ b/beat/web/accounts/api.py
@@ -40,6 +40,7 @@ from rest_framework.response import Response
 from rest_framework import status
 
 from .serializers import FullSupervisionTrackSerializer
+from .serializers import SupervisionTrackUpdateSerializer
 
 from ..common.utils import validate_restructuredtext
 from ..ui.templatetags.markup import restructuredtext
@@ -58,6 +59,7 @@ from .permissions import IsGodfatherAndAuthor
 
 from ..common.responses import BadRequestResponse, ForbiddenResponse
 
+import datetime
 import re
 
 import simplejson as json
@@ -95,3 +97,46 @@ class GodfatherListView(generics.ListAPIView):
 
 
 #----------------------------------------------------------
+
+
+class BaseUpdateSupervisionTrackView(generics.UpdateAPIView):
+    model = SupervisionTrack
+    serializer_class = SupervisionTrackUpdateSerializer
+
+    def get_permissions(self):
+        permission_classes = [permissions.IsAuthenticated, IsGodfatherAndAuthor]
+
+        self.permission_classes = permission_classes
+
+        return super(BaseUpdateSupervisionTrackView, self).get_permissions()
+
+
+#----------------------------------------------------------
+
+
+class GodfatherAddSuperviseeView(BaseUpdateSupervisionTrackView):
+    permission_classes = BaseUpdateSupervisionTrackView.permission_classes
+
+    def put(self, request, supervisee_name):
+        supervisee = User.objects.get(username=supervisee_name)
+        profile_supervisee = Profile.objects.get(user=supervisee)
+        supervisiontrack = SupervisionTrack.objects.get(godfather=request.user, supervisee=supervisee, supervisee__profile__supervision_key=models.F('supervision_key'))
+
+        supervisiontrack.is_valid = True
+
+        now = datetime.datetime.now()
+        expiration_date_delta = datetime.timedelta(days=settings.ACCOUNT_EXPIRATION_DAYS)
+        supervisiontrack.expiration_date = now + expiration_date_delta
+
+        supervisiontrack.start_date = now
+        supervisiontrack.last_validation_date = now
+        supervisee.profile.status = Profile.ACCEPTED
+
+        supervisiontrack.save()
+        supervisee.profile.save()
+
+
+        return Response(status=status.HTTP_204_NO_CONTENT)
+
+
+#----------------------------------------------------------
diff --git a/beat/web/accounts/api_urls.py b/beat/web/accounts/api_urls.py
index 554de2e85..a912e700d 100644
--- a/beat/web/accounts/api_urls.py
+++ b/beat/web/accounts/api_urls.py
@@ -34,4 +34,11 @@ urlpatterns = [
         api.GodfatherListView.as_view(),
         name='list_supervisee'
     ),
+
+    url(
+        r'^(?P<supervisee_name>[\w\W]+)/validate/$',
+        api.GodfatherAddSuperviseeView.as_view(),
+        name='validate_supervisee'
+    ),
+
 ]
diff --git a/beat/web/accounts/serializers.py b/beat/web/accounts/serializers.py
index f871480a3..491af9bda 100644
--- a/beat/web/accounts/serializers.py
+++ b/beat/web/accounts/serializers.py
@@ -70,7 +70,7 @@ class BasicSupervisionTrackSerializer(serializers.ModelSerializer):
 
     class Meta:
         model = SupervisionTrack
-        fields = ['status', 'is_valid']
+        fields = ['is_valid']
 
     #def get_supervisee(self, obj):
     #    return obj.supervisee
@@ -82,7 +82,7 @@ class BasicSupervisionTrackSerializer(serializers.ModelSerializer):
         return obj.is_valid
 
     def get_start_date(self, obj):
-        return obj.expiration_date
+        return obj.start_date
 
     def get_expiration_date(self, obj):
         return obj.expiration_date
@@ -104,3 +104,10 @@ class FullSupervisionTrackSerializer(BasicSupervisionTrackSerializer):
 
 
 #----------------------------------------------------------
+
+
+class SupervisionTrackUpdateSerializer(BasicSupervisionTrackSerializer):
+    pass
+
+
+#----------------------------------------------------------
diff --git a/beat/web/settings/settings.py b/beat/web/settings/settings.py
index 0dc550136..9c54130b0 100755
--- a/beat/web/settings/settings.py
+++ b/beat/web/settings/settings.py
@@ -217,6 +217,8 @@ DATASETS_ROOT_PATH = None
 
 ACCOUNT_ACTIVATION_DAYS  = 2
 ACCOUNT_ACTIVATION_DAYS_FROM_GODFATHER  = 7
+ACCOUNT_EXPIRATION_DAYS  = 365
+
 LOGIN_REDIRECT_URL       = '/'
 LOGIN_URL                = '/login/'
 SYSTEM_ACCOUNT           = 'system'
-- 
GitLab