Split server and serverlist + serverlist methods
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
ycc 2023-11-09 22:46:39 +01:00
parent c203431ede
commit eeb39338e2
2 changed files with 57 additions and 16 deletions

View File

@ -27,17 +27,14 @@ type Server struct {
AllowedDelay int `json:"allowed_delay,omitempty"` AllowedDelay int `json:"allowed_delay,omitempty"`
} }
type ServerList struct { // CreateServerFromUrl creates a server from a basic url, ex : https://my.meowserver.example:8443/meow/
Name string func CreateServerFromUrl(url string) *Server {
Servers []Server
}
func ServerFromUrl(url string) *Server {
var is Server var is Server
is.ServerData.Url = url is.ServerData.Url = url
return &is return &is
} }
// Create a server from a server card
func CreateServerFromServerCard(server *meowlib.ServerCard) *Server { func CreateServerFromServerCard(server *meowlib.ServerCard) *Server {
var is Server var is Server
is.ServerData = *server is.ServerData = *server
@ -45,12 +42,6 @@ func CreateServerFromServerCard(server *meowlib.ServerCard) *Server {
return &is return &is
} }
func (sl *ServerList) AddUrls(urls []string) {
for _, url := range urls {
sl.Servers = append(sl.Servers, *ServerFromUrl(url))
}
}
// AsymEncryptMessage prepares a message to send to a specific internal server // AsymEncryptMessage prepares a message to send to a specific internal server
func (ints *Server) AsymEncryptMessage(Message []byte) (*meowlib.EncryptedMessage, error) { func (ints *Server) AsymEncryptMessage(Message []byte) (*meowlib.EncryptedMessage, error) {
var enc *meowlib.EncryptedMessage var enc *meowlib.EncryptedMessage
@ -106,7 +97,7 @@ func (ints *Server) BuildMessageRequestMessage(lookupKeys []string) ([]byte, err
} }
// BuildToServerMessageInvitation creates an invitation message to server and returns it as a meowlib.ToServerMessage // BuildToServerMessageInvitation creates an invitation message to server and returns it as a meowlib.ToServerMessage
func (ints *Server) BuildToServerMessageInvitationCreation(invitation *meowlib.ContactCard, password string, timeout int, urllen int) (*meowlib.ToServerMessage, error) { func (ints *Server) BuildToServerMessageInvitationCreation(invitation *meowlib.ContactCard, password string, timeout int, invitationIdLen int) (*meowlib.ToServerMessage, error) {
var msg meowlib.ToServerMessage var msg meowlib.ToServerMessage
var inv meowlib.Invitation var inv meowlib.Invitation
payload, err := invitation.Compress() payload, err := invitation.Compress()
@ -118,25 +109,26 @@ func (ints *Server) BuildToServerMessageInvitationCreation(invitation *meowlib.C
inv.Step = 1 inv.Step = 1
inv.Password = password inv.Password = password
inv.Timeout = int32(timeout) inv.Timeout = int32(timeout)
inv.Idlen = int32(urllen) inv.Idlen = int32(invitationIdLen)
inv.Payload = payload inv.Payload = payload
msg.Invitation = &inv msg.Invitation = &inv
return &msg, nil return &msg, nil
} }
// BuildToServerMessageInvitationRequest requests invitation with provided id from server and returns it as a meowlib.ToServerMessage // BuildToServerMessageInvitationRequest requests invitation with provided id from server and returns it as a meowlib.ToServerMessage
func (ints *Server) BuildToServerMessageInvitationRequest(url string, password string) (*meowlib.ToServerMessage, error) { func (ints *Server) BuildToServerMessageInvitationRequest(invitationId string, password string) (*meowlib.ToServerMessage, error) {
var msg meowlib.ToServerMessage var msg meowlib.ToServerMessage
var inv meowlib.Invitation var inv meowlib.Invitation
msg.Type = "1" msg.Type = "1"
msg.From = ints.Me.Public msg.From = ints.Me.Public
inv.Step = 2 inv.Step = 2
inv.Password = password inv.Password = password
inv.Id = url inv.Id = invitationId
msg.Invitation = &inv msg.Invitation = &inv
return &msg, nil return &msg, nil
} }
// PackServerMessage
func (ints *Server) PackServerMessage(payload []byte, signature []byte) (protoPackedMessage []byte, err error) { func (ints *Server) PackServerMessage(payload []byte, signature []byte) (protoPackedMessage []byte, err error) {
var msg meowlib.PackedServerMessage var msg meowlib.PackedServerMessage
msg.From = ints.Me.Public msg.From = ints.Me.Public

49
client/serverlist.go Normal file
View File

@ -0,0 +1,49 @@
package client
import "errors"
// ServerList manages lists that are used in Identity
// - Message servers list
// - ArchiveServers lists
// - Owned servers lists
// - Matriochka paths
type ServerList struct {
Name string
Servers []Server
}
// 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{}
for _, i := range MessageServerIdxs {
if i > len(sl.Servers)-1 {
return nil, errors.New("requested server out of range of defined message servers")
}
}
for _, i := range MessageServerIdxs {
filtered.Servers = append(filtered.Servers, sl.Servers[i])
}
return filtered, nil
}
// GetServerByIdx returns a server from it's index
func (sl *ServerList) GetServerByIdx(idx int) (server *Server, err error) {
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.ServerData.PublicKey == pubkey {
return &srv
}
}
return nil
}
// AddUrls is a simple utility functon used mainly as a shortcut for testing purposes
func (sl *ServerList) AddUrls(urls []string) {
for _, url := range urls {
sl.Servers = append(sl.Servers, *CreateServerFromUrl(url))
}
}