(data url.Values)
| 218 | } |
| 219 | |
| 220 | func (uaa UAARepository) getAuthToken(data url.Values) error { |
| 221 | var accessToken string |
| 222 | |
| 223 | type uaaErrorResponse struct { |
| 224 | Code string `json:"error"` |
| 225 | Description string `json:"error_description"` |
| 226 | } |
| 227 | |
| 228 | type AuthenticationResponse struct { |
| 229 | AccessToken string `json:"access_token"` |
| 230 | TokenType string `json:"token_type"` |
| 231 | RefreshToken string `json:"refresh_token"` |
| 232 | Error uaaErrorResponse `json:"error"` |
| 233 | } |
| 234 | |
| 235 | path := fmt.Sprintf("%s/oauth/token", uaa.config.AuthenticationEndpoint()) |
| 236 | |
| 237 | if uaa.config.UAAGrantType() != "client_credentials" { |
| 238 | accessToken = "Basic " + base64.StdEncoding.EncodeToString([]byte(uaa.config.UAAOAuthClient()+":"+uaa.config.UAAOAuthClientSecret())) |
| 239 | } |
| 240 | |
| 241 | request, err := uaa.gateway.NewRequest("POST", path, accessToken, strings.NewReader(data.Encode())) |
| 242 | |
| 243 | if err != nil { |
| 244 | return fmt.Errorf("%s: %s", T("Failed to start oauth request"), err.Error()) |
| 245 | } |
| 246 | request.HTTPReq.Header.Set("Content-Type", "application/x-www-form-urlencoded") |
| 247 | |
| 248 | response := new(AuthenticationResponse) |
| 249 | _, err = uaa.gateway.PerformRequestForJSONResponse(request, &response) |
| 250 | |
| 251 | switch err.(type) { |
| 252 | case nil: |
| 253 | case errors.HTTPError: |
| 254 | return err |
| 255 | case *errors.InvalidTokenError: |
| 256 | return errors.New(T("Authentication has expired. Please log back in to re-authenticate.\n\nTIP: Use `cf login -a <endpoint> -u <user> -o <org> -s <space>` to log back in and re-authenticate.")) |
| 257 | default: |
| 258 | return fmt.Errorf("%s: %s", T("auth request failed"), err.Error()) |
| 259 | } |
| 260 | |
| 261 | // TODO: get the actual status code |
| 262 | if response.Error.Code != "" { |
| 263 | return errors.NewHTTPError(0, response.Error.Code, response.Error.Description) |
| 264 | } |
| 265 | |
| 266 | uaa.config.SetAccessToken(fmt.Sprintf("%s %s", response.TokenType, response.AccessToken)) |
| 267 | uaa.config.SetRefreshToken(response.RefreshToken) |
| 268 | |
| 269 | return nil |
| 270 | } |
no test coverage detected