update stored default push rules when removing legacy mentions
Signed-off-by: strawberry <strawberry@puppygock.gay>
This commit is contained in:
parent
39abd9a827
commit
9ca964a97e
1 changed files with 75 additions and 21 deletions
|
@ -25,7 +25,7 @@ use crate::{Error, Result, Ruma};
|
||||||
pub(crate) async fn get_pushrules_all_route(
|
pub(crate) async fn get_pushrules_all_route(
|
||||||
State(services): State<crate::State>, body: Ruma<get_pushrules_all::v3::Request>,
|
State(services): State<crate::State>, body: Ruma<get_pushrules_all::v3::Request>,
|
||||||
) -> Result<get_pushrules_all::v3::Response> {
|
) -> Result<get_pushrules_all::v3::Response> {
|
||||||
let sender_user = body.sender_user.as_ref().expect("user is authenticated");
|
let sender_user = body.sender_user();
|
||||||
|
|
||||||
let Some(content_value) = services
|
let Some(content_value) = services
|
||||||
.account_data
|
.account_data
|
||||||
|
@ -46,20 +46,47 @@ pub(crate) async fn get_pushrules_all_route(
|
||||||
let mut global_ruleset = account_data_content.global;
|
let mut global_ruleset = account_data_content.global;
|
||||||
|
|
||||||
// remove old deprecated mentions push rules as per MSC4210
|
// remove old deprecated mentions push rules as per MSC4210
|
||||||
|
// and update the stored server default push rules
|
||||||
#[allow(deprecated)]
|
#[allow(deprecated)]
|
||||||
{
|
{
|
||||||
use ruma::push::RuleKind::*;
|
use ruma::push::RuleKind::*;
|
||||||
|
if global_ruleset
|
||||||
|
.get(Override, PredefinedOverrideRuleId::ContainsDisplayName.as_str())
|
||||||
|
.is_some()
|
||||||
|
|| global_ruleset
|
||||||
|
.get(Override, PredefinedOverrideRuleId::RoomNotif.as_str())
|
||||||
|
.is_some()
|
||||||
|
|| global_ruleset
|
||||||
|
.get(Content, PredefinedContentRuleId::ContainsUserName.as_str())
|
||||||
|
.is_some()
|
||||||
|
{
|
||||||
|
global_ruleset
|
||||||
|
.remove(Override, PredefinedOverrideRuleId::ContainsDisplayName)
|
||||||
|
.ok();
|
||||||
|
global_ruleset
|
||||||
|
.remove(Override, PredefinedOverrideRuleId::RoomNotif)
|
||||||
|
.ok();
|
||||||
|
global_ruleset
|
||||||
|
.remove(Content, PredefinedContentRuleId::ContainsUserName)
|
||||||
|
.ok();
|
||||||
|
|
||||||
global_ruleset
|
global_ruleset.update_with_server_default(Ruleset::server_default(sender_user));
|
||||||
.remove(Override, PredefinedOverrideRuleId::ContainsDisplayName)
|
|
||||||
.ok();
|
|
||||||
global_ruleset
|
|
||||||
.remove(Override, PredefinedOverrideRuleId::RoomNotif)
|
|
||||||
.ok();
|
|
||||||
|
|
||||||
global_ruleset
|
services
|
||||||
.remove(Content, PredefinedContentRuleId::ContainsUserName)
|
.account_data
|
||||||
.ok();
|
.update(
|
||||||
|
None,
|
||||||
|
sender_user,
|
||||||
|
GlobalAccountDataEventType::PushRules.to_string().into(),
|
||||||
|
&serde_json::to_value(PushRulesEvent {
|
||||||
|
content: PushRulesEventContent {
|
||||||
|
global: global_ruleset.clone(),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.expect("to json always works"),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(get_pushrules_all::v3::Response {
|
Ok(get_pushrules_all::v3::Response {
|
||||||
|
@ -113,20 +140,47 @@ pub(crate) async fn get_pushrules_global_route(
|
||||||
let mut global_ruleset = account_data_content.global;
|
let mut global_ruleset = account_data_content.global;
|
||||||
|
|
||||||
// remove old deprecated mentions push rules as per MSC4210
|
// remove old deprecated mentions push rules as per MSC4210
|
||||||
|
// and update the stored server default push rules
|
||||||
#[allow(deprecated)]
|
#[allow(deprecated)]
|
||||||
{
|
{
|
||||||
use ruma::push::RuleKind::*;
|
use ruma::push::RuleKind::*;
|
||||||
|
if global_ruleset
|
||||||
|
.get(Override, PredefinedOverrideRuleId::ContainsDisplayName.as_str())
|
||||||
|
.is_some()
|
||||||
|
|| global_ruleset
|
||||||
|
.get(Override, PredefinedOverrideRuleId::RoomNotif.as_str())
|
||||||
|
.is_some()
|
||||||
|
|| global_ruleset
|
||||||
|
.get(Content, PredefinedContentRuleId::ContainsUserName.as_str())
|
||||||
|
.is_some()
|
||||||
|
{
|
||||||
|
global_ruleset
|
||||||
|
.remove(Override, PredefinedOverrideRuleId::ContainsDisplayName)
|
||||||
|
.ok();
|
||||||
|
global_ruleset
|
||||||
|
.remove(Override, PredefinedOverrideRuleId::RoomNotif)
|
||||||
|
.ok();
|
||||||
|
global_ruleset
|
||||||
|
.remove(Content, PredefinedContentRuleId::ContainsUserName)
|
||||||
|
.ok();
|
||||||
|
|
||||||
global_ruleset
|
global_ruleset.update_with_server_default(Ruleset::server_default(sender_user));
|
||||||
.remove(Override, PredefinedOverrideRuleId::ContainsDisplayName)
|
|
||||||
.ok();
|
|
||||||
global_ruleset
|
|
||||||
.remove(Override, PredefinedOverrideRuleId::RoomNotif)
|
|
||||||
.ok();
|
|
||||||
|
|
||||||
global_ruleset
|
services
|
||||||
.remove(Content, PredefinedContentRuleId::ContainsUserName)
|
.account_data
|
||||||
.ok();
|
.update(
|
||||||
|
None,
|
||||||
|
sender_user,
|
||||||
|
GlobalAccountDataEventType::PushRules.to_string().into(),
|
||||||
|
&serde_json::to_value(PushRulesEvent {
|
||||||
|
content: PushRulesEventContent {
|
||||||
|
global: global_ruleset.clone(),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.expect("to json always works"),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(get_pushrules_global_scope::v3::Response {
|
Ok(get_pushrules_global_scope::v3::Response {
|
||||||
|
@ -259,7 +313,7 @@ pub(crate) async fn get_pushrule_actions_route(
|
||||||
.global
|
.global
|
||||||
.get(body.kind.clone(), &body.rule_id)
|
.get(body.kind.clone(), &body.rule_id)
|
||||||
.map(|rule| rule.actions().to_owned())
|
.map(|rule| rule.actions().to_owned())
|
||||||
.ok_or(err!(Request(NotFound("Push rule not found."))))?;
|
.ok_or_else(|| err!(Request(NotFound("Push rule not found."))))?;
|
||||||
|
|
||||||
Ok(get_pushrule_actions::v3::Response {
|
Ok(get_pushrule_actions::v3::Response {
|
||||||
actions,
|
actions,
|
||||||
|
@ -332,7 +386,7 @@ pub(crate) async fn get_pushrule_enabled_route(
|
||||||
.global
|
.global
|
||||||
.get(body.kind.clone(), &body.rule_id)
|
.get(body.kind.clone(), &body.rule_id)
|
||||||
.map(ruma::push::AnyPushRuleRef::enabled)
|
.map(ruma::push::AnyPushRuleRef::enabled)
|
||||||
.ok_or(err!(Request(NotFound("Push rule not found."))))?;
|
.ok_or_else(|| err!(Request(NotFound("Push rule not found."))))?;
|
||||||
|
|
||||||
Ok(get_pushrule_enabled::v3::Response {
|
Ok(get_pushrule_enabled::v3::Response {
|
||||||
enabled,
|
enabled,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue