Skip to content
Snippets Groups Projects
Commit dd746d75 authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Merge branch '689-invitations-person-invitation-throws-unexpected-error' into 'master'

Fix invitations of existing persons with short name

Closes #689

See merge request !1114
parents 4a7b9277 a0f54ceb
No related branches found
No related tags found
1 merge request!1114Fix invitations of existing persons with short name
Pipeline #99836 failed
...@@ -20,6 +20,12 @@ Changed ...@@ -20,6 +20,12 @@ Changed
* Rewrite of frontend using Vuetify * Rewrite of frontend using Vuetify
Fixed
~~~~~
* Invitations for existing short name did not work.
* Invitations for persons without pre-defined e-mail address did not behave correctly
Removed Removed
~~~~~~~ ~~~~~~~
......
...@@ -611,6 +611,7 @@ class AccountRegisterForm(SignupForm, ExtensibleForm): ...@@ -611,6 +611,7 @@ class AccountRegisterForm(SignupForm, ExtensibleForm):
request = kwargs.pop("request", None) request = kwargs.pop("request", None)
super(AccountRegisterForm, self).__init__(*args, **kwargs) super(AccountRegisterForm, self).__init__(*args, **kwargs)
person = None
if request.session.get("account_verified_email"): if request.session.get("account_verified_email"):
email = request.session["account_verified_email"] email = request.session["account_verified_email"]
...@@ -619,16 +620,27 @@ class AccountRegisterForm(SignupForm, ExtensibleForm): ...@@ -619,16 +620,27 @@ class AccountRegisterForm(SignupForm, ExtensibleForm):
except (Person.DoesNotExist, Person.MultipleObjectsReturned): except (Person.DoesNotExist, Person.MultipleObjectsReturned):
raise SuspiciousOperation() raise SuspiciousOperation()
self.fields["email"].disabled = True elif request.session.get("invitation_code"):
self.fields["email2"].disabled = True try:
invitation = PersonInvitation.objects.get(
key=request.session.get("invitation_code")
)
except PersonInvitation.DoesNotExist:
raise SuspiciousOperation()
if person: person = invitation.person
available_fields = [field.name for field in Person._meta.get_fields()]
if person:
self.instance = person
available_fields = [field.name for field in Person._meta.get_fields()]
if person.email:
self.fields["email"].disabled = True
self.fields["email2"].disabled = True
self.fields["email2"].initial = person.email self.fields["email2"].initial = person.email
for field in self.fields: for field in self.fields:
if field in available_fields and getattr(person, field): if field in available_fields and getattr(person, field):
self.fields[field].disabled = True self.fields[field].disabled = True
self.fields[field].initial = getattr(person, field) self.fields[field].initial = getattr(person, field)
def save(self, request): def save(self, request):
adapter = get_adapter(request) adapter = get_adapter(request)
...@@ -639,11 +651,14 @@ class AccountRegisterForm(SignupForm, ExtensibleForm): ...@@ -639,11 +651,14 @@ class AccountRegisterForm(SignupForm, ExtensibleForm):
for field in Person._meta.get_fields(): for field in Person._meta.get_fields():
if field.name in self.cleaned_data: if field.name in self.cleaned_data:
data[field.name] = self.cleaned_data[field.name] data[field.name] = self.cleaned_data[field.name]
person_qs = Person.objects.filter(email=data["email"]) if self.instance:
if not person_qs.exists(): person_qs = Person.objects.filter(pk=self.instance.pk)
if get_site_preferences()["account__auto_create_person"]:
Person.objects.create(user=user, **data)
else: else:
person_qs = Person.objects.filter(email=data["email"])
if not person_qs.exists():
if get_site_preferences()["account__auto_create_person"]:
Person.objects.create(user=user, **data)
if person_qs.exists():
person_qs.update(user=user, **data) person_qs.update(user=user, **data)
self.custom_signup(request, user) self.custom_signup(request, user)
setup_user_email(request, user, []) setup_user_email(request, user, [])
......
...@@ -51,7 +51,7 @@ from haystack.inputs import AutoQuery ...@@ -51,7 +51,7 @@ from haystack.inputs import AutoQuery
from haystack.query import SearchQuerySet from haystack.query import SearchQuerySet
from haystack.utils.loading import UnifiedIndex from haystack.utils.loading import UnifiedIndex
from health_check.views import MainView from health_check.views import MainView
from invitations.views import SendInvite, accept_invitation from invitations.views import SendInvite
from oauth2_provider.exceptions import OAuthToolkitError from oauth2_provider.exceptions import OAuthToolkitError
from oauth2_provider.models import get_application_model from oauth2_provider.models import get_application_model
from oauth2_provider.views import AuthorizationView from oauth2_provider.views import AuthorizationView
...@@ -1104,12 +1104,7 @@ class EnterInvitationCode(FormView): ...@@ -1104,12 +1104,7 @@ class EnterInvitationCode(FormView):
and not PersonInvitation.objects.get(key=code).accepted and not PersonInvitation.objects.get(key=code).accepted
and not PersonInvitation.objects.get(key=code).key_expired() and not PersonInvitation.objects.get(key=code).key_expired()
): ):
invitation = PersonInvitation.objects.get(key=code) self.request.session["invitation_code"] = code
# Mark invitation as accepted and redirect to signup
accept_invitation(
invitation=invitation, request=self.request, signal_sender=self.request.user
)
self.request.session["invitation_code_entered"] = True
return redirect("account_signup") return redirect("account_signup")
return redirect("invitations:accept-invite", code) return redirect("invitations:accept-invite", code)
...@@ -1432,7 +1427,7 @@ class AccountRegisterView(SignupView): ...@@ -1432,7 +1427,7 @@ class AccountRegisterView(SignupView):
if ( if (
not request.user.has_perm("core.can_register") not request.user.has_perm("core.can_register")
and not request.session.get("account_verified_email") and not request.session.get("account_verified_email")
and not request.session.get("invitation_code_entered") and not request.session.get("invitation_code")
): ):
raise PermissionDenied() raise PermissionDenied()
return super(AccountRegisterView, self).dispatch(request, *args, **kwargs) return super(AccountRegisterView, self).dispatch(request, *args, **kwargs)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment