package messages import ( "forge.redroom.link/yves/meowlib" "forge.redroom.link/yves/meowlib/client" "google.golang.org/protobuf/proto" ) // Step2InviteeCreatesInitiatorAndEncryptedContactCard deserialises the step-1 payload bytes, // creates the invitee's peer entry, builds and encrypts the invitee's ContactCard, and returns // a serialized Invitation (step=2) whose Payload is the PackedUserMessage encrypted with the // initiator's temporary public key. The bytes are transport-ready and consumed directly by // Step3InitiatorFinalizesInviteeAndCreatesContactCard. func Step2InviteeCreatesInitiatorAndEncryptedContactCard(payloadBytes []byte, nickname string, myNickname string, serverUids []string) ([]byte, error) { mynick := myNickname if mynick == "" { mynick = client.GetConfig().GetIdentity().Nickname } var payload meowlib.InvitationInitPayload if err := proto.Unmarshal(payloadBytes, &payload); err != nil { return nil, err } peer, err := client.GetConfig().GetIdentity().InvitationStep2(mynick, nickname, serverUids, &payload) if err != nil { return nil, err } usermsg, err := peer.BuildInvitationStep2Message(peer.GetMyContact()) if err != nil { return nil, err } packed, err := peer.ProcessOutboundUserMessage(usermsg) if err != nil { return nil, err } packedBytes, err := proto.Marshal(packed) if err != nil { return nil, err } inv := &meowlib.Invitation{ Uuid: payload.Uuid, Step: 2, From: peer.MyIdentity.Public, Payload: packedBytes, } client.GetConfig().GetIdentity().Save() return proto.Marshal(inv) }