keypair err mgt + shorturl random improve

This commit is contained in:
ycc
2026-02-02 15:11:41 +01:00
parent f8537aad6d
commit f498cfad1e
23 changed files with 778 additions and 1052 deletions

View File

@@ -24,7 +24,10 @@ func InvitationAnswer(cc *meowlib.ContactCard, nickname string, myNickname strin
}
// build my contact card for that friend
peer := client.GetConfig().GetIdentity().AnswerInvitation(mynick, nickname, serverUids, cc)
peer, err := client.GetConfig().GetIdentity().AnswerInvitation(mynick, nickname, serverUids, cc)
if err != nil {
return nil, "InvitationAnswer: AnswerInvitation", err
}
//peerstr, err := json.Marshal(peer)
//fmt.Println("InvitationAnswer: " + string(peerstr))
@@ -71,7 +74,10 @@ func InvitationAnswerFile(invitationFile string, nickname string, myNickname str
mynick = client.GetConfig().GetIdentity().Nickname
}
response := identity.AnswerInvitation(mynick, nickname, serverUids, cc)
response, err := identity.AnswerInvitation(mynick, nickname, serverUids, cc)
if err != nil {
return "InvitationAnswerFile : AnswerInvitation", err
}
fmt.Fprintln(os.Stdout, "Invitation sent by "+received)
if format == "qr" {
filename = c.StoragePath + string(os.PathSeparator) + mynick + "-" + nickname + ".png"

View File

@@ -64,7 +64,10 @@ func InvitationGetMessage(invitationUrl string, serverPublicKey string, invitati
meowurl := strings.Split(invitationUrl, "?")
shortcode := meowurl[1]
srv := client.CreateServerFromMeowUrl(meowurl[0])
srv, err := client.CreateServerFromMeowUrl(meowurl[0])
if err != nil {
return nil, "InvitationGetMessage: CreateServerFromMeowUrl", err
}
// check if already in msg servers
dbsrv, err := client.GetConfig().GetIdentity().MessageServers.LoadServer(srv.Url)
if err != nil {
@@ -73,7 +76,11 @@ func InvitationGetMessage(invitationUrl string, serverPublicKey string, invitati
if dbsrv == nil {
// create a server object with url & pubkey
srv.PublicKey = serverPublicKey
srv.UserKp = meowlib.NewKeyPair()
k, err := meowlib.NewKeyPair()
if err != nil {
return nil, "InvitationGetMessage: NewKeyPair", err
}
srv.UserKp = k
// save it
err = client.GetConfig().GetIdentity().MessageServers.StoreServer(srv)
if err != nil {

View File

@@ -16,36 +16,37 @@ import (
const maxHiddenCount = 30
type Identity struct {
Nickname string `json:"nickname,omitempty"`
DefaultAvatar string `json:"default_avatar,omitempty"`
Avatars []Avatar `json:"avatars,omitempty"`
RootKp meowlib.KeyPair `json:"id_kp,omitempty"`
Status string `json:"status,omitempty"`
Peers PeerStorage `json:"peers,omitempty"`
HiddenPeers [][]byte `json:"hidden_peers,omitempty"`
Personae PeerList `json:"faces,omitempty"`
Device meowlib.KeyPair `json:"device,omitempty"`
KnownServers ServerList `json:"known_servers,omitempty"`
MessageServers ServerStorage `json:"message_servers,omitempty"`
DefaultDbPassword string `json:"default_db_password,omitempty"`
DbPasswordStore bool `json:"db_password_store,omitempty"`
OwnedDevices PeerList `json:"owned_devices,omitempty"`
StaticMtkServerPaths []ServerList `json:"static_mtk_server_paths,omitempty"`
DynamicMtkServeRules []string `json:"dynamic_mtk_serve_rules,omitempty"`
InvitationTimeout int `json:"invitation_timeout,omitempty"`
Uuid string `json:"uuid,omitempty"`
Nickname string `json:"nickname,omitempty"`
DefaultAvatar string `json:"default_avatar,omitempty"`
Avatars []Avatar `json:"avatars,omitempty"`
RootKp *meowlib.KeyPair `json:"id_kp,omitempty"`
Status string `json:"status,omitempty"`
Peers PeerStorage `json:"peers,omitempty"`
HiddenPeers [][]byte `json:"hidden_peers,omitempty"`
Personae PeerList `json:"faces,omitempty"`
Device *meowlib.KeyPair `json:"device,omitempty"`
KnownServers ServerList `json:"known_servers,omitempty"`
MessageServers ServerStorage `json:"message_servers,omitempty"`
DefaultDbPassword string `json:"default_db_password,omitempty"`
DbPasswordStore bool `json:"db_password_store,omitempty"`
OwnedDevices PeerList `json:"owned_devices,omitempty"`
StaticMtkServerPaths []ServerList `json:"static_mtk_server_paths,omitempty"`
DynamicMtkServeRules []string `json:"dynamic_mtk_serve_rules,omitempty"`
InvitationTimeout int `json:"invitation_timeout,omitempty"`
Uuid string `json:"uuid,omitempty"`
unlockedHiddenPeers PeerList
}
func CreateIdentity(nickname string) (*Identity, error) {
var id Identity
var err error
id.Nickname = nickname
id.Uuid = uuid.New().String()
id.RootKp = meowlib.NewKeyPair()
id.RootKp, err = meowlib.NewKeyPair()
GetConfig().me = &id
id.MessageServers = ServerStorage{DbFile: uuid.NewString()}
id.generateRandomHiddenStuff()
err := id.CreateFolder()
err = id.CreateFolder()
if err != nil {
return nil, err
}
@@ -71,10 +72,20 @@ func (id *Identity) WipeFolder() error {
// Creates an invitation for a peer, returns the newly created peer including infos to provide a ContactCard
func (id *Identity) InvitePeer(MyName string, ContactName string, MessageServerUids []string, InvitationMessage string) (*Peer, error) {
var peer Peer
var err error
peer.Uid = uuid.New().String()
peer.MyIdentity = meowlib.NewKeyPair()
peer.MyEncryptionKp = meowlib.NewKeyPair()
peer.MyLookupKp = meowlib.NewKeyPair()
peer.MyIdentity, err = meowlib.NewKeyPair()
if err != nil {
return nil, err
}
peer.MyEncryptionKp, err = meowlib.NewKeyPair()
if err != nil {
return nil, err
}
peer.MyLookupKp, err = meowlib.NewKeyPair()
if err != nil {
return nil, err
}
peer.Name = ContactName
peer.InvitationId = uuid.New().String() // todo as param to identify then update url
/* if id.MessageServers.Servers == nil {
@@ -116,13 +127,24 @@ func (id *Identity) CheckInvitation(ReceivedContact *meowlib.ContactCard) (isAns
}
// Answers an invitation, returns the newly created peer including infos to provide a ContactCard
func (id *Identity) AnswerInvitation(MyName string, ContactName string, MessageServerIdxs []string, ReceivedContact *meowlib.ContactCard) *Peer {
func (id *Identity) AnswerInvitation(MyName string, ContactName string, MessageServerIdxs []string, ReceivedContact *meowlib.ContactCard) (*Peer, error) {
var peer Peer
var err error
var newsrv *Server
//var myContactCard meowlib.ContactCard
peer.Uid = uuid.New().String()
peer.MyIdentity = meowlib.NewKeyPair()
peer.MyEncryptionKp = meowlib.NewKeyPair()
peer.MyLookupKp = meowlib.NewKeyPair()
peer.MyIdentity, err = meowlib.NewKeyPair()
if err != nil {
return nil, err
}
peer.MyEncryptionKp, err = meowlib.NewKeyPair()
if err != nil {
return nil, err
}
peer.MyLookupKp, err = meowlib.NewKeyPair()
if err != nil {
return nil, err
}
if ContactName != "" {
peer.Name = ContactName
} else {
@@ -135,7 +157,8 @@ func (id *Identity) AnswerInvitation(MyName string, ContactName string, MessageS
peer.InvitationMessage = ReceivedContact.InvitationMessage
for srv := range ReceivedContact.PullServers {
peer.ContactPullServers = append(peer.ContactPullServers, ReceivedContact.PullServers[srv].GetUid())
id.MessageServers.StoreServerIfNotExists(CreateServerFromUid(ReceivedContact.PullServers[srv].GetUid()))
newsrv, err = CreateServerFromUid(ReceivedContact.PullServers[srv].GetUid())
id.MessageServers.StoreServerIfNotExists(newsrv)
}
/* for _, i := range MessageServerIdxs {
srv := id.MessageServers.Servers[i].GetServerCard()
@@ -150,11 +173,13 @@ func (id *Identity) AnswerInvitation(MyName string, ContactName string, MessageS
peer.InvitationId = ReceivedContact.InvitationId
id.Peers.StorePeer(&peer)
return &peer
return &peer, nil
}
// Finalizes an invitation, returns nil if successful
func (id *Identity) FinalizeInvitation(ReceivedContact *meowlib.ContactCard) error {
var err error
var newsrv *Server
/*for i, p := range id.Peers {
if p.InvitationId == ReceivedContact.InvitationId {
//id.Peers[i].Name = ReceivedContact.Name
@@ -171,7 +196,11 @@ func (id *Identity) FinalizeInvitation(ReceivedContact *meowlib.ContactCard) err
}
return errors.New("no matching contact found for invitationId " + ReceivedContact.InvitationId)*/
for srv := range ReceivedContact.PullServers {
id.MessageServers.StoreServerIfNotExists(CreateServerFromUid(ReceivedContact.PullServers[srv].GetUid()))
newsrv, err = CreateServerFromUid(ReceivedContact.PullServers[srv].GetUid())
if err != nil {
return err
}
id.MessageServers.StoreServerIfNotExists(newsrv)
}
return id.Peers.FinalizeInvitation(ReceivedContact)
}
@@ -251,16 +280,26 @@ func (id *Identity) HidePeer(peerIdx int, password string) error {
return nil
}*/
func (id *Identity) generateRandomHiddenStuff() {
func (id *Identity) generateRandomHiddenStuff() error {
var err error
r := rand.New(rand.NewSource(time.Now().UnixNano()))
count := r.Intn(maxHiddenCount) + 1
for i := 1; i < count; i++ {
var p Peer
p.Uid = uuid.New().String()
p.Name = randomLenString(4, 20)
p.MyEncryptionKp = meowlib.NewKeyPair()
p.MyIdentity = meowlib.NewKeyPair()
p.MyLookupKp = meowlib.NewKeyPair()
p.MyEncryptionKp, err = meowlib.NewKeyPair()
if err != nil {
return err
}
p.MyIdentity, err = meowlib.NewKeyPair()
if err != nil {
return err
}
p.MyLookupKp, err = meowlib.NewKeyPair()
if err != nil {
return err
}
p.Name = randomLenString(4, 20)
p.ContactPublicKey = p.MyLookupKp.Public
p.ContactEncryption = p.MyIdentity.Public
@@ -271,17 +310,18 @@ func (id *Identity) generateRandomHiddenStuff() {
//id.HidePeer(0, randomLenString(8, 14))
// TODO Add random conversations
}
return nil
}
type BackgroundJob struct {
RootPublic string `json:"root_public,omitempty"`
Device meowlib.KeyPair `json:"device,omitempty"`
Jobs []RequestsJob `json:"jobs,omitempty"`
RootPublic string `json:"root_public,omitempty"`
Device *meowlib.KeyPair `json:"device,omitempty"`
Jobs []RequestsJob `json:"jobs,omitempty"`
}
type RequestsJob struct {
Server *Server `json:"server,omitempty"`
LookupKeys []meowlib.KeyPair `json:"lookup_keys,omitempty"`
Server *Server `json:"server,omitempty"`
LookupKeys []*meowlib.KeyPair `json:"lookup_keys,omitempty"`
}
func (id *Identity) GetRequestJobs() []RequestsJob {

View File

@@ -19,7 +19,7 @@ func exists(filename string) bool {
}
}
func createId() *Identity {
func createId(t *testing.T) *Identity {
config := GetConfig()
config.IdentityFile = "test.id"
config.memoryPassword = "generalPassword"
@@ -37,13 +37,34 @@ func createId() *Identity {
var p Peer
p.Uid = uuid.New().String()
p.Name = "testName_" + strconv.Itoa(i)
p.MyEncryptionKp = meowlib.NewKeyPair()
p.MyIdentity = meowlib.NewKeyPair()
p.MyLookupKp = meowlib.NewKeyPair()
p.MyEncryptionKp, err = meowlib.NewKeyPair()
if err != nil {
t.Fatal(err)
}
p.MyIdentity, err = meowlib.NewKeyPair()
if err != nil {
t.Fatal(err)
}
p.MyLookupKp, err = meowlib.NewKeyPair()
if err != nil {
t.Fatal(err)
}
p.Name = "foo_" + strconv.Itoa(i)
p.ContactPublicKey = meowlib.NewKeyPair().Public
p.ContactEncryption = meowlib.NewKeyPair().Public
p.ContactLookupKey = meowlib.NewKeyPair().Public
k, err := meowlib.NewKeyPair()
if err != nil {
t.Fatal(err)
}
p.ContactPublicKey = k.Public
k, err = meowlib.NewKeyPair()
if err != nil {
t.Fatal(err)
}
p.ContactEncryption = k.Public
k, err = meowlib.NewKeyPair()
if err != nil {
t.Fatal(err)
}
p.ContactLookupKey = k.Public
p.MyPullServers = []string{"server1", "server2"}
//p.Contact.AddUrls([]string{"http:/127.0.0.1/meow", "tcp://localhost:1234"}) //todo add servers
id.Peers.StorePeer(&p)
@@ -98,7 +119,7 @@ func TestHidePeer(t *testing.T) {
// test GetRequestJobs
func TestGetRequestJobs(t *testing.T) {
// Create a mock Identity object
id := createId()
id := createId(t)
id.MessageServers = ServerStorage{
DbFile: "test.db",
}
@@ -106,7 +127,10 @@ func TestGetRequestJobs(t *testing.T) {
GetConfig().SetIdentity(id)
for i := 1; i < 10; i++ {
// initialize a Server with name "server+i"
srv := CreateServerFromUrl("server" + strconv.Itoa(i))
srv, err := CreateServerFromUrl("server" + strconv.Itoa(i))
if err != nil {
t.Fatal(err)
}
id.MessageServers.StoreServer(srv)
}
// Call GetRequestJobs

View File

@@ -8,7 +8,7 @@ import (
func ProcessForOutput(usermessage *meowlib.UserMessage, peer *Peer, servers *ServerList, trackingLookupKey string) ([]byte, error) {
lastIdx := len(servers.Servers) - 1
// LAST SERVER : Message delivery as usual
srv := &servers.Servers[lastIdx]
srv := servers.Servers[lastIdx]
// Prepare cyphered + packed user message
packedMsg, err := peer.ProcessOutboundUserMessage(usermessage)
if err != nil {
@@ -23,7 +23,7 @@ func ProcessForOutput(usermessage *meowlib.UserMessage, peer *Peer, servers *Ser
lastuuid := uuid.NewString()
// ALL PREVIOUS SERVERS
for i := lastIdx - 1; i >= 0; i-- {
srv = &servers.Servers[i]
srv = servers.Servers[i]
var toServerMessage meowlib.ToServerMessage
toServerMessage.MatriochkaMessage.Data = lastmsg
toServerMessage.MatriochkaMessage.Next.Url = servers.Servers[i+1].Url

View File

@@ -30,7 +30,11 @@ func StoreMessage(peer *Peer, usermessage *meowlib.UserMessage, filenames []stri
}
file.Close()
peer.DbIds = append(peer.DbIds, dbid)
sqliteDatabase, _ := sql.Open("sqlite3", filepath.Join(cfg.StoragePath, identity.Uuid, dbid+GetConfig().DbSuffix)) // Open the created SQLite File
sqliteDatabase, err := sql.Open("sqlite3", filepath.Join(cfg.StoragePath, identity.Uuid, dbid+GetConfig().DbSuffix))
if err != nil {
return err
}
defer sqliteDatabase.Close()
err = createMessageTable(sqliteDatabase)
if err != nil {
return err

View File

@@ -11,7 +11,7 @@ import (
)
func TestStoreMessage(t *testing.T) {
id := createId()
id := createId(t)
var um meowlib.UserMessage
um.Data = []byte("blabla")
peers, err := id.Peers.GetPeers()
@@ -45,7 +45,7 @@ func TestStoreMessage(t *testing.T) {
}
func TestManyStoreMessage(t *testing.T) {
id := createId()
id := createId(t)
peers, err := id.Peers.GetPeers()
// test with zero messages
messages, err := GetMessagesHistory(peers[0], 0, 0, 10, GetConfig().memoryPassword)

View File

@@ -23,10 +23,10 @@ type Peer struct {
MyAvatar string `json:"my_avatar,omitempty"`
// Conversation []InternalMessage `json:"conversation,omitempty"`
// My own keys for that peer
MyIdentity meowlib.KeyPair `json:"my_identity,omitempty"`
MyEncryptionKp meowlib.KeyPair `json:"my_encryption_kp,omitempty"`
MyLookupKp meowlib.KeyPair `json:"my_lookup_kp,omitempty"`
MyPullServers []string `json:"my_pull_servers,omitempty"`
MyIdentity *meowlib.KeyPair `json:"my_identity,omitempty"`
MyEncryptionKp *meowlib.KeyPair `json:"my_encryption_kp,omitempty"`
MyLookupKp *meowlib.KeyPair `json:"my_lookup_kp,omitempty"`
MyPullServers []string `json:"my_pull_servers,omitempty"`
// Peer keys and infos
//Contact meowlib.ContactCard `json:"contact,omitempty"` // todo : remove
ContactPublicKey string `json:"contact_public_key,omitempty"`

View File

@@ -20,7 +20,7 @@ func TestOpen(t *testing.T) {
}
func TestStorePeer(t *testing.T) {
id := createId()
id := createId(t)
GetConfig().SetMemPass("test")
GetConfig().SetIdentity(id)
ps := &PeerStorage{

View File

@@ -18,38 +18,46 @@ import (
// - Server remote management if ManagerKp is available for that server
type Server struct {
//ServerCard meowlib.ServerCard `json:"server_data,omitempty"`
Name string `json:"name,omitempty"`
Description string `json:"description,omitempty"`
PublicKey string `json:"public_key,omitempty"`
Url string `json:"url,omitempty"`
Login string `json:"login,omitempty"`
Password string `json:"password,omitempty"`
Presence bool `json:"presence,omitempty"`
LastCheck time.Time `json:"last_check,omitempty"`
Uptime time.Duration `json:"uptime,omitempty"`
UserKp meowlib.KeyPair `json:"user_kp,omitempty"`
ManagerKp meowlib.KeyPair `json:"manager_kp,omitempty"`
Country string `json:"country,omitempty"`
AllowedDelay int `json:"allowed_delay,omitempty"`
Backup bool `json:"backup,omitempty"`
WebRTC bool `json:"webrtc,omitempty"`
Name string `json:"name,omitempty"`
Description string `json:"description,omitempty"`
PublicKey string `json:"public_key,omitempty"`
Url string `json:"url,omitempty"`
Login string `json:"login,omitempty"`
Password string `json:"password,omitempty"`
Presence bool `json:"presence,omitempty"`
LastCheck time.Time `json:"last_check,omitempty"`
Uptime time.Duration `json:"uptime,omitempty"`
UserKp *meowlib.KeyPair `json:"user_kp,omitempty"`
ManagerKp *meowlib.KeyPair `json:"manager_kp,omitempty"`
Country string `json:"country,omitempty"`
AllowedDelay int `json:"allowed_delay,omitempty"`
Backup bool `json:"backup,omitempty"`
WebRTC bool `json:"webrtc,omitempty"`
}
// CreateServerFromUrl creates a server from a basic url, ex : https://my.meowserver.example:8443/meow/
func CreateServerFromUrl(url string) *Server {
func CreateServerFromUrl(url string) (*Server, error) {
var is Server
var err error
is.Name = url
is.Url = url
is.UserKp = meowlib.NewKeyPair()
return &is
is.UserKp, err = meowlib.NewKeyPair()
if err != nil {
return nil, err
}
return &is, nil
}
// CreateServerFromUid creates a server from a uid string, ex : mylogin:mypassword@https://my.meowserver.example:8443/meow/
func CreateServerFromUid(uid string) *Server {
func CreateServerFromUid(uid string) (*Server, error) {
var is Server
var err error
uidTable := strings.Split(uid, "@") //! Weak test, use regexp
is.Name = uid
is.UserKp = meowlib.NewKeyPair()
is.UserKp, err = meowlib.NewKeyPair()
if err != nil {
return nil, err
}
if len(uidTable) == 2 {
loginpw := strings.Split(uidTable[0], ":")
is.Url = uidTable[1]
@@ -58,17 +66,17 @@ func CreateServerFromUid(uid string) *Server {
} else {
is.Url = uidTable[0]
}
return &is
return &is, nil
}
// CreateServerFromMeowUrl creates a server from a meow url, ex : meow://mylogin:mypassword@https://my.meowserver.example:8443/meow/
func CreateServerFromMeowUrl(meowurl string) *Server {
func CreateServerFromMeowUrl(meowurl string) (*Server, error) {
uid := strings.Replace(meowurl[7:], "//", "://", 1)
return CreateServerFromUid(uid)
}
// CreateServerFromInvitationLink creates a server from a meow url, ex : meow://mylogin:mypassword@https://my.meowserver.example:8443/meow?invitationCode
func CreateServerFromInvitationLink(meowurl string) *Server {
func CreateServerFromInvitationLink(meowurl string) (*Server, error) {
// remove the invitation code, last token after a /
meowurlTable := strings.Split(meowurl, "?")
// join all elements with / except the last one
@@ -103,16 +111,20 @@ func (sc *Server) GetMeowUrl() string {
}
// Create a server from a server card
func CreateServerFromServerCard(server *meowlib.ServerCard) *Server {
func CreateServerFromServerCard(server *meowlib.ServerCard) (*Server, error) {
var is Server
var err error
is.Name = server.Name
is.PublicKey = server.PublicKey
is.Description = server.Description
is.Url = server.Url
is.Login = server.Login
is.Password = server.Password
is.UserKp = meowlib.NewKeyPair()
return &is
is.UserKp, err = meowlib.NewKeyPair()
if err != nil {
return nil, err
}
return &is, nil
}
// AsymEncryptMessage prepares a message to send to a specific internal server

View File

@@ -8,13 +8,13 @@ import "errors"
// - Owned servers lists
// - Matriochka paths
type ServerList struct {
Name string `json:"name,omitempty"`
Servers []Server `json:"servers,omitempty"`
Name string `json:"name,omitempty"`
Servers []*Server `json:"servers,omitempty"`
}
// FilterByIdxs returns a filtered server list filtered according to an index list
func (sl *ServerList) FilterByIdxs(MessageServerIdxs []int) (filtered *ServerList, err error) {
filtered.Servers = []Server{}
filtered.Servers = []*Server{}
for _, i := range MessageServerIdxs {
if i > len(sl.Servers)-1 {
return nil, errors.New("requested server out of range of defined message servers")
@@ -31,22 +31,27 @@ func (sl *ServerList) GetServerByIdx(idx int) (server *Server, err error) {
if idx > len(sl.Servers)-1 {
return nil, errors.New("requested server out of range of defined message servers")
}
return &sl.Servers[idx], nil
return sl.Servers[idx], nil
}
// GetServerByPubkey returns a server from it's public key
func (sl *ServerList) GetServerByPubkey(pubkey string) (filtered *Server) {
for _, srv := range sl.Servers {
if srv.PublicKey == pubkey {
return &srv
return srv
}
}
return nil
}
// AddUrls is a simple utility functon used mainly as a shortcut for testing purposes
func (sl *ServerList) AddUrls(urls []string) {
func (sl *ServerList) AddUrls(urls []string) error {
for _, url := range urls {
sl.Servers = append(sl.Servers, *CreateServerFromUrl(url))
srvnew, err := CreateServerFromUrl(url)
if err != nil {
return err
}
sl.Servers = append(sl.Servers, srvnew)
}
return nil
}

View File

@@ -9,10 +9,14 @@ import (
)
func TestGetUid(t *testing.T) {
k, err := meowlib.NewKeyPair()
if err != nil {
t.Fatal(err)
}
srv := Server{
Name: "test",
Url: "http://127.0.0.1:8080",
PublicKey: meowlib.NewKeyPair().Public,
PublicKey: k.Public,
}
uid := srv.GetUid()
if uid != "http://127.0.0.1:8080" {
@@ -21,14 +25,18 @@ func TestGetUid(t *testing.T) {
}
func TestStoreServer(t *testing.T) {
createId()
createId(t)
ss := ServerStorage{DbFile: "test.db"}
k, err := meowlib.NewKeyPair()
if err != nil {
t.Fatal(err)
}
srv := Server{
Name: "test",
Url: "http://127.0.0.1",
PublicKey: meowlib.NewKeyPair().Public,
PublicKey: k.Public,
}
err := ss.StoreServer(&srv)
err = ss.StoreServer(&srv)
if err != nil {
log.Fatal(err)
}
@@ -49,15 +57,19 @@ func TestStoreServer(t *testing.T) {
}
func TestLoadServersFromUids(t *testing.T) {
createId()
createId(t)
GetConfig().SetMemPass("test")
ss := ServerStorage{DbFile: "test.db"}
k, err := meowlib.NewKeyPair()
if err != nil {
t.Fatal(err)
}
srv := Server{
Name: "test",
Url: "http://localhost:8080",
PublicKey: meowlib.NewKeyPair().Public,
PublicKey: k.Public,
}
err := ss.StoreServer(&srv)
err = ss.StoreServer(&srv)
if err != nil {
log.Fatal(err)
}
@@ -77,14 +89,18 @@ func TestLoadServersFromUids(t *testing.T) {
}
func TestLoadServerCardsFromUids(t *testing.T) {
createId()
createId(t)
ss := ServerStorage{DbFile: "test.db"}
k, err := meowlib.NewKeyPair()
if err != nil {
t.Fatal(err)
}
srv := Server{
Name: "test",
Url: "http://localhost:8080",
PublicKey: meowlib.NewKeyPair().Public,
PublicKey: k.Public,
}
err := ss.StoreServer(&srv)
err = ss.StoreServer(&srv)
if err != nil {
log.Fatal(err)
}
@@ -104,13 +120,16 @@ func TestLoadServerCardsFromUids(t *testing.T) {
}
func TestServerExists(t *testing.T) {
createId()
createId(t)
ss := ServerStorage{DbFile: "test.db"}
k, err := meowlib.NewKeyPair()
if err != nil {
t.Fatal(err)
}
server := &Server{
Name: "test",
Url: "http://localhost:8080",
PublicKey: meowlib.NewKeyPair().Public,
PublicKey: k.Public,
}
// Check if server exists before storing it
@@ -142,13 +161,16 @@ func TestServerExists(t *testing.T) {
}
func TestStoreServerIfNotExists(t *testing.T) {
createId()
createId(t)
ss := ServerStorage{DbFile: "test.db"}
k, err := meowlib.NewKeyPair()
if err != nil {
t.Fatal(err)
}
server := &Server{
Name: "test",
Url: "http://localhost:8080",
PublicKey: meowlib.NewKeyPair().Public,
PublicKey: k.Public,
}
// Check if server exists before storing it
@@ -181,26 +203,32 @@ func TestStoreServerIfNotExists(t *testing.T) {
}
func TestStoreServerIfNotExists_ServerExists(t *testing.T) {
createId()
createId(t)
ss := ServerStorage{DbFile: "test.db"}
k, err := meowlib.NewKeyPair()
if err != nil {
t.Fatal(err)
}
server := &Server{
Name: "test",
Url: "http://localhost:8080",
PublicKey: meowlib.NewKeyPair().Public,
PublicKey: k.Public,
}
// Store the server
err := ss.StoreServer(server)
err = ss.StoreServer(server)
if err != nil {
t.Errorf("Failed to store server: %v", err)
}
k, err = meowlib.NewKeyPair()
if err != nil {
t.Fatal(err)
}
// Store the server again with a different public key
newServer := &Server{
Name: "test",
Url: "http://localhost:8080",
PublicKey: meowlib.NewKeyPair().Public,
PublicKey: k.Public,
}
err = ss.StoreServerIfNotExists(newServer)