refactor: Add Confirmation class to djeveric
This commit is contained in:
parent
73c6fbf165
commit
aa7ebb3f0a
6 changed files with 92 additions and 54 deletions
14
userausfall/rest_api/confirmations.py
Normal file
14
userausfall/rest_api/confirmations.py
Normal 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()
|
|
@ -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'),
|
||||
|
|
|
@ -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()
|
||||
|
|
Reference in a new issue