github.com/redhat-appstudio/e2e-tests@v0.0.0-20240520140907-9709f6f59323/pkg/clients/sprayproxy/sprayproxy.go (about) 1 package sprayproxy 2 3 import ( 4 "bytes" 5 "context" 6 "crypto/tls" 7 "encoding/json" 8 "fmt" 9 "io" 10 "net/http" 11 "strings" 12 13 routev1 "github.com/openshift/api/route/v1" 14 kubeCl "github.com/redhat-appstudio/e2e-tests/pkg/clients/kubernetes" 15 "k8s.io/apimachinery/pkg/types" 16 ) 17 18 func NewSprayProxyConfig(url string, token string) (*SprayProxyConfig, error) { 19 return &SprayProxyConfig{ 20 BaseURL: url, 21 HTTPClient: &http.Client{ 22 Transport: &http.Transport{ 23 TLSClientConfig: &tls.Config{ 24 // #nosec G402 25 InsecureSkipVerify: true, 26 }, 27 }, 28 }, 29 Token: token, 30 }, nil 31 } 32 33 func (s *SprayProxyConfig) RegisterServer(pacHost string) (string, error) { 34 bytesData, err := buildBodyData(pacHost) 35 if err != nil { 36 return "", err 37 } 38 39 result, err := s.sendRequest(http.MethodPost, bytes.NewReader(bytesData)) 40 if err != nil { 41 return "", err 42 } 43 return result, nil 44 } 45 46 func (s *SprayProxyConfig) UnregisterServer(pacHost string) (string, error) { 47 bytesData, err := buildBodyData(pacHost) 48 if err != nil { 49 return "", err 50 } 51 52 result, err := s.sendRequest(http.MethodDelete, bytes.NewReader(bytesData)) 53 if err != nil { 54 return "", err 55 } 56 return result, nil 57 } 58 59 func (s *SprayProxyConfig) GetServers() (string, error) { 60 result, err := s.sendRequest(http.MethodGet, nil) 61 if err != nil { 62 return "", err 63 } 64 return strings.TrimPrefix(result, "Backend urls:"), nil 65 } 66 67 func (s *SprayProxyConfig) sendRequest(httpMethod string, data io.Reader) (string, error) { 68 requestURL := s.BaseURL + "/backends" 69 70 req, err := http.NewRequest(httpMethod, requestURL, data) 71 if err != nil { 72 return "", err 73 } 74 req.Header.Set("Content-Type", "application/json; charset=utf-8") 75 req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", s.Token)) 76 77 res, err := s.HTTPClient.Do(req) 78 if err != nil { 79 return "", err 80 } 81 82 body, err := io.ReadAll(res.Body) 83 if err != nil { 84 return "", fmt.Errorf("failed to access SprayProxy server with status code: %d and body: %s", res.StatusCode, string(body)) 85 } 86 87 defer res.Body.Close() 88 89 return string(body), err 90 } 91 92 func GetPaCHost() (string, error) { 93 k8sClient, err := kubeCl.NewAdminKubernetesClient() 94 if err != nil { 95 return "", err 96 } 97 98 namespaceName := types.NamespacedName{ 99 Name: pacRouteName, 100 Namespace: pacNamespace, 101 } 102 103 route := &routev1.Route{} 104 err = k8sClient.KubeRest().Get(context.Background(), namespaceName, route) 105 if err != nil { 106 return "", err 107 } 108 return fmt.Sprintf("https://%s", route.Spec.Host), nil 109 } 110 111 func buildBodyData(pacHost string) ([]byte, error) { 112 data := make(map[string]string) 113 data["url"] = pacHost 114 bytesData, err := json.Marshal(data) 115 if err != nil { 116 return nil, err 117 } 118 return bytesData, nil 119 }