| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | package logicimport (	"errors"	"github.com/gravitl/netmaker/models")// CreateHostRelay - creates a host relayfunc CreateHostRelay(relay models.HostRelayRequest) (relayHost *models.Host, relayedHosts []models.Host, err error) {	relayHost, err = GetHost(relay.HostID)	if err != nil {		return	}	err = ValidateHostRelay(relay)	if err != nil {		return	}	relayHost.IsRelay = true	relayHost.ProxyEnabled = true	relayHost.RelayedHosts = relay.RelayedHosts	err = UpsertHost(relayHost)	if err != nil {		return	}	relayedHosts = SetRelayedHosts(true, relay.HostID, relay.RelayedHosts)	return}// SetRelayedHosts - updates the relayed hosts statusfunc SetRelayedHosts(setRelayed bool, relayHostID string, relayedHostIDs []string) []models.Host {	var relayedHosts []models.Host	for _, relayedHostID := range relayedHostIDs {		host, err := GetHost(relayedHostID)		if err == nil {			if setRelayed {				host.IsRelayed = true				host.RelayedBy = relayHostID				host.ProxyEnabled = true			} else {				host.IsRelayed = false				host.RelayedBy = ""			}			err = UpsertHost(host)			if err == nil {				relayedHosts = append(relayedHosts, *host)			}		}	}	return relayedHosts}// GetRelayedHosts - gets the relayed hosts of a relay hostfunc GetRelayedHosts(relayHost *models.Host) []models.Host {	relayedHosts := []models.Host{}	for _, hostID := range relayHost.RelayedHosts {		relayedHost, err := GetHost(hostID)		if err == nil {			relayedHosts = append(relayedHosts, *relayedHost)		}	}	return relayedHosts}func ValidateHostRelay(relay models.HostRelayRequest) error {	if len(relay.RelayedHosts) == 0 {		return errors.New("relayed hosts are empty")	}	return nil}// DeleteHostRelay - removes host as relayfunc DeleteHostRelay(relayHostID string) (relayHost *models.Host, relayedHosts []models.Host, err error) {	relayHost, err = GetHost(relayHostID)	if err != nil {		return	}	relayedHosts = SetRelayedHosts(false, relayHostID, relayHost.RelayedHosts)	relayHost.IsRelay = false	relayHost.RelayedHosts = []string{}	err = UpsertHost(relayHost)	if err != nil {		return	}	return}
 |