environment.go 1016 B

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