Skip to content

Commit 17eb9cb

Browse files
Merge branch 'develop' into fix/update-message-weird-error
2 parents fc81cbb + 3825afa commit 17eb9cb

File tree

6 files changed

+45
-54
lines changed

6 files changed

+45
-54
lines changed

.changeset/green-ants-shop.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@rocket.chat/meteor': minor
3+
---
4+
5+
Fixes login using iframe authentication.

.changeset/mighty-clouds-run.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@rocket.chat/meteor": patch
3+
---
4+
5+
Fix issue where resending the welcome email could include unresolved placeholders (e.g., `[name]`, `[email]`).

apps/meteor/app/api/server/v1/users.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ import { UserChangedAuditStore } from '../../../../server/lib/auditServerEvents/
3232
import { i18n } from '../../../../server/lib/i18n';
3333
import { removeOtherTokens } from '../../../../server/lib/removeOtherTokens';
3434
import { resetUserE2EEncriptionKey } from '../../../../server/lib/resetUserE2EKey';
35-
import { sendWelcomeEmail } from '../../../../server/lib/sendWelcomeEmail';
3635
import { registerUser } from '../../../../server/methods/registerUser';
3736
import { requestDataDownload } from '../../../../server/methods/requestDataDownload';
3837
import { resetAvatar } from '../../../../server/methods/resetAvatar';
@@ -56,6 +55,7 @@ import { generateUsernameSuggestion } from '../../../lib/server/functions/getUse
5655
import { saveCustomFields } from '../../../lib/server/functions/saveCustomFields';
5756
import { saveCustomFieldsWithoutValidation } from '../../../lib/server/functions/saveCustomFieldsWithoutValidation';
5857
import { saveUser } from '../../../lib/server/functions/saveUser';
58+
import { sendWelcomeEmail } from '../../../lib/server/functions/saveUser/sendUserEmail';
5959
import { setStatusText } from '../../../lib/server/functions/setStatusText';
6060
import { setUserAvatar } from '../../../lib/server/functions/setUserAvatar';
6161
import { setUsernameWithValidation } from '../../../lib/server/functions/setUsername';
@@ -66,6 +66,7 @@ import { notifyOnUserChange, notifyOnUserChangeAsync } from '../../../lib/server
6666
import { generateAccessToken } from '../../../lib/server/methods/createToken';
6767
import { deleteUserOwnAccount } from '../../../lib/server/methods/deleteUserOwnAccount';
6868
import { settings } from '../../../settings/server';
69+
import { isSMTPConfigured } from '../../../utils/server/functions/isSMTPConfigured';
6970
import { getURL } from '../../../utils/server/getURL';
7071
import { API } from '../api';
7172
import { getPaginationItems } from '../helpers/getPaginationItems';
@@ -634,7 +635,22 @@ API.v1.addRoute(
634635
{
635636
async post() {
636637
const { email } = this.bodyParams;
637-
await sendWelcomeEmail(email);
638+
639+
if (!isSMTPConfigured()) {
640+
throw new MeteorError('error-email-send-failed', 'SMTP is not configured', {
641+
method: 'sendWelcomeEmail',
642+
});
643+
}
644+
645+
const user = await Users.findOneByEmailAddress(email.trim(), { projection: { name: 1 } });
646+
647+
if (!user) {
648+
throw new MeteorError('error-invalid-user', 'Invalid user', {
649+
method: 'sendWelcomeEmail',
650+
});
651+
}
652+
653+
await sendWelcomeEmail({ ...user, email });
638654

639655
return API.v1.success();
640656
},

apps/meteor/app/lib/server/functions/saveUser/sendUserEmail.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export async function sendUserEmail(subject: string, html: string, userData: Sav
2828
html,
2929
data: {
3030
email: userData.email,
31-
password: userData.password,
31+
password: userData.password ?? '******',
3232
...(typeof userData.name !== 'undefined' ? { name: userData.name } : {}),
3333
},
3434
};
@@ -45,10 +45,10 @@ export async function sendUserEmail(subject: string, html: string, userData: Sav
4545
}
4646
}
4747

48-
export async function sendWelcomeEmail(userData: SaveUserData) {
48+
export async function sendWelcomeEmail(userData: Pick<SaveUserData, 'email' | 'name' | 'password'>) {
4949
return sendUserEmail(settings.get('Accounts_UserAddedEmail_Subject'), html, userData);
5050
}
5151

52-
export async function sendPasswordEmail(userData: SaveUserData) {
52+
export async function sendPasswordEmail(userData: Pick<SaveUserData, 'email' | 'name' | 'password'>) {
5353
return sendUserEmail(settings.get('Password_Changed_Email_Subject'), passwordChangedHtml, userData);
5454
}

apps/meteor/client/hooks/iframe/useIframe.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { useLoginWithIframe, useLoginWithToken, useSetting } from '@rocket.chat/ui-contexts';
2-
import { useCallback, useState } from 'react';
2+
import { useCallback, useEffect, useState } from 'react';
33

44
export const useIframe = () => {
55
const [iframeLoginUrl, setIframeLoginUrl] = useState<string | undefined>(undefined);
@@ -12,6 +12,8 @@ export const useIframe = () => {
1212
const iframeLogin = useLoginWithIframe();
1313
const tokenLogin = useLoginWithToken();
1414

15+
const enabled = Boolean(iframeEnabled && accountIframeUrl && apiUrl && apiMethod);
16+
1517
const loginWithToken = useCallback(
1618
(tokenData: string | { loginToken: string } | { token: string }, callback?: (error: Error | null | undefined) => void) => {
1719
if (typeof tokenData === 'string') {
@@ -31,6 +33,10 @@ export const useIframe = () => {
3133

3234
const tryLogin = useCallback(
3335
async (callback?: (error: Error | null | undefined, result: unknown) => void) => {
36+
if (!enabled) {
37+
return;
38+
}
39+
3440
let url = accountIframeUrl;
3541
let separator = '?';
3642
if (url.indexOf('?') > -1) {
@@ -43,9 +49,7 @@ export const useIframe = () => {
4349

4450
const result = await fetch(apiUrl, {
4551
method: apiMethod,
46-
headers: {
47-
'Content-Type': 'application/json',
48-
},
52+
headers: undefined,
4953
credentials: 'include',
5054
});
5155

@@ -64,11 +68,15 @@ export const useIframe = () => {
6468
callback?.(error, await result.json());
6569
});
6670
},
67-
[apiMethod, apiUrl, accountIframeUrl, loginWithToken],
71+
[apiMethod, apiUrl, accountIframeUrl, loginWithToken, enabled],
6872
);
6973

74+
useEffect(() => {
75+
tryLogin();
76+
}, [tryLogin]);
77+
7078
return {
71-
enabled: Boolean(iframeEnabled && accountIframeUrl && apiUrl && apiMethod),
79+
enabled,
7280
tryLogin,
7381
loginWithToken,
7482
iframeLoginUrl,

apps/meteor/server/lib/sendWelcomeEmail.ts

Lines changed: 0 additions & 43 deletions
This file was deleted.

0 commit comments

Comments
 (0)