2026-04-11 22:05:30 +02:00
|
|
|
package messages
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"forge.redroom.link/yves/meowlib"
|
|
|
|
|
"forge.redroom.link/yves/meowlib/client"
|
|
|
|
|
"google.golang.org/protobuf/proto"
|
|
|
|
|
)
|
|
|
|
|
|
2026-04-14 19:12:09 +02:00
|
|
|
// Step4InviteeFinalizesInitiator is called by the invitee when the step-3 answer
|
|
|
|
|
// (serialized Invitation bytes) arrives. It unmarshals the initiator's ContactCard and
|
|
|
|
|
// completes the invitee's peer entry with the initiator's real keys.
|
|
|
|
|
func Step4InviteeFinalizesInitiator(invitationBytes []byte) (*client.Peer, error) {
|
|
|
|
|
var inv meowlib.Invitation
|
|
|
|
|
if err := proto.Unmarshal(invitationBytes, &inv); err != nil {
|
|
|
|
|
return nil, err
|
2026-04-11 22:05:30 +02:00
|
|
|
}
|
|
|
|
|
var initiatorCC meowlib.ContactCard
|
2026-04-14 19:12:09 +02:00
|
|
|
if err := proto.Unmarshal(inv.Payload, &initiatorCC); err != nil {
|
2026-04-11 22:05:30 +02:00
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
if initiatorCC.InvitationId == "" {
|
2026-04-14 19:12:09 +02:00
|
|
|
initiatorCC.InvitationId = inv.Uuid
|
2026-04-11 22:05:30 +02:00
|
|
|
}
|
|
|
|
|
if err := client.GetConfig().GetIdentity().InvitationStep4(&initiatorCC); err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
client.GetConfig().GetIdentity().Save()
|
|
|
|
|
peer := client.GetConfig().GetIdentity().Peers.GetFromInvitationId(initiatorCC.InvitationId)
|
|
|
|
|
return peer, nil
|
|
|
|
|
}
|