summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--synapse/config/registration.py4
-rw-r--r--synapse/handlers/federation.py17
-rw-r--r--synapse/handlers/room.py57
-rw-r--r--synapse/util/caches/stream_change_cache.py4
4 files changed, 53 insertions, 29 deletions
diff --git a/synapse/config/registration.py b/synapse/config/registration.py
index ab062d528c..87e500c97a 100644
--- a/synapse/config/registration.py
+++ b/synapse/config/registration.py
@@ -37,6 +37,10 @@ class RegistrationConfig(Config):
         self.trusted_third_party_id_servers = config["trusted_third_party_id_servers"]
         self.allow_guest_access = config.get("allow_guest_access", False)
 
+        self.invite_3pid_guest = (
+            self.allow_guest_access and config.get("invite_3pid_guest", False)
+        )
+
     def default_config(self, **kwargs):
         registration_shared_secret = random_string_with_symbols(50)
 
diff --git a/synapse/handlers/federation.py b/synapse/handlers/federation.py
index 27f2b40bfe..f599e817aa 100644
--- a/synapse/handlers/federation.py
+++ b/synapse/handlers/federation.py
@@ -813,7 +813,22 @@ class FederationHandler(BaseHandler):
             target_hosts,
             signed_event
         )
-        defer.returnValue(None)
+
+        context = yield self.state_handler.compute_event_context(event)
+
+        event_stream_id, max_stream_id = yield self.store.persist_event(
+            event,
+            context=context,
+            backfilled=False,
+        )
+
+        target_user = UserID.from_string(event.state_key)
+        self.notifier.on_new_room_event(
+            event, event_stream_id, max_stream_id,
+            extra_users=[target_user],
+        )
+
+        defer.returnValue(event)
 
     @defer.inlineCallbacks
     def _make_and_verify_event(self, target_hosts, room_id, user_id, membership,
diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py
index 57113ae4a5..051468989f 100644
--- a/synapse/handlers/room.py
+++ b/synapse/handlers/room.py
@@ -877,36 +877,43 @@ class RoomMemberHandler(BaseHandler):
                 user.
         """
 
-        registration_handler = self.hs.get_handlers().registration_handler
-        guest_access_token = yield registration_handler.guest_access_token_for(
-            medium=medium,
-            address=address,
-            inviter_user_id=inviter_user_id,
-        )
-
-        guest_user_info = yield self.hs.get_auth().get_user_by_access_token(
-            guest_access_token
-        )
-
         is_url = "%s%s/_matrix/identity/api/v1/store-invite" % (
             id_server_scheme, id_server,
         )
+
+        invite_config = {
+            "medium": medium,
+            "address": address,
+            "room_id": room_id,
+            "room_alias": room_alias,
+            "room_avatar_url": room_avatar_url,
+            "room_join_rules": room_join_rules,
+            "room_name": room_name,
+            "sender": inviter_user_id,
+            "sender_display_name": inviter_display_name,
+            "sender_avatar_url": inviter_avatar_url,
+        }
+
+        if self.hs.config.invite_3pid_guest:
+            registration_handler = self.hs.get_handlers().registration_handler
+            guest_access_token = yield registration_handler.guest_access_token_for(
+                medium=medium,
+                address=address,
+                inviter_user_id=inviter_user_id,
+            )
+
+            guest_user_info = yield self.hs.get_auth().get_user_by_access_token(
+                guest_access_token
+            )
+
+            invite_config.update({
+                "guest_access_token": guest_access_token,
+                "guest_user_id": guest_user_info["user"].to_string(),
+            })
+
         data = yield self.hs.get_simple_http_client().post_urlencoded_get_json(
             is_url,
-            {
-                "medium": medium,
-                "address": address,
-                "room_id": room_id,
-                "room_alias": room_alias,
-                "room_avatar_url": room_avatar_url,
-                "room_join_rules": room_join_rules,
-                "room_name": room_name,
-                "sender": inviter_user_id,
-                "sender_display_name": inviter_display_name,
-                "sender_avatar_url": inviter_avatar_url,
-                "guest_user_id": guest_user_info["user"].to_string(),
-                "guest_access_token": guest_access_token,
-            }
+            invite_config
         )
         # TODO: Check for success
         token = data["token"]
diff --git a/synapse/util/caches/stream_change_cache.py b/synapse/util/caches/stream_change_cache.py
index a1aec7aa55..ea8a74ca69 100644
--- a/synapse/util/caches/stream_change_cache.py
+++ b/synapse/util/caches/stream_change_cache.py
@@ -99,9 +99,7 @@ class StreamChangeCache(object):
             keys = self._cache.keys()
             i = keys.bisect_right(stream_pos)
 
-            return (
-                self._cache[k] for k in keys[i:]
-            )
+            return [self._cache[k] for k in keys[i:]]
         else:
             return None