mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-08-16 06:24:12 +02:00
wip
This commit is contained in:
parent
c0f0cf8cff
commit
a2e6238b18
1 changed files with 53 additions and 27 deletions
|
@ -1184,11 +1184,13 @@ class DomainAddUserView(DomainFormBaseView):
|
||||||
return reverse("domain-users", kwargs={"pk": self.object.pk})
|
return reverse("domain-users", kwargs={"pk": self.object.pk})
|
||||||
|
|
||||||
def _domain_abs_url(self):
|
def _domain_abs_url(self):
|
||||||
"""Get an absolute URL for this domain."""
|
"""Get an absolute URL for this domain.
|
||||||
|
Used by the email helper."""
|
||||||
return self.request.build_absolute_uri(reverse("domain", kwargs={"pk": self.object.id}))
|
return self.request.build_absolute_uri(reverse("domain", kwargs={"pk": self.object.id}))
|
||||||
|
|
||||||
def _is_member_of_different_org(self, email, requestor, requested_user):
|
def _is_member_of_different_org(self, email, requestor, requested_user):
|
||||||
"""Verifies if an email belongs to a different organization as a member or invited member."""
|
"""Verifies if an email belongs to a different organization as a member or invited member.
|
||||||
|
Used by the email helper."""
|
||||||
# Check if user is a already member of a different organization than the requestor's org
|
# Check if user is a already member of a different organization than the requestor's org
|
||||||
requestor_org = UserPortfolioPermission.objects.filter(user=requestor).first().portfolio
|
requestor_org = UserPortfolioPermission.objects.filter(user=requestor).first().portfolio
|
||||||
existing_org_permission = UserPortfolioPermission.objects.filter(user=requested_user).first()
|
existing_org_permission = UserPortfolioPermission.objects.filter(user=requested_user).first()
|
||||||
|
@ -1225,22 +1227,27 @@ class DomainAddUserView(DomainFormBaseView):
|
||||||
raises EmailSendingError
|
raises EmailSendingError
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Set a default email address to send to for staff
|
print('_send_domain_invitation_email')
|
||||||
|
|
||||||
|
# FROM email for staff
|
||||||
requestor_email = settings.DEFAULT_FROM_EMAIL
|
requestor_email = settings.DEFAULT_FROM_EMAIL
|
||||||
|
|
||||||
# Check if the email requestor has a valid email address
|
# FROM email for users
|
||||||
if not requestor.is_staff and requestor.email is not None and requestor.email.strip() != "":
|
if not requestor.is_staff:
|
||||||
requestor_email = requestor.email
|
if requestor.email is not None and requestor.email.strip() != "":
|
||||||
elif not requestor.is_staff:
|
requestor_email = requestor.email
|
||||||
messages.error(self.request, "Can't send invitation email. No email is associated with your account.")
|
else:
|
||||||
logger.error(
|
# The user is not staff and does not have an email
|
||||||
f"Can't send email to '{email}' on domain '{self.object}'."
|
logger.error(
|
||||||
f"No email exists for the requestor '{requestor.username}'.",
|
f"Can't send email to '{email}' on domain '{self.object}'."
|
||||||
exc_info=True,
|
f"No email exists for the requestor '{requestor.username}'.",
|
||||||
)
|
exc_info=True,
|
||||||
return None
|
)
|
||||||
|
# The None returned here will trigger a specific error alert
|
||||||
|
return None
|
||||||
|
|
||||||
# Check is user is a member or invited member of a different org from this domain's org
|
|
||||||
|
# Check is user is a member or invited member of a different org
|
||||||
if flag_is_active_for_user(requestor, "organization_feature") and self._is_member_of_different_org(
|
if flag_is_active_for_user(requestor, "organization_feature") and self._is_member_of_different_org(
|
||||||
email, requestor, requested_user
|
email, requestor, requested_user
|
||||||
):
|
):
|
||||||
|
@ -1252,8 +1259,8 @@ class DomainAddUserView(DomainFormBaseView):
|
||||||
invite = DomainInvitation.objects.get(email=email, domain=self.object)
|
invite = DomainInvitation.objects.get(email=email, domain=self.object)
|
||||||
# check if the invite has already been accepted or has a canceled invite
|
# check if the invite has already been accepted or has a canceled invite
|
||||||
add_success = self._check_invite_status(invite, email)
|
add_success = self._check_invite_status(invite, email)
|
||||||
except Exception:
|
except Exception as exeption:
|
||||||
logger.error("An error occured")
|
logger.error(f"Invite does not exist: {exeption}")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
send_templated_email(
|
send_templated_email(
|
||||||
|
@ -1275,14 +1282,25 @@ class DomainAddUserView(DomainFormBaseView):
|
||||||
)
|
)
|
||||||
logger.info(exc)
|
logger.info(exc)
|
||||||
raise EmailSendingError("Could not send email invitation.") from exc
|
raise EmailSendingError("Could not send email invitation.") from exc
|
||||||
else:
|
# else:
|
||||||
if add_success:
|
# if add_success:
|
||||||
messages.success(self.request, f"{email} has been invited to this domain.")
|
# messages.success(self.request, f"{email} has been invited to this domain.")
|
||||||
|
|
||||||
|
return add_success
|
||||||
|
|
||||||
def _make_invitation(self, email_address: str, requestor: User):
|
def _make_invitation(self, email_address: str, requestor: User):
|
||||||
"""Make a Domain invitation for this email and redirect with a message."""
|
"""Make a Domain invitation for this email and redirect with a message."""
|
||||||
try:
|
try:
|
||||||
self._send_domain_invitation_email(email=email_address, requestor=requestor)
|
print('_make_invitation')
|
||||||
|
add_success = self._send_domain_invitation_email(email=email_address, requestor=requestor)
|
||||||
|
|
||||||
|
if add_success is None:
|
||||||
|
messages.error(self.request, "Can't send invitation email. No email is associated with your account.")
|
||||||
|
elif add_success == True:
|
||||||
|
messages.success(self.request, f"{email_address} has been invited to this domain.")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
except EmailSendingError:
|
except EmailSendingError:
|
||||||
messages.warning(self.request, "Could not send email invitation.")
|
messages.warning(self.request, "Could not send email invitation.")
|
||||||
else:
|
else:
|
||||||
|
@ -1295,21 +1313,28 @@ class DomainAddUserView(DomainFormBaseView):
|
||||||
Throws EmailSendingError."""
|
Throws EmailSendingError."""
|
||||||
requested_email = form.cleaned_data["email"]
|
requested_email = form.cleaned_data["email"]
|
||||||
requestor = self.request.user
|
requestor = self.request.user
|
||||||
email_success = False
|
should_add_user_domain_role = False
|
||||||
# look up a user with that email
|
# look up a user with that email
|
||||||
try:
|
try:
|
||||||
requested_user = User.objects.get(email=requested_email)
|
requested_user = User.objects.get(email=requested_email)
|
||||||
except User.DoesNotExist:
|
except User.DoesNotExist:
|
||||||
# no matching user, go make an invitation
|
# no matching user, go make an invitation
|
||||||
email_success = True
|
print('User.DoesNotExist')
|
||||||
return self._make_invitation(requested_email, requestor)
|
return self._make_invitation(requested_email, requestor)
|
||||||
else:
|
else:
|
||||||
# if user already exists then just send an email
|
# if user already exists then just send an email
|
||||||
try:
|
try:
|
||||||
self._send_domain_invitation_email(
|
print('else block after User.DoesNotExist - user already exists then just send an email')
|
||||||
|
add_success = self._send_domain_invitation_email(
|
||||||
requested_email, requestor, requested_user=requested_user, add_success=False
|
requested_email, requestor, requested_user=requested_user, add_success=False
|
||||||
)
|
)
|
||||||
email_success = True
|
|
||||||
|
if add_success is None:
|
||||||
|
messages.error(self.request, "Can't send invitation email. No email is associated with your account.")
|
||||||
|
elif add_success == True:
|
||||||
|
messages.success(self.request, f"{requested_email} has been invited to this domain.")
|
||||||
|
|
||||||
|
should_add_user_domain_role = True
|
||||||
except EmailSendingError:
|
except EmailSendingError:
|
||||||
logger.warn(
|
logger.warn(
|
||||||
"Could not send email invitation (EmailSendingError)",
|
"Could not send email invitation (EmailSendingError)",
|
||||||
|
@ -1317,7 +1342,7 @@ class DomainAddUserView(DomainFormBaseView):
|
||||||
exc_info=True,
|
exc_info=True,
|
||||||
)
|
)
|
||||||
messages.warning(self.request, "Could not send email invitation.")
|
messages.warning(self.request, "Could not send email invitation.")
|
||||||
email_success = True
|
should_add_user_domain_role = True
|
||||||
except OutsideOrgMemberError:
|
except OutsideOrgMemberError:
|
||||||
logger.warn(
|
logger.warn(
|
||||||
"Could not send email. Can not invite member of a .gov organization to a different organization.",
|
"Could not send email. Can not invite member of a .gov organization to a different organization.",
|
||||||
|
@ -1335,8 +1360,9 @@ class DomainAddUserView(DomainFormBaseView):
|
||||||
exc_info=True,
|
exc_info=True,
|
||||||
)
|
)
|
||||||
messages.warning(self.request, "Could not send email invitation.")
|
messages.warning(self.request, "Could not send email invitation.")
|
||||||
if email_success:
|
if should_add_user_domain_role:
|
||||||
try:
|
try:
|
||||||
|
print('will add domain role')
|
||||||
UserDomainRole.objects.create(
|
UserDomainRole.objects.create(
|
||||||
user=requested_user,
|
user=requested_user,
|
||||||
domain=self.object,
|
domain=self.object,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue