From 312ec65b8c49656af47527d73c695c6b330340c5 Mon Sep 17 00:00:00 2001 From: Ricardo Garim Date: Fri, 26 Dec 2025 11:33:12 -0300 Subject: [PATCH] x --- .../federation-matrix/src/FederationMatrix.ts | 10 ++-------- .../api/middlewares/isFederationDomainAllowed.ts | 5 +++-- .../src/errors/FederationValidationError.ts | 13 +++++++++++++ ee/packages/federation-matrix/src/index.ts | 4 +++- 4 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 ee/packages/federation-matrix/src/errors/FederationValidationError.ts diff --git a/ee/packages/federation-matrix/src/FederationMatrix.ts b/ee/packages/federation-matrix/src/FederationMatrix.ts index f1944a804a4..db07284d760 100644 --- a/ee/packages/federation-matrix/src/FederationMatrix.ts +++ b/ee/packages/federation-matrix/src/FederationMatrix.ts @@ -8,20 +8,14 @@ import { UserStatus, } from '@rocket.chat/core-typings'; import type { MessageQuoteAttachment, IMessage, IRoom, IUser, IRoomNativeFederated } from '@rocket.chat/core-typings'; -import { - eventIdSchema, - roomIdSchema, - userIdSchema, - federationSDK, - FederationRequestError, - FederationValidationError, -} from '@rocket.chat/federation-sdk'; +import { eventIdSchema, roomIdSchema, userIdSchema, federationSDK, FederationRequestError } from '@rocket.chat/federation-sdk'; import type { EventID, UserID, FileMessageType, PresenceState } from '@rocket.chat/federation-sdk'; import { Logger } from '@rocket.chat/logger'; import { Users, Subscriptions, Messages, Rooms, Settings } from '@rocket.chat/models'; import emojione from 'emojione'; import { isFederationDomainAllowed } from './api/middlewares/isFederationDomainAllowed'; +import { FederationValidationError } from './errors/FederationValidationError'; import { toExternalMessageFormat, toExternalQuoteMessageFormat } from './helpers/message.parsers'; import { MatrixMediaService } from './services/MatrixMediaService'; diff --git a/ee/packages/federation-matrix/src/api/middlewares/isFederationDomainAllowed.ts b/ee/packages/federation-matrix/src/api/middlewares/isFederationDomainAllowed.ts index aade0a17203..7d65a29868c 100644 --- a/ee/packages/federation-matrix/src/api/middlewares/isFederationDomainAllowed.ts +++ b/ee/packages/federation-matrix/src/api/middlewares/isFederationDomainAllowed.ts @@ -1,8 +1,9 @@ import { Settings } from '@rocket.chat/core-services'; -import { extractDomainFromId } from '@rocket.chat/federation-sdk'; import { createMiddleware } from 'hono/factory'; import mem from 'mem'; +import { extractDomainFromMatrixUserId } from '../../FederationMatrix'; + // cache for 60 seconds const getAllowList = mem( async () => { @@ -39,7 +40,7 @@ export async function isFederationDomainAllowed(domains: string[]): Promise { // filter out local users (those without ':' in username) and extract domains from external users - const domains = usernames.filter((username) => username.includes(':')).map((username) => extractDomainFromId(username)); + const domains = usernames.filter((username) => username.includes(':')).map((username) => extractDomainFromMatrixUserId(username)); // if no federated users, allow (all local users) if (domains.length === 0) { diff --git a/ee/packages/federation-matrix/src/errors/FederationValidationError.ts b/ee/packages/federation-matrix/src/errors/FederationValidationError.ts new file mode 100644 index 00000000000..44f046a048f --- /dev/null +++ b/ee/packages/federation-matrix/src/errors/FederationValidationError.ts @@ -0,0 +1,13 @@ +// Local copy to avoid broken import chain in homeserver's federation-sdk +export class FederationValidationError extends Error { + public error: string; + + constructor( + public code: 'POLICY_DENIED' | 'CONNECTION_FAILED' | 'USER_NOT_FOUND', + public userMessage: string, + ) { + super(userMessage); + this.name = 'FederationValidationError'; + this.error = `federation-${code.toLowerCase().replace(/_/g, '-')}`; + } +} diff --git a/ee/packages/federation-matrix/src/index.ts b/ee/packages/federation-matrix/src/index.ts index f4fc6e0f454..b3c7c0e9511 100644 --- a/ee/packages/federation-matrix/src/index.ts +++ b/ee/packages/federation-matrix/src/index.ts @@ -2,7 +2,9 @@ import 'reflect-metadata'; export { FederationMatrix, validateFederatedUsername } from './FederationMatrix'; -export { generateEd25519RandomSecretKey, FederationValidationError } from '@rocket.chat/federation-sdk'; +export { generateEd25519RandomSecretKey } from '@rocket.chat/federation-sdk'; + +export { FederationValidationError } from './errors/FederationValidationError'; export { getFederationRoutes } from './api/routes';