diff --git a/docker-compose.yml b/docker-compose.yml index 4b1bece..01cd4fd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -33,7 +33,7 @@ services: MONGO_AUTH_SOURCE: ${MONGO_AUTH_SOURCE:-mqtt} MONGO_URL: ${MONGO_URL:-} MONGO_DB_NAME: ${MONGO_DB_NAME:-mqtt} - HUBOT_DISCORD_PERMISSION_GUILD_ID: ${HUBOT_DISCORD_PERMISSION_GUILD_ID:-} + HUBOT_DISCORD_PERMISSION_GUILD_ID: ${MQTT_ADMIN_GUILD_ID:-} MQTT_ADMIN_GUILD_ID: ${MQTT_ADMIN_GUILD_ID:-} MQTT_ADMIN_ROLE_IDS: ${MQTT_ADMIN_ROLE_IDS:-} extra_hosts: diff --git a/scripts/lib/discord-role-permissions.js b/scripts/lib/discord-role-permissions.js index 18958fa..1e6f9de 100644 --- a/scripts/lib/discord-role-permissions.js +++ b/scripts/lib/discord-role-permissions.js @@ -64,12 +64,12 @@ function hasAnyRole(roleCollection, roleIds) { function getPermissionGuildId(context) { const rawMessage = getRawMessageFromContext(context); - return String( - process.env.HUBOT_DISCORD_PERMISSION_GUILD_ID - ?? process.env.MQTT_ADMIN_GUILD_ID - ?? rawMessage?.guildId - ?? "", - ).trim(); + return [ + process.env.MQTT_ADMIN_GUILD_ID, + rawMessage?.guildId, + ] + .map((value) => String(value ?? "").trim()) + .find(Boolean) ?? ""; } export function createDiscordRolePermissionProvider(robot) { diff --git a/test/discord-role-permissions.test.js b/test/discord-role-permissions.test.js index 17939d8..07dcc22 100644 --- a/test/discord-role-permissions.test.js +++ b/test/discord-role-permissions.test.js @@ -79,6 +79,21 @@ test("Discord role permission provider fetches configured guild membership for D assert.equal(await provider.hasRole(null, ["env:MQTT_ADMIN_ROLE_IDS"], createContext({ guildId: null })), true); }); +test("Discord role permission provider falls back when permission guild env is empty", async () => { + process.env.HUBOT_DISCORD_PERMISSION_GUILD_ID = ""; + process.env.MQTT_ADMIN_GUILD_ID = "929659839196561419"; + process.env.MQTT_ADMIN_ROLE_IDS = "1"; + const robot = createRobot(); + robot.fetchedGuildMembers.set("505598218306977793", { + roles: { + cache: new Map([["1", { id: "1" }]]), + }, + }); + const provider = createDiscordRolePermissionProvider(robot); + + assert.equal(await provider.hasRole(null, ["env:MQTT_ADMIN_ROLE_IDS"], createContext({ guildId: null })), true); +}); + test("installDiscordRolePermissionProvider installs provider once", () => { const robot = createRobot();