mirror of
https://github.com/turt2live/matrix-dimension.git
synced 2024-10-01 05:05:53 +00:00
Filter out bridges which aren't configured
This commit is contained in:
parent
266cf8c0d8
commit
087d15eeaa
@ -31,7 +31,7 @@ export class GitterBridge {
|
||||
|
||||
public async isBridgingEnabled(): Promise<boolean> {
|
||||
const bridges = await GitterBridgeRecord.findAll({where: {isEnabled: true}});
|
||||
return !!bridges;
|
||||
return !!bridges && bridges.length > 0;
|
||||
}
|
||||
|
||||
public async getBridgeInfo(): Promise<GitterBridgeInfo> {
|
||||
|
@ -48,6 +48,11 @@ export class IrcBridge {
|
||||
constructor(private requestingUserId: string) {
|
||||
}
|
||||
|
||||
public async isBridgingEnabled(): Promise<boolean> {
|
||||
const bridges = await IrcBridgeRecord.findAll({where: {isEnabled: true}});
|
||||
return !!bridges && bridges.length > 0;
|
||||
}
|
||||
|
||||
public async hasNetworks(): Promise<boolean> {
|
||||
const allNetworks = (await this.getAllNetworks()).filter(n => n.isEnabled);
|
||||
return allNetworks.length > 0;
|
||||
|
@ -42,7 +42,7 @@ export class SlackBridge {
|
||||
|
||||
public async isBridgingEnabled(): Promise<boolean> {
|
||||
const bridges = await SlackBridgeRecord.findAll({where: {isEnabled: true}});
|
||||
return !!bridges;
|
||||
return !!bridges && bridges.length > 0;
|
||||
}
|
||||
|
||||
public async getBridgeInfo(): Promise<SlackBridgeInfo> {
|
||||
|
@ -53,7 +53,7 @@ export class TelegramBridge {
|
||||
|
||||
public async isBridgingEnabled(): Promise<boolean> {
|
||||
const bridges = await TelegramBridgeRecord.findAll({where: {isEnabled: true}});
|
||||
return !!bridges;
|
||||
return !!bridges && bridges.length > 0;
|
||||
}
|
||||
|
||||
public async getBridgeInfo(): Promise<BridgeInfo> {
|
||||
|
@ -25,7 +25,7 @@ export class WebhooksBridge {
|
||||
|
||||
public async isBridgingEnabled(): Promise<boolean> {
|
||||
const bridges = await WebhookBridgeRecord.findAll({where: {isEnabled: true}});
|
||||
return !!bridges;
|
||||
return !!bridges && bridges.length > 0;
|
||||
}
|
||||
|
||||
public async getBridgeInfo(): Promise<WebhookBridgeInfo> {
|
||||
|
@ -12,6 +12,7 @@ import { TelegramBridge } from "../bridges/TelegramBridge";
|
||||
import { WebhooksBridge } from "../bridges/WebhooksBridge";
|
||||
import { GitterBridge } from "../bridges/GitterBridge";
|
||||
import { SlackBridge } from "../bridges/SlackBridge";
|
||||
import { AdminService } from "../api/admin/AdminService";
|
||||
|
||||
export class BridgeStore {
|
||||
|
||||
@ -23,15 +24,20 @@ export class BridgeStore {
|
||||
const enabledBridges: Bridge[] = [];
|
||||
|
||||
for (const bridgeRecord of allRecords) {
|
||||
LogService.info("BridgeStore", "Checking bridge configuration: " + bridgeRecord.name);
|
||||
let isLogicallyEnabled = await BridgeStore.hasBridgesConfigured(bridgeRecord, requestingUserId);
|
||||
try {
|
||||
if (isEnabled === true || isEnabled === false) {
|
||||
const isLogicallyEnabled = await BridgeStore.isLogicallyEnabled(bridgeRecord, requestingUserId);
|
||||
isLogicallyEnabled = await BridgeStore.isLogicallyEnabled(bridgeRecord, requestingUserId);
|
||||
if (isLogicallyEnabled !== isEnabled) continue;
|
||||
}
|
||||
|
||||
const bridgeConfig = await BridgeStore.getConfiguration(bridgeRecord, requestingUserId, inRoomId);
|
||||
enabledBridges.push(new Bridge(bridgeRecord, bridgeConfig));
|
||||
} catch (e) {
|
||||
// Skip bridges which just aren't online
|
||||
if (!isLogicallyEnabled) continue;
|
||||
|
||||
LogService.error("BridgeStore", "Failed to load configuration for bridge: " + bridgeRecord.name);
|
||||
LogService.error("BridgeStore", e);
|
||||
|
||||
@ -41,6 +47,10 @@ export class BridgeStore {
|
||||
}
|
||||
}
|
||||
|
||||
if (!AdminService.isAdmin(requestingUserId)) {
|
||||
return enabledBridges.filter(b => b.isOnline);
|
||||
}
|
||||
|
||||
return enabledBridges;
|
||||
}
|
||||
|
||||
@ -81,6 +91,25 @@ export class BridgeStore {
|
||||
} else return true;
|
||||
}
|
||||
|
||||
private static async hasBridgesConfigured(record: BridgeRecord, requestingUserId: string): Promise<boolean> {
|
||||
if (record.type === "irc") {
|
||||
const irc = new IrcBridge(requestingUserId);
|
||||
return irc.isBridgingEnabled();
|
||||
} else if (record.type === "telegram") {
|
||||
const telegram = new TelegramBridge(requestingUserId);
|
||||
return telegram.isBridgingEnabled();
|
||||
} else if (record.type === "webhooks") {
|
||||
const webhooks = new WebhooksBridge(requestingUserId);
|
||||
return webhooks.isBridgingEnabled();
|
||||
} else if (record.type === "gitter") {
|
||||
const gitter = new GitterBridge(requestingUserId);
|
||||
return gitter.isBridgingEnabled();
|
||||
} else if (record.type === "slack") {
|
||||
const slack = new SlackBridge(requestingUserId);
|
||||
return slack.isBridgingEnabled();
|
||||
} else return false;
|
||||
}
|
||||
|
||||
private static async getConfiguration(record: BridgeRecord, requestingUserId: string, inRoomId?: string): Promise<any> {
|
||||
if (record.type === "irc") {
|
||||
if (!inRoomId) return {}; // The bridge's admin config is handled by other APIs
|
||||
|
Loading…
Reference in New Issue
Block a user