21
}
22
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
}
37
>
reqBody, err := json.Marshal(r)
38
>
if err != nil {
39
return nil, err
40
}
42
>
if err != nil {
43
return nil, err
44
}
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
}
59
>
if err := json.Unmarshal(body, versionCheckResponse); err != nil {
60
return nil, err
61
}
63
return nil, err
64
}
66
}
67
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
}
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
}
83
>
if info.Name == "" || info.Version == "" {
84
return errors.New("invalid request: missing required fields")
85
}
86
}
88
}
89
91
>
var u url.URL
92
>
u.Scheme = c.Scheme
93
>
u.Host = c.Host
94
>
u.Path = "check"
95
>
return &u
96
>
}