forked from MirrorHub/synapse
Fix bug when uploading state with empty state_key
This commit is contained in:
parent
aae8a37e63
commit
02db7eb209
6 changed files with 29 additions and 88 deletions
|
@ -118,6 +118,9 @@ class EventBase(object):
|
||||||
|
|
||||||
return d
|
return d
|
||||||
|
|
||||||
|
def get(self, key, default):
|
||||||
|
return self._event_dict.get(key, default)
|
||||||
|
|
||||||
def get_internal_metadata_dict(self):
|
def get_internal_metadata_dict(self):
|
||||||
return self.internal_metadata.get_dict()
|
return self.internal_metadata.get_dict()
|
||||||
|
|
||||||
|
@ -165,6 +168,9 @@ class FrozenEvent(EventBase):
|
||||||
return _unfreeze(super(FrozenEvent, self).get_dict())
|
return _unfreeze(super(FrozenEvent, self).get_dict())
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
return self.__repr__()
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
return "<FrozenEvent event_id='%s', type='%s', state_key='%s'>" % (
|
return "<FrozenEvent event_id='%s', type='%s', state_key='%s'>" % (
|
||||||
self.event_id, self.type, self.state_key,
|
self.event_id, self.type, self.get("state_key", None),
|
||||||
)
|
)
|
|
@ -97,6 +97,11 @@ class BaseHandler(object):
|
||||||
|
|
||||||
event = builder.build()
|
event = builder.build()
|
||||||
|
|
||||||
|
logger.debug(
|
||||||
|
"Created event %s with auth_events: %s, current state: %s",
|
||||||
|
event.event_id, context.auth_events, context.current_state,
|
||||||
|
)
|
||||||
|
|
||||||
defer.returnValue(
|
defer.returnValue(
|
||||||
(event, context,)
|
(event, context,)
|
||||||
)
|
)
|
||||||
|
@ -147,64 +152,3 @@ class BaseHandler(object):
|
||||||
None,
|
None,
|
||||||
destinations=destinations,
|
destinations=destinations,
|
||||||
)
|
)
|
||||||
|
|
||||||
# @defer.inlineCallbacks
|
|
||||||
# def _on_new_room_event(self, event, snapshot, extra_destinations=[],
|
|
||||||
# extra_users=[], suppress_auth=False,
|
|
||||||
# do_invite_host=None):
|
|
||||||
# yield run_on_reactor()
|
|
||||||
#
|
|
||||||
# snapshot.fill_out_prev_events(event)
|
|
||||||
#
|
|
||||||
# yield self.state_handler.annotate_event_with_state(event)
|
|
||||||
#
|
|
||||||
# yield self.auth.add_auth_events(event)
|
|
||||||
#
|
|
||||||
# logger.debug("Signing event...")
|
|
||||||
#
|
|
||||||
# add_hashes_and_signatures(
|
|
||||||
# event, self.server_name, self.signing_key
|
|
||||||
# )
|
|
||||||
#
|
|
||||||
# logger.debug("Signed event.")
|
|
||||||
#
|
|
||||||
# if not suppress_auth:
|
|
||||||
# logger.debug("Authing...")
|
|
||||||
# self.auth.check(event, auth_events=event.old_state_events)
|
|
||||||
# logger.debug("Authed")
|
|
||||||
# else:
|
|
||||||
# logger.debug("Suppressed auth.")
|
|
||||||
#
|
|
||||||
# if do_invite_host:
|
|
||||||
# federation_handler = self.hs.get_handlers().federation_handler
|
|
||||||
# invite_event = yield federation_handler.send_invite(
|
|
||||||
# do_invite_host,
|
|
||||||
# event
|
|
||||||
# )
|
|
||||||
#
|
|
||||||
# # FIXME: We need to check if the remote changed anything else
|
|
||||||
# event.signatures = invite_event.signatures
|
|
||||||
#
|
|
||||||
# yield self.store.persist_event(event)
|
|
||||||
#
|
|
||||||
# destinations = set(extra_destinations)
|
|
||||||
# # Send a PDU to all hosts who have joined the room.
|
|
||||||
#
|
|
||||||
# for k, s in event.state_events.items():
|
|
||||||
# try:
|
|
||||||
# if k[0] == RoomMemberEvent.TYPE:
|
|
||||||
# if s.content["membership"] == Membership.JOIN:
|
|
||||||
# destinations.add(
|
|
||||||
# self.hs.parse_userid(s.state_key).domain
|
|
||||||
# )
|
|
||||||
# except:
|
|
||||||
# logger.warn(
|
|
||||||
# "Failed to get destination from event %s", s.event_id
|
|
||||||
# )
|
|
||||||
#
|
|
||||||
# event.destinations = list(destinations)
|
|
||||||
#
|
|
||||||
# yield self.notifier.on_new_room_event(event, extra_users=extra_users)
|
|
||||||
#
|
|
||||||
# federation_handler = self.hs.get_handlers().federation_handler
|
|
||||||
# yield federation_handler.handle_new_event(event, snapshot)
|
|
||||||
|
|
|
@ -165,21 +165,6 @@ class MessageHandler(BaseHandler):
|
||||||
|
|
||||||
defer.returnValue(event)
|
defer.returnValue(event)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
|
||||||
def store_room_data(self, event=None):
|
|
||||||
""" Stores data for a room.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
event : The room path event
|
|
||||||
stamp_event (bool) : True to stamp event content with server keys.
|
|
||||||
Raises:
|
|
||||||
SynapseError if something went wrong.
|
|
||||||
"""
|
|
||||||
|
|
||||||
snapshot = yield self.store.snapshot_room(event)
|
|
||||||
|
|
||||||
yield self._on_new_room_event(event, snapshot)
|
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def get_room_data(self, user_id=None, room_id=None,
|
def get_room_data(self, user_id=None, room_id=None,
|
||||||
event_type=None, state_key=""):
|
event_type=None, state_key=""):
|
||||||
|
|
|
@ -147,16 +147,18 @@ class RoomStateEventRestServlet(RestServlet):
|
||||||
|
|
||||||
content = _parse_json(request)
|
content = _parse_json(request)
|
||||||
|
|
||||||
|
event_dict = {
|
||||||
|
"type": event_type,
|
||||||
|
"content": content,
|
||||||
|
"room_id": urllib.unquote(room_id),
|
||||||
|
"sender": user.to_string(),
|
||||||
|
}
|
||||||
|
|
||||||
|
if state_key is not None:
|
||||||
|
event_dict["state_key"] = urllib.unquote(state_key)
|
||||||
|
|
||||||
msg_handler = self.handlers.message_handler
|
msg_handler = self.handlers.message_handler
|
||||||
yield msg_handler.handle_event(
|
yield msg_handler.handle_event(event_dict)
|
||||||
{
|
|
||||||
"type": event_type,
|
|
||||||
"content": content,
|
|
||||||
"room_id": room_id,
|
|
||||||
"sender": user.to_string(),
|
|
||||||
"state_key": urllib.unquote(state_key),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
defer.returnValue((200, {}))
|
defer.returnValue((200, {}))
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,7 @@ from .state import StateStore
|
||||||
from .signatures import SignatureStore
|
from .signatures import SignatureStore
|
||||||
|
|
||||||
from syutil.base64util import decode_base64
|
from syutil.base64util import decode_base64
|
||||||
|
from syutil.jsonutil import encode_canonical_json
|
||||||
|
|
||||||
from synapse.crypto.event_signing import compute_event_reference_hash
|
from synapse.crypto.event_signing import compute_event_reference_hash
|
||||||
|
|
||||||
|
@ -162,7 +163,8 @@ class DataStore(RoomMemberStore, RoomStore,
|
||||||
table="event_json",
|
table="event_json",
|
||||||
values={
|
values={
|
||||||
"event_id": event.event_id,
|
"event_id": event.event_id,
|
||||||
"json": json.dumps(event_dict, separators=(',', ':')),
|
"room_id": event.room_id,
|
||||||
|
"json": encode_canonical_json(event_dict),
|
||||||
},
|
},
|
||||||
or_replace=True,
|
or_replace=True,
|
||||||
)
|
)
|
||||||
|
|
|
@ -35,11 +35,13 @@ CREATE INDEX IF NOT EXISTS events_room_id ON events (room_id);
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS event_json(
|
CREATE TABLE IF NOT EXISTS event_json(
|
||||||
event_id TEXT NOT NULL,
|
event_id TEXT NOT NULL,
|
||||||
|
room_id TEXT NOT NULL,
|
||||||
json BLOB NOT NULL,
|
json BLOB NOT NULL,
|
||||||
CONSTRAINT ev_j_uniq UNIQUE (event_id)
|
CONSTRAINT ev_j_uniq UNIQUE (event_id)
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE INDEX IF NOT EXISTS event_json_id ON event_json(event_id);
|
CREATE INDEX IF NOT EXISTS event_json_id ON event_json(event_id);
|
||||||
|
CREATE INDEX IF NOT EXISTS event_json_room_id ON event_json(room_id);
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS state_events(
|
CREATE TABLE IF NOT EXISTS state_events(
|
||||||
|
|
Loading…
Reference in a new issue