server invitatio
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
ycc 2024-03-29 15:40:46 +01:00
parent ead810e666
commit b15f571938
3 changed files with 43 additions and 53 deletions

View File

@ -103,7 +103,7 @@ func SaveCheckJobs() (string, error) {
} }
// ReadMessage // ReadMessage
func ReadMessage(messageFilename string, storagePath string) (string, string, error) { func ReadMessage(messageFilename string, detachFilesStoragePath string) (string, string, error) {
result := map[string]interface{}{} result := map[string]interface{}{}
// read message file // read message file
@ -119,7 +119,7 @@ func ReadMessage(messageFilename string, storagePath string) (string, string, er
} }
// check if invitation answer // check if invitation answer
if fromServerMessage.Invitation != nil { if fromServerMessage.Invitation != nil {
InvitationGetAnswerReadResponse(fromServerMessage.Invitation)
} }
// Chat messages // Chat messages
if len(fromServerMessage.Chat) > 0 { if len(fromServerMessage.Chat) > 0 {
@ -146,7 +146,7 @@ func ReadMessage(messageFilename string, storagePath string) (string, string, er
filename := uuid.New().String() + "_" + file.Filename filename := uuid.New().String() + "_" + file.Filename
filenames = append(filenames, filename) filenames = append(filenames, filename)
// detach file // detach file
os.WriteFile(filepath.Join(storagePath, "files", filename), file.Data, 0600) os.WriteFile(filepath.Join(detachFilesStoragePath, "files", filename), file.Data, 0600)
} }
//? result["invitation finalized"] = peer.Name //? result["invitation finalized"] = peer.Name
} }

View File

@ -6,67 +6,48 @@ import (
"google.golang.org/protobuf/proto" "google.golang.org/protobuf/proto"
) )
// InvitationGetAnswer // Got it by the message background check
// Called by the invitation initiator // => noInvitationGetAnswer
// invitationId: the id of the invitation
// serverUid: the uid of the server holding the invitation answer
func InvitationGetAnswer(invitationId string, serverUid string) ([]byte, string, error) {
// check if already in msg servers
srv, err := client.GetConfig().GetIdentity().MessageServers.LoadServer(serverUid)
if err != nil {
return nil, "InvitationGetAnswer: LoadServer", err
}
// buildserver message
toSrvMsg, err := srv.BuildToServerMessageInvitationAnswerRequest(invitationId)
if err != nil {
return nil, "InvitationGetAnswer: BuildToServerMessageInvitationRequest", err
}
// processoutbound
bytemsg, err := srv.ProcessOutboundMessage(toSrvMsg)
if err != nil {
return nil, "InvitationGetAnswer: ProcessOutboundMessage", err
}
return bytemsg, "", nil
}
// InvitationGetAnswerReadResponse // InvitationGetAnswerReadResponse
// Called by the invitation initiator // Called by the invitation initiator
// invitationAnswerData: the data received from the server // invitationAnswerData: the data received from the server
// invitationServerUid: the uid of the server holding the invitation // invitationServerUid: the uid of the server holding the invitation
func InvitationGetAnswerReadResponse(invitationAnswerData []byte, invitationServerUid string) (string, error) { func InvitationGetAnswerReadResponse(invitation *meowlib.Invitation) (*client.Peer, string, error) {
server, err := client.GetConfig().GetIdentity().MessageServers.LoadServer(invitationServerUid)
if err != nil {
return "InvitationGetAnswerReadResponse: LoadServer", err
}
// Server inbound processing : get the invitation server
serverMsg, err := server.ProcessInboundServerResponse(invitationAnswerData)
if err != nil {
return "InvitationGetAnswerReadResponse: ProcessInboundServerResponse", err
}
// fmt.Println("Inbound OK, Invitation Step: ", serverMsg.Invitation.Step, len(serverMsg.Invitation.Payload))
// fmt.Println("Invitation Check")
// fmt.Println(hex.EncodeToString(serverMsg.Invitation.Payload))
// contactCard decode
// decode the payload // decode the payload
var invitationAnswer meowlib.PackedUserMessage var invitationAnswer meowlib.PackedUserMessage
err = proto.Unmarshal(serverMsg.Invitation.Payload, &invitationAnswer) err := proto.Unmarshal(invitation.Payload, &invitationAnswer)
if err != nil { if err != nil {
return "InvitationGetAnswerReadResponse: Unmarshal", err return nil, "InvitationGetAnswerReadResponse: Unmarshal", err
} }
// retreive user public key to check usermessage signature // retreive user public key to check usermessage signature
//contactPublikKey := serverMsg.Invitation.From // contactPublikKey := serverMsg.Invitation.From
peer := client.GetConfig().GetIdentity().Peers.GetFromInvitationId(invitation.Uuid)
peer.ContactPublicKey = invitation.From
if peer != nil {
// process the packed user message // 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 // finalize the invitation
// id := client.GetConfig().GetIdentity() // 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()
// cc, err := id.FinalizeInvitation(serverMsg.Invitation.) // cc, err := id.FinalizeInvitation(serverMsg.Invitation.)
}
return "", nil return peer, "", nil
} }

View File

@ -15,6 +15,15 @@ func (pl *PeerList) GetFromPublicKey(publickey string) *Peer {
return nil return nil
} }
func (pl *PeerList) GetFromInvitationId(invitationId string) *Peer {
for _, peer := range *pl {
if peer.InvitationId == invitationId {
return peer
}
}
return nil
}
func (pl *PeerList) GetFromMyLookupKey(publickey string) *Peer { func (pl *PeerList) GetFromMyLookupKey(publickey string) *Peer {
for _, peer := range *pl { for _, peer := range *pl {
if peer.MyLookupKp.Public == publickey { if peer.MyLookupKp.Public == publickey {