Commit graph

475 commits

Author SHA1 Message Date
Stephen D
2db3b18ce8 Clean up existing code in get_server_keys_from_cache. It's a little DRYer now 2024-08-31 22:25:43 -03:00
Benjamin Lee
4ad50e2708
only log banned users if they are local
This was the intent of f03b6cde29, but it
was missing the check that the user is actually local, and so was
logging *all* banned users.
2024-08-30 23:08:52 -07:00
avdb13
f03b6cde29 feat: report local users getting banned 2024-08-26 02:17:01 +02:00
avdb13
00b77144c1 chore: deprecate support for unstable room versions 2024-08-12 06:18:28 +02:00
Benjamin Lee
a32dc1a3ee
tolerate invalid m.direct events when upgrading rooms
Previous behavior was causing us to error out of the entire
state_cache::update_membership function when it saw an invalid m.direct,
making it impossible for affected users to join upgraded rooms. This bug
is especially bad if an affected user attempts to upgrade a room,
because we will fail to create their join event in the new room, leaving
both rooms permanently bricked.

The new behavior should never prevent users from joining a room based on
the contents of their account data, and should migrate the `m.direct`
event in a reasonable way even if it is partially corrupted by the
element bug.

This also fixes a bug where the previous implementation will
unintentionally remove any keys that aren't part of the expected
m.direct schema. I don't know of any cases where this came up in
practice.

Fixes: #46
2024-08-11 15:53:25 -07:00
Benjamin Lee
18360cd3f9
refactor error handling in copy_upgraded_account_data_tag
The new error handling logic is semantically different from the old, but
I don't know of any cases you could hit in practice where it would
matter.
2024-08-11 15:53:24 -07:00
Benjamin Lee
51dd75c3dc
factor account data upgrade logic into functions
The implementation inside each function is unchanged from the original.
I intend to clean up and fix bugs in later commits, so the diff will be
more clear.
2024-08-11 15:53:24 -07:00
Lambda
dd24a44112 Use TokenSet for roomid_mutex_federation 2024-07-22 18:07:03 +00:00
Lambda
4893c54f4f Use TokenSet for roomid_mutex_insert 2024-07-22 18:07:03 +00:00
Lambda
34ccb2cd06 Use TokenSet for roomid_mutex_state 2024-07-22 18:07:03 +00:00
Lambda
07b5233980 Use OnDemandHashMap for servername_ratelimiter
This way, semaphores are actually cleaned up eventually.
2024-07-22 18:07:03 +00:00
tranquillity-codes
c70cfd3d25
Return 504 when a file is missing to be by-spec
The spec defines that the media endpoints should return 504 when a file
is not-yet-uploaded, which has been interpreted to include when a file
was deleted. Modifies the /media/v3/download/ and /media/r0/thumbnail
endpoints.
2024-07-21 20:42:07 -07:00
Charles Hall
96e6ac9563
fix service/rooms/spaces events 2024-07-16 11:16:08 -07:00
Charles Hall
b4d81bb067
fix service/rooms/event_handler events 2024-07-16 11:16:08 -07:00
Charles Hall
4b5d127368
fix service/rooms/state_cache events 2024-07-16 11:16:08 -07:00
Charles Hall
592e42ba7d
fix service/rooms/timeline events 2024-07-16 11:16:08 -07:00
Charles Hall
d2fc2fad1f
fix service/rooms/state events 2024-07-16 11:12:08 -07:00
Charles Hall
1283dc6477
fix service/rooms/state_accessor events 2024-07-16 11:12:08 -07:00
Charles Hall
e7087444db
fix service/sending events 2024-07-16 11:12:08 -07:00
Charles Hall
42e397203a
fix service/pdu events 2024-07-16 11:12:08 -07:00
Charles Hall
52decf0cea
fix service/pusher events 2024-07-16 11:12:07 -07:00
Charles Hall
162d01f615
fix service/uiaa events 2024-07-16 11:12:07 -07:00
Lambda
f89e1c7dfc
Allow tracing filters to be changed at runtime
ReloadHandle is taken from conduwuit commit
8a5599adf9eafe9111f3d1597f8fb333b8b76849, authored by Benjamin.

Co-authored-by: Benjamin Lee <benjamin@computer.surgery>
2024-06-27 16:04:23 -07:00
Lambda
5a6e4fac73
Move federation config to separate config section
This renames:

allow_federation -> federation.enable
trusted_servers -> federation.trusted_servers
max_fetch_prev_events -> federation.max_fetch_prev_events
max_concurrent_requests -> federation.max_concurrent_requests
2024-06-27 16:04:23 -07:00
Lambda
d26b87a2f2
Move database config to separate section
This renames:

database_backend -> database.backend
database_path -> database.path
db_cache_capacity_mb -> database.cache_capacity_mb
rocksdb_max_open_files -> database.rocksdb_max_open_files

Charles updated the NixOS module.

Co-authored-by: Charles Hall <charles@computer.surgery>
2024-06-27 16:03:43 -07:00
Lambda
79d5d306cc Move TURN config to separate config section
This renames:

turn_username -> turn.username
turn_password -> turn.password
turn_uris -> turn.uris
turn_secret -> turn.secret
turn_ttl -> turn.ttl
2024-06-27 18:16:37 +00:00
Benjamin Lee
3ca6d7776b
better log message for auth chain room id mismatch
The previous "Evil event in db" message does not indicate what's going
on, and does not help identify *which* events are causing the problem.
2024-06-26 09:10:58 -07:00
Charles Hall
e13db834ed
refactor handle_response in service/sending
Early returns good.
2024-06-24 12:43:28 -07:00
Charles Hall
32e6b3b039
don't log twice, make event structured 2024-06-24 12:43:28 -07:00
Charles Hall
e83a30af4b
reduce duplicate events
I hate `log_error`. A better way to do this would be to not reuse the
same error type literally everywhere, so you could distinguish, in
`crate::service::sending::Service::handle_response`, whether to emit an
event based on which function created the error. Fixing that is a lot
more work, though.
2024-06-24 12:40:59 -07:00
Charles Hall
230172718f
demote event from info to debug
And also make it structured instead of stringified.
2024-06-24 12:40:59 -07:00
Charles Hall
601c2ed3e5
clean up shutdown events
The shutdown function is called in exactly one place, and that place
has a better log message, so we'll just delete the extra one.
2024-06-24 12:40:59 -07:00
Charles Hall
6aca128547
generalize documentation, make the name shorter
It's more useful than just *debug* logs, but yes, should not be relied
upon for logic reasons.
2024-06-24 12:38:34 -07:00
Benjamin Lee
0b5a07d192
add alternate !admin prefix for admin commands
This is supported on conduwuit, and I liked it because it's faster for
me to type than tab-completing the bot user, and because it makes it a
little easier to copy-paste admin commands.
2024-06-14 11:32:52 -07:00
Charles Hall
76b060aa84
only process admin commands if bot is in room
This isn't exploitable in any way, it just meant that the bot could
receive and run commands from users who were already in the admin room
despite the bot not being in the room, which also means the bot would be
unable to send response messages.

Now, the bot will simply ignore admin room messages if the bot isn't in
the admin room.
2024-06-12 20:48:06 -07:00
Charles Hall
b0d85bb575
use admin_bot_user_id more
Also change some terminology to be less weird.
2024-06-12 20:42:13 -07:00
Charles Hall
d4b5f62bfe
simplify is_admin 2024-06-12 20:42:13 -07:00
Charles Hall
44088852cf
remove show-config admin room command
Just `cat` the config file. Also this code would be very annoying to
maintain. Getting rid of this also revealed that another config option
is specific to RocksDB, so `cfg`s for that have been added.
2024-06-12 19:56:59 -07:00
Charles Hall
0643a3f081
remove pointless pub(crate) and use self::
And also fix the ordering of things in state_compressor.
2024-06-12 19:56:56 -07:00
Charles Hall
c7e03a06f7
refuse admin room alias changes unless admin bot
I.e. don't allow the `#admins:example.com` alias to be set or unset by
any user other than `@grapevine:example.com`.
2024-06-12 18:36:55 -07:00
Charles Hall
273ab33809
reintroduce rooms::alias::Serivce struct
We're going to need it.
2024-06-12 16:41:52 -07:00
Charles Hall
339a869872
create admin bot room alias id once and reuse it 2024-06-12 16:30:08 -07:00
Charles Hall
95a24c761d
create admin bot user id once and reuse it
This way we don't need to remember to do the conditional everywhere.
2024-06-12 16:23:22 -07:00
Matthias Ahouansou
9087da91db
fix(keys): only use keys valid at the time of PDU or transaction, and actually refresh keys
Previously, we only fetched keys once, only requesting them again if we have any missing, allowing for ancient keys to be used to sign PDUs and transactions
Now we refresh keys that either have or are about to expire, preventing attacks that make use of leaked private keys of a homeserver
We also ensure that when validating PDUs or transactions, that they are valid at the origin_server_ts or time of us receiving the transaction respectfully
As to not break event authorization for old rooms, we need to keep old keys around
We move verify_keys which we no longer see in direct requests to the origin to old_verify_keys
We keep old_verify_keys indefinitely as mentioned above, as to not break event authorization (at least until a future MSC addresses this)

Original patch by Matthias. Benjamin just rebased it onto grapevine and
fixed clippy/rustc warnings.

Co-authored-by: Benjamin Lee <benjamin@computer.surgery>
2024-06-12 11:10:50 -07:00
Benjamin Lee
83cdc9c708
drop redacted events from search results 2024-06-12 10:32:36 -07:00
Matthias Ahouansou
f74043df9a
fix: de-index pdus when redacted 2024-06-12 10:27:39 -07:00
Charles Hall
0c2094a56f
record FoundIn with metrics instead of traces
This is much more efficient in terms of network use and data storage,
and also easier to visualize.
2024-06-06 20:56:36 -07:00
Charles Hall
22dd7f1a54
move FoundIn to observability.rs 2024-06-05 17:41:36 -07:00
Charles Hall
71f3d84115
rename password-related utils functions 2024-06-04 19:35:25 -07:00
Charles Hall
aa4cd8b1e1
switch to RustCrypto's argon2 crate 2024-06-04 19:35:21 -07:00