54 lines
1.8 KiB
Go
54 lines
1.8 KiB
Go
package helpers
|
|
|
|
import (
|
|
"forge.redroom.link/yves/meowlib"
|
|
"forge.redroom.link/yves/meowlib/client"
|
|
"google.golang.org/protobuf/proto"
|
|
)
|
|
|
|
// Got it by the message background check
|
|
// => noInvitationGetAnswer
|
|
|
|
// invitationGetAnswerReadResponse
|
|
// Called by the initiator's background service only
|
|
// invitationAnswerData: the data received from the server
|
|
// invitationServerUid: the uid of the server holding the invitation
|
|
func invitationGetAnswerReadResponse(invitation *meowlib.Invitation) (*client.Peer, string, error) {
|
|
|
|
// decode the payload
|
|
var invitationAnswer meowlib.PackedUserMessage
|
|
err := proto.Unmarshal(invitation.Payload, &invitationAnswer)
|
|
if err != nil {
|
|
return nil, "InvitationGetAnswerReadResponse: Unmarshal", err
|
|
}
|
|
// retreive user public key to check usermessage signature
|
|
// contactPublikKey := serverMsg.Invitation.From
|
|
peer := client.GetConfig().GetIdentity().Peers.GetFromInvitationId(invitation.Uuid)
|
|
peer.ContactPublicKey = invitation.From
|
|
if peer != nil {
|
|
|
|
// process the packed user message
|
|
usermsg, err := peer.ProcessInboundUserMessage(invitationAnswer.Payload, invitationAnswer.Signature)
|
|
if err != nil {
|
|
return nil, "InvitationGetAnswerReadResponse: ProcessInboundUserMessage", err
|
|
}
|
|
decodedInvitation := usermsg.Invitation
|
|
var cc meowlib.ContactCard
|
|
err = proto.Unmarshal(decodedInvitation.Payload, &cc)
|
|
if err != nil {
|
|
return nil, "InvitationGetAnswerReadResponse: Unmarshal", err
|
|
}
|
|
|
|
// finalize the invitation
|
|
// id := client.GetConfig().GetIdentity()
|
|
peer.ContactLookupKey = cc.ContactPublicKey
|
|
peer.ContactEncryption = cc.EncryptionPublicKey
|
|
for _, server := range cc.PullServers {
|
|
peer.ContactPullServers = append(peer.ContactPullServers, server.GetUid())
|
|
}
|
|
client.GetConfig().GetIdentity().Save()
|
|
|
|
}
|
|
return peer, "", nil
|
|
}
|