feat: Allow to confirm confidant
This commit is contained in:
parent
2bc9b5ba85
commit
73c6fbf165
8 changed files with 126 additions and 1 deletions
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -35,6 +35,7 @@ INSTALLED_APPS = [
|
|||
'django.contrib.contenttypes',
|
||||
'django.contrib.sessions',
|
||||
'django.contrib.messages',
|
||||
'django.contrib.sites',
|
||||
'django.contrib.staticfiles',
|
||||
'userausfall',
|
||||
'rest_framework',
|
||||
|
|
|
@ -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()
|
|
@ -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")),
|
||||
]
|
||||
|
|
Reference in a new issue