Filter out bridges which aren't configured

This commit is contained in:
Travis Ralston 2019-04-13 17:19:55 -06:00
parent 266cf8c0d8
commit 087d15eeaa
6 changed files with 39 additions and 5 deletions

View File

@ -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> {

View File

@ -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;

View File

@ -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> {

View File

@ -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> {

View File

@ -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> {

View File

@ -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