environment.go 841 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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. }
  12. func (e *Environment) GetWebSocketURL(uri string) (decodedUri string, err error) {
  13. baseUrl, err := url.Parse(e.URL)
  14. if err != nil {
  15. return
  16. }
  17. defaultPort := ""
  18. if baseUrl.Port() == "" {
  19. switch baseUrl.Scheme {
  20. default:
  21. fallthrough
  22. case "http":
  23. defaultPort = "80"
  24. case "https":
  25. defaultPort = "443"
  26. }
  27. baseUrl.Host = baseUrl.Hostname() + ":" + defaultPort
  28. }
  29. u, err := url.JoinPath(baseUrl.String(), uri)
  30. if err != nil {
  31. return
  32. }
  33. decodedUri, err = url.QueryUnescape(u)
  34. if err != nil {
  35. return
  36. }
  37. // http will be replaced with ws, https will be replaced with wss
  38. decodedUri = strings.ReplaceAll(decodedUri, "http", "ws")
  39. return
  40. }