mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-07-31 23:28:37 -04:00
Implement presence state visibilty limiting when polling eventsource for stream
This commit is contained in:
parent
86d6232236
commit
da31b96b55
3 changed files with 147 additions and 15 deletions
|
@ -118,7 +118,9 @@ class PresenceStateTestCase(unittest.TestCase):
|
|||
room_member_handler.get_room_members = get_room_members
|
||||
|
||||
def user_rooms_intersect(userlist):
|
||||
shared = all(map(lambda u: u in self.room_members, userlist))
|
||||
room_member_ids = map(lambda u: u.to_string(), self.room_members)
|
||||
|
||||
shared = all(map(lambda i: i in room_member_ids, userlist))
|
||||
return defer.succeed(shared)
|
||||
self.datastore.user_rooms_intersect = user_rooms_intersect
|
||||
|
||||
|
@ -562,6 +564,13 @@ class PresencePushTestCase(unittest.TestCase):
|
|||
return defer.succeed([])
|
||||
self.datastore.get_joined_hosts_for_room = get_room_hosts
|
||||
|
||||
def user_rooms_intersect(userlist):
|
||||
room_member_ids = map(lambda u: u.to_string(), self.room_members)
|
||||
|
||||
shared = all(map(lambda i: i in room_member_ids, userlist))
|
||||
return defer.succeed(shared)
|
||||
self.datastore.user_rooms_intersect = user_rooms_intersect
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def fetch_room_distributions_into(room_id, localusers=None,
|
||||
remotedomains=None, ignore_user=None):
|
||||
|
@ -604,6 +613,7 @@ class PresencePushTestCase(unittest.TestCase):
|
|||
self.u_apple = hs.parse_userid("@apple:test")
|
||||
self.u_banana = hs.parse_userid("@banana:test")
|
||||
self.u_clementine = hs.parse_userid("@clementine:test")
|
||||
self.u_durian = hs.parse_userid("@durian:test")
|
||||
self.u_elderberry = hs.parse_userid("@elderberry:test")
|
||||
|
||||
# Remote user
|
||||
|
@ -632,6 +642,7 @@ class PresencePushTestCase(unittest.TestCase):
|
|||
{"presence": ONLINE}
|
||||
)
|
||||
|
||||
# Apple sees self-reflection
|
||||
(events, _) = yield self.event_source.get_new_events_for_user(
|
||||
self.u_apple, 0, None
|
||||
)
|
||||
|
@ -647,6 +658,55 @@ class PresencePushTestCase(unittest.TestCase):
|
|||
"last_active_ago": 0,
|
||||
}},
|
||||
],
|
||||
msg="Presence event should be visible to self-reflection"
|
||||
)
|
||||
|
||||
# Banana sees it because of presence subscription
|
||||
(events, _) = yield self.event_source.get_new_events_for_user(
|
||||
self.u_banana, 0, None
|
||||
)
|
||||
|
||||
self.assertEquals(self.event_source.get_current_key(), 1)
|
||||
self.assertEquals(events,
|
||||
[
|
||||
{"type": "m.presence",
|
||||
"content": {
|
||||
"user_id": "@apple:test",
|
||||
"presence": ONLINE,
|
||||
"state": ONLINE,
|
||||
"last_active_ago": 0,
|
||||
}},
|
||||
],
|
||||
msg="Presence event should be visible to explicit subscribers"
|
||||
)
|
||||
|
||||
# Elderberry sees it because of same room
|
||||
(events, _) = yield self.event_source.get_new_events_for_user(
|
||||
self.u_elderberry, 0, None
|
||||
)
|
||||
|
||||
self.assertEquals(self.event_source.get_current_key(), 1)
|
||||
self.assertEquals(events,
|
||||
[
|
||||
{"type": "m.presence",
|
||||
"content": {
|
||||
"user_id": "@apple:test",
|
||||
"presence": ONLINE,
|
||||
"state": ONLINE,
|
||||
"last_active_ago": 0,
|
||||
}},
|
||||
],
|
||||
msg="Presence event should be visible to other room members"
|
||||
)
|
||||
|
||||
# Durian is not in the room, should not see this event
|
||||
(events, _) = yield self.event_source.get_new_events_for_user(
|
||||
self.u_durian, 0, None
|
||||
)
|
||||
|
||||
self.assertEquals(self.event_source.get_current_key(), 1)
|
||||
self.assertEquals(events, [],
|
||||
msg="Presence event should not be visible to others"
|
||||
)
|
||||
|
||||
presence = yield self.handler.get_presence_list(
|
||||
|
@ -664,6 +724,10 @@ class PresencePushTestCase(unittest.TestCase):
|
|||
presence
|
||||
)
|
||||
|
||||
# TODO(paul): Gut-wrenching
|
||||
banana_set = self.handler._local_pushmap.setdefault("banana", set())
|
||||
banana_set.add(self.u_apple)
|
||||
|
||||
yield self.handler.set_state(self.u_banana, self.u_banana,
|
||||
{"presence": ONLINE}
|
||||
)
|
||||
|
@ -825,6 +889,8 @@ class PresencePushTestCase(unittest.TestCase):
|
|||
"a-room"
|
||||
)
|
||||
|
||||
self.room_members.append(self.u_clementine)
|
||||
|
||||
(events, _) = yield self.event_source.get_new_events_for_user(
|
||||
self.u_apple, 0, None
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue