relay.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package logic
  2. import (
  3. "errors"
  4. "github.com/gravitl/netmaker/models"
  5. )
  6. // CreateHostRelay - creates a host relay
  7. func CreateHostRelay(relay models.HostRelayRequest) (relayHost *models.Host, relayedHosts []models.Host, err error) {
  8. relayHost, err = GetHost(relay.HostID)
  9. if err != nil {
  10. return
  11. }
  12. err = ValidateHostRelay(relay)
  13. if err != nil {
  14. return
  15. }
  16. relayHost.IsRelay = true
  17. relayHost.ProxyEnabled = true
  18. relayHost.RelayedHosts = relay.RelayedHosts
  19. err = UpsertHost(relayHost)
  20. if err != nil {
  21. return
  22. }
  23. relayedHosts = SetRelayedHosts(true, relay.HostID, relay.RelayedHosts)
  24. return
  25. }
  26. // SetRelayedHosts - updates the relayed hosts status
  27. func SetRelayedHosts(setRelayed bool, relayHostID string, relayedHostIDs []string) []models.Host {
  28. var relayedHosts []models.Host
  29. for _, relayedHostID := range relayedHostIDs {
  30. host, err := GetHost(relayedHostID)
  31. if err == nil {
  32. if setRelayed {
  33. host.IsRelayed = true
  34. host.RelayedBy = relayHostID
  35. host.ProxyEnabled = true
  36. } else {
  37. host.IsRelayed = false
  38. host.RelayedBy = ""
  39. }
  40. err = UpsertHost(host)
  41. if err == nil {
  42. relayedHosts = append(relayedHosts, *host)
  43. }
  44. }
  45. }
  46. return relayedHosts
  47. }
  48. // GetRelayedHosts - gets the relayed hosts of a relay host
  49. func GetRelayedHosts(relayHost *models.Host) []models.Host {
  50. relayedHosts := []models.Host{}
  51. for _, hostID := range relayHost.RelayedHosts {
  52. relayedHost, err := GetHost(hostID)
  53. if err == nil {
  54. relayedHosts = append(relayedHosts, *relayedHost)
  55. }
  56. }
  57. return relayedHosts
  58. }
  59. func ValidateHostRelay(relay models.HostRelayRequest) error {
  60. if len(relay.RelayedHosts) == 0 {
  61. return errors.New("relayed hosts are empty")
  62. }
  63. return nil
  64. }
  65. // DeleteHostRelay - removes host as relay
  66. func DeleteHostRelay(relayHostID string) (relayHost *models.Host, relayedHosts []models.Host, err error) {
  67. relayHost, err = GetHost(relayHostID)
  68. if err != nil {
  69. return
  70. }
  71. relayedHosts = SetRelayedHosts(false, relayHostID, relayHost.RelayedHosts)
  72. relayHost.IsRelay = false
  73. relayHost.RelayedHosts = []string{}
  74. err = UpsertHost(relayHost)
  75. if err != nil {
  76. return
  77. }
  78. return
  79. }