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, )
| 209 | // Returns an error if there was a problem building the event or fetching the |
| 210 | // necessary data to do so. |
| 211 | func 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 |
no test coverage detected