environment.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package model
  2. import (
  3. "net/url"
  4. "strings"
  5. )
  6. type Environment struct {
  7. Model
  8. Name string `json:"name"`
  9. URL string `json:"url"`
  10. Token string `json:"token"`
  11. Enabled bool `json:"enabled" gorm:"default:false"`
  12. }
  13. func (e *Environment) GetUrl(uri string) (decodedUri string, err error) {
  14. baseUrl, err := url.Parse(e.URL)
  15. if err != nil {
  16. return
  17. }
  18. u, err := url.JoinPath(baseUrl.String(), uri)
  19. if err != nil {
  20. return
  21. }
  22. decodedUri, err = url.QueryUnescape(u)
  23. if err != nil {
  24. return
  25. }
  26. return
  27. }
  28. func (e *Environment) GetWebSocketURL(uri string) (decodedUri string, err error) {
  29. baseUrl, err := url.Parse(e.URL)
  30. if err != nil {
  31. return
  32. }
  33. defaultPort := ""
  34. if baseUrl.Port() == "" {
  35. switch baseUrl.Scheme {
  36. default:
  37. fallthrough
  38. case "http":
  39. defaultPort = "80"
  40. case "https":
  41. defaultPort = "443"
  42. }
  43. baseUrl.Host = baseUrl.Hostname() + ":" + defaultPort
  44. }
  45. u, err := url.JoinPath(baseUrl.String(), uri)
  46. if err != nil {
  47. return
  48. }
  49. decodedUri, err = url.QueryUnescape(u)
  50. if err != nil {
  51. return
  52. }
  53. // http will be replaced with ws, https will be replaced with wss
  54. decodedUri = strings.ReplaceAll(decodedUri, "http", "ws")
  55. return
  56. }