1212# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1313# See the License for the specific language governing permissions and
1414# limitations under the License.
15+ from typing import Optional
1516
1617import attr
18+ from nacl .signing import SigningKey
1719
1820from twisted .internet import defer
1921
2325 KNOWN_EVENT_FORMAT_VERSIONS ,
2426 KNOWN_ROOM_VERSIONS ,
2527 EventFormatVersions ,
28+ RoomVersion ,
2629)
2730from synapse .crypto .event_signing import add_hashes_and_signatures
28- from synapse .types import EventID
31+ from synapse .events import (
32+ EventBase ,
33+ _EventInternalMetadata ,
34+ event_type_from_format_version ,
35+ )
36+ from synapse .types import EventID , JsonDict
37+ from synapse .util import Clock
2938from synapse .util .stringutils import random_string
3039
31- from . import _EventInternalMetadata , event_type_from_format_version
32-
3340
3441@attr .s (slots = True , cmp = False , frozen = True )
3542class EventBuilder (object ):
@@ -40,7 +47,7 @@ class EventBuilder(object):
4047 content/unsigned/internal_metadata fields are still mutable)
4148
4249 Attributes:
43- format_version (int): Event format version
50+ room_version: Version of the target room
4451 room_id (str)
4552 type (str)
4653 sender (str)
@@ -63,7 +70,7 @@ class EventBuilder(object):
6370 _hostname = attr .ib ()
6471 _signing_key = attr .ib ()
6572
66- format_version = attr .ib ()
73+ room_version = attr .ib (type = RoomVersion )
6774
6875 room_id = attr .ib ()
6976 type = attr .ib ()
@@ -108,7 +115,8 @@ def build(self, prev_event_ids):
108115 )
109116 auth_ids = yield self ._auth .compute_auth_events (self , state_ids )
110117
111- if self .format_version == EventFormatVersions .V1 :
118+ format_version = self .room_version .event_format
119+ if format_version == EventFormatVersions .V1 :
112120 auth_events = yield self ._store .add_event_hashes (auth_ids )
113121 prev_events = yield self ._store .add_event_hashes (prev_event_ids )
114122 else :
@@ -148,7 +156,7 @@ def build(self, prev_event_ids):
148156 clock = self ._clock ,
149157 hostname = self ._hostname ,
150158 signing_key = self ._signing_key ,
151- format_version = self .format_version ,
159+ room_version = self .room_version ,
152160 event_dict = event_dict ,
153161 internal_metadata_dict = self .internal_metadata .get_dict (),
154162 )
@@ -201,7 +209,7 @@ def for_room_version(self, room_version, key_values):
201209 clock = self .clock ,
202210 hostname = self .hostname ,
203211 signing_key = self .signing_key ,
204- format_version = room_version . event_format ,
212+ room_version = room_version ,
205213 type = key_values ["type" ],
206214 state_key = key_values .get ("state_key" ),
207215 room_id = key_values ["room_id" ],
@@ -214,29 +222,19 @@ def for_room_version(self, room_version, key_values):
214222
215223
216224def create_local_event_from_event_dict (
217- clock ,
218- hostname ,
219- signing_key ,
220- format_version ,
221- event_dict ,
222- internal_metadata_dict = None ,
223- ):
225+ clock : Clock ,
226+ hostname : str ,
227+ signing_key : SigningKey ,
228+ room_version : RoomVersion ,
229+ event_dict : JsonDict ,
230+ internal_metadata_dict : Optional [ JsonDict ] = None ,
231+ ) -> EventBase :
224232 """Takes a fully formed event dict, ensuring that fields like `origin`
225233 and `origin_server_ts` have correct values for a locally produced event,
226234 then signs and hashes it.
227-
228- Args:
229- clock (Clock)
230- hostname (str)
231- signing_key
232- format_version (int)
233- event_dict (dict)
234- internal_metadata_dict (dict|None)
235-
236- Returns:
237- FrozenEvent
238235 """
239236
237+ format_version = room_version .event_format
240238 if format_version not in KNOWN_EVENT_FORMAT_VERSIONS :
241239 raise Exception ("No event format defined for version %r" % (format_version ,))
242240
@@ -257,7 +255,7 @@ def create_local_event_from_event_dict(
257255
258256 event_dict .setdefault ("signatures" , {})
259257
260- add_hashes_and_signatures (event_dict , hostname , signing_key )
258+ add_hashes_and_signatures (room_version , event_dict , hostname , signing_key )
261259 return event_type_from_format_version (format_version )(
262260 event_dict , internal_metadata_dict = internal_metadata_dict
263261 )
0 commit comments