all: invites -> invitations

This commit is contained in:
Jens Langhammer
2018-12-10 14:21:42 +01:00
parent 89c2b8d49c
commit 545795ebc6
14 changed files with 61 additions and 58 deletions

View File

@ -1,4 +1,4 @@
"""passbook core invite form"""
"""passbook core invitation form"""
from django import forms

View File

@ -25,7 +25,7 @@ class Migration(migrations.Migration):
],
options={
'verbose_name': 'Invite',
'verbose_name_plural': 'Invites',
'verbose_name_plural': 'Invitations',
},
),
]

View File

@ -251,7 +251,7 @@ class DebugRule(Rule):
verbose_name_plural = _('Debug Rules')
class Invite(UUIDModel):
"""Single-use invite link"""
"""Single-use invitation link"""
created_by = models.ForeignKey('User', on_delete=models.CASCADE)
expires = models.DateTimeField(default=None, blank=True, null=True)
@ -264,4 +264,4 @@ class Invite(UUIDModel):
class Meta:
verbose_name = _('Invite')
verbose_name_plural = _('Invites')
verbose_name_plural = _('Invitations')

View File

@ -8,5 +8,5 @@ from django.core.signals import Signal
user_signed_up = Signal(providing_args=['request', 'user'])
# TODO: Send this signal in admin interface
invite_created = Signal(providing_args=['request', 'invite'])
invite_used = Signal(providing_args=['request', 'invite', 'user'])
invitation_created = Signal(providing_args=['request', 'invitation'])
invitation_used = Signal(providing_args=['request', 'invitation', 'user'])

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 6.3 MiB

View File

@ -13,7 +13,7 @@ from django.views.generic import FormView
from passbook.core.forms.authentication import LoginForm, SignUpForm
from passbook.core.models import Invite, User
from passbook.core.signals import invite_used, user_signed_up
from passbook.core.signals import invitation_used, user_signed_up
from passbook.lib.config import CONFIG
LOGGER = getLogger(__name__)
@ -113,13 +113,13 @@ class LogoutView(LoginRequiredMixin, View):
class SignUpView(UserPassesTestMixin, FormView):
"""Sign up new user, optionally consume one-use invite link."""
"""Sign up new user, optionally consume one-use invitation link."""
template_name = 'login/form.html'
form_class = SignUpForm
success_url = '.'
# Invite insatnce, if invite link was used
_invite = None
# Invite insatnce, if invitation link was used
_invitation = None
# Instance of newly created user
_user = None
@ -131,13 +131,13 @@ class SignUpView(UserPassesTestMixin, FormView):
return redirect(reverse('passbook_core:overview'))
def dispatch(self, request, *args, **kwargs):
"""Check if sign-up is enabled or invite link given"""
"""Check if sign-up is enabled or invitation link given"""
allowed = False
if 'invite' in request.GET:
invites = Invite.objects.filter(uuid=request.GET.get('invite'))
allowed = invites.exists()
if 'invitation' in request.GET:
invitations = Invite.objects.filter(uuid=request.GET.get('invitation'))
allowed = invitations.exists()
if allowed:
self._invite = invites.first()
self._invitation = invitations.first()
if CONFIG.y('passbook.sign_up.enabled'):
allowed = True
if not allowed:
@ -155,21 +155,21 @@ class SignUpView(UserPassesTestMixin, FormView):
def form_valid(self, form: SignUpForm) -> HttpResponse:
"""Create user"""
self._user = SignUpView.create_user(form.cleaned_data, self.request)
self.consume_invite()
self.consume_invitation()
messages.success(self.request, _("Successfully signed up!"))
LOGGER.debug("Successfully signed up %s",
form.cleaned_data.get('email'))
return redirect(reverse('passbook_core:auth-login'))
def consume_invite(self):
"""Consume invite if an invite was used"""
if self._invite:
invite_used.send(
def consume_invitation(self):
"""Consume invitation if an invitation was used"""
if self._invitation:
invitation_used.send(
sender=self,
request=self.request,
invite=self._invite,
invitation=self._invitation,
user=self._user)
self._invite.delete()
self._invitation.delete()
@staticmethod
def create_user(data: Dict, request: HttpRequest = None) -> User: