Skip to content

Commit

Permalink
Allow config.disableServerACL to disable `ServerBanSynchronisationP…
Browse files Browse the repository at this point in the history
…rotection` (#339)

* Update for MPS ~0.16.0.

* Update for new MPS ProtectionsManager.

Part of #317.

* `config.disableServerACL` now disabled `ServerBanSynchronisationProtection`

Fixes #317.
  • Loading branch information
Gnuxie authored Apr 14, 2024
1 parent 198b65e commit 97482aa
Show file tree
Hide file tree
Showing 5 changed files with 92 additions and 27 deletions.
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,8 @@
"js-yaml": "^4.1.0",
"jsdom": "^24.0.0",
"matrix-appservice-bridge": "^9.0.1",
"matrix-protection-suite": "npm:@gnuxie/matrix-protection-suite@0.15.0",
"matrix-protection-suite-for-matrix-bot-sdk": "npm:@gnuxie/matrix-protection-suite-for-matrix-bot-sdk@0.15.0",
"matrix-protection-suite": "npm:@gnuxie/matrix-protection-suite@0.16.0",
"matrix-protection-suite-for-matrix-bot-sdk": "npm:@gnuxie/matrix-protection-suite-for-matrix-bot-sdk@0.16.1",
"parse-duration": "^1.0.2",
"pg": "^8.8.0",
"shell-quote": "^1.7.3",
Expand Down
3 changes: 2 additions & 1 deletion src/draupnirfactory/DraupnirFactory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ export class DraupnirFactory {
roomMembershipManager,
client,
clientPlatform,
clientUserID
clientUserID,
config
);
if (isError(protectedRoomsSet)) {
return protectedRoomsSet;
Expand Down
61 changes: 46 additions & 15 deletions src/draupnirfactory/DraupnirProtectedRoomsSet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,14 @@ limitations under the License.
* are NOT distributed, contributed, committed, or licensed under the Apache License.
*/

import { ActionResult, ClientPlatform, MJOLNIR_PROTECTED_ROOMS_EVENT_TYPE, MJOLNIR_WATCHED_POLICY_ROOMS_EVENT_TYPE, MatrixRoomID, MjolnirEnabledProtectionsEvent, MjolnirEnabledProtectionsEventType, MjolnirPolicyRoomsConfig, MjolnirProtectedRoomsConfig, MjolnirProtectedRoomsEvent, MjolnirProtectionSettingsEventType, MjolnirProtectionsConfig, MjolnirWatchedPolicyRoomsEvent, Ok, PolicyListConfig, PolicyRoomManager, ProtectedRoomsConfig, ProtectedRoomsSet, ProtectionsConfig, RoomJoiner, RoomMembershipManager, RoomStateManager, SetMembership, SetRoomState, StandardProtectedRoomsSet, StandardSetMembership, StandardSetRoomState, StringUserID, isError } from "matrix-protection-suite";
import { ActionResult, ClientPlatform, Logger, MJOLNIR_PROTECTED_ROOMS_EVENT_TYPE, MJOLNIR_WATCHED_POLICY_ROOMS_EVENT_TYPE, MatrixRoomID, MissingProtectionCB, MjolnirEnabledProtectionsEvent, MjolnirEnabledProtectionsEventType, MjolnirPolicyRoomsConfig, MjolnirProtectedRoomsConfig, MjolnirProtectedRoomsEvent, MjolnirProtectionSettingsEventType, MjolnirProtectionsConfig, MjolnirWatchedPolicyRoomsEvent, Ok, PolicyListConfig, PolicyRoomManager, ProtectedRoomsConfig, ProtectedRoomsSet, ProtectionsManager, RoomJoiner, RoomMembershipManager, RoomStateManager, SetMembership, SetRoomState, StandardProtectedRoomsSet, StandardProtectionsManager, StandardSetMembership, StandardSetRoomState, StringUserID, isError } from "matrix-protection-suite";
import { BotSDKMatrixAccountData, BotSDKMatrixStateData, MatrixSendClient } from "matrix-protection-suite-for-matrix-bot-sdk";
import { DefaultEnabledProtectionsMigration } from "../protections/DefaultEnabledProtectionsMigration";
import '../protections/DraupnirProtectionsIndex';
import { IConfig } from "../config";
import { runProtectionConfigHooks } from "../protections/ConfigHooks";

const log = new Logger('DraupnirProtectedRoomsSet');

async function makePolicyListConfig(
client: MatrixSendClient,
Expand Down Expand Up @@ -81,30 +85,55 @@ async function makeSetRoomState(
);
}

async function makeProtectionConfig(
function missingProtectionCB(protectionName: string): void {
log.warn(`Unable to find a protection description for the protection named`, protectionName);
}

// FIXME: https://github.com/the-draupnir-project/Draupnir/issues/338
function makeMissingProtectionCB(): MissingProtectionCB {
return missingProtectionCB
}

async function makeProtectionsManager(
client: MatrixSendClient,
roomStateManager: RoomStateManager,
managementRoom: MatrixRoomID
): Promise<ActionResult<ProtectionsConfig>> {
managementRoom: MatrixRoomID,
config: IConfig
): Promise<ActionResult<ProtectionsManager>> {
const result = await roomStateManager.getRoomStateRevisionIssuer(
managementRoom
);
if (isError(result)) {
return result;
}
return Ok(new MjolnirProtectionsConfig(
const protectionsConfigResult = await MjolnirProtectionsConfig.create(
new BotSDKMatrixAccountData<MjolnirEnabledProtectionsEvent>(
MjolnirEnabledProtectionsEventType,
MjolnirEnabledProtectionsEvent,
client
),
new BotSDKMatrixStateData(
MjolnirProtectionSettingsEventType,
result.ok,
client
),
DefaultEnabledProtectionsMigration,
));
{
migrationHandler: DefaultEnabledProtectionsMigration,
missingProtectionCB: makeMissingProtectionCB()
}
);
if (isError(protectionsConfigResult)) {
return protectionsConfigResult;
}
const hookResult = await runProtectionConfigHooks(config, protectionsConfigResult.ok);
if (isError(hookResult)) {
return hookResult;
}
return Ok(
new StandardProtectionsManager(
protectionsConfigResult.ok,
new BotSDKMatrixStateData(
MjolnirProtectionSettingsEventType,
result.ok,
client
)
)
);
}


Expand All @@ -115,7 +144,8 @@ export async function makeProtectedRoomsSet(
roomMembershipManager: RoomMembershipManager,
client: MatrixSendClient,
clientPlatform: ClientPlatform,
userID: StringUserID
userID: StringUserID,
config: IConfig,
): Promise<ActionResult<ProtectedRoomsSet>> {
const protectedRoomsConfig = await makeProtectedRoomsConfig(client, clientPlatform.toRoomJoiner())
if (isError(protectedRoomsConfig)) {
Expand All @@ -139,10 +169,11 @@ export async function makeProtectedRoomsSet(
if (isError(policyListConfig)) {
return policyListConfig;
}
const protectionsConfig = await makeProtectionConfig(
const protectionsConfig = await makeProtectionsManager(
client,
roomStateManager,
managementRoom
managementRoom,
config
);
if (isError(protectionsConfig)) {
return protectionsConfig;
Expand Down
33 changes: 33 additions & 0 deletions src/protections/ConfigHooks.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// Copyright 2024 Gnuxie <[email protected]>
//
// SPDX-License-Identifier: AFL-3.0

import { ActionResult, Ok, ProtectionsConfig, ServerBanSynchronisationProtection, isError } from "matrix-protection-suite";
import { IConfig } from "../config";

type ConfigHook = (config: IConfig, protectionsConfig: ProtectionsConfig) => Promise<ActionResult<void>>;

const hooks: ConfigHook[] = [
async function disableServerACL (config, protectionsConfig) {
if (config.disableServerACL) {
return await protectionsConfig.disableProtection(ServerBanSynchronisationProtection.name);
} else {
return Ok(undefined);
}
}
]

/**
* Introduced to allow the legacy option `config.disableServerACL` to map onto
* MPS's ServerBanSynchronisationProtection. I think we need to deprecate the
* option and offer something else.
*/
export async function runProtectionConfigHooks(config: IConfig, protectionsConfig: ProtectionsConfig): Promise<ActionResult<void>> {
for (const hook of hooks) {
const result = await hook(config, protectionsConfig);
if (isError(result)) {
return result;
}
}
return Ok(undefined);
}
18 changes: 9 additions & 9 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2505,15 +2505,15 @@ matrix-appservice@^2.0.0:
request-promise "^4.2.6"
sanitize-html "^2.8.0"

"matrix-protection-suite-for-matrix-bot-sdk@npm:@gnuxie/matrix-protection-suite-for-matrix-bot-sdk@0.15.0":
version "0.15.0"
resolved "https://registry.yarnpkg.com/@gnuxie/matrix-protection-suite-for-matrix-bot-sdk/-/matrix-protection-suite-for-matrix-bot-sdk-0.15.0.tgz#d59c51af79b3d198791a065fed16bd65b52dac33"
integrity sha512-U4CqeTBBwuI/kQFjT5muFwIoNkCopb5yG4TXvEEJqWy+Vt2NrAHV3UGwr5t/fcBYzzC+GLDYlRQkG5B9x0n3YA==

"matrix-protection-suite@npm:@gnuxie/matrix-protection-suite@0.15.0":
version "0.15.0"
resolved "https://registry.yarnpkg.com/@gnuxie/matrix-protection-suite/-/matrix-protection-suite-0.15.0.tgz#7a876e4f670ac8d513e23eb4d4919d1f67f19d1c"
integrity sha512-2E75q9KEj1nz9V/5I7dOLRDTh1czDEftppbcr4DvPnJeXiJsLJ5eiSqd/hbr0AN0/PS+rICPgOqGOEbXXsk3uQ==
"matrix-protection-suite-for-matrix-bot-sdk@npm:@gnuxie/matrix-protection-suite-for-matrix-bot-sdk@0.16.1":
version "0.16.1"
resolved "https://registry.yarnpkg.com/@gnuxie/matrix-protection-suite-for-matrix-bot-sdk/-/matrix-protection-suite-for-matrix-bot-sdk-0.16.1.tgz#322d6cb88cb158140f432e1f853a69e8697cd6a5"
integrity sha512-fipZknx+QNuwNHV+er6LWdnUJ8/6NhuIpqP9O8zdMVC8Wn+/vNcAzTKCO3k9ulDNYtTgA8M+dyOlg0nOJVCJAQ==

"matrix-protection-suite@npm:@gnuxie/matrix-protection-suite@0.16.0":
version "0.16.0"
resolved "https://registry.yarnpkg.com/@gnuxie/matrix-protection-suite/-/matrix-protection-suite-0.16.0.tgz#380367f76721373e13cc04399ddffa0b9b1ee9c0"
integrity sha512-XNAaECsv3CUYZN2mBiwVrG+qOs+KP0NDIw353/KtZFOAoAKwCFltXpPoQe/TT+Lc0eSVxfKtW6+rofWBccjfVQ==
dependencies:
await-lock "^2.2.2"
crypto-js "^4.1.1"
Expand Down

0 comments on commit 97482aa

Please sign in to comment.