21
}
22
23
>
func (c Caller) Call(r *VersionCheckRequest) (*VersionCheckResponse, error) {
caller.go
24
>
err := validateRequest(r)
25
>
if err != nil {
26
return nil, err
27
}
29
>
tr := &http.Transport{
30
>
DisableKeepAlives: true,
31
>
MaxIdleConnsPerHost: -1,
32
>
}
33
>
if c.Scheme == "https" {
34
tr.TLSClientConfig = &tls.Config{}
35
}
36
>
client := &http.Client{Transport: tr}
caller.go
37
>
reqBody, err := json.Marshal(r)
38
>
if err != nil {
39
return nil, err
40
}
41
>
req, err := http.NewRequest("POST", u.String(), bytes.NewReader(reqBody))
caller.go
42
>
if err != nil {
43
return nil, err
44
}
45
>
req.Header.Set("Content-Type", "application/json")
caller.go
46
>
resp, err := client.Do(req)
47
>
if err != nil {
48
return nil, err
49
}
51
return nil, fmt.Errorf("bad response code %v", resp.StatusCode)
52
}
54
>
body, err := io.ReadAll(resp.Body)
55
>
if err != nil {
56
return nil, err
57
}
58
>
versionCheckResponse := &VersionCheckResponse{}
caller.go
59
>
if err := json.Unmarshal(body, versionCheckResponse); err != nil {
60
return nil, err
61
}
62
>
if err := validateResponse(versionCheckResponse); err != nil {
caller.go
63
return nil, err
64
}
65
>
return versionCheckResponse, nil
caller.go
66
}
67
68
>
func validateResponse(r *VersionCheckResponse) error {
caller.go
69
>
if len(r.Products) == 0 {
70
return errors.New("invalid response: missing product list")
71
}
73
>
if firstProduct.Product == "" || firstProduct.Current.Version == "" || firstProduct.Recommended.Version == "" {
74
return errors.New("invalid response: missing product name, current or recommended version")
75
}
77
}
78
>
func validateRequest(r *VersionCheckRequest) error {
caller.go
79
>
if r.Product == "" || r.Version == "" || r.ClusterID == "" || r.DB == "" || r.OS == "" || r.Arch == "" || r.Timestamp == 0 {
80
return errors.New("invalid request: missing required fields")
81
}
82
>
for _, info := range r.SDKInfo {
caller.go
83
>
if info.Name == "" || info.Version == "" {
84
return errors.New("invalid request: missing required fields")
85
}
86
}
88
}
89
90
>
func (c Caller) getUrl(r *VersionCheckRequest) *url.URL {
caller.go
91
>
var u url.URL
92
>
u.Scheme = c.Scheme
93
>
u.Host = c.Host
94
>
u.Path = "check"
95
>
return &u
96
>
}