Don't unfreeze when using FreezeEvent.get_dict, as we are using a JSONEncoder that understands FrozenDict
parent
4ebbaf0d43
commit
ddb816cf60
|
@ -140,10 +140,6 @@ class FrozenEvent(EventBase):
|
||||||
|
|
||||||
return e
|
return e
|
||||||
|
|
||||||
def get_dict(self):
|
|
||||||
# We need to unfreeze what we return
|
|
||||||
return unfreeze(super(FrozenEvent, self).get_dict())
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.__repr__()
|
return self.__repr__()
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,8 @@ from twisted.internet import defer
|
||||||
|
|
||||||
from synapse.util.logutils import log_function
|
from synapse.util.logutils import log_function
|
||||||
|
|
||||||
import simplejson as json
|
from syutil.jsonutil import encode_canonical_json
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
|
||||||
|
@ -70,7 +71,7 @@ class TransactionActions(object):
|
||||||
transaction.transaction_id,
|
transaction.transaction_id,
|
||||||
transaction.origin,
|
transaction.origin,
|
||||||
code,
|
code,
|
||||||
json.dumps(response)
|
encode_canonical_json(response)
|
||||||
)
|
)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
|
@ -100,5 +101,5 @@ class TransactionActions(object):
|
||||||
transaction.transaction_id,
|
transaction.transaction_id,
|
||||||
transaction.destination,
|
transaction.destination,
|
||||||
response_code,
|
response_code,
|
||||||
json.dumps(response_dict)
|
encode_canonical_json(response_dict)
|
||||||
)
|
)
|
||||||
|
|
|
@ -23,6 +23,7 @@ from synapse.api.errors import (
|
||||||
from synapse.api.constants import EventTypes, Membership, RejectedReason
|
from synapse.api.constants import EventTypes, Membership, RejectedReason
|
||||||
from synapse.util.logutils import log_function
|
from synapse.util.logutils import log_function
|
||||||
from synapse.util.async import run_on_reactor
|
from synapse.util.async import run_on_reactor
|
||||||
|
from synapse.util.frozenutils import unfreeze
|
||||||
from synapse.crypto.event_signing import (
|
from synapse.crypto.event_signing import (
|
||||||
compute_event_signature, add_hashes_and_signatures,
|
compute_event_signature, add_hashes_and_signatures,
|
||||||
)
|
)
|
||||||
|
@ -311,9 +312,12 @@ class FederationHandler(BaseHandler):
|
||||||
self.room_queues[room_id] = []
|
self.room_queues[room_id] = []
|
||||||
|
|
||||||
builder = self.event_builder_factory.new(
|
builder = self.event_builder_factory.new(
|
||||||
event.get_pdu_json()
|
unfreeze(event.get_pdu_json())
|
||||||
)
|
)
|
||||||
|
|
||||||
|
logger.info("Builder: %s", builder.get_pdu_json())
|
||||||
|
logger.info("Content: %s", content)
|
||||||
|
|
||||||
handled_events = set()
|
handled_events = set()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -324,14 +328,21 @@ class FederationHandler(BaseHandler):
|
||||||
if not hasattr(event, "signatures"):
|
if not hasattr(event, "signatures"):
|
||||||
builder.signatures = {}
|
builder.signatures = {}
|
||||||
|
|
||||||
|
logger.info("Content befhahs: %s", builder.content)
|
||||||
|
|
||||||
add_hashes_and_signatures(
|
add_hashes_and_signatures(
|
||||||
builder,
|
builder,
|
||||||
self.hs.hostname,
|
self.hs.hostname,
|
||||||
self.hs.config.signing_key[0],
|
self.hs.config.signing_key[0],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
logger.info("Content aftet hah: %s", builder.content)
|
||||||
|
logger.info("Content pdu json: %s", builder.get_pdu_json())
|
||||||
|
|
||||||
new_event = builder.build()
|
new_event = builder.build()
|
||||||
|
|
||||||
|
logger.info("Content after build: %s", new_event.content)
|
||||||
|
|
||||||
# Try the host we successfully got a response to /make_join/
|
# Try the host we successfully got a response to /make_join/
|
||||||
# request first.
|
# request first.
|
||||||
try:
|
try:
|
||||||
|
@ -340,6 +351,7 @@ class FederationHandler(BaseHandler):
|
||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
logger.info(new_event.content)
|
||||||
ret = yield self.replication_layer.send_join(
|
ret = yield self.replication_layer.send_join(
|
||||||
target_hosts,
|
target_hosts,
|
||||||
new_event
|
new_event
|
||||||
|
@ -485,6 +497,7 @@ class FederationHandler(BaseHandler):
|
||||||
|
|
||||||
event.internal_metadata.outlier = False
|
event.internal_metadata.outlier = False
|
||||||
|
|
||||||
|
logger.info(event.content)
|
||||||
context = yield self._handle_new_event(origin, event)
|
context = yield self._handle_new_event(origin, event)
|
||||||
|
|
||||||
logger.debug(
|
logger.debug(
|
||||||
|
|
|
@ -403,7 +403,9 @@ class RoomMemberHandler(BaseHandler):
|
||||||
"membership": Membership.JOIN,
|
"membership": Membership.JOIN,
|
||||||
"content": content,
|
"content": content,
|
||||||
})
|
})
|
||||||
|
logger.info("Before build: %s", builder.get_pdu_json())
|
||||||
event, context = yield self._create_new_client_event(builder)
|
event, context = yield self._create_new_client_event(builder)
|
||||||
|
logger.info("After build: %s", event.get_dict())
|
||||||
|
|
||||||
yield self._do_join(event, context, room_hosts=hosts, do_auth=True)
|
yield self._do_join(event, context, room_hosts=hosts, do_auth=True)
|
||||||
|
|
||||||
|
@ -462,7 +464,7 @@ class RoomMemberHandler(BaseHandler):
|
||||||
room_hosts,
|
room_hosts,
|
||||||
room_id,
|
room_id,
|
||||||
event.user_id,
|
event.user_id,
|
||||||
event.get_dict()["content"], # FIXME To get a non-frozen dict
|
event.content, # FIXME To get a non-frozen dict
|
||||||
context
|
context
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -298,12 +298,16 @@ class DataStore(RoomMemberStore, RoomStore,
|
||||||
or_replace=True,
|
or_replace=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
content = encode_canonical_json(
|
||||||
|
event.content
|
||||||
|
).decode("UTF-8")
|
||||||
|
|
||||||
vals = {
|
vals = {
|
||||||
"topological_ordering": event.depth,
|
"topological_ordering": event.depth,
|
||||||
"event_id": event.event_id,
|
"event_id": event.event_id,
|
||||||
"type": event.type,
|
"type": event.type,
|
||||||
"room_id": event.room_id,
|
"room_id": event.room_id,
|
||||||
"content": json.dumps(event.get_dict()["content"]),
|
"content": content,
|
||||||
"processed": True,
|
"processed": True,
|
||||||
"outlier": outlier,
|
"outlier": outlier,
|
||||||
"depth": event.depth,
|
"depth": event.depth,
|
||||||
|
@ -323,7 +327,10 @@ class DataStore(RoomMemberStore, RoomStore,
|
||||||
"prev_events",
|
"prev_events",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
vals["unrecognized_keys"] = json.dumps(unrec)
|
|
||||||
|
vals["unrecognized_keys"] = encode_canonical_json(
|
||||||
|
unrec
|
||||||
|
).decode("UTF-8")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self._simple_insert_txn(
|
self._simple_insert_txn(
|
||||||
|
|
|
@ -21,6 +21,9 @@ def freeze(o):
|
||||||
if t is dict:
|
if t is dict:
|
||||||
return frozendict({k: freeze(v) for k, v in o.items()})
|
return frozendict({k: freeze(v) for k, v in o.items()})
|
||||||
|
|
||||||
|
if t is frozendict:
|
||||||
|
return o
|
||||||
|
|
||||||
if t is str or t is unicode:
|
if t is str or t is unicode:
|
||||||
return o
|
return o
|
||||||
|
|
||||||
|
@ -33,10 +36,11 @@ def freeze(o):
|
||||||
|
|
||||||
|
|
||||||
def unfreeze(o):
|
def unfreeze(o):
|
||||||
if isinstance(o, frozendict) or isinstance(o, dict):
|
t = type(o)
|
||||||
|
if t is dict or t is frozendict:
|
||||||
return dict({k: unfreeze(v) for k, v in o.items()})
|
return dict({k: unfreeze(v) for k, v in o.items()})
|
||||||
|
|
||||||
if isinstance(o, basestring):
|
if t is str or t is unicode:
|
||||||
return o
|
return o
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in New Issue