refactor: Add Confirmation class to djeveric

This commit is contained in:
aldrin 2021-05-21 14:46:34 +02:00
parent 73c6fbf165
commit aa7ebb3f0a
6 changed files with 92 additions and 54 deletions

View file

@ -0,0 +1,14 @@
from djeveric import Confirmation
from userausfall.models import User
class ConfidantConfirmation(Confirmation):
def has_permission(self, user: User, resource: User):
return user == resource.confidant_unconfirmed
def is_confirmed(self, resource: User):
return resource.confidant_unconfirmed == resource.confidant
def confirm(self, resource: User):
resource.confidant = resource.confidant_unconfirmed
resource.save()

View file

@ -151,6 +151,13 @@ REST_FRAMEWORK = {
),
}
# Sites Framework
# https://docs.djangoproject.com/en/2.2/ref/contrib/sites/
SITE_ID = 1
USERAUSFALL_LDAP = {
'ADMIN_USER_DN': 'cn=admin,dc=local',
'ADMIN_USER_PASSWORD': os.environ.get('USERAUSFALL_LDAP_PASSWORD'),

View file

@ -1,26 +1,11 @@
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
from userausfall.rest_api.confirmations import ConfidantConfirmation
@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()
if instance.confidant_unconfirmed is not None:
ConfidantConfirmation(instance.confidant_unconfirmed, instance).send_request()