package server import ( "fmt" "time" "forge.redroom.link/yves/meowlib" ) type InternalServer struct { ServerData meowlib.Server `json:"server_data,omitempty"` Presence bool `json:"presence,omitempty"` LastCheck time.Time `json:"last_check,omitempty"` Uptime time.Duration `json:"uptime,omitempty"` Login string `json:"login,omitempty"` Password string `json:"password,omitempty"` Me meowlib.KeyPair `json:"me,omitempty"` } type InternalServerList struct { Name string Servers []InternalServer } func InternalServerFromUrl(url string) *InternalServer { var is InternalServer is.ServerData.Url = url return &is } func (sl *InternalServerList) AddUrls(urls []string) { for _, url := range urls { sl.Servers = append(sl.Servers, *InternalServerFromUrl(url)) } } // AsymEncryptMessage prepares a message to send to a specific internal server func (ints *InternalServer) AsymEncryptMessage(Message []byte) (EncryptedMsg []byte, Signature []byte, err error) { EncryptedMsg, Signature, err = meowlib.EncryptAndSign(ints.ServerData.PublicKey, ints.Me.Private, Message) if err != nil { fmt.Println(err.Error()) return nil, nil, err } return EncryptedMsg, Signature, err } // AsymDecryptMessage reads a message from a specific internal server func (ints *InternalServer) AsymDecryptMessage(Message []byte, Signature []byte) (DecryptedMsg []byte, err error) { DecryptedMsg, err = meowlib.DecryptAndCheck(ints.Me.Private, ints.ServerData.PublicKey, Message, Signature) if err != nil { fmt.Println(err.Error()) return nil, err } return DecryptedMsg, err }