Skip to content

Commit

Permalink
Fix mentions in front-end + email spam
Browse files Browse the repository at this point in the history
  • Loading branch information
JhumanJ committed Oct 22, 2024
1 parent dad5c82 commit 97c4b9d
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 9 deletions.
19 changes: 14 additions & 5 deletions api/app/Notifications/Forms/FormEmailNotification.php
Original file line number Diff line number Diff line change
Expand Up @@ -127,14 +127,23 @@ private function addCustomHeaders(Email $message): void
$formId = $this->event->form->id;
$submissionId = $this->event->data['submission_id'] ?? 'unknown';
$domain = Str::after(config('app.url'), '://');
$timestamp = time();

$uniquePart = substr(md5($formId . $submissionId), 0, 8);
$messageId = "form-{$formId}-{$uniquePart}@{$domain}";
$references = "form-{$formId}@{$domain}";
// Create a unique Message-ID for each submission
$messageId = "<form-{$formId}-submission-{$submissionId}-{$timestamp}@{$domain}>";

$message->getHeaders()->remove('Message-ID');
$message->getHeaders()->addIdHeader('Message-ID', $messageId);
// Create a References header that links to the form, but not to specific submissions
$references = "<form-{$formId}@{$domain}>";

// Add our custom Message-ID as X-Custom-Message-ID
$message->getHeaders()->addTextHeader('X-Custom-Message-ID', $messageId);

// Add References header
$message->getHeaders()->addTextHeader('References', $references);

// Add a unique Thread-Index to further prevent grouping
$threadIndex = base64_encode(pack('H*', md5($formId . $submissionId . $timestamp)));
$message->getHeaders()->addTextHeader('Thread-Index', $threadIndex);
}

private function getMailData(): array
Expand Down
4 changes: 2 additions & 2 deletions client/composables/useParseMention.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export function useParseMention(content, mentionsAllowed, form, formData) {
const doc = parser.parseFromString(content, 'text/html')

// Find all elements with mention attribute
const mentionElements = doc.querySelectorAll('[mention]')
const mentionElements = doc.querySelectorAll('[mention], [mention=""]')

mentionElements.forEach(element => {
const fieldId = element.getAttribute('mention-field-id')
Expand All @@ -36,4 +36,4 @@ export function useParseMention(content, mentionsAllowed, form, formData) {

// Return the processed HTML content
return doc.body.innerHTML
}
}
4 changes: 2 additions & 2 deletions client/lib/quill/quillMentionExtension.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export default function registerMentionExtension(Quill) {
node.setAttribute('mention', 'true')

if (data && typeof data === 'object') {
node.setAttribute('mention-field-id', data.field?.nf_id || '')
node.setAttribute('mention-field-id', data.field?.id || '')
node.setAttribute('mention-field-name', data.field?.name || '')
node.setAttribute('mention-fallback', data.fallback || '')
node.textContent = data.field?.name || ''
Expand Down Expand Up @@ -53,7 +53,7 @@ export default function registerMentionExtension(Quill) {
static value(domNode) {
return {
field: {
nf_id: domNode.getAttribute('mention-field-id') || '',
id: domNode.getAttribute('mention-field-id') || '',
name: domNode.getAttribute('mention-field-name') || ''
},
fallback: domNode.getAttribute('mention-fallback') || ''
Expand Down

0 comments on commit 97c4b9d

Please sign in to comment.