-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathhttp_client.go
More file actions
123 lines (104 loc) · 3.59 KB
/
http_client.go
File metadata and controls
123 lines (104 loc) · 3.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package http
import (
"encoding/json"
"fmt"
"net/http"
commonCliConfig "github.com/jfrog/jfrog-cli-core/v2/utils/config"
"github.com/jfrog/jfrog-cli-core/v2/utils/coreutils"
"github.com/jfrog/jfrog-client-go/auth"
clientConfig "github.com/jfrog/jfrog-client-go/config"
"github.com/jfrog/jfrog-client-go/http/jfroghttpclient"
"github.com/jfrog/jfrog-client-go/utils"
"github.com/jfrog/jfrog-client-go/utils/errorutils"
"github.com/jfrog/jfrog-client-go/utils/io/httputils"
)
const applicationApiPath = "application/api"
type AppHttpClient interface {
GetHttpClient() *jfroghttpclient.JfrogHttpClient
Post(path string, requestBody interface{}) (resp *http.Response, body []byte, err error)
Get(path string) (resp *http.Response, body []byte, err error)
}
type appHttpClient struct {
client *jfroghttpclient.JfrogHttpClient
serverDetails *commonCliConfig.ServerDetails
authDetails auth.ServiceDetails
serviceConfig clientConfig.Config
}
func NewAppHttpClient(serverDetails *commonCliConfig.ServerDetails) (AppHttpClient, error) {
certsPath, err := coreutils.GetJfrogCertsDir()
if err != nil {
return nil, err
}
authDetails, err := serverDetails.CreateLifecycleAuthConfig()
if err != nil {
return nil, err
}
serviceConfig, err := clientConfig.NewConfigBuilder().
SetServiceDetails(authDetails).
SetCertificatesPath(certsPath).
SetInsecureTls(serverDetails.InsecureTls).
Build()
if err != nil {
return nil, err
}
jfHttpClient, err := jfroghttpclient.JfrogClientBuilder().
SetCertificatesPath(certsPath).
SetInsecureTls(serviceConfig.IsInsecureTls()).
SetClientCertPath(serverDetails.GetClientCertPath()).
SetClientCertKeyPath(serverDetails.GetClientCertKeyPath()).
AppendPreRequestInterceptor(authDetails.RunPreRequestFunctions).
SetContext(serviceConfig.GetContext()).
SetDialTimeout(serviceConfig.GetDialTimeout()).
SetOverallRequestTimeout(serviceConfig.GetOverallRequestTimeout()).
SetRetries(serviceConfig.GetHttpRetries()).
SetRetryWaitMilliSecs(serviceConfig.GetHttpRetryWaitMilliSecs()).
Build()
if err != nil {
return nil, err
}
appClient := &appHttpClient{
client: jfHttpClient,
serverDetails: serverDetails,
authDetails: authDetails,
serviceConfig: serviceConfig,
}
return appClient, nil
}
func (c *appHttpClient) GetHttpClient() *jfroghttpclient.JfrogHttpClient {
return c.client
}
func (c *appHttpClient) Post(path string, requestBody interface{}) (resp *http.Response, body []byte, err error) {
url, err := utils.BuildUrl(c.serverDetails.Url, applicationApiPath+path, nil)
if err != nil {
return nil, nil, err
}
requestContent, err := c.toJsonBytes(requestBody)
if err != nil {
return nil, nil, err
}
println("url: ", url)
return c.client.SendPost(url, requestContent, c.getJsonHttpClientDetails())
}
func (c *appHttpClient) Get(path string) (resp *http.Response, body []byte, err error) {
url, err := utils.BuildUrl(c.serverDetails.Url, applicationApiPath+path, nil)
if err != nil {
return nil, nil, err
}
response, body, _, err := c.client.SendGet(url, false, c.getJsonHttpClientDetails())
return response, body, err
}
func (c *appHttpClient) toJsonBytes(payload interface{}) ([]byte, error) {
if payload == nil {
return nil, fmt.Errorf("request payload is required")
}
jsonBytes, err := json.Marshal(payload)
if err != nil {
return nil, errorutils.CheckError(err)
}
return jsonBytes, nil
}
func (c *appHttpClient) getJsonHttpClientDetails() *httputils.HttpClientDetails {
httpClientDetails := c.authDetails.CreateHttpClientDetails()
httpClientDetails.SetContentTypeApplicationJson()
return &httpClientDetails
}