61 lines
1.6 KiB
Go
61 lines
1.6 KiB
Go
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 `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 = &ServerList{
|
|
Name: sl.Name,
|
|
Servers: []*Server{},
|
|
}
|
|
for _, i := range MessageServerIdxs {
|
|
if i < 0 || 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) {
|
|
if idx < 0 || idx > len(sl.Servers)-1 {
|
|
return nil, errors.New("requested server out of range of defined message servers")
|
|
}
|
|
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 nil
|
|
}
|
|
|
|
// AddUrls is a simple utility functon used mainly as a shortcut for testing purposes
|
|
func (sl *ServerList) AddUrls(urls []string) error {
|
|
for _, url := range urls {
|
|
srvnew, err := CreateServerFromUrl(url)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
sl.Servers = append(sl.Servers, srvnew)
|
|
}
|
|
return nil
|
|
}
|