summaryrefslogtreecommitdiff
path: root/go/internal/gitlabnet/socketclient.go
diff options
context:
space:
mode:
authorNick Thomas <nick@gitlab.com>2019-03-15 17:16:17 +0000
committerNick Thomas <nick@gitlab.com>2019-03-15 17:16:17 +0000
commitf237aba6df1c1873f1f9d5ba18c3b8924d85cb51 (patch)
tree22d69b9450693bb153e58dbe8b7cd6feb3f8e1e0 /go/internal/gitlabnet/socketclient.go
parent049beb74303a03d9fa598d23b150e0ccea3cd60d (diff)
parent83c0f18e1de04b3bad9c424084e738e911c47336 (diff)
downloadgitlab-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.go46
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)
+}