diff options
author | Sorunome <mail@sorunome.de> | 2020-01-18 21:53:35 +0100 |
---|---|---|
committer | Sorunome <mail@sorunome.de> | 2020-01-18 21:53:35 +0100 |
commit | 16801e2b5ce7d99c2fd157c1228fbbfbad55b668 (patch) | |
tree | 8973ffe2fab82b9e2f7a98e8d2020d6d6420d8b2 /synapse/event_auth.py | |
parent | Add more logging around message retention policies support (#6717) (diff) | |
download | synapse-16801e2b5ce7d99c2fd157c1228fbbfbad55b668.tar.xz |
implement knock via non-federation
Diffstat (limited to 'synapse/event_auth.py')
-rw-r--r-- | synapse/event_auth.py | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/synapse/event_auth.py b/synapse/event_auth.py index 1033e5e121..577f8f166b 100644 --- a/synapse/event_auth.py +++ b/synapse/event_auth.py @@ -225,9 +225,12 @@ def _is_membership_change_allowed(event, auth_events): key = (EventTypes.JoinRules, "") join_rule_event = auth_events.get(key) + print(auth_events) + print(join_rule_event) if join_rule_event: join_rule = join_rule_event.content.get("join_rule", JoinRules.INVITE) else: + print("No such event") join_rule = JoinRules.INVITE user_level = get_user_power_level(event.user_id, auth_events) @@ -235,6 +238,7 @@ def _is_membership_change_allowed(event, auth_events): # FIXME (erikj): What should we do here as the default? ban_level = _get_named_level(auth_events, "ban", 50) + knock_level = _get_named_level(auth_events, "knock", 0) logger.debug( "_is_membership_change_allowed: %s", @@ -257,7 +261,7 @@ def _is_membership_change_allowed(event, auth_events): raise AuthError(403, "%s is banned from the room" % (target_user_id,)) return - if Membership.JOIN != membership: + if Membership.JOIN != membership and Membership.KNOCK != membership: if ( caller_invited and Membership.LEAVE == membership @@ -311,6 +315,17 @@ def _is_membership_change_allowed(event, auth_events): elif Membership.BAN == membership: if user_level < ban_level or user_level <= target_level: raise AuthError(403, "You don't have permission to ban") + elif Membership.KNOCK == membership: + # check that we have the leave event + print("====================") + print(join_rule) + print(user_level, knock_level) + if target and target.membership != Membership.LEAVE: + raise AuthError(403, "You don't have permission to knock") + elif join_rule != JoinRules.INVITE: + raise AuthError(403, "You don't have permission to knock") + elif user_level < knock_level: + raise AuthError(403, "You don't have permission to knock") else: raise AuthError(500, "Unknown membership %s" % membership) @@ -653,7 +668,7 @@ def auth_types_for_event(event) -> Set[Tuple[str]]: if event.type == EventTypes.Member: membership = event.content["membership"] - if membership in [Membership.JOIN, Membership.INVITE]: + if membership in [Membership.JOIN, Membership.INVITE, Membership.KNOCK]: auth_types.add((EventTypes.JoinRules, "")) auth_types.add((EventTypes.Member, event.state_key)) |