commit 26ae993a83cf0f0f7acc7f3179ee8c7899fd43a2
parent 2cf4d6e677f45805df7cfbb7606622a3a703aced
Author: MTRNord <mtrnord1@gmail.com>
Date: Thu, 3 Mar 2022 17:00:43 +0100
Fix logic for banform and also filter banlist
Diffstat:
3 files changed, 25 insertions(+), 7 deletions(-)
diff --git a/src/components/Banlist.tsx b/src/components/Banlist.tsx
@@ -1,13 +1,17 @@
import { PureComponent } from 'react';
import {
+ CanonicalAliasEvent,
+ CANONICAL_ALIAS,
+ DEV_NORDGEDANKEN_MJOLNIR_BANLISTS,
MembershipEvent,
+ MJjolnirBanlists,
M_POLICY_RULE_SERVER,
M_POLICY_RULE_SERVER_ALT,
M_POLICY_RULE_SERVER_OLD,
M_POLICY_RULE_USER,
- M_POLICY_RULE_USER_ALT,
- M_POLICY_RULE_USER_OLD,
- ServerRuleEvent,
+ M_POLICY_RULE_USER_ALT,
+ M_POLICY_RULE_USER_OLD,
+ ServerRuleEvent,
UserRuleEvent
} from '../windowExt';
@@ -46,10 +50,24 @@ class BanList extends PureComponent<Props, State> {
const sender = new Set([...user_rules_all.map(element => element.sender), ...server_rules_all.map(element => element.sender)]);
const memberships = await window.widget_api.readStateEvents("m.room.member", 250_000_000_000, undefined, list_rooms) as MembershipEvent[];
const memberships_needed = memberships.filter(member => sender.has(member.state_key));
+ const banlist_codes = await window.widget_api.readStateEvents(DEV_NORDGEDANKEN_MJOLNIR_BANLISTS, 250_000_000_000, undefined, [this.state.roomId ?? "*"]) as MJjolnirBanlists[];
+ const aliases = await window.widget_api.readStateEvents(CANONICAL_ALIAS, list_rooms.length, undefined, list_rooms) as CanonicalAliasEvent[];
this.setState({
- user_rules: user_rules_all,
- server_rules: server_rules_all,
+ user_rules: user_rules_all.filter(rules => {
+ if (banlist_codes.length > 0) {
+ return banlist_codes.some(banlist_codes_event => banlist_codes_event.content?.banlists.has(aliases.find(aliases_event => aliases_event.room_id === rules.room_id)?.content?.alias ?? "") || banlist_codes_event.content?.banlists.has(rules.room_id));
+ } else {
+ return true;
+ }
+ }),
+ server_rules: server_rules_all.filter(rules => {
+ if (banlist_codes.length > 0) {
+ return banlist_codes.some(banlist_codes_event => banlist_codes_event.content?.banlists.has(aliases.find(aliases_event => aliases_event.room_id === rules.room_id)?.content?.alias ?? "") || banlist_codes_event.content?.banlists.has(rules.room_id));
+ } else {
+ return true;
+ }
+ }),
memberships: memberships_needed
});
}
diff --git a/src/components/forms/BanForm.tsx b/src/components/forms/BanForm.tsx
@@ -59,7 +59,7 @@ class BanForm extends PureComponent<Props, State> {
for (const event of aliases) {
let result_known = true;
if (banlist_codes.length > 0) {
- if (banlist_codes.some(known_lists_event => known_lists_event.content?.banlists.keys.includes(event.room_id) || known_lists_event.content?.banlists.keys.includes(event.content?.alias ?? ""))) {
+ if (banlist_codes.some(known_lists_event => known_lists_event.content?.banlists.has(event.room_id) || known_lists_event.content?.banlists.has(event.content?.alias ?? ""))) {
result_known = true;
} else {
result_known = false;
diff --git a/src/windowExt.ts b/src/windowExt.ts
@@ -80,6 +80,6 @@ export type MJjolnirBanlists = {
event_id: string;
room_id: string;
content?: {
- banlists: Record<string, string>;
+ banlists: Map<string, string>;
};
};
\ No newline at end of file