diff options
author | Kévin Commaille <zecakeh@tedomum.fr> | 2023-02-26 17:57:44 +0100 |
---|---|---|
committer | Kévin Commaille <zecakeh@tedomum.fr> | 2023-03-18 15:03:57 +0100 |
commit | 1929ca5d9d8d8b43a2f3fcce7af19e197f93f562 (patch) | |
tree | 8677742b3bf6ac866a9d8b32da21cb3c1376ee11 | |
parent | 88c6bf75954ead182fffc900585b418b018e98e0 (diff) | |
download | conduit-1929ca5d9d8d8b43a2f3fcce7af19e197f93f562.zip |
Add a database migration to fix and update the default pushrules
-rw-r--r-- | src/database/mod.rs | 48 |
1 files changed, 47 insertions, 1 deletions
diff --git a/src/database/mod.rs b/src/database/mod.rs index e05991d..1415f68 100644 --- a/src/database/mod.rs +++ b/src/database/mod.rs @@ -411,7 +411,7 @@ impl KeyValueDatabase { } // If the database has any data, perform data migrations before starting - let latest_database_version = 12; + let latest_database_version = 13; if services().users.count()? > 0 { // MIGRATIONS @@ -880,6 +880,52 @@ impl KeyValueDatabase { warn!("Migration: 11 -> 12 finished"); } + // This migration can be reused as-is anytime the server-default rules are updated. + if services().globals.database_version()? < 13 { + for username in services().users.list_local_users()? { + let user = match UserId::parse_with_server_name( + username.clone(), + services().globals.server_name(), + ) { + Ok(u) => u, + Err(e) => { + warn!("Invalid username {username}: {e}"); + continue; + } + }; + + let raw_rules_list = services() + .account_data + .get( + None, + &user, + GlobalAccountDataEventType::PushRules.to_string().into(), + ) + .unwrap() + .expect("Username is invalid"); + + let mut account_data = + serde_json::from_str::<PushRulesEvent>(raw_rules_list.get()).unwrap(); + + let user_default_rules = ruma::push::Ruleset::server_default(&user); + account_data + .content + .global + .update_with_server_default(user_default_rules); + + services().account_data.update( + None, + &user, + GlobalAccountDataEventType::PushRules.to_string().into(), + &serde_json::to_value(account_data).expect("to json value always works"), + )?; + } + + services().globals.bump_database_version(13)?; + + warn!("Migration: 12 -> 13 finished"); + } + assert_eq!( services().globals.database_version().unwrap(), latest_database_version |