serverconf.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. package servercfg
  2. import (
  3. "github.com/gravitl/netmaker/config"
  4. "net/http"
  5. "io/ioutil"
  6. "os"
  7. "errors"
  8. )
  9. func SetHost() error {
  10. remoteip, err := GetPublicIP()
  11. if err != nil {
  12. return err
  13. }
  14. os.Setenv("SERVER_HOST", remoteip)
  15. return nil
  16. }
  17. func GetConfig() config.ServerConfig {
  18. var cfg config.ServerConfig
  19. cfg.APIHost = GetAPIHost()
  20. cfg.APIPort = GetAPIPort()
  21. cfg.GRPCHost = GetGRPCHost()
  22. cfg.GRPCPort = GetGRPCPort()
  23. cfg.MasterKey = "(hidden)"
  24. cfg.AllowedOrigin = GetAllowedOrigin()
  25. cfg.RestBackend = "off"
  26. if IsRestBackend() {
  27. cfg.RestBackend = "on"
  28. }
  29. cfg.AgentBackend = "off"
  30. if IsAgentBackend() {
  31. cfg.AgentBackend = "on"
  32. }
  33. cfg.ClientMode = "off"
  34. if IsClientMode() {
  35. cfg.ClientMode = "on"
  36. }
  37. cfg.DNSMode = "off"
  38. if IsDNSMode() {
  39. cfg.DNSMode = "on"
  40. }
  41. cfg.DisableRemoteIPCheck = "off"
  42. if DisableRemoteIPCheck() {
  43. cfg.DisableRemoteIPCheck = "on"
  44. }
  45. return cfg
  46. }
  47. func GetAPIHost() string {
  48. serverhost := "127.0.0.1"
  49. if os.Getenv("SERVER_HTTP_HOST") != "" {
  50. serverhost = os.Getenv("SERVER_HTTP_HOST")
  51. } else if config.Config.Server.APIHost != "" {
  52. serverhost = config.Config.Server.APIHost
  53. } else if os.Getenv("SERVER_HOST") != "" {
  54. serverhost = os.Getenv("SERVER_HOST")
  55. }
  56. return serverhost
  57. }
  58. func GetAPIPort() string {
  59. apiport := "8081"
  60. if os.Getenv("API_PORT") != "" {
  61. apiport = os.Getenv("API_PORT")
  62. } else if config.Config.Server.APIPort != "" {
  63. apiport = config.Config.Server.APIPort
  64. }
  65. return apiport
  66. }
  67. func GetGRPCHost() string {
  68. serverhost := "127.0.0.1"
  69. if os.Getenv("SERVER_GRPC_HOST") != "" {
  70. serverhost = os.Getenv("SERVER_GRPC_HOST")
  71. } else if config.Config.Server.GRPCHost != "" {
  72. serverhost = config.Config.Server.GRPCHost
  73. } else if os.Getenv("SERVER_HOST") != "" {
  74. serverhost = os.Getenv("SERVER_HOST")
  75. }
  76. return serverhost
  77. }
  78. func GetGRPCPort() string {
  79. grpcport := "50051"
  80. if os.Getenv("GRPC_PORT") != "" {
  81. grpcport = os.Getenv("GRPC_PORT")
  82. } else if config.Config.Server.GRPCPort != "" {
  83. grpcport = config.Config.Server.GRPCPort
  84. }
  85. return grpcport
  86. }
  87. func GetMasterKey() string {
  88. key := "secretkey"
  89. if os.Getenv("MASTER_KEY") != "" {
  90. key = os.Getenv("MASTER_KEY")
  91. } else if config.Config.Server.MasterKey != "" {
  92. key = config.Config.Server.MasterKey
  93. }
  94. return key
  95. }
  96. func GetAllowedOrigin() string {
  97. allowedorigin := "*"
  98. if os.Getenv("CORS_ALLOWED_ORIGIN") != "" {
  99. allowedorigin = os.Getenv("CORS_ALLOWED_ORIGIN")
  100. } else if config.Config.Server.AllowedOrigin != "" {
  101. allowedorigin = config.Config.Server.AllowedOrigin
  102. }
  103. return allowedorigin
  104. }
  105. func IsRestBackend() bool {
  106. isrest := true
  107. if os.Getenv("REST_BACKEND") != "" {
  108. if os.Getenv("REST_BACKEND") == "off" {
  109. isrest = false
  110. }
  111. } else if config.Config.Server.RestBackend != "" {
  112. if config.Config.Server.RestBackend == "off" {
  113. isrest = false
  114. }
  115. }
  116. return isrest
  117. }
  118. func IsAgentBackend() bool {
  119. isagent := true
  120. if os.Getenv("AGENT_BACKEND") != "" {
  121. if os.Getenv("AGENT_BACKEND") == "off" {
  122. isagent = false
  123. }
  124. } else if config.Config.Server.AgentBackend != "" {
  125. if config.Config.Server.AgentBackend == "off" {
  126. isagent = false
  127. }
  128. }
  129. return isagent
  130. }
  131. func IsClientMode() bool {
  132. isclient := true
  133. if os.Getenv("CLIENT_MODE") != "" {
  134. if os.Getenv("CLIENT_MODE") == "off" {
  135. isclient = false
  136. }
  137. } else if config.Config.Server.ClientMode != "" {
  138. if config.Config.Server.ClientMode == "off" {
  139. isclient = false
  140. }
  141. }
  142. return isclient
  143. }
  144. func IsDNSMode() bool {
  145. isdns := true
  146. if os.Getenv("DNS_MODE") != "" {
  147. if os.Getenv("DNS_MODE") == "off" {
  148. isdns = false
  149. }
  150. } else if config.Config.Server.DNSMode != "" {
  151. if config.Config.Server.DNSMode == "off" {
  152. isdns = false
  153. }
  154. }
  155. return isdns
  156. }
  157. func DisableRemoteIPCheck() bool {
  158. disabled := false
  159. if os.Getenv("DISABLE_REMOTE_IP_CHECK") != "" {
  160. if os.Getenv("DISABLE_REMOTE_IP_CHECK") == "on" {
  161. disabled = true
  162. }
  163. } else if config.Config.Server.DisableRemoteIPCheck != "" {
  164. if config.Config.Server.DisableRemoteIPCheck == "on" {
  165. disabled= true
  166. }
  167. }
  168. return disabled
  169. }
  170. func GetPublicIP() (string, error) {
  171. endpoint := ""
  172. var err error
  173. iplist := []string{"http://ip.server.gravitl.com", "https://ifconfig.me", "http://api.ipify.org", "http://ipinfo.io/ip"}
  174. for _, ipserver := range iplist {
  175. resp, err := http.Get(ipserver)
  176. if err != nil {
  177. continue
  178. }
  179. defer resp.Body.Close()
  180. if resp.StatusCode == http.StatusOK {
  181. bodyBytes, err := ioutil.ReadAll(resp.Body)
  182. if err != nil {
  183. continue
  184. }
  185. endpoint = string(bodyBytes)
  186. break
  187. }
  188. }
  189. if err == nil && endpoint == "" {
  190. err = errors.New("Public Address Not Found.")
  191. }
  192. return endpoint, err
  193. }