Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,5 @@ registration.yaml
storybook-static
development/tempo-data/

homeserver
homeserver
.env
158 changes: 158 additions & 0 deletions apps/meteor/server/services/federation/Settings.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
import crypto from 'crypto';

import { v4 as uuidv4 } from 'uuid';

import { settings, settingsRegistry } from '../../../app/settings/server';

export const addMatrixBridgeFederationSettings = async (): Promise<void> => {
await settingsRegistry.add('Federation_Matrix_enabled', false, {
readonly: true,
type: 'boolean',
i18nLabel: 'Federation_Matrix_enabled',
i18nDescription: 'Federation_Matrix_enabled_desc',
alert: 'Old_Federation_Alert',
public: true,
group: 'Federation',
section: 'Matrix Bridge',
});

await settingsRegistry.add('Federation_Matrix_serve_well_known', true, {
readonly: true,
type: 'boolean',
i18nLabel: 'Federation_Matrix_serve_well_known',
alert: 'Federation_Matrix_serve_well_known_Alert',
group: 'Federation',
section: 'Matrix Bridge',
});

await settingsRegistry.add('Federation_Matrix_enable_ephemeral_events', false, {
readonly: true,
type: 'boolean',
i18nLabel: 'Federation_Matrix_enable_ephemeral_events',
i18nDescription: 'Federation_Matrix_enable_ephemeral_events_desc',
alert: 'Federation_Matrix_enable_ephemeral_events_Alert',
public: true,
group: 'Federation',
section: 'Matrix Bridge',
});

const uniqueId = settings.get('uniqueID') || uuidv4().slice(0, 15).replace(new RegExp('-', 'g'), '_');
const homeserverToken = crypto.createHash('sha256').update(`hs_${uniqueId}`).digest('hex');
const applicationServiceToken = crypto.createHash('sha256').update(`as_${uniqueId}`).digest('hex');
Comment on lines +40 to +41
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Generate cryptographically random tokens; don’t derive from uniqueId

Hashing a truncated/guessable identifier does not provide secrecy. Use crypto‑strong randomness so tokens are non‑derivable and rotation‑friendly.

Apply:

-const homeserverToken = crypto.createHash('sha256').update(`hs_${uniqueId}`).digest('hex');
-const applicationServiceToken = crypto.createHash('sha256').update(`as_${uniqueId}`).digest('hex');
+const homeserverToken = crypto.randomBytes(32).toString('hex');
+const applicationServiceToken = crypto.randomBytes(32).toString('hex');

Note: settingsRegistry.add should preserve existing values; random generation will be used only on first initialization.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const homeserverToken = crypto.createHash('sha256').update(`hs_${uniqueId}`).digest('hex');
const applicationServiceToken = crypto.createHash('sha256').update(`as_${uniqueId}`).digest('hex');
const homeserverToken = crypto.randomBytes(32).toString('hex');
const applicationServiceToken = crypto.randomBytes(32).toString('hex');
🤖 Prompt for AI Agents
In apps/meteor/server/services/federation/Settings.ts around lines 41-42,
replace the current tokens derived by hashing a predictable uniqueId with
cryptographically secure random tokens: generate homeserverToken and
applicationServiceToken using crypto.randomBytes (e.g., 32 bytes) and hex-encode
them so they are non-derivable and rotation-friendly; keep settingsRegistry.add
semantics so existing stored tokens are preserved and only generate and set
these random values when the settings are absent on first initialization.


const siteUrl = settings.get<string>('Site_Url');

await settingsRegistry.add('Federation_Matrix_id', `rocketchat_${uniqueId}`, {
readonly: true,
type: 'string',
i18nLabel: 'Federation_Matrix_id',
i18nDescription: 'Federation_Matrix_id_desc',
group: 'Federation',
section: 'Matrix Bridge',
});

await settingsRegistry.add('Federation_Matrix_hs_token', homeserverToken, {
readonly: true,
type: 'string',
i18nLabel: 'Federation_Matrix_hs_token',
i18nDescription: 'Federation_Matrix_hs_token_desc',
group: 'Federation',
section: 'Matrix Bridge',
});

await settingsRegistry.add('Federation_Matrix_as_token', applicationServiceToken, {
readonly: true,
type: 'string',
i18nLabel: 'Federation_Matrix_as_token',
i18nDescription: 'Federation_Matrix_as_token_desc',
group: 'Federation',
section: 'Matrix Bridge',
});
Comment on lines +54 to +70
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Treat Matrix tokens as secrets (use password type)

Federation_Matrix_hs_token and Federation_Matrix_as_token are shared-secret tokens. They should be stored as password to avoid accidental disclosure in the admin UI and logs.

 await settingsRegistry.add('Federation_Matrix_hs_token', homeserverToken, {
-  readonly: true,
-  type: 'string',
+  readonly: true,
+  type: 'password',
@@
 });
 
 await settingsRegistry.add('Federation_Matrix_as_token', applicationServiceToken, {
-  readonly: true,
-  type: 'string',
+  readonly: true,
+  type: 'password',
@@
 });
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
await settingsRegistry.add('Federation_Matrix_hs_token', homeserverToken, {
readonly: true,
type: 'string',
i18nLabel: 'Federation_Matrix_hs_token',
i18nDescription: 'Federation_Matrix_hs_token_desc',
group: 'Federation',
section: 'Matrix Bridge',
});
await settingsRegistry.add('Federation_Matrix_as_token', applicationServiceToken, {
readonly: true,
type: 'string',
i18nLabel: 'Federation_Matrix_as_token',
i18nDescription: 'Federation_Matrix_as_token_desc',
group: 'Federation',
section: 'Matrix Bridge',
});
await settingsRegistry.add('Federation_Matrix_hs_token', homeserverToken, {
readonly: true,
type: 'password',
i18nLabel: 'Federation_Matrix_hs_token',
i18nDescription: 'Federation_Matrix_hs_token_desc',
group: 'Federation',
section: 'Matrix Bridge',
});
await settingsRegistry.add('Federation_Matrix_as_token', applicationServiceToken, {
readonly: true,
type: 'password',
i18nLabel: 'Federation_Matrix_as_token',
i18nDescription: 'Federation_Matrix_as_token_desc',
group: 'Federation',
section: 'Matrix Bridge',
});
🤖 Prompt for AI Agents
In apps/meteor/server/services/federation/Settings.ts around lines 55 to 71 the
two Matrix tokens are registered with type 'string' which exposes them in the
admin UI; change both setting registrations (Federation_Matrix_hs_token and
Federation_Matrix_as_token) to use type: 'password' (keep readonly, i18n keys,
group and section as-is) so the values are treated as secrets and hidden in the
UI/logs; review any code that renders these settings to ensure it does not
inadvertently log or reveal the secret values.


await settingsRegistry.add('Federation_Matrix_homeserver_url', 'http://localhost:8008', {
readonly: true,
type: 'string',
i18nLabel: 'Federation_Matrix_homeserver_url',
i18nDescription: 'Federation_Matrix_homeserver_url_desc',
alert: 'Federation_Matrix_homeserver_url_alert',
group: 'Federation',
section: 'Matrix Bridge',
});

await settingsRegistry.add('Federation_Matrix_homeserver_domain', siteUrl, {
readonly: true,
type: 'string',
i18nLabel: 'Federation_Matrix_homeserver_domain',
i18nDescription: 'Federation_Matrix_homeserver_domain_desc',
alert: 'Federation_Matrix_homeserver_domain_alert',
group: 'Federation',
section: 'Matrix Bridge',
});

await settingsRegistry.add('Federation_Matrix_bridge_url', 'http://localhost:3300', {
readonly: true,
type: 'string',
i18nLabel: 'Federation_Matrix_bridge_url',
i18nDescription: 'Federation_Matrix_bridge_url_desc',
group: 'Federation',
section: 'Matrix Bridge',
});

await settingsRegistry.add('Federation_Matrix_bridge_localpart', 'rocket.cat', {
readonly: true,
type: 'string',
i18nLabel: 'Federation_Matrix_bridge_localpart',
i18nDescription: 'Federation_Matrix_bridge_localpart_desc',
group: 'Federation',
section: 'Matrix Bridge',
});

await settingsRegistry.add('Federation_Matrix_registration_file', '', {
readonly: true,
type: 'code',
i18nLabel: 'Federation_Matrix_registration_file',
i18nDescription: 'Federation_Matrix_registration_file_desc',
alert: 'Federation_Matrix_registration_file_Alert',
group: 'Federation',
section: 'Matrix Bridge',
});

await settingsRegistry.add('Federation_Matrix_max_size_of_public_rooms_users', 100, {
readonly: true,
type: 'int',
i18nLabel: 'Federation_Matrix_max_size_of_public_rooms_users',
i18nDescription: 'Federation_Matrix_max_size_of_public_rooms_users_desc',
alert: 'Federation_Matrix_max_size_of_public_rooms_users_Alert',
modules: ['federation'],
public: true,
enterprise: true,
invalidValue: false,
group: 'Federation',
section: 'Matrix Bridge',
});
Comment on lines +120 to +132
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Type mismatch: invalidValue must match int type; add bounds.
Using false can trigger coercion bugs. Provide numeric sentinel and range.

 await settingsRegistry.add('Federation_Matrix_max_size_of_public_rooms_users', 100, {
   readonly: true,
   type: 'int',
@@
-  invalidValue: false,
+  invalidValue: 100,
+  min: 1,
+  max: 100000,
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
await settingsRegistry.add('Federation_Matrix_max_size_of_public_rooms_users', 100, {
readonly: true,
type: 'int',
i18nLabel: 'Federation_Matrix_max_size_of_public_rooms_users',
i18nDescription: 'Federation_Matrix_max_size_of_public_rooms_users_desc',
alert: 'Federation_Matrix_max_size_of_public_rooms_users_Alert',
modules: ['federation'],
public: true,
enterprise: true,
invalidValue: false,
group: 'Federation',
section: 'Matrix Bridge',
});
await settingsRegistry.add('Federation_Matrix_max_size_of_public_rooms_users', 100, {
readonly: true,
type: 'int',
i18nLabel: 'Federation_Matrix_max_size_of_public_rooms_users',
i18nDescription: 'Federation_Matrix_max_size_of_public_rooms_users_desc',
alert: 'Federation_Matrix_max_size_of_public_rooms_users_Alert',
modules: ['federation'],
public: true,
enterprise: true,
invalidValue: 100,
min: 1,
max: 100000,
group: 'Federation',
section: 'Matrix Bridge',
});
🤖 Prompt for AI Agents
In apps/meteor/server/services/federation/Settings.ts around lines 120 to 132,
the setting defines invalidValue as boolean false which mismatches the declared
type 'int' and can cause coercion bugs; change invalidValue to a numeric
sentinel (e.g. -1) that clearly indicates "no limit" and add integer bounds (min
and max) consistent with the setting (for example min: 0 or 1 and a sensible max
like 10000) so validation will enforce the int type and range.


await settingsRegistry.add('Federation_Matrix_configuration_status', 'Invalid', {
readonly: true,
hidden: true,
type: 'string',
i18nLabel: 'Federation_Matrix_configuration_status',
i18nDescription: 'Federation_Matrix_configuration_status_desc',
public: false,
enterprise: false,
invalidValue: '',
group: 'Federation',
section: 'Matrix Bridge',
});

await settingsRegistry.add('Federation_Matrix_check_configuration_button', 'checkFederationConfiguration', {
readonly: true,
hidden: true,
type: 'action',
actionText: 'Federation_Matrix_check_configuration',
public: false,
enterprise: false,
invalidValue: '',
group: 'Federation',
section: 'Matrix Bridge',
});
};
46 changes: 34 additions & 12 deletions apps/meteor/server/settings/federation-service.ts
Original file line number Diff line number Diff line change
@@ -1,28 +1,50 @@
import { settingsRegistry } from '../../app/settings/server';

export const createFederationServiceSettings = async (): Promise<void> => {
await settingsRegistry.addGroup('Federation Service', async function () {
await settingsRegistry.addGroup('Federation', async function () {
await this.add('Federation_Service_Enabled', false, {
type: 'boolean',
i18nLabel: 'Federation_Service_Enabled',
i18nDescription: 'Federation_Service_Enabled_Description',
public: true,
enterprise: true,
modules: ['federation'],
invalidValue: false,
alert: 'Federation_Service_Alert',
});
Comment on lines 5 to 12
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Legacy service toggle should be read‑only per PR goal.
Objective says “disable all visible settings of both old implementations.” Make this non‑editable.

 await this.add('Federation_Service_Enabled', false, {
   type: 'boolean',
   public: true,
+  readonly: true,
   enterprise: true,
   modules: ['federation'],
   invalidValue: false,
   alert: 'Federation_Service_Alert',
 });
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
await this.add('Federation_Service_Enabled', false, {
type: 'boolean',
i18nLabel: 'Federation_Service_Enabled',
i18nDescription: 'Federation_Service_Enabled_Description',
public: true,
enterprise: true,
modules: ['federation'],
invalidValue: false,
alert: 'Federation_Service_Alert',
});
await this.add('Federation_Service_Enabled', false, {
type: 'boolean',
public: true,
readonly: true,
enterprise: true,
modules: ['federation'],
invalidValue: false,
alert: 'Federation_Service_Alert',
});
🤖 Prompt for AI Agents
In apps/meteor/server/settings/federation-service.ts around lines 5 to 12, the
legacy setting 'Federation_Service_Enabled' must be made non-editable; update
the options object passed to this.add to mark the setting as read-only (e.g.,
add readonly: true or the codebase's equivalent flag) while keeping the current
default and other metadata intact so the toggle is visible but cannot be changed
in the UI.


await this.add('Federation_Service_Matrix_Port', 3000, {
type: 'int',
i18nLabel: 'Federation_Service_Matrix_Port',
i18nDescription: 'Federation_Service_Matrix_Port_Description',
public: true,
alert: 'Federation_Service_Matrix_Port_Alert',
await this.add('Federation_Service_Matrix_Signing_Algorithm', 'ed25519', {
type: 'select',
public: false,
values: [{ key: 'ed25519', i18nLabel: 'ed25519' }],
enterprise: true,
modules: ['federation'],
invalidValue: 'ed25519',
});

await this.add('Federation_Service_Matrix_Signing_Key', '', {
await this.add('Federation_Service_Matrix_Signing_Version', '0', {
type: 'string',
i18nLabel: 'Federation_Service_Matrix_Signing_Key',
i18nDescription: 'Federation_Service_Matrix_Signing_Key_Description',
public: false,
readonly: true,
enterprise: true,
modules: ['federation'],
invalidValue: '0',
});

// https://spec.matrix.org/v1.16/appendices/#signing-details
await this.add('Federation_Service_Matrix_Signing_Key', '', {
type: 'password',
public: false,
enterprise: true,
modules: ['federation'],
invalidValue: '',
});

await this.add('Federation_Service_max_allowed_size_of_public_rooms_to_join', 100, {
type: 'int',
public: false,
alert: 'Federation_Service_max_allowed_size_of_public_rooms_to_join_Alert',
enterprise: true,
modules: ['federation'],
invalidValue: false,
});
Comment on lines +41 to 48
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Type mismatch: invalidValue should be a number, not boolean. Add bounds.

invalidValue: false for an int setting is inconsistent and can cause coercion issues. Use a numeric invalidValue and bound the range.

-		await this.add('Federation_Service_max_allowed_size_of_public_rooms_to_join', 100, {
+		await this.add('Federation_Service_max_allowed_size_of_public_rooms_to_join', 100, {
 			type: 'int',
 			public: false,
 			alert: 'Federation_Service_max_allowed_size_of_public_rooms_to_join_Alert',
 			enterprise: true,
 			modules: ['federation'],
-			invalidValue: false,
+			invalidValue: 100,
+			min: 1,
+			max: 100000, // adjust if you have a known upper bound
+			enableQuery: { _id: 'Federation_Service_Enabled', value: true },
 		});
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
await this.add('Federation_Service_max_allowed_size_of_public_rooms_to_join', 100, {
type: 'int',
public: false,
alert: 'Federation_Service_max_allowed_size_of_public_rooms_to_join_Alert',
enterprise: true,
modules: ['federation'],
invalidValue: false,
});
await this.add('Federation_Service_max_allowed_size_of_public_rooms_to_join', 100, {
type: 'int',
public: false,
alert: 'Federation_Service_max_allowed_size_of_public_rooms_to_join_Alert',
enterprise: true,
modules: ['federation'],
invalidValue: 100,
min: 1,
max: 100000, // adjust if you have a known upper bound
enableQuery: { _id: 'Federation_Service_Enabled', value: true },
});
🤖 Prompt for AI Agents
In apps/meteor/server/settings/federation-service.ts around lines 43 to 50, the
setting uses invalidValue: false for an int which is a type mismatch; change
invalidValue to a numeric value (e.g., 0) and add explicit numeric bounds (min
and max) to the setting definition (for example add min: 0 and max: 10000) so
the setting is validated and coercion issues are prevented.


await this.add('Federation_Service_Allow_List', '', {
Expand Down
10 changes: 9 additions & 1 deletion apps/meteor/server/settings/federation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,24 @@ export const createFederationSettings = () =>
await this.section('Rocket.Chat Federation', async function () {
await this.add('FEDERATION_Enabled', false, {
type: 'boolean',
readonly: true,
i18nLabel: 'Enabled',
i18nDescription: 'FEDERATION_Enabled',
alert: 'This_is_a_deprecated_feature_alert',
alert: 'Old_Federation_Alert',
public: true,
});

await this.add('FEDERATION_Status', 'Disabled', {
readonly: true,
hidden: true,
type: 'string',
i18nLabel: 'FEDERATION_Status',
});

await this.add('FEDERATION_Domain', '', {
type: 'string',
readonly: true,
hidden: true,
i18nLabel: 'FEDERATION_Domain',
i18nDescription: 'FEDERATION_Domain_Description',
alert: 'FEDERATION_Domain_Alert',
Expand All @@ -31,6 +35,7 @@ export const createFederationSettings = () =>

await this.add('FEDERATION_Public_Key', federationPublicKey || '', {
readonly: true,
hidden: true,
type: 'string',
multiline: true,
i18nLabel: 'FEDERATION_Public_Key',
Expand All @@ -39,6 +44,8 @@ export const createFederationSettings = () =>

await this.add('FEDERATION_Discovery_Method', 'dns', {
type: 'select',
readonly: true,
hidden: true,
values: [
{
key: 'dns',
Expand All @@ -56,6 +63,7 @@ export const createFederationSettings = () =>

await this.add('FEDERATION_Test_Setup', 'FEDERATION_Test_Setup', {
type: 'action',
hidden: true,
actionText: 'FEDERATION_Test_Setup',
});
});
Expand Down
10 changes: 8 additions & 2 deletions apps/meteor/server/settings/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,10 @@ import { createUserDataSettings } from './userDataDownload';
import { createVConfSettings } from './video-conference';
import { createWebDavSettings } from './webdav';
import { createWebRTCSettings } from './webrtc';
import { addMatrixBridgeFederationSettings } from '../services/federation/Settings';

await Promise.all([
createFederationServiceSettings(),
createAccountSettings(),
createAnalyticsSettings(),
createAssetsSettings(),
Expand All @@ -51,8 +53,6 @@ await Promise.all([
createDiscussionsSettings(),
createEmailSettings(),
createE2ESettings(),
createFederationSettings(),
createFederationServiceSettings(),
createFileUploadSettings(),
createGeneralSettings(),
createIRCSettings(),
Expand All @@ -79,3 +79,9 @@ await Promise.all([
createWebDavSettings(),
createWebRTCSettings(),
]);

// Run after all the other settings are created since it depends on some of them
await Promise.all([
createFederationSettings(), // Deprecated and not used anymore. Kept for admin UI information purposes. Remove on 8.0
addMatrixBridgeFederationSettings(), // Deprecated and not used anymore. Kept for admin UI information purposes. Remove on 8.0
]);
4 changes: 3 additions & 1 deletion ee/packages/federation-matrix/src/FederationMatrix.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ export class FederationMatrix extends ServiceClass implements IFederationMatrixS

static async create(instanceId: string, emitter?: Emitter<HomeserverEventSignatures>): Promise<FederationMatrix> {
const instance = new FederationMatrix(emitter);
const settingsSigningAlg = await Settings.get<string>('Federation_Service_Matrix_Signing_Algorithm');
const settingsSigningVersion = await Settings.get<string>('Federation_Service_Matrix_Signing_Version');
const settingsSigningKey = await Settings.get<string>('Federation_Service_Matrix_Signing_Key');

const siteUrl = await Settings.get<string>('Site_Url');
Expand All @@ -78,7 +80,7 @@ export class FederationMatrix extends ServiceClass implements IFederationMatrixS
matrixDomain: serverHostname,
version: process.env.SERVER_VERSION || '1.0',
port: Number.parseInt(process.env.SERVER_PORT || '8080', 10),
signingKey: settingsSigningKey,
signingKey: `${settingsSigningAlg} ${settingsSigningVersion} ${settingsSigningKey}`,
signingKeyPath: process.env.CONFIG_FOLDER || './rc1.signing.key',
database: {
uri: mongoUri,
Expand Down
3 changes: 0 additions & 3 deletions packages/i18n/src/locales/ar.i18n.json
Original file line number Diff line number Diff line change
Expand Up @@ -1528,8 +1528,6 @@
"FEDERATION_Domain": "النطاق",
"FEDERATION_Domain_Alert": "لا تغيره بعد تمكين الميزة، لا يمكننا معالجة تغييرات النطاق حتى الآن.",
"FEDERATION_Domain_Description": "أضف النطاق الذي يجب أن يرتبط به هذا الخادم - مثل: ‎@rocket.chat.",
"FEDERATION_Enabled": "محاولة دمج دعم الاتحاد.",
"FEDERATION_Enabled_Alert": "دعم الاتحاد عمل مستمر. لا ينصح باستخدامه في نظام الإنتاج في الوقت الحالي.",
"FEDERATION_Public_Key": "المفتاح العام",
"FEDERATION_Public_Key_Description": "هذا هو المفتاح الذي تحتاج إلى مشاركته مع نظرائك.",
"FEDERATION_Status": "الحالة",
Expand Down Expand Up @@ -1562,7 +1560,6 @@
"Federation": "اتحاد",
"Federation_Enable": "تمكين الاتحاد",
"Federation_Matrix": "اتحاد",
"Federation_Matrix_Enabled_Alert": "دعم اتحاد المصفوفة بألفا. لا ينصح باستخدامه في نظام الإنتاج في الوقت الحالي. <a target=\"_blank\" href=\"https://go.rocket.chat/i/matrix-federation\"> يمكن العثور على مزيد من المعلومات حول دعم اتحاد Matrix هنا </>",
"Federation_Matrix_as_token": "رمز AppService",
"Federation_Matrix_enabled": "تم التمكين",
"Federation_Matrix_homeserver_domain": "مجال الخادم الرئيسي",
Expand Down
2 changes: 0 additions & 2 deletions packages/i18n/src/locales/ca.i18n.json
Original file line number Diff line number Diff line change
Expand Up @@ -1517,8 +1517,6 @@
"FEDERATION_Domain": "Domini",
"FEDERATION_Domain_Alert": "No canvieu això després d’habilitar la funció, encara no podem manejar els canvis de domini.",
"FEDERATION_Domain_Description": "Afegiu el domini al qual ha d'estar vinculat aquest servidor, per exemple: @rocket.chat",
"FEDERATION_Enabled": "IIntenteu integrar el suport de la federació.",
"FEDERATION_Enabled_Alert": "La federació de suport està en progrés. El seu ús en un entorn de producció no es recomana de moment.",
"FEDERATION_Public_Key": "Clau pública",
"FEDERATION_Public_Key_Description": "Aquesta és la clau que necessita per compartir amb els seus companys.",
"FEDERATION_Status": "Estat",
Expand Down
2 changes: 0 additions & 2 deletions packages/i18n/src/locales/cs.i18n.json
Original file line number Diff line number Diff line change
Expand Up @@ -1282,8 +1282,6 @@
"FEDERATION_Domain": "Doména",
"FEDERATION_Domain_Alert": "Neměňte po povolení této funkce, zatím nelze zpracovávat změny domény.",
"FEDERATION_Domain_Description": "Přidejte doménu, na kterou by měl být tento server propojen - například: @rocket.chat.",
"FEDERATION_Enabled": "Pokus o integraci podpory Federace.",
"FEDERATION_Enabled_Alert": "Na podpoře Federace se stále pracuje. Použití v produkčním prostředí se v současné době nedoporučuje.",
"FEDERATION_Public_Key": "Veřejný klíč",
"FEDERATION_Public_Key_Description": "Toto je klíč, který musíte sdílet se svými partnery.",
"FEDERATION_Status": "Stav",
Expand Down
2 changes: 0 additions & 2 deletions packages/i18n/src/locales/da.i18n.json
Original file line number Diff line number Diff line change
Expand Up @@ -1359,8 +1359,6 @@
"FEDERATION_Domain": "Domæne",
"FEDERATION_Domain_Alert": "Ændre ikke dette efter aktivering af funktionen. Vi kan ikke håndtere domæneændringer endnu.",
"FEDERATION_Domain_Description": "Tilføj det domæne som denne server skal linkes til - for eksempel: @ rocket.chat.",
"FEDERATION_Enabled": "Forsøg på at integrere support for Federation.",
"FEDERATION_Enabled_Alert": "Support for Federation er ved at blive implementeret. Anvendelse på et produktionssystem anbefales ikke pt.",
"FEDERATION_Public_Key": "Offentlig nøgle",
"FEDERATION_Public_Key_Description": "Dette er den nøgle du skal dele med dine gruppe.",
"FEDERATION_Status": "Status",
Expand Down
2 changes: 0 additions & 2 deletions packages/i18n/src/locales/de-IN.i18n.json
Original file line number Diff line number Diff line change
Expand Up @@ -1257,8 +1257,6 @@
"FEDERATION_Domain": "Domain",
"FEDERATION_Domain_Alert": "Nach dem Aktivieren dieser Funktion darf dieser Wert nicht geändert werden. Änderungen an der Domain können wir noch nicht verarbeiten.",
"FEDERATION_Domain_Description": "Füge die Domäne hinzu, mit der dieser Server verlinkt werden soll - zum Beispiel: @ rocket.chat.",
"FEDERATION_Enabled": "Versuche, den Federation-Support zu integrieren. Um diesen Wert zu ändern, muss Rocket.Chat neu gestartet werden. ",
"FEDERATION_Enabled_Alert": "Federation-Support ist in Arbeit. Die Verwendung auf einem Produktionssystem wird derzeit nicht empfohlen.",
"FEDERATION_Public_Key": "Öffentlicher Schüssel",
"FEDERATION_Public_Key_Description": "Dies ist der Schlüssel, der mit den Peers geteilt werden muss.",
"FEDERATION_Status": "Status",
Expand Down
Loading
Loading