Files
meowlib/client/helpers/invitationCheckHelper.go
T

71 lines
2.5 KiB
Go
Raw Normal View History

2024-03-23 20:09:14 +01:00
package helpers
import (
"strings"
"forge.redroom.link/yves/meowlib"
"forge.redroom.link/yves/meowlib/client"
)
2026-04-02 18:50:04 +02:00
// InvitationStep2GetMessage builds and returns the packed server message that retrieves
// the InvitationInitPayload from the server using the shortcode URL (STEP_2, invitee side).
func InvitationStep2GetMessage(invitationUrl string, serverPublicKey string, invitationPassword string) ([]byte, string, error) {
meowurl := strings.Split(invitationUrl, "?")
2024-03-23 20:09:14 +01:00
shortcode := meowurl[1]
2026-04-02 18:50:04 +02:00
2026-02-02 15:11:41 +01:00
srv, err := client.CreateServerFromMeowUrl(meowurl[0])
if err != nil {
2026-04-02 18:50:04 +02:00
return nil, "InvitationStep2GetMessage: CreateServerFromMeowUrl", err
2026-02-02 15:11:41 +01:00
}
2026-04-02 18:50:04 +02:00
// Reuse the server entry if already known.
dbsrv, err := client.GetConfig().GetIdentity().MessageServers.LoadServer(srv.Url)
2024-03-23 20:09:14 +01:00
if err != nil {
2026-04-02 18:50:04 +02:00
return nil, "InvitationStep2GetMessage: LoadServer", err
2024-03-23 20:09:14 +01:00
}
if dbsrv == nil {
srv.PublicKey = serverPublicKey
2026-02-02 15:11:41 +01:00
k, err := meowlib.NewKeyPair()
if err != nil {
2026-04-02 18:50:04 +02:00
return nil, "InvitationStep2GetMessage: NewKeyPair", err
2026-02-02 15:11:41 +01:00
}
srv.UserKp = k
2026-04-02 18:50:04 +02:00
if err := client.GetConfig().GetIdentity().MessageServers.StoreServer(srv); err != nil {
return nil, "InvitationStep2GetMessage: StoreServer", err
2024-03-23 20:09:14 +01:00
}
} else {
if dbsrv.PublicKey != serverPublicKey {
dbsrv.PublicKey = serverPublicKey
}
srv = dbsrv
2024-03-23 20:09:14 +01:00
}
2026-04-02 18:50:04 +02:00
2024-03-23 20:09:14 +01:00
toSrvMsg, err := srv.BuildToServerMessageInvitationRequest(shortcode, invitationPassword)
if err != nil {
2026-04-02 18:50:04 +02:00
return nil, "InvitationStep2GetMessage: BuildToServerMessageInvitationRequest", err
2024-03-23 20:09:14 +01:00
}
bytemsg, err := srv.ProcessOutboundMessage(toSrvMsg)
if err != nil {
2026-04-02 18:50:04 +02:00
return nil, "InvitationStep2GetMessage: ProcessOutboundMessage", err
2024-03-23 20:09:14 +01:00
}
return bytemsg, "", nil
}
2026-04-02 18:50:04 +02:00
// InvitationStep2ReadResponse decodes the server response to a Step2 get-message and returns
// the InvitationInitPayload sent by the initiator.
func InvitationStep2ReadResponse(invitationData []byte, invitationServerUid string) (*meowlib.InvitationInitPayload, string, error) {
2024-03-23 20:09:14 +01:00
server, err := client.GetConfig().GetIdentity().MessageServers.LoadServer(invitationServerUid)
if err != nil {
2026-04-02 18:50:04 +02:00
return nil, "InvitationStep2ReadResponse: LoadServer", err
2024-03-23 20:09:14 +01:00
}
serverMsg, err := server.ProcessInboundServerResponse(invitationData)
if err != nil {
2026-04-02 18:50:04 +02:00
return nil, "InvitationStep2ReadResponse: ProcessInboundServerResponse", err
2024-03-23 20:09:14 +01:00
}
2026-04-02 18:50:04 +02:00
payload, err := meowlib.NewInvitationInitPayloadFromCompressed(serverMsg.Invitation.Payload)
2024-03-23 20:09:14 +01:00
if err != nil {
2026-04-02 18:50:04 +02:00
return nil, "InvitationStep2ReadResponse: NewInvitationInitPayloadFromCompressed", err
2024-03-23 20:09:14 +01:00
}
2026-04-02 18:50:04 +02:00
return payload, "", nil
2024-03-23 20:09:14 +01:00
}