Commit Graph

1190 Commits

Author SHA1 Message Date
gnuxie 4e4a1dec30 Add renderers to DeactivateCommand to show user details. 2025-04-13 20:06:35 +01:00
gnuxie 049f6ba182 Change DeactivateCommand to .tsx so we can use renderers. 2025-04-13 20:06:35 +01:00
gnuxie 0051263534 Rework deactivate command for a confirmation prompt and preview. 2025-04-13 20:06:35 +01:00
gnuxie 99bbbf5b01 Update the deactivate command to use the audit log and purging deactivate. 2025-04-13 20:06:35 +01:00
gnuxie d8a6ba756b Load capabilities before protections.
Honestly i don't know why this wasn't done to begin with.
2025-04-13 20:06:35 +01:00
gnuxie 72f95563a5 Figure out how to apply policies to resident homserver users.
And also do purging deactivation in the background

We introduce "restriction" as a way to refer to an account that has
been suspended or locked or shadowbanned etc.

We also add a UserRestrictionCapability for protections to use the
functionality for suspending users.

We keep an audit log that updates when missing account restrictions
are discovered. (IE those that are prexisting)

The protection that makes these features available is the
HomeserverUserPolicyProtection.
2025-04-13 20:06:35 +01:00
gnuxie 419ac66259 Add a SqliteUserAuditLog store for a new user suspesion protection. 2025-04-13 13:15:44 +01:00
Catalan Lover dc84ec5a6d Make MessageIsMediaProtection correctly check for noop (#807)
This PR fixes the temporary problem while we can fix the actual problem by reworking this whole idea of noop.

Fixes #808
2025-04-11 12:55:15 +01:00
nexy7574 4bb8da51dd Ignore redactions in BasicFlooding (fixes #804) (#805)
Fixes #804 by not considering m.room.redaction when processing basic flood protection.
2025-04-10 10:28:30 +01:00
Catalan Lover d73d0fc4c2 Change mentions of Mjölnir to Draupnir (#796)
Cat ran into this funny leftover when validating if abuse reporting still works after Cats reworks in mdad. Turns out they do and as it was my first time using these flows Cat discovered this.
2025-03-30 17:52:53 +01:00
Gnuxie 5014489cc8 Merge pull request #794 from the-draupnir-project/gnuxie/user-suspension
Add commands to suspend/unsuspend users via the synapse admin API

- I have no idea how this interacts with MAS
- There is no locking available in the synapse admin API.
2025-03-29 20:20:55 +00:00
gnuxie 44c93c3766 Update matrix-protection-suite-for-matrix-bot-sdk v3.1.1. 2025-03-29 20:15:30 +00:00
gnuxie a668d5637a Add suspend and unsuspend commands. 2025-03-29 20:15:30 +00:00
gnuxie fdc4fd11a1 Move system admin commands to their own folder in commands directory. 2025-03-29 20:15:29 +00:00
dependabot[bot] fb2f71fd32 Bump tar-fs from 2.1.1 to 2.1.2 (#789)
Bumps [tar-fs](https://github.com/mafintosh/tar-fs) from 2.1.1 to 2.1.2.
- [Commits](https://github.com/mafintosh/tar-fs/compare/v2.1.1...v2.1.2)

---
updated-dependencies:
- dependency-name: tar-fs
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-28 23:03:12 +00:00
Gnuxie ff4f78ee65 RedactionSynchronisationProtection invite retraction (#788)
- The _Redaction Synchronisation Protection_ has been improved in a few ways:
  - Invitations in protected rooms will be rejected as part of the redaction
    process when they are sent from users being redacted (e.g. as a brigading
    tactic).
  - User redaction will now be triggered on bans and the reason will be scanned
    for `automaticallyRedactForReasons` from Draupnir's config.

* Update RedactionSynchronisation for new protection apis.

* Rerwrite redaction synchronisation protection

* Reject invitations on ban.

* Add renderer and simulated redaction synchornisation capability.

* Reduce dependencies of redaction synchronisation protection.

* Allow RedactionSynchronisation to be unit tested.

* Update to MPS 3.1.0.

---------

Signed-off-by: Rory& <root@rory.gay>
Co-authored-by: Rory& <root@rory.gay>
2025-03-28 17:48:57 +00:00
gnuxie d7df58101c v2.3.0-beta.0 v2.3.0-beta.0 2025-03-28 11:31:54 +00:00
Gnuxie 1b195e57e6 Update CHANGELOG for current changes. (#784)
* Update CHANGELOG for current changes.
2025-03-28 11:15:56 +00:00
Gnuxie 64de51496c Fixes to the new room takedown protection (#782)
* Take room pill out of takedown notice.

* Fix missing configSchema in RoomTakedownProtection.

It was always there... just not plumbed in.

* Fix RoomTakedownConfig schema was wrong.

Properties that default to undefined need to be optional because of
the way defaulting works.

* Fix missing name on RoomTakedownProtectionSettings.

* Fix joined_members missing from RoomBasicDetails.

Important because it's used for the threshold.

* Improve rendering of room discovery.

* Add SimulatedRoomTakedownCapability.

https://github.com/the-draupnir-project/planning/issues/41#issuecomment-2755447714

* Change renderer to include protection name.

For some reason addOneLiner does this but addMessage does not?

Something to look into there mare...
2025-03-27 21:52:59 +00:00
Gnuxie ec6e0c6836 Fix roomStateBackingStore legacy migration. (#781)
This stuff got mixed up while applying a patch in the RoomTakedown protection drive.

Co-authored-by: Bea <20361868+enbea@users.noreply.github.com>
2025-03-27 20:33:52 +00:00
Gnuxie 986eba55d4 Update documentation & README for server admin features. (#778) 2025-03-26 17:22:51 +00:00
Gnuxie 2376aaf1ac Merge pull request #777 from the-draupnir-project/gnuxie/user-may-invite
Add BlockInvitationOnServer protection.
2025-03-26 12:02:51 +00:00
gnuxie f556f3e39a Add BlockInvitationOnServer protection. 2025-03-26 11:57:25 +00:00
Gnuxie a086768b01 Merge pull request #761 from the-draupnir-project/gnuxie/room-takedown
Support for room policies with hashed entity  and `org.matrix.msc4204.takedown` recommendation in Synapse

Story: https://github.com/the-draupnir-project/planning/issues/41
documentation: https://the-draupnir-project.github.io/draupnir-documentation/protections/room-takedown-protection

This PR introduces room takedown functionality into Draupnir.
A new `draupnir takedown` command is added similar to the ban command, but marks entities to be taken down. Because the content is illegal or intolerable. To begin with we only allow takedown of rooms. These takedown policies are sharable with policy lists just like normal bans.

Draupnir responds to takedown policies on Synapse by calling the [room shutdown](https://element-hq.github.io/synapse/latest/admin_api/rooms.html#version-2-new-version) API with the options `block` and `purge`.

The policies that are created by the takedown command are hashed, and this is in order to prevent the room id's being shared directly, and so that we do not create a directory of intolerable content. To be able to use the policies, draupnir therefore needs to be aware of all the rooms that the homeserver is participating in, in order to calculate their hashes and find matching policies, and then takedown the marked rooms.

As part of this process, Draupnir has to "discover" the rooms your server is participating in. This is done via the [synapse-http-antispam](https://the-draupnir-project.github.io/draupnir-documentation/bot/synapse-http-antispam) recently added to draupnir. When draupnir discovers rooms, it will prompt the management room with a notification with some details of the title, room description, and creator. This functionality will be toggleable but will be strongly recommended for servers that have public registration
2025-03-24 19:52:30 +00:00
gnuxie 903a7b6dbc Passthrough all events for check_event_for_spam.
We realise the PDU rate for most homeservers will not be
significant...  and if it is they can just disable the callback.
2025-03-24 19:47:38 +00:00
gnuxie e033d53127 Add store management to integration test fixtures. 2025-03-24 19:47:38 +00:00
gnuxie b474e24c5b Update MPS and matrix-basic-types. 2025-03-23 10:20:15 +00:00
gnuxie ec45086560 Test room takedown. 2025-03-22 22:27:06 +00:00
gnuxie 9f3afce02c Fix RoomDiscovery.
Two problems:

1. the batcher was being initialised before the slot for the listener
was.

2. That item batch interface with void is sketch and using flat would
make an array of [roomID, undefined, roomID, undefined...], not good.
2025-03-22 22:25:36 +00:00
gnuxie 99cb3b317b Split SynapseHTTPAntispam from webapis.
Webapis need to depend on the callback handler and the callback
handler needs to be created per draupnir instance.
2025-03-22 21:47:58 +00:00
gnuxie 0bce47d487 Room Takedown needs to be aware of all rules that are literal. 2025-03-22 16:21:38 +00:00
gnuxie 2928b2ffd7 RoomTakedownProtection was missing from DraupnirProtectionsIndex.ts 2025-03-22 13:46:53 +00:00
gnuxie 45c8189dbc Add option to send takedown for plain-text entities. 2025-03-22 13:46:29 +00:00
gnuxie d8dc0facdf Clarify error in takedown command while fetching room details. 2025-03-22 13:46:05 +00:00
gnuxie 27142cf722 Create top level stores in integration test fixtures. 2025-03-22 11:38:21 +00:00
gnuxie aea1d1d36e Plumb in SynapseAdminRoomTakedownCapability.
Was missing registration.  It sucks that the factory for capability
providers doesn't let us return a Result type??
2025-03-22 11:37:10 +00:00
gnuxie 6168669fff Update Draupnir for reworked hash reversal.
We introduced a new PolicyRuleChangeType enum with a variant for
revealed literals.  And we changed our mind about where reversal will
happen, it'll happen in the room state manager factory.
2025-03-22 11:35:57 +00:00
gnuxie 15c1bf23a9 Rework hash store to support storing details about all entities. 2025-03-21 16:19:09 +00:00
gnuxie 1d0feb724a Update Draupnir for new PolicyListRevision API.
We should probably have just accepted multiple recommendations in all
these methods.
2025-03-21 16:19:09 +00:00
gnuxie fa3bce12d6 Include policy entity in the takedown audit log policy info. 2025-03-21 16:19:09 +00:00
gnuxie f92d18662c getTakedownDetails query improvements.
Co-authored-by: Bea <20361868+enbea@users.noreply.github.com>
2025-03-21 16:19:09 +00:00
gnuxie 862ed5c500 Remove duplicated hasEnded variables in BetterSqliteStore.
`db.open` has the same purpose.

Co-authored-by: Bea <20361868+enbea@users.noreply.github.com>
2025-03-21 16:19:09 +00:00
gnuxie b5e3ebb53a Explicitly choose the setting of temp_store in better sqlite.
Memory isn't the default.

Co-authored-by: Bea <20361868+enbea@users.noreply.github.com>
2025-03-21 16:19:09 +00:00
gnuxie 522eae6ce2 Be explicit when returning ROWID after INSERT in audit log.
Co-authored-by: Bea <20361868+enbea@users.noreply.github.com>
2025-03-21 16:19:09 +00:00
gnuxie a17cd51763 Clean up queries in hash store.
Co-authored-by: Bea <20361868+enbea@users.noreply.github.com>
2025-03-21 16:19:09 +00:00
gnuxie 6203171c71 Fix delete room/all rooms in RoomStateBackingStore.
Co-authored-by: Bea <20361868+enbea@users.noreply.github.com>
2025-03-21 16:19:09 +00:00
gnuxie 377917f6f4 Improve Sqlite wrapper Schema migration.
This cleans up all of the code surrounding schema migration and allows
the migration procedure to be transactional so that people can
downgrade draupnir if something explodes.

Co-authored-by: Bea <20361868+enbea@users.noreply.github.com>
2025-03-21 16:19:09 +00:00
gnuxie ef592a95e4 Plumb takedown command into room discovery. 2025-03-21 16:19:09 +00:00
gnuxie 8cf7e4b638 Add initial draft of takedown command.
Now we need to hook in discovery when the command is run.
2025-03-21 16:19:09 +00:00
gnuxie 19a78d670c Some shite that didn't get comitted to do with messing up hash store. 2025-03-21 16:19:09 +00:00