This commit is contained in:
		@@ -14,7 +14,7 @@ func DbMessageToInternalUserMessage(id int64, dbFile string, dbm *meowlib.DbMess
 | 
				
			|||||||
		ium.Outbound = false
 | 
							ium.Outbound = false
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	ium.Message = string(dbm.Data)
 | 
						ium.Message = string(dbm.Data)
 | 
				
			||||||
	ium.ConversationStatus = dbm.Status
 | 
						ium.Status = dbm.Status
 | 
				
			||||||
	ium.Contact = dbm.Contact
 | 
						ium.Contact = dbm.Contact
 | 
				
			||||||
	ium.CurrentLocation = dbm.CurrentLocation
 | 
						ium.CurrentLocation = dbm.CurrentLocation
 | 
				
			||||||
	ium.Messagetype = dbm.Type
 | 
						ium.Messagetype = dbm.Type
 | 
				
			||||||
@@ -23,6 +23,19 @@ func DbMessageToInternalUserMessage(id int64, dbFile string, dbm *meowlib.DbMess
 | 
				
			|||||||
	return &ium
 | 
						return &ium
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func InternalUserMessageToDbMessage(ium *InternalUserMessage) *meowlib.DbMessage {
 | 
				
			||||||
 | 
						var dbm meowlib.DbMessage
 | 
				
			||||||
 | 
						dbm.Outbound = ium.Outbound
 | 
				
			||||||
 | 
						dbm.Type = ium.Messagetype
 | 
				
			||||||
 | 
						dbm.Data = []byte(ium.Message)
 | 
				
			||||||
 | 
						dbm.Appdata = ium.Appdata
 | 
				
			||||||
 | 
						dbm.Contact = ium.Contact
 | 
				
			||||||
 | 
						dbm.CurrentLocation = ium.CurrentLocation
 | 
				
			||||||
 | 
						dbm.Status = ium.Status
 | 
				
			||||||
 | 
						dbm.FilePaths = ium.FilePaths
 | 
				
			||||||
 | 
						return &dbm
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func UserMessageToDbMessage(outbound bool, um *meowlib.UserMessage, filepaths []string) *meowlib.DbMessage {
 | 
					func UserMessageToDbMessage(outbound bool, um *meowlib.UserMessage, filepaths []string) *meowlib.DbMessage {
 | 
				
			||||||
	var dbm meowlib.DbMessage
 | 
						var dbm meowlib.DbMessage
 | 
				
			||||||
	dbm.Outbound = outbound
 | 
						dbm.Outbound = outbound
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -51,7 +51,7 @@ func PrepareUserMessage(message string, srvuid string, peer_idx int, replyToUid
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func SendAck(messageUid string, srvuid string, peer_idx int, received int64, processed int64) ([]byte, string, error) {
 | 
					func BuildAckMessage(messageUid string, srvuid string, peer_idx int, received int64, processed int64) ([]byte, string, error) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	peer := client.GetConfig().GetIdentity().Peers[peer_idx]
 | 
						peer := client.GetConfig().GetIdentity().Peers[peer_idx]
 | 
				
			||||||
	srv, err := client.GetConfig().GetIdentity().MessageServers.LoadServer(srvuid)
 | 
						srv, err := client.GetConfig().GetIdentity().MessageServers.LoadServer(srvuid)
 | 
				
			||||||
@@ -77,10 +77,10 @@ func SendAck(messageUid string, srvuid string, peer_idx int, received int64, pro
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, "PrepareServerMessage : ProcessOutboundMessage", err
 | 
							return nil, "PrepareServerMessage : ProcessOutboundMessage", err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	// Store message
 | 
					
 | 
				
			||||||
	err = peer.StoreMessage(usermessage, nil)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return nil, "PrepareServerMessage : StoreMessage", err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return data, "", nil
 | 
						return data, "", nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func ReadAckMessageResponse() {
 | 
				
			||||||
 | 
						//! update the status in message store
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ type InternalUserMessage struct {
 | 
				
			|||||||
	Outbound                bool                        `json:"outbound"`
 | 
						Outbound                bool                        `json:"outbound"`
 | 
				
			||||||
	Messagetype             string                      `json:"messagetype,omitempty"`
 | 
						Messagetype             string                      `json:"messagetype,omitempty"`
 | 
				
			||||||
	Message                 string                      `json:"message,omitempty"`
 | 
						Message                 string                      `json:"message,omitempty"`
 | 
				
			||||||
	ConversationStatus      *meowlib.ConversationStatus `json:"conversation_status,omitempty"`
 | 
						Status                  *meowlib.ConversationStatus `json:"conversation_status,omitempty"`
 | 
				
			||||||
	Contact                 *meowlib.ContactCard        `json:"contact,omitempty"`
 | 
						Contact                 *meowlib.ContactCard        `json:"contact,omitempty"`
 | 
				
			||||||
	ServerDeliveryUuid      string                      `json:"server_delivery_uuid,omitempty"`
 | 
						ServerDeliveryUuid      string                      `json:"server_delivery_uuid,omitempty"`
 | 
				
			||||||
	ServerDeliveryTimestamp int64                       `json:"server_delivery_timestamp,omitempty"`
 | 
						ServerDeliveryTimestamp int64                       `json:"server_delivery_timestamp,omitempty"`
 | 
				
			||||||
@@ -28,7 +28,7 @@ func InternalUserMessageFromUserMessage(peer *Peer, msg *meowlib.UserMessage) *I
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	iu.Messagetype = msg.Type
 | 
						iu.Messagetype = msg.Type
 | 
				
			||||||
	iu.Message = string(msg.Data)
 | 
						iu.Message = string(msg.Data)
 | 
				
			||||||
	iu.ConversationStatus = msg.Status
 | 
						iu.Status = msg.Status
 | 
				
			||||||
	iu.Contact = msg.Contact
 | 
						iu.Contact = msg.Contact
 | 
				
			||||||
	return iu
 | 
						return iu
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -225,9 +225,7 @@ func GetMessagesHistory(peer *Peer, inAppMsgCount int, lastDbId int, wantMore in
 | 
				
			|||||||
	return messages, nil
 | 
						return messages, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Get old messages from a peer
 | 
					func GetDbMessage(dbFile string, dbId int64, password string) (*meowlib.DbMessage, error) {
 | 
				
			||||||
func GetMessagePreview(peer *Peer, dbFile string, dbId int64, password string) ([]byte, error) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// There fileidx should provide the db that we need (unless wantMore overlaps the next DB)
 | 
						// There fileidx should provide the db that we need (unless wantMore overlaps the next DB)
 | 
				
			||||||
	db, _ := sql.Open("sqlite3", filepath.Join(GetConfig().StoragePath, GetConfig().GetIdentity().Uuid, dbFile+GetConfig().DbSuffix)) // Open the created SQLite File
 | 
						db, _ := sql.Open("sqlite3", filepath.Join(GetConfig().StoragePath, GetConfig().GetIdentity().Uuid, dbFile+GetConfig().DbSuffix)) // Open the created SQLite File
 | 
				
			||||||
	defer db.Close()
 | 
						defer db.Close()
 | 
				
			||||||
@@ -261,9 +259,44 @@ func GetMessagePreview(peer *Peer, dbFile string, dbId int64, password string) (
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						return &dbm, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func UpdateDbMessage(dbm *meowlib.DbMessage, dbFile string, dbId int64, password string) error {
 | 
				
			||||||
 | 
						db, _ := sql.Open("sqlite3", filepath.Join(GetConfig().StoragePath, GetConfig().GetIdentity().Uuid, dbFile+GetConfig().DbSuffix)) // Open the created SQLite File
 | 
				
			||||||
 | 
						defer db.Close()
 | 
				
			||||||
 | 
						// Encrypt message
 | 
				
			||||||
 | 
						out, err := proto.Marshal(dbm)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						encData, err := meowlib.SymEncrypt(password, out)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						// Insert message
 | 
				
			||||||
 | 
						updateMessageSQL := `UPDATE message SET m=? WHERE id=?`
 | 
				
			||||||
 | 
						statement, err := db.Prepare(updateMessageSQL) // Prepare statement.
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						_, err = statement.Exec(encData, dbId)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get old messages from a peer
 | 
				
			||||||
 | 
					func GetMessagePreview(dbFile string, dbId int64, password string) ([]byte, error) {
 | 
				
			||||||
 | 
						dbm, err := GetDbMessage(dbFile, dbId, password)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	return FilePreview(dbm.FilePaths[0], password)
 | 
						return FilePreview(dbm.FilePaths[0], password)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// decrypt the a file and returns the raw content
 | 
				
			||||||
func FilePreview(filename string, password string) ([]byte, error) {
 | 
					func FilePreview(filename string, password string) ([]byte, error) {
 | 
				
			||||||
	// get the hidden file
 | 
						// get the hidden file
 | 
				
			||||||
	encData, err := os.ReadFile(filename)
 | 
						encData, err := os.ReadFile(filename)
 | 
				
			||||||
@@ -278,7 +311,7 @@ func FilePreview(filename string, password string) ([]byte, error) {
 | 
				
			|||||||
	return data, nil
 | 
						return data, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// make an image from the files content (loads the first image, or build a more complex view)
 | 
					// return the raw content from the files content (loads the first image, or build a more complex view)
 | 
				
			||||||
func InternalUserMessagePreview(msg *InternalUserMessage, password string) ([]byte, error) {
 | 
					func InternalUserMessagePreview(msg *InternalUserMessage, password string) ([]byte, error) {
 | 
				
			||||||
	// get the hidden file name
 | 
						// get the hidden file name
 | 
				
			||||||
	if len(msg.FilePaths) == 0 {
 | 
						if len(msg.FilePaths) == 0 {
 | 
				
			||||||
@@ -296,7 +329,6 @@ func getMessageCount(dbid string) (int, error) {
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return 0, err
 | 
							return 0, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
	return count, nil
 | 
						return count, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,9 @@ package client
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"crypto/sha256"
 | 
						"crypto/sha256"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
 | 
						"errors"
 | 
				
			||||||
	"path/filepath"
 | 
						"path/filepath"
 | 
				
			||||||
 | 
						"sort"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"forge.redroom.link/yves/meowlib"
 | 
						"forge.redroom.link/yves/meowlib"
 | 
				
			||||||
	"github.com/dgraph-io/badger"
 | 
						"github.com/dgraph-io/badger"
 | 
				
			||||||
@@ -18,7 +20,7 @@ type PeerStorage struct {
 | 
				
			|||||||
	cache  map[string]*Peer
 | 
						cache  map[string]*Peer
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Open a badger database from struct PeerStorage
 | 
					// Open the badger database from struct PeerStorage
 | 
				
			||||||
func (ps *PeerStorage) open() error {
 | 
					func (ps *PeerStorage) open() error {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	opts := badger.DefaultOptions(filepath.Join(GetConfig().StoragePath, GetConfig().GetIdentity().Uuid, ps.DbFile))
 | 
						opts := badger.DefaultOptions(filepath.Join(GetConfig().StoragePath, GetConfig().GetIdentity().Uuid, ps.DbFile))
 | 
				
			||||||
@@ -31,7 +33,7 @@ func (ps *PeerStorage) open() error {
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Store function StorePeer stores a peer in a badger database with Peer.Uid as key
 | 
					// Store function StorePeer stores a peer in the badger database with Peer.Uid as key
 | 
				
			||||||
func (ps *PeerStorage) StorePeer(peer *Peer) error {
 | 
					func (ps *PeerStorage) StorePeer(peer *Peer) error {
 | 
				
			||||||
	err := ps.open()
 | 
						err := ps.open()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@@ -60,7 +62,7 @@ func (ps *PeerStorage) StorePeer(peer *Peer) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// LoadPeer function loads a Peer from a badger database with Peer.GetUid() as key
 | 
					// LoadPeer function loads a Peer from the badger database with Peer.GetUid() as key
 | 
				
			||||||
func (ps *PeerStorage) LoadPeer(uid string, password string) (*Peer, error) {
 | 
					func (ps *PeerStorage) LoadPeer(uid string, password string) (*Peer, error) {
 | 
				
			||||||
	var peer Peer
 | 
						var peer Peer
 | 
				
			||||||
	err := ps.open()
 | 
						err := ps.open()
 | 
				
			||||||
@@ -86,7 +88,7 @@ func (ps *PeerStorage) LoadPeer(uid string, password string) (*Peer, error) {
 | 
				
			|||||||
	return &peer, err
 | 
						return &peer, err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// DeletePeer function deletes a Peer from a badger database with Peer.GetUid() as key
 | 
					// DeletePeer function deletes a Peer from the badger database with Peer.GetUid() as key
 | 
				
			||||||
func (ps *PeerStorage) DeletePeer(uid string) error {
 | 
					func (ps *PeerStorage) DeletePeer(uid string) error {
 | 
				
			||||||
	err := ps.open()
 | 
						err := ps.open()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@@ -100,8 +102,8 @@ func (ps *PeerStorage) DeletePeer(uid string) error {
 | 
				
			|||||||
	})
 | 
						})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// LoadAllPeers function loads all Peers from a badger database
 | 
					// LoadPeers function loads Peers from the badger database with a specific password
 | 
				
			||||||
func (ps *PeerStorage) LoadAllPeers(password string) ([]*Peer, error) {
 | 
					func (ps *PeerStorage) LoadPeers(password string) ([]*Peer, error) {
 | 
				
			||||||
	var peers []*Peer
 | 
						var peers []*Peer
 | 
				
			||||||
	err := ps.open()
 | 
						err := ps.open()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@@ -125,48 +127,104 @@ func (ps *PeerStorage) LoadAllPeers(password string) ([]*Peer, error) {
 | 
				
			|||||||
			})
 | 
								})
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				peers = append(peers, &sc)
 | 
									peers = append(peers, &sc)
 | 
				
			||||||
 | 
									ps.cache[sc.Uid] = &sc
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
						// Sort peers based on peer.Name
 | 
				
			||||||
 | 
						sort.Slice(peers, func(i, j int) bool {
 | 
				
			||||||
 | 
							return peers[i].Name < peers[j].Name
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
	return peers, err
 | 
						return peers, err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// LoadPeersFromUids function loads Peers with id in []Uid parameter from a badger database
 | 
					// GetPeers function returns all peers from the cache as a sorted array
 | 
				
			||||||
func (ps *PeerStorage) LoadPeersFromUids(uids []string, password string) ([]*Peer, error) {
 | 
					func (ps *PeerStorage) GetPeers() ([]*Peer, error) {
 | 
				
			||||||
	var peers []*Peer
 | 
						peers := make([]*Peer, 0, len(ps.cache))
 | 
				
			||||||
	err := ps.open()
 | 
						for _, peer := range ps.cache {
 | 
				
			||||||
	if err != nil {
 | 
							peers = append(peers, peer)
 | 
				
			||||||
		return nil, err
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	defer ps.close()
 | 
						// Sort peers based on peer.Name
 | 
				
			||||||
	err = ps.db.View(func(txn *badger.Txn) error {
 | 
						sort.Slice(peers, func(i, j int) bool {
 | 
				
			||||||
		for _, uid := range uids {
 | 
							return peers[i].Name < peers[j].Name
 | 
				
			||||||
			shakey := sha256.Sum256([]byte(uid))
 | 
					 | 
				
			||||||
			key := shakey[:]
 | 
					 | 
				
			||||||
			item, err := txn.Get(key)
 | 
					 | 
				
			||||||
			if err != nil {
 | 
					 | 
				
			||||||
				return err
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			var sc Peer
 | 
					 | 
				
			||||||
			err = item.Value(func(val []byte) error {
 | 
					 | 
				
			||||||
				jsonsrv, err := meowlib.SymDecrypt(password, val)
 | 
					 | 
				
			||||||
				if err != nil {
 | 
					 | 
				
			||||||
					return err
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				return json.Unmarshal(jsonsrv, &sc)
 | 
					 | 
				
			||||||
			})
 | 
					 | 
				
			||||||
			if err == nil {
 | 
					 | 
				
			||||||
				peers = append(peers, &sc)
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return nil
 | 
					 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	return peers, err
 | 
						return peers, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// close a badger database
 | 
					// close the badger database
 | 
				
			||||||
func (ps *PeerStorage) close() {
 | 
					func (ps *PeerStorage) close() {
 | 
				
			||||||
	ps.db.Close()
 | 
						ps.db.Close()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (ps *PeerStorage) GetFromPublicKey(publickey string) *Peer {
 | 
				
			||||||
 | 
						for _, peer := range ps.cache {
 | 
				
			||||||
 | 
							if peer.ContactPublicKey == publickey {
 | 
				
			||||||
 | 
								return peer
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (ps *PeerStorage) GetFromInvitationId(invitationId string) *Peer {
 | 
				
			||||||
 | 
						for _, peer := range ps.cache {
 | 
				
			||||||
 | 
							if peer.InvitationId == invitationId {
 | 
				
			||||||
 | 
								return peer
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (ps *PeerStorage) GetFromMyLookupKey(publickey string) *Peer {
 | 
				
			||||||
 | 
						for _, peer := range ps.cache {
 | 
				
			||||||
 | 
							if peer.MyLookupKp.Public == publickey {
 | 
				
			||||||
 | 
								return peer
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (ps *PeerStorage) GetFromName(name string) *Peer {
 | 
				
			||||||
 | 
						for _, peer := range ps.cache {
 | 
				
			||||||
 | 
							if peer.Name == name {
 | 
				
			||||||
 | 
								return peer
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (ps *PeerStorage) GetFromUid(uid string) *Peer {
 | 
				
			||||||
 | 
						return ps.cache[uid]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Checks if the received contact card is an answer to an invitation, returns true if it is, and the proposed and received nicknames
 | 
				
			||||||
 | 
					func (ps *PeerStorage) CheckInvitation(ReceivedContact *meowlib.ContactCard) (isAnswer bool, proposedNick string, receivedNick string, invitationMessage string) {
 | 
				
			||||||
 | 
						// invitation Id found, this is an answer to an invitation
 | 
				
			||||||
 | 
						for _, p := range ps.cache {
 | 
				
			||||||
 | 
							if p.InvitationId == ReceivedContact.InvitationId {
 | 
				
			||||||
 | 
								return true, p.Name, ReceivedContact.Name, ReceivedContact.InvitationMessage
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						// it's an invitation
 | 
				
			||||||
 | 
						return false, "", ReceivedContact.Name, ReceivedContact.InvitationMessage
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Finalizes an invitation, returns nil if successful
 | 
				
			||||||
 | 
					func (ps *PeerStorage) FinalizeInvitation(ReceivedContact *meowlib.ContactCard) error {
 | 
				
			||||||
 | 
						for i, p := range ps.cache {
 | 
				
			||||||
 | 
							if p.InvitationId == ReceivedContact.InvitationId {
 | 
				
			||||||
 | 
								//id.Peers[i].Name = ReceivedContact.Name
 | 
				
			||||||
 | 
								ps.cache[i].ContactEncryption = ReceivedContact.EncryptionPublicKey
 | 
				
			||||||
 | 
								ps.cache[i].ContactLookupKey = ReceivedContact.LookupPublicKey
 | 
				
			||||||
 | 
								ps.cache[i].ContactPublicKey = ReceivedContact.ContactPublicKey
 | 
				
			||||||
 | 
								srvs := []string{}
 | 
				
			||||||
 | 
								for srv := range ReceivedContact.PullServers {
 | 
				
			||||||
 | 
									srvs = append(srvs, ReceivedContact.PullServers[srv].GetUid())
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								ps.cache[i].ContactPullServers = srvs
 | 
				
			||||||
 | 
								ps.StorePeer(ps.cache[i])
 | 
				
			||||||
 | 
								return nil
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return errors.New("no matching contact found for invitationId " + ReceivedContact.InvitationId)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user