Compare commits
9 Commits
anoa/log_e
...
experiment
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
230474b620 | ||
|
|
cf09912280 | ||
|
|
cd317a1910 | ||
|
|
11a168442d | ||
|
|
e8d99369bc | ||
|
|
921469383e | ||
|
|
ccbf6bb222 | ||
|
|
c68d510564 | ||
|
|
ce1b393682 |
@@ -259,10 +259,8 @@ class DirectoryHandler(BaseHandler):
|
|||||||
servers = result["servers"]
|
servers = result["servers"]
|
||||||
|
|
||||||
if not room_id:
|
if not room_id:
|
||||||
raise SynapseError(
|
raise NotFoundError(
|
||||||
404,
|
|
||||||
"Room alias %s not found" % (room_alias.to_string(),),
|
"Room alias %s not found" % (room_alias.to_string(),),
|
||||||
Codes.NOT_FOUND
|
|
||||||
)
|
)
|
||||||
|
|
||||||
users = yield self.state.get_current_user_in_room(room_id)
|
users = yield self.state.get_current_user_in_room(room_id)
|
||||||
@@ -302,10 +300,8 @@ class DirectoryHandler(BaseHandler):
|
|||||||
"servers": result.servers,
|
"servers": result.servers,
|
||||||
})
|
})
|
||||||
else:
|
else:
|
||||||
raise SynapseError(
|
raise NotFoundError(
|
||||||
404,
|
|
||||||
"Room alias %r not found" % (room_alias.to_string(),),
|
"Room alias %r not found" % (room_alias.to_string(),),
|
||||||
Codes.NOT_FOUND
|
|
||||||
)
|
)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
|
|||||||
@@ -48,13 +48,14 @@ from synapse.crypto.event_signing import (
|
|||||||
compute_event_signature,
|
compute_event_signature,
|
||||||
)
|
)
|
||||||
from synapse.events.validator import EventValidator
|
from synapse.events.validator import EventValidator
|
||||||
|
from synapse.metrics.background_process_metrics import run_as_background_process
|
||||||
from synapse.replication.http.federation import (
|
from synapse.replication.http.federation import (
|
||||||
ReplicationCleanRoomRestServlet,
|
ReplicationCleanRoomRestServlet,
|
||||||
ReplicationFederationSendEventsRestServlet,
|
ReplicationFederationSendEventsRestServlet,
|
||||||
)
|
)
|
||||||
from synapse.replication.http.membership import ReplicationUserJoinedLeftRoomRestServlet
|
from synapse.replication.http.membership import ReplicationUserJoinedLeftRoomRestServlet
|
||||||
from synapse.state import StateResolutionStore, resolve_events_with_store
|
from synapse.state import StateResolutionStore, resolve_events_with_store
|
||||||
from synapse.types import UserID, get_domain_from_id
|
from synapse.types import UserID, create_requester, get_domain_from_id
|
||||||
from synapse.util import logcontext, unwrapFirstError
|
from synapse.util import logcontext, unwrapFirstError
|
||||||
from synapse.util.async_helpers import Linearizer
|
from synapse.util.async_helpers import Linearizer
|
||||||
from synapse.util.distributor import user_joined_room
|
from synapse.util.distributor import user_joined_room
|
||||||
@@ -105,6 +106,7 @@ class FederationHandler(BaseHandler):
|
|||||||
|
|
||||||
self.hs = hs
|
self.hs = hs
|
||||||
|
|
||||||
|
self.clock = hs.get_clock()
|
||||||
self.store = hs.get_datastore() # type: synapse.storage.DataStore
|
self.store = hs.get_datastore() # type: synapse.storage.DataStore
|
||||||
self.federation_client = hs.get_federation_client()
|
self.federation_client = hs.get_federation_client()
|
||||||
self.state_handler = hs.get_state_handler()
|
self.state_handler = hs.get_state_handler()
|
||||||
@@ -1300,8 +1302,37 @@ class FederationHandler(BaseHandler):
|
|||||||
context = yield self.state_handler.compute_event_context(event)
|
context = yield self.state_handler.compute_event_context(event)
|
||||||
yield self.persist_events_and_notify([(event, context)])
|
yield self.persist_events_and_notify([(event, context)])
|
||||||
|
|
||||||
|
sender = UserID.from_string(event.sender)
|
||||||
|
target = UserID.from_string(event.state_key)
|
||||||
|
if (sender.localpart == target.localpart):
|
||||||
|
run_as_background_process(
|
||||||
|
"_auto_accept_invite",
|
||||||
|
self._auto_accept_invite,
|
||||||
|
sender, target, event.room_id,
|
||||||
|
)
|
||||||
|
|
||||||
defer.returnValue(event)
|
defer.returnValue(event)
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
|
def _auto_accept_invite(self, sender, target, room_id):
|
||||||
|
joined = False
|
||||||
|
for attempt in range(0, 10):
|
||||||
|
try:
|
||||||
|
yield self.hs.get_room_member_handler().update_membership(
|
||||||
|
requester=create_requester(target.to_string()),
|
||||||
|
target=target,
|
||||||
|
room_id=room_id,
|
||||||
|
action="join",
|
||||||
|
)
|
||||||
|
joined = True
|
||||||
|
break
|
||||||
|
except Exception:
|
||||||
|
# We're going to retry, but we should log the error
|
||||||
|
logger.exception("Error auto-accepting invite on attempt %d" % attempt)
|
||||||
|
yield self.clock.sleep(1)
|
||||||
|
if not joined:
|
||||||
|
logger.error("Giving up on trying to auto-accept invite: too many attempts")
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def do_remotely_reject_invite(self, target_hosts, room_id, user_id):
|
def do_remotely_reject_invite(self, target_hosts, room_id, user_id):
|
||||||
origin, event = yield self._make_and_verify_event(
|
origin, event = yield self._make_and_verify_event(
|
||||||
|
|||||||
@@ -28,8 +28,9 @@ from twisted.internet import defer
|
|||||||
import synapse.server
|
import synapse.server
|
||||||
import synapse.types
|
import synapse.types
|
||||||
from synapse.api.constants import EventTypes, Membership
|
from synapse.api.constants import EventTypes, Membership
|
||||||
from synapse.api.errors import AuthError, Codes, SynapseError
|
from synapse.api.errors import AuthError, Codes, NotFoundError, SynapseError
|
||||||
from synapse.types import RoomID, UserID
|
from synapse.types import RoomAlias, RoomID, UserID
|
||||||
|
from synapse.util import logcontext
|
||||||
from synapse.util.async_helpers import Linearizer
|
from synapse.util.async_helpers import Linearizer
|
||||||
from synapse.util.distributor import user_joined_room, user_left_room
|
from synapse.util.distributor import user_joined_room, user_left_room
|
||||||
|
|
||||||
@@ -416,6 +417,10 @@ class RoomMemberHandler(object):
|
|||||||
ret = yield self._remote_join(
|
ret = yield self._remote_join(
|
||||||
requester, remote_room_hosts, room_id, target, content
|
requester, remote_room_hosts, room_id, target, content
|
||||||
)
|
)
|
||||||
|
logcontext.run_in_background(
|
||||||
|
self._send_merged_user_invites,
|
||||||
|
requester, room_id,
|
||||||
|
)
|
||||||
defer.returnValue(ret)
|
defer.returnValue(ret)
|
||||||
|
|
||||||
elif effective_membership_state == Membership.LEAVE:
|
elif effective_membership_state == Membership.LEAVE:
|
||||||
@@ -450,8 +455,58 @@ class RoomMemberHandler(object):
|
|||||||
prev_events_and_hashes=prev_events_and_hashes,
|
prev_events_and_hashes=prev_events_and_hashes,
|
||||||
content=content,
|
content=content,
|
||||||
)
|
)
|
||||||
|
if effective_membership_state == Membership.JOIN:
|
||||||
|
logcontext.run_in_background(
|
||||||
|
self._send_merged_user_invites,
|
||||||
|
requester, room_id,
|
||||||
|
)
|
||||||
defer.returnValue(res)
|
defer.returnValue(res)
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
|
def _send_merged_user_invites(self, requester, room_id):
|
||||||
|
try:
|
||||||
|
profile_alias = "#_profile_%s:%s" % (
|
||||||
|
requester.user.localpart, self.hs.hostname,
|
||||||
|
)
|
||||||
|
profile_alias = RoomAlias.from_string(profile_alias)
|
||||||
|
try:
|
||||||
|
profile_room_id, remote_room_hosts = yield self.lookup_room_alias(
|
||||||
|
profile_alias,
|
||||||
|
)
|
||||||
|
except NotFoundError:
|
||||||
|
logger.info(
|
||||||
|
"Not sending merged invites as %s does not exists",
|
||||||
|
profile_alias
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
linked_accounts = yield self.state_handler.get_current_state(
|
||||||
|
room_id=profile_room_id.to_string(),
|
||||||
|
event_type="m.linked_accounts",
|
||||||
|
state_key="",
|
||||||
|
)
|
||||||
|
if not linked_accounts or not linked_accounts.content['all_children']:
|
||||||
|
return
|
||||||
|
for child_id in linked_accounts.content['all_children']:
|
||||||
|
child = UserID.from_string(child_id)
|
||||||
|
if self.hs.is_mine(child) or child_id == requester.user.to_string():
|
||||||
|
# TODO: Handle auto-invite for local users (not a priority)
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
yield self.update_membership(
|
||||||
|
requester=requester,
|
||||||
|
target=child,
|
||||||
|
room_id=room_id,
|
||||||
|
action="invite",
|
||||||
|
)
|
||||||
|
except Exception:
|
||||||
|
logger.exception("Failed to invite %s to %s", child_id, room_id)
|
||||||
|
except Exception:
|
||||||
|
logger.exception(
|
||||||
|
"Failed to send invites to children of %s in %s",
|
||||||
|
requester.user.to_string(), room_id,
|
||||||
|
)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def send_membership_event(
|
def send_membership_event(
|
||||||
self,
|
self,
|
||||||
@@ -578,7 +633,7 @@ class RoomMemberHandler(object):
|
|||||||
mapping = yield directory_handler.get_association(room_alias)
|
mapping = yield directory_handler.get_association(room_alias)
|
||||||
|
|
||||||
if not mapping:
|
if not mapping:
|
||||||
raise SynapseError(404, "No such room alias")
|
raise NotFoundError("No such room alias")
|
||||||
|
|
||||||
room_id = mapping["room_id"]
|
room_id = mapping["room_id"]
|
||||||
servers = mapping["servers"]
|
servers = mapping["servers"]
|
||||||
|
|||||||
Reference in New Issue
Block a user