diff --git a/gatehouse_app/api/v1/organizations/invites.py b/gatehouse_app/api/v1/organizations/invites.py index 762d5a2..1ac718a 100644 --- a/gatehouse_app/api/v1/organizations/invites.py +++ b/gatehouse_app/api/v1/organizations/invites.py @@ -243,6 +243,30 @@ def accept_invite(token): invite.accept() + if invite.invited_by and invite.invited_by.email: + from gatehouse_app.services.email_templates import build_invite_accepted_html + from gatehouse_app.services.notification_service import NotificationService + + member_display = user.full_name or user.email + inviter_display = invite.invited_by.full_name or invite.invited_by.email + org_link = f"{current_app.config.get('APP_URL', '')}/organizations/{invite.organization_id}" + + html_body = build_invite_accepted_html( + inviter_name=inviter_display, + member_name=member_display, + member_email=user.email, + org_name=invite.organization.name, + role=invite.role, + org_link=org_link, + ) + + NotificationService._send_email_async( + to_address=invite.invited_by.email, + subject=f"{member_display} accepted your invitation to {invite.organization.name}", + body=f"{member_display} has accepted your invitation to join {invite.organization.name} on Secuird.", + html_body=html_body, + ) + has_webauthn = user.has_webauthn_enabled() has_totp = user.has_totp_enabled() diff --git a/gatehouse_app/services/email_templates.py b/gatehouse_app/services/email_templates.py index ec4d81d..4e6fc9c 100644 --- a/gatehouse_app/services/email_templates.py +++ b/gatehouse_app/services/email_templates.py @@ -562,3 +562,51 @@ def build_contact_enquiry_html(
{message_display}
''' return get_base_html(content, f"Secuird Website: {type_label}", f"New {type_label} from {submitter_email}") + + +def build_invite_accepted_html( + inviter_name: str, + member_name: str, + member_email: str, + org_name: str, + role: str, + org_link: Optional[str] = None, +) -> str: + """Build invite accepted notification email. + + Args: + inviter_name: Name of the person who sent the invite + member_name: Name of the person who accepted + member_email: Email of the person who accepted + org_name: Organization name + role: Role assigned to the member + org_link: Optional link to view the organization + + Returns: + HTML email string + """ + content = f''' ++ {member_name} has accepted your invitation to join {org_name} on Secuird. +
+ {get_alert_box(f"{member_name} ({member_email}) has joined {org_name}", "success", "✅")} +
+ Membership Details+ |
+