Files
2026-04-14 19:12:09 +02:00

52 lines
1.5 KiB
Go

package files
import (
"errors"
"os"
"strings"
"forge.redroom.link/yves/meowlib"
"forge.redroom.link/yves/meowlib/client"
"forge.redroom.link/yves/meowlib/client/invitation/messages"
"google.golang.org/protobuf/proto"
)
// Step2ReadAndAnswer reads an InvitationInitPayload from a .mwiv file, creates the
// invitee's peer entry, and writes the serialized Invitation (step=2) to a .mwiv file
// for the initiator to pick up and process in step 3.
func Step2ReadAndAnswer(invitationFile string, nickname string, myNickname string, serverUids []string) error {
if _, err := os.Stat(invitationFile); os.IsNotExist(err) {
return err
}
if !strings.HasSuffix(invitationFile, ".mwiv") {
return errors.New("only .mwiv files are supported")
}
data, err := os.ReadFile(invitationFile)
if err != nil {
return err
}
payload, err := meowlib.NewInvitationInitPayloadFromCompressed(data)
if err != nil {
return err
}
payloadBytes, err := proto.Marshal(payload)
if err != nil {
return err
}
mynick := myNickname
if mynick == "" {
mynick = client.GetConfig().GetIdentity().Nickname
}
// messages.Step2 returns a serialized Invitation ready to write directly to file.
invBytes, err := messages.Step2InviteeCreatesInitiatorAndEncryptedContactCard(payloadBytes, nickname, mynick, serverUids)
if err != nil {
return err
}
c := client.GetConfig()
filename := c.StoragePath + string(os.PathSeparator) + mynick + "-" + nickname + ".mwiv"
return os.WriteFile(filename, invBytes, 0600)
}