MCPcopy Create free account
hub / github.com/daodst/chat / createInviteFrom3PIDInvite

Function createInviteFrom3PIDInvite

federationapi/routing/threepid.go:211–270  ·  view source on GitHub ↗

createInviteFrom3PIDInvite processes an invite provided by the identity server and creates a m.room.member event (with "invite" membership) from it. Returns an error if there was a problem building the event or fetching the necessary data to do so.

(
	ctx context.Context, rsAPI api.FederationRoomserverAPI,
	cfg *config.FederationAPI,
	inv invite, federation federationAPI.FederationClient,
	userAPI userapi.FederationUserAPI,
)

Source from the content-addressed store, hash-verified

209// Returns an error if there was a problem building the event or fetching the
210// necessary data to do so.
211func createInviteFrom3PIDInvite(
212 ctx context.Context, rsAPI api.FederationRoomserverAPI,
213 cfg *config.FederationAPI,
214 inv invite, federation federationAPI.FederationClient,
215 userAPI userapi.FederationUserAPI,
216) (*gomatrixserverlib.Event, error) {
217 verReq := api.QueryRoomVersionForRoomRequest{RoomID: inv.RoomID}
218 verRes := api.QueryRoomVersionForRoomResponse{}
219 if err := rsAPI.QueryRoomVersionForRoom(ctx, &verReq, &verRes); err != nil {
220 return nil, err
221 }
222
223 _, server, err := gomatrixserverlib.SplitID('@', inv.MXID)
224 if err != nil {
225 return nil, err
226 }
227
228 if server != cfg.Matrix.ServerName {
229 return nil, errNotLocalUser
230 }
231
232 // Build the event
233 builder := &gomatrixserverlib.EventBuilder{
234 Type: "m.room.member",
235 Sender: inv.Sender,
236 RoomID: inv.RoomID,
237 StateKey: &inv.MXID,
238 }
239
240 var res userapi.QueryProfileResponse
241 err = userAPI.QueryProfile(ctx, &userapi.QueryProfileRequest{
242 UserID: inv.MXID,
243 }, &res)
244 if err != nil {
245 return nil, err
246 }
247
248 content := gomatrixserverlib.MemberContent{
249 AvatarURL: res.AvatarURL,
250 DisplayName: res.DisplayName,
251 Membership: gomatrixserverlib.Invite,
252 ThirdPartyInvite: &gomatrixserverlib.MemberThirdPartyInvite{
253 Signed: inv.Signed,
254 },
255 }
256
257 if err = builder.SetContent(content); err != nil {
258 return nil, err
259 }
260
261 event, err := buildMembershipEvent(ctx, builder, rsAPI, cfg)
262 if err == errNotInRoom {
263 return nil, sendToRemoteServer(ctx, inv, federation, cfg, *builder)
264 }
265 if err != nil {
266 return nil, err
267 }
268

Callers 1

Calls 4

sendToRemoteServerFunction · 0.85
buildMembershipEventFunction · 0.70
QueryProfileMethod · 0.65

Tested by

no test coverage detected