summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKévin Commaille <zecakeh@tedomum.fr>2023-02-26 17:57:44 +0100
committerKévin Commaille <zecakeh@tedomum.fr>2023-03-18 15:03:57 +0100
commit1929ca5d9d8d8b43a2f3fcce7af19e197f93f562 (patch)
tree8677742b3bf6ac866a9d8b32da21cb3c1376ee11 /src
parent88c6bf75954ead182fffc900585b418b018e98e0 (diff)
downloadconduit-1929ca5d9d8d8b43a2f3fcce7af19e197f93f562.zip
Add a database migration to fix and update the default pushrules
Diffstat (limited to 'src')
-rw-r--r--src/database/mod.rs48
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