diff options
author | Nick Thomas <nick@gitlab.com> | 2019-10-17 12:04:52 +0100 |
---|---|---|
committer | Nick Thomas <nick@gitlab.com> | 2019-10-18 11:47:25 +0100 |
commit | 83d11f4deeb20b852a0af3433190a0f7250a0027 (patch) | |
tree | 1a9df18d6f9f59712c6f5c98e995a4918eb94a11 /go/internal/gitlabnet/client.go | |
parent | 7d5229db263a62661653431881bef8b46984d0de (diff) | |
download | gitlab-shell-83d11f4deeb20b852a0af3433190a0f7250a0027.tar.gz |
Move go code up one level
Diffstat (limited to 'go/internal/gitlabnet/client.go')
-rw-r--r-- | go/internal/gitlabnet/client.go | 132 |
1 files changed, 0 insertions, 132 deletions
diff --git a/go/internal/gitlabnet/client.go b/go/internal/gitlabnet/client.go deleted file mode 100644 index dacb1d6..0000000 --- a/go/internal/gitlabnet/client.go +++ /dev/null @@ -1,132 +0,0 @@ -package gitlabnet - -import ( - "bytes" - "encoding/base64" - "encoding/json" - "fmt" - "io" - "net/http" - "strings" - - "gitlab.com/gitlab-org/gitlab-shell/go/internal/config" -) - -const ( - internalApiPath = "/api/v4/internal" - secretHeaderName = "Gitlab-Shared-Secret" -) - -var ( - ParsingError = fmt.Errorf("Parsing failed") -) - -type ErrorResponse struct { - Message string `json:"message"` -} - -type GitlabClient struct { - httpClient *http.Client - config *config.Config - host string -} - -func GetClient(config *config.Config) (*GitlabClient, error) { - client := config.GetHttpClient() - - if client == nil { - return nil, fmt.Errorf("Unsupported protocol") - } - - return &GitlabClient{httpClient: client.HttpClient, config: config, host: client.Host}, nil -} - -func normalizePath(path string) string { - if !strings.HasPrefix(path, "/") { - path = "/" + path - } - - if !strings.HasPrefix(path, internalApiPath) { - path = internalApiPath + path - } - return path -} - -func newRequest(method, host, path string, data interface{}) (*http.Request, error) { - var jsonReader io.Reader - if data != nil { - jsonData, err := json.Marshal(data) - if err != nil { - return nil, err - } - - jsonReader = bytes.NewReader(jsonData) - } - - request, err := http.NewRequest(method, host+path, jsonReader) - if err != nil { - return nil, err - } - - return request, nil -} - -func parseError(resp *http.Response) error { - if resp.StatusCode >= 200 && resp.StatusCode <= 399 { - return nil - } - defer resp.Body.Close() - parsedResponse := &ErrorResponse{} - - if err := json.NewDecoder(resp.Body).Decode(parsedResponse); err != nil { - return fmt.Errorf("Internal API error (%v)", resp.StatusCode) - } else { - return fmt.Errorf(parsedResponse.Message) - } - -} - -func (c *GitlabClient) Get(path string) (*http.Response, error) { - return c.DoRequest(http.MethodGet, normalizePath(path), nil) -} - -func (c *GitlabClient) Post(path string, data interface{}) (*http.Response, error) { - return c.DoRequest(http.MethodPost, normalizePath(path), data) -} - -func (c *GitlabClient) DoRequest(method, path string, data interface{}) (*http.Response, error) { - request, err := newRequest(method, c.host, path, data) - if err != nil { - return nil, err - } - - user, password := c.config.HttpSettings.User, c.config.HttpSettings.Password - if user != "" && password != "" { - request.SetBasicAuth(user, password) - } - - encodedSecret := base64.StdEncoding.EncodeToString([]byte(c.config.Secret)) - request.Header.Set(secretHeaderName, encodedSecret) - - request.Header.Add("Content-Type", "application/json") - request.Close = true - - response, err := c.httpClient.Do(request) - if err != nil { - return nil, fmt.Errorf("Internal API unreachable") - } - - if err := parseError(response); err != nil { - return nil, err - } - - return response, nil -} - -func ParseJSON(hr *http.Response, response interface{}) error { - if err := json.NewDecoder(hr.Body).Decode(response); err != nil { - return ParsingError - } - - return nil -} |