package server import ( "errors" "forge.redroom.link/yves/meowlib/client" ) // Step3PostCard builds and returns the packed server messages that send the // initiator's full ContactCard to the invitee through the invitee's servers. // Step 3 must NOT use DR or sym layers: the invitee hasn't received those keys yet // (they are carried inside this very message). Plain asym encryption is used. func Step3PostCard(invitationId string) ([][]byte, error) { id := client.GetConfig().GetIdentity() peer := id.Peers.GetFromInvitationId(invitationId) if peer == nil { return nil, errors.New("no peer for invitation id " + invitationId) } step3msg, err := peer.BuildInvitationStep3Message(peer.GetMyContact()) if err != nil { return nil, err } serialized, err := peer.SerializeUserMessage(step3msg) if err != nil { return nil, err } enc, err := peer.AsymEncryptMessage(serialized) if err != nil { return nil, err } packedMsg := peer.PackUserMessage(enc.Data, enc.Signature) var results [][]byte for _, srvUid := range peer.ContactPullServers { srv, err := id.MessageServers.LoadServer(srvUid) if err != nil { continue } toSrvMsg := srv.BuildToServerMessageFromUserMessage(packedMsg) bytemsg, err := srv.ProcessOutboundMessage(toSrvMsg) if err != nil { continue } results = append(results, bytemsg) } if len(results) == 0 { return nil, errors.New("could not build message for any invitee server") } return results, nil }