Skip to content

Commit 0b6504b

Browse files
sampaiodiegoggazzo
authored andcommitted
avoid missing container errors
1 parent e0dd311 commit 0b6504b

File tree

2 files changed

+30
-21
lines changed

2 files changed

+30
-21
lines changed

apps/meteor/ee/server/startup/federation.ts

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,26 @@ import { registerFederationRoutes } from '../api/federation';
99
const logger = new Logger('Federation');
1010

1111
export const startFederationService = async (): Promise<void> => {
12-
await setupFederationMatrix(InstanceStatus.id());
12+
try {
13+
const isEnabled = await setupFederationMatrix(InstanceStatus.id());
14+
15+
api.registerService(new FederationMatrix());
1316

14-
api.registerService(new FederationMatrix());
17+
await registerFederationRoutes();
1518

16-
// TODO move to service/setup?
17-
StreamerCentral.on('broadcast', (name, eventName, args) => {
18-
if (name === 'notify-room' && eventName.endsWith('user-activity')) {
19-
const [rid] = eventName.split('/');
20-
const [user, activity] = args;
21-
void FederationMatrixService.notifyUserTyping(rid, user, activity.includes('user-typing'));
19+
// only registers the typing listener if the service is enabled
20+
if (!isEnabled) {
21+
return;
2222
}
23-
});
2423

25-
try {
26-
await registerFederationRoutes();
24+
// TODO move to service/setup?
25+
StreamerCentral.on('broadcast', (name, eventName, args) => {
26+
if (name === 'notify-room' && eventName.endsWith('user-activity')) {
27+
const [rid] = eventName.split('/');
28+
const [user, activity] = args;
29+
void FederationMatrixService.notifyUserTyping(rid, user, activity.includes('user-typing'));
30+
}
31+
});
2732
} catch (error) {
2833
logger.error('Failed to start federation-matrix service:', error);
2934
}

ee/packages/federation-matrix/src/setup.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,23 @@ import { License } from '@rocket.chat/core-services';
22
import { Emitter } from '@rocket.chat/emitter';
33
import type { HomeserverEventSignatures } from '@rocket.chat/federation-sdk';
44
import { ConfigService, createFederationContainer } from '@rocket.chat/federation-sdk';
5+
import { Logger } from '@rocket.chat/logger';
56
import { Settings } from '@rocket.chat/models';
67

78
import { registerEvents } from './events';
89

10+
const logger = new Logger('FederationSetup');
11+
912
function validateDomain(domain: string): boolean {
1013
const value = domain.trim();
1114

1215
if (!value) {
13-
console.error('The Federation domain is not set');
16+
logger.error('The Federation domain is not set');
1417
return false;
1518
}
1619

1720
if (value.toLowerCase() !== value) {
18-
console.error(`The Federation domain "${value}" cannot have uppercase letters`);
21+
logger.error(`The Federation domain "${value}" cannot have uppercase letters`);
1922
return false;
2023
}
2124

@@ -26,23 +29,17 @@ function validateDomain(domain: string): boolean {
2629
throw new Error();
2730
}
2831
} catch {
29-
console.error(`The configured Federation domain "${value}" is not valid`);
32+
logger.error(`The configured Federation domain "${value}" is not valid`);
3033
return false;
3134
}
3235

3336
return true;
3437
}
3538

36-
export async function setupFederationMatrix(instanceId: string): Promise<void> {
39+
export async function setupFederationMatrix(instanceId: string): Promise<boolean> {
3740
const settingEnabled = (await Settings.getValueById<boolean>('Federation_Service_Enabled')) || false;
3841
const serverName = (await Settings.getValueById<string>('Federation_Service_Domain')) || '';
3942

40-
const serviceEnabled = (await License.hasModule('federation')) && settingEnabled && validateDomain(serverName);
41-
if (!serviceEnabled) {
42-
console.log('Federation service is disabled');
43-
return;
44-
}
45-
4643
const processEDUTyping = (await Settings.getValueById<boolean>('Federation_Service_EDU_Process_Typing')) || false;
4744
const processEDUPresence = (await Settings.getValueById<boolean>('Federation_Service_EDU_Process_Presence')) || false;
4845
const signingKey = (await Settings.getValueById<string>('Federation_Service_Matrix_Signing_Key')) || '';
@@ -97,8 +94,15 @@ export async function setupFederationMatrix(instanceId: string): Promise<void> {
9794
config,
9895
);
9996

97+
const serviceEnabled = (await License.hasModule('federation')) && settingEnabled && validateDomain(serverName);
98+
if (!serviceEnabled) {
99+
return false;
100+
}
101+
100102
registerEvents(eventHandler, serverName, {
101103
typing: processEDUTyping,
102104
presence: processEDUPresence,
103105
});
106+
107+
return true;
104108
}

0 commit comments

Comments
 (0)