From fdde637f92928f0f59d3b089c889fdfe979100d0 Mon Sep 17 00:00:00 2001
From: Tasso Evangelista <tasso.evangelista@rocket.chat>
Date: Wed, 18 Sep 2024 11:29:22 -0300
Subject: [PATCH] fix: Local avatars prioritized over external avatar provider
 and remove remnant references on client of
 `Accounts_AvatarExternalProviderUrl` (#33296)

Co-authored-by: gabriellsh <40830821+gabriellsh@users.noreply.github.com>
---
 .changeset/strong-grapes-brake.md                  |  9 +++++++++
 apps/meteor/app/utils/client/getUserAvatarURL.ts   |  5 -----
 apps/meteor/app/utils/server/getUserAvatarURL.ts   |  5 -----
 apps/meteor/client/providers/AvatarUrlProvider.tsx |  8 ++------
 apps/meteor/server/routes/avatar/user.js           | 14 +++++++-------
 5 files changed, 18 insertions(+), 23 deletions(-)
 create mode 100644 .changeset/strong-grapes-brake.md

diff --git a/.changeset/strong-grapes-brake.md b/.changeset/strong-grapes-brake.md
new file mode 100644
index 00000000000..c867600a8cd
--- /dev/null
+++ b/.changeset/strong-grapes-brake.md
@@ -0,0 +1,9 @@
+---
+'@rocket.chat/meteor': patch
+---
+
+Fixed remaining direct references to external user avatar URLs
+
+Fixed local avatars having priority over external provider
+
+It mainly corrects the behavior of E2E encryption messages and desktop notifications.
diff --git a/apps/meteor/app/utils/client/getUserAvatarURL.ts b/apps/meteor/app/utils/client/getUserAvatarURL.ts
index 1a825a44fc2..d5fdd2b2d42 100644
--- a/apps/meteor/app/utils/client/getUserAvatarURL.ts
+++ b/apps/meteor/app/utils/client/getUserAvatarURL.ts
@@ -1,11 +1,6 @@
-import { settings } from '../../settings/client';
 import { getAvatarURL } from './getAvatarURL';
 
 export const getUserAvatarURL = function (username: string, cache = ''): string | undefined {
-	const externalSource = (settings.get<string>('Accounts_AvatarExternalProviderUrl') || '').trim().replace(/\/$/, '');
-	if (externalSource !== '') {
-		return externalSource.replace('{username}', username);
-	}
 	if (username == null) {
 		return;
 	}
diff --git a/apps/meteor/app/utils/server/getUserAvatarURL.ts b/apps/meteor/app/utils/server/getUserAvatarURL.ts
index b83efea1d84..d5fdd2b2d42 100644
--- a/apps/meteor/app/utils/server/getUserAvatarURL.ts
+++ b/apps/meteor/app/utils/server/getUserAvatarURL.ts
@@ -1,11 +1,6 @@
-import { settings } from '../../settings/server';
 import { getAvatarURL } from './getAvatarURL';
 
 export const getUserAvatarURL = function (username: string, cache = ''): string | undefined {
-	const externalSource = (settings.get<string>('Accounts_AvatarExternalProviderUrl') || '').trim().replace(/\/$/, '');
-	if (externalSource !== '') {
-		return externalSource.replace('{username}', username);
-	}
 	if (username == null) {
 		return;
 	}
diff --git a/apps/meteor/client/providers/AvatarUrlProvider.tsx b/apps/meteor/client/providers/AvatarUrlProvider.tsx
index b5a92c9117f..606da39360d 100644
--- a/apps/meteor/client/providers/AvatarUrlProvider.tsx
+++ b/apps/meteor/client/providers/AvatarUrlProvider.tsx
@@ -1,4 +1,4 @@
-import { AvatarUrlContext, useSetting } from '@rocket.chat/ui-contexts';
+import { AvatarUrlContext } from '@rocket.chat/ui-contexts';
 import type { ReactNode } from 'react';
 import React, { useMemo } from 'react';
 
@@ -10,19 +10,15 @@ type AvatarUrlProviderProps = {
 };
 
 const AvatarUrlProvider = ({ children }: AvatarUrlProviderProps) => {
-	const cdnAvatarUrl = String(useSetting('CDN_PREFIX') || '');
 	const contextValue = useMemo(
 		() => ({
 			getUserPathAvatar: ((): ((uid: string, etag?: string) => string) => {
-				if (cdnAvatarUrl) {
-					return (uid: string, etag?: string): string => `${cdnAvatarUrl}/avatar/${uid}${etag ? `?etag=${etag}` : ''}`;
-				}
 				return (uid: string, etag?: string): string => getURL(`/avatar/${uid}${etag ? `?etag=${etag}` : ''}`);
 			})(),
 			getRoomPathAvatar: ({ type, ...room }: any): string =>
 				roomCoordinator.getRoomDirectives(type || room.t).getAvatarPath({ username: room._id, ...room }) || '',
 		}),
-		[cdnAvatarUrl],
+		[],
 	);
 
 	return <AvatarUrlContext.Provider children={children} value={contextValue} />;
diff --git a/apps/meteor/server/routes/avatar/user.js b/apps/meteor/server/routes/avatar/user.js
index 269c2e90019..1c92d24fe30 100644
--- a/apps/meteor/server/routes/avatar/user.js
+++ b/apps/meteor/server/routes/avatar/user.js
@@ -32,6 +32,13 @@ export const userAvatar = async function (req, res) {
 		return;
 	}
 
+	if (settings.get('Accounts_AvatarExternalProviderUrl')) {
+		const response = await fetch(settings.get('Accounts_AvatarExternalProviderUrl').replace('{username}', requestUsername));
+		response.headers.forEach((value, key) => res.setHeader(key, value));
+		response.body.pipe(res);
+		return;
+	}
+
 	const reqModifiedHeader = req.headers['if-modified-since'];
 
 	const file = await Avatars.findOneByName(requestUsername);
@@ -52,13 +59,6 @@ export const userAvatar = async function (req, res) {
 		return FileUpload.get(file, req, res);
 	}
 
-	if (settings.get('Accounts_AvatarExternalProviderUrl')) {
-		const response = await fetch(settings.get('Accounts_AvatarExternalProviderUrl').replace('{username}', requestUsername));
-		response.headers.forEach((value, key) => res.setHeader(key, value));
-		response.body.pipe(res);
-		return;
-	}
-
 	// if still using "letters fallback"
 	if (!wasFallbackModified(reqModifiedHeader, res)) {
 		res.writeHead(304);
-- 
GitLab