package helpers import ( "strings" "forge.redroom.link/yves/meowlib" "forge.redroom.link/yves/meowlib/client" ) // 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, "?") shortcode := meowurl[1] srv, err := client.CreateServerFromMeowUrl(meowurl[0]) if err != nil { return nil, "InvitationStep2GetMessage: CreateServerFromMeowUrl", err } // Reuse the server entry if already known. dbsrv, err := client.GetConfig().GetIdentity().MessageServers.LoadServer(srv.Url) if err != nil { return nil, "InvitationStep2GetMessage: LoadServer", err } if dbsrv == nil { srv.PublicKey = serverPublicKey k, err := meowlib.NewKeyPair() if err != nil { return nil, "InvitationStep2GetMessage: NewKeyPair", err } srv.UserKp = k if err := client.GetConfig().GetIdentity().MessageServers.StoreServer(srv); err != nil { return nil, "InvitationStep2GetMessage: StoreServer", err } } else { if dbsrv.PublicKey != serverPublicKey { dbsrv.PublicKey = serverPublicKey } srv = dbsrv } toSrvMsg, err := srv.BuildToServerMessageInvitationRequest(shortcode, invitationPassword) if err != nil { return nil, "InvitationStep2GetMessage: BuildToServerMessageInvitationRequest", err } bytemsg, err := srv.ProcessOutboundMessage(toSrvMsg) if err != nil { return nil, "InvitationStep2GetMessage: ProcessOutboundMessage", err } return bytemsg, "", nil } // 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) { server, err := client.GetConfig().GetIdentity().MessageServers.LoadServer(invitationServerUid) if err != nil { return nil, "InvitationStep2ReadResponse: LoadServer", err } serverMsg, err := server.ProcessInboundServerResponse(invitationData) if err != nil { return nil, "InvitationStep2ReadResponse: ProcessInboundServerResponse", err } payload, err := meowlib.NewInvitationInitPayloadFromCompressed(serverMsg.Invitation.Payload) if err != nil { return nil, "InvitationStep2ReadResponse: NewInvitationInitPayloadFromCompressed", err } return payload, "", nil }