| 248 | } |
| 249 | |
| 250 | string OsmOAuth::FetchRequestToken(SessionID const & sid) const |
| 251 | { |
| 252 | HttpClient request(BuildOAuth2Url()); |
| 253 | request.SetCookies(sid.m_cookies).SetFollowRedirects(false); |
| 254 | |
| 255 | if (!request.RunHttpRequest()) |
| 256 | MYTHROW(NetworkError, ("FetchRequestToken Network error while connecting to", request.UrlRequested())); |
| 257 | |
| 258 | if (request.WasRedirected()) |
| 259 | { |
| 260 | if (request.UrlReceived().find(m_oauth2params.m_redirectUri) != 0) |
| 261 | MYTHROW(OsmOAuth::NetworkError, ("FetchRequestToken Redirect url han unexpected prefix", request.UrlReceived())); |
| 262 | |
| 263 | // User already accepted OAuth2 request. |
| 264 | // Recieved URL in format "{OSM_OAUTH2_REDIRECT_URI}?code=XXXX". Extract code value |
| 265 | string const oauthCode = FindOauthCode(request.UrlReceived()); |
| 266 | if (oauthCode.empty()) |
| 267 | MYTHROW(OsmOAuth::NetworkError, |
| 268 | ("FetchRequestToken Redirect url has no 'code' parameter", request.UrlReceived())); |
| 269 | return oauthCode; |
| 270 | } |
| 271 | else |
| 272 | { |
| 273 | if (request.ErrorCode() != HTTP::OK) |
| 274 | MYTHROW(FetchRequestTokenServerError, (DebugPrint(request))); |
| 275 | |
| 276 | // Throws std::runtime_error. |
| 277 | string const authenticityToken = FindAuthenticityToken("/oauth2/authorize", request.ServerResponse()); |
| 278 | |
| 279 | // Accept OAuth2 request from server |
| 280 | return SendAuthRequest(authenticityToken, sid); |
| 281 | } |
| 282 | } |
| 283 | |
| 284 | string OsmOAuth::BuildOAuth2Url() const |
| 285 | { |
nothing calls this directly
no test coverage detected