@@ -59,29 +59,22 @@ func MakeJoinRequestsHandler(s *Server, w http.ResponseWriter, req *http.Request
5959// or dealing with HTTP responses itself.
6060func MakeRespMakeJoin (s * Server , room * ServerRoom , userID string ) (resp fclient.RespMakeJoin , err error ) {
6161 // Generate a join event
62- proto := gomatrixserverlib.ProtoEvent {
63- SenderID : userID ,
64- RoomID : room .RoomID ,
65- Type : "m.room.member" ,
66- StateKey : & userID ,
67- PrevEvents : []string {room .Timeline [len (room .Timeline )- 1 ].EventID ()},
68- Depth : room .Timeline [len (room .Timeline )- 1 ].Depth () + 1 ,
69- }
70- err = proto .SetContent (map [string ]interface {}{"membership" : spec .Join })
71- if err != nil {
72- err = fmt .Errorf ("make_join cannot set membership content: %w" , err )
73- return
74- }
75- stateNeeded , err := gomatrixserverlib .StateNeededForProtoEvent (& proto )
62+ proto , err := room .ProtoEventCreator (Event {
63+ Type : "m.room.member" ,
64+ StateKey : & userID ,
65+ Content : map [string ]interface {}{
66+ "membership" : spec .Join ,
67+ },
68+ Sender : userID ,
69+ })
7670 if err != nil {
77- err = fmt .Errorf ("make_join cannot calculate auth_events : %w" , err )
71+ err = fmt .Errorf ("make_join cannot set create proto event : %w" , err )
7872 return
7973 }
80- proto .AuthEvents = room .AuthEvents (stateNeeded )
8174
8275 resp = fclient.RespMakeJoin {
8376 RoomVersion : room .Version ,
84- JoinEvent : proto ,
77+ JoinEvent : * proto ,
8578 }
8679 return
8780}
@@ -91,29 +84,22 @@ func MakeRespMakeJoin(s *Server, room *ServerRoom, userID string) (resp fclient.
9184// or dealing with HTTP responses itself.
9285func MakeRespMakeKnock (s * Server , room * ServerRoom , userID string ) (resp fclient.RespMakeKnock , err error ) {
9386 // Generate a knock event
94- proto := gomatrixserverlib.ProtoEvent {
95- SenderID : userID ,
96- RoomID : room .RoomID ,
97- Type : "m.room.member" ,
98- StateKey : & userID ,
99- PrevEvents : []string {room .Timeline [len (room .Timeline )- 1 ].EventID ()},
100- Depth : room .Timeline [len (room .Timeline )- 1 ].Depth () + 1 ,
101- }
102- err = proto .SetContent (map [string ]interface {}{"membership" : spec .Join })
103- if err != nil {
104- err = fmt .Errorf ("make_knock cannot set membership content: %w" , err )
105- return
106- }
107- stateNeeded , err := gomatrixserverlib .StateNeededForProtoEvent (& proto )
87+ proto , err := room .ProtoEventCreator (Event {
88+ Type : "m.room.member" ,
89+ StateKey : & userID ,
90+ Content : map [string ]interface {}{
91+ "membership" : spec .Join , // XXX this feels wrong?
92+ },
93+ Sender : userID ,
94+ })
10895 if err != nil {
109- err = fmt .Errorf ("make_knock cannot calculate auth_events : %w" , err )
96+ err = fmt .Errorf ("make_knock cannot set create proto event : %w" , err )
11097 return
11198 }
112- proto .AuthEvents = room .AuthEvents (stateNeeded )
11399
114100 resp = fclient.RespMakeKnock {
115101 RoomVersion : room .Version ,
116- KnockEvent : proto ,
102+ KnockEvent : * proto ,
117103 }
118104 return
119105}
@@ -173,40 +159,8 @@ func SendJoinRequestsHandler(s *Server, w http.ResponseWriter, req *http.Request
173159 return
174160 }
175161
176- // build the state list *before* we insert the new event
177- var stateEvents []gomatrixserverlib.PDU
178- room .StateMutex .RLock ()
179- for _ , ev := range room .State {
180- // filter out non-critical memberships if this is a partial-state join
181- if expectPartialState {
182- if ev .Type () == "m.room.member" && ev .StateKey () != event .StateKey () {
183- continue
184- }
185- }
186- stateEvents = append (stateEvents , ev )
187- }
188- room .StateMutex .RUnlock ()
189-
190- authEvents := room .AuthChainForEvents (stateEvents )
191-
192- // get servers in room *before* the join event
193- serversInRoom := []string {s .serverName }
194- if ! omitServersInRoom {
195- serversInRoom = room .ServersInRoom ()
196- }
197-
198- // insert the join event into the room state
199- room .AddEvent (event )
200- log .Printf ("Received send-join of event %s" , event .EventID ())
201-
202- // return state and auth chain
203- b , err := json .Marshal (fclient.RespSendJoin {
204- Origin : spec .ServerName (s .serverName ),
205- AuthEvents : gomatrixserverlib .NewEventJSONsFromEvents (authEvents ),
206- StateEvents : gomatrixserverlib .NewEventJSONsFromEvents (stateEvents ),
207- MembersOmitted : expectPartialState ,
208- ServersInRoom : serversInRoom ,
209- })
162+ resp := room .GenerateSendJoinResponse (s , event , expectPartialState , omitServersInRoom )
163+ b , err := json .Marshal (resp )
210164 if err != nil {
211165 w .WriteHeader (500 )
212166 w .Write ([]byte ("complement: HandleMakeSendJoinRequests send_join cannot marshal RespSendJoin: " + err .Error ()))
@@ -410,7 +364,7 @@ func HandleEventAuthRequests() func(*Server) {
410364
411365 authEvents := room .AuthChainForEvents ([]gomatrixserverlib.PDU {event })
412366 resp := fclient.RespEventAuth {
413- gomatrixserverlib .NewEventJSONsFromEvents (authEvents ),
367+ AuthEvents : gomatrixserverlib .NewEventJSONsFromEvents (authEvents ),
414368 }
415369 respJSON , err := json .Marshal (resp )
416370 if err != nil {
@@ -590,8 +544,8 @@ func HandleTransactionRequests(pduCallback func(gomatrixserverlib.PDU), eduCallb
590544 verImpl , err := gomatrixserverlib .GetRoomVersion (room .Version )
591545 if err != nil {
592546 log .Printf (
593- "complement: Transaction '%s': Failed to get room version '%s' : %s" ,
594- transaction .TransactionID , event . EventID (), err .Error (),
547+ "complement: Transaction '%s': Failed to get room version: %s" ,
548+ transaction .TransactionID , err .Error (),
595549 )
596550 continue
597551 }
0 commit comments