feat: Allow to confirm confidant

This commit is contained in:
aldrin 2021-05-21 11:06:33 +02:00
parent 2bc9b5ba85
commit 73c6fbf165
8 changed files with 126 additions and 1 deletions

View file

@ -8,6 +8,8 @@ class UserActivationSerializer(serializers.Serializer):
class UserSerializer(serializers.ModelSerializer):
confidant_email = serializers.EmailField()
class Meta:
model = User
fields = ("pk", "email", "username", "confidant_email")

View file

@ -1,6 +1,14 @@
from django.urls import path
from rest_framework import routers
from djeveric.rest_api import ConfirmationView
from userausfall.rest_api.views import UserViewSet
router = routers.DefaultRouter(trailing_slash=True)
router.register(r'users', UserViewSet, basename="user")
urlpatterns = [
path("confirm", ConfirmationView.as_view())
]
urlpatterns += router.urls

View file

@ -35,6 +35,7 @@ INSTALLED_APPS = [
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.sites',
'django.contrib.staticfiles',
'userausfall',
'rest_framework',

View file

@ -0,0 +1,26 @@
from django.core.exceptions import PermissionDenied
from django.db.models.signals import post_save
from django.dispatch import receiver
from rest_framework.exceptions import PermissionDenied
from djeveric.signals import request_confirmation, user_confirmed, AlreadyConfirmed
from userausfall.models import User
@receiver(post_save, sender=User)
def user_saved(sender, instance: User, **kwargs):
if (instance.confidant_unconfirmed is not None) and (instance.confidant_unconfirmed != instance.confidant):
request_confirmation(instance.confidant_unconfirmed, instance)
@receiver(user_confirmed)
def user_confirmed(sender, user: User, instance: User, **kwargs):
if user == instance.confidant_unconfirmed:
if instance.confidant_unconfirmed != instance.confidant:
# confirm the confidant
instance.confidant = instance.confidant_unconfirmed
instance.save()
else:
raise AlreadyConfirmed("The confidant has already been confirmed.")
else:
raise PermissionDenied()

View file

@ -5,6 +5,6 @@ from userausfall.rest_api import urls as rest_api_urls
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include(rest_api_urls.router.urls)),
path('api/', include("userausfall.rest_api.urls")),
path("api-auth/", include("rest_framework.urls")),
]