package meowlib import ( "encoding/json" "strings" "time" "github.com/google/uuid" "github.com/rs/zerolog/log" ) type InternalMessage struct { With Peer `json:"with,omitempty"` SentByMe bool `json:"sent_by_me,omitempty"` MessageData UserMessage `json:"message_data,omitempty"` ServerUuid string `json:"server_uuid,omitempty"` Received time.Time `json:"received,omitempty"` Processed time.Time `json:"processed,omitempty"` TransferPath []Server `json:"transfer_path,omitempty"` } func CreateText(Destination Peer, text string) *InternalMessage { var msg InternalMessage msg.With = Destination msg.SentByMe = true msg.MessageData.From = Destination.Me.Public msg.MessageData.Destination = Destination.Contact.ContactPublicKey msg.MessageData.Status.Sent = uint64(time.Now().Unix()) msg.MessageData.Status.LocalUuid = strings.Replace(uuid.New().String(), "-", "", -1) msg.MessageData.Type = "t" msg.MessageData.Data = []byte(text) return &msg } func (msg *UserMessage) Pack() *PackedUserMessage { var pck PackedUserMessage jsonMsg, _ := json.Marshal(msg) armor, err := Encrypt(msg.Destination, jsonMsg) if err != nil { log.Error().Msg("Message encryption failed") } pck.Destination = msg.Destination pck.Payload = []byte(armor) return &pck } func (pck *PackedUserMessage) Unpack(privateKey string) *UserMessage { var msg *UserMessage decrypted, err := Decrypt(privateKey, pck.Payload) if err != nil { log.Error().Msg("Message decryption failed") } err = json.Unmarshal(decrypted, &msg) if err != nil { log.Error().Msg("Message encryption failed") } return msg }