diff options
author | Igor Drozdov <idrozdov@gitlab.com> | 2020-04-07 07:00:04 +0300 |
---|---|---|
committer | Ash McKenzie <amckenzie@gitlab.com> | 2020-04-14 23:38:52 +1000 |
commit | 40b3ddc142b906a79f22c726a0a61dd113c39485 (patch) | |
tree | e0b6d0a37d049dbd01e164a95dc0f8728d51d7e2 /internal/command/receivepack/customaction.go | |
parent | 74bef786d44b270167c7f9dbb029d197fe32ac4f (diff) | |
download | gitlab-shell-40b3ddc142b906a79f22c726a0a61dd113c39485.tar.gz |
Extract customaction into a separate moduleid-extract-custom-action-in-separate-module
We'll reuse this module for uploadpack in the future
Diffstat (limited to 'internal/command/receivepack/customaction.go')
-rw-r--r-- | internal/command/receivepack/customaction.go | 88 |
1 files changed, 0 insertions, 88 deletions
diff --git a/internal/command/receivepack/customaction.go b/internal/command/receivepack/customaction.go deleted file mode 100644 index 6693d23..0000000 --- a/internal/command/receivepack/customaction.go +++ /dev/null @@ -1,88 +0,0 @@ -package receivepack - -import ( - "bytes" - "errors" - - "io" - "io/ioutil" - "net/http" - - "gitlab.com/gitlab-org/gitlab-shell/internal/gitlabnet" - "gitlab.com/gitlab-org/gitlab-shell/internal/gitlabnet/accessverifier" -) - -type Request struct { - SecretToken []byte `json:"secret_token"` - Data accessverifier.CustomPayloadData `json:"data"` - Output []byte `json:"output"` -} - -type Response struct { - Result []byte `json:"result"` - Message string `json:"message"` -} - -func (c *Command) processCustomAction(response *accessverifier.Response) error { - data := response.Payload.Data - apiEndpoints := data.ApiEndpoints - - if len(apiEndpoints) == 0 { - return errors.New("Custom action error: Empty API endpoints") - } - - return c.processApiEndpoints(response) -} - -func (c *Command) processApiEndpoints(response *accessverifier.Response) error { - client, err := gitlabnet.GetClient(c.Config) - - if err != nil { - return err - } - - data := response.Payload.Data - request := &Request{Data: data} - request.Data.UserId = response.Who - - for _, endpoint := range data.ApiEndpoints { - response, err := c.performRequest(client, endpoint, request) - if err != nil { - return err - } - - if err = c.displayResult(response.Result); err != nil { - return err - } - - // In the context of the git push sequence of events, it's necessary to read - // stdin in order to capture output to pass onto subsequent commands - output, err := ioutil.ReadAll(c.ReadWriter.In) - if err != nil { - return err - } - request.Output = output - } - - return nil -} - -func (c *Command) performRequest(client *gitlabnet.GitlabClient, endpoint string, request *Request) (*Response, error) { - response, err := client.DoRequest(http.MethodPost, endpoint, request) - if err != nil { - return nil, err - } - defer response.Body.Close() - - cr := &Response{} - if err := gitlabnet.ParseJSON(response, cr); err != nil { - return nil, err - } - - return cr, nil -} - -func (c *Command) displayResult(result []byte) error { - _, err := io.Copy(c.ReadWriter.Out, bytes.NewReader(result)) - return err -} |