diff options
author | Nick Thomas <nick@gitlab.com> | 2019-03-15 17:16:17 +0000 |
---|---|---|
committer | Nick Thomas <nick@gitlab.com> | 2019-03-15 17:16:17 +0000 |
commit | f237aba6df1c1873f1f9d5ba18c3b8924d85cb51 (patch) | |
tree | 22d69b9450693bb153e58dbe8b7cd6feb3f8e1e0 /go/internal/gitlabnet/socketclient.go | |
parent | 049beb74303a03d9fa598d23b150e0ccea3cd60d (diff) | |
parent | 83c0f18e1de04b3bad9c424084e738e911c47336 (diff) | |
download | gitlab-shell-f237aba6df1c1873f1f9d5ba18c3b8924d85cb51.tar.gz |
Merge branch 'bvl-discover-command' into 'master'
Call gitlab "/internal/discover" from go
Closes #175
See merge request gitlab-org/gitlab-shell!283
Diffstat (limited to 'go/internal/gitlabnet/socketclient.go')
-rw-r--r-- | go/internal/gitlabnet/socketclient.go | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/go/internal/gitlabnet/socketclient.go b/go/internal/gitlabnet/socketclient.go new file mode 100644 index 0000000..3bd7c70 --- /dev/null +++ b/go/internal/gitlabnet/socketclient.go @@ -0,0 +1,46 @@ +package gitlabnet + +import ( + "context" + "net" + "net/http" + "strings" + + "gitlab.com/gitlab-org/gitlab-shell/go/internal/config" +) + +const ( + // We need to set the base URL to something starting with HTTP, the host + // itself is ignored as we're talking over a socket. + socketBaseUrl = "http://unix" + UnixSocketProtocol = "http+unix://" +) + +type GitlabSocketClient struct { + httpClient *http.Client + config *config.Config +} + +func buildSocketClient(config *config.Config) *GitlabSocketClient { + path := strings.TrimPrefix(config.GitlabUrl, UnixSocketProtocol) + httpClient := &http.Client{ + Transport: &http.Transport{ + DialContext: func(_ context.Context, _, _ string) (net.Conn, error) { + return net.Dial("unix", path) + }, + }, + } + + return &GitlabSocketClient{httpClient: httpClient, config: config} +} + +func (c *GitlabSocketClient) Get(path string) (*http.Response, error) { + path = normalizePath(path) + + request, err := http.NewRequest("GET", socketBaseUrl+path, nil) + if err != nil { + return nil, err + } + + return doRequest(c.httpClient, c.config, request) +} |