in internal/auth/auth.go [382:424]
func (a *Auth) fetchAccessToken(ctx context.Context, code string) (tokenResponse, error) {
token := tokenResponse{}
// Prepare request
fetchURL, err := url.Parse(fmt.Sprintf(tokenURLTemplate, a.internalGitlabServer))
if err != nil {
return token, err
}
content := url.Values{}
content.Set("client_id", a.clientID)
content.Set("client_secret", a.clientSecret)
content.Set("code", code)
content.Set("grant_type", "authorization_code")
content.Set("redirect_uri", a.redirectURI)
req, err := http.NewRequestWithContext(ctx, "POST", fetchURL.String(), strings.NewReader(content.Encode()))
if err != nil {
return token, err
}
// Request token
resp, err := a.apiClient.Do(req)
if err != nil {
return token, err
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
err = errResponseNotOk
errortracking.CaptureErrWithReqAndStackTrace(err, req)
return token, err
}
// Parse response
err = json.NewDecoder(resp.Body).Decode(&token)
if err != nil {
return token, err
}
return token, nil
}