internal static async Task<UserRealmDiscoveryResponse> CreateByDiscoveryAsync(string userRealmUri, string userName, CallState callState) { string userRealmEndpoint = userRealmUri; userRealmEndpoint += (userName + "?api-version=1.0"); userRealmEndpoint = HttpHelper.CheckForExtraQueryParameter(userRealmEndpoint); Logger.Information(callState, "Sending user realm discovery request to '{0}'", userRealmEndpoint); UserRealmDiscoveryResponse userRealmResponse; ClientMetrics clientMetrics = new ClientMetrics(); try { IHttpWebRequest request = NetworkPlugin.HttpWebRequestFactory.Create(userRealmEndpoint); request.Method = "GET"; request.Accept = "application/json"; HttpHelper.AddCorrelationIdHeadersToRequest(request, callState); AdalIdHelper.AddAsHeaders(request); clientMetrics.BeginClientMetricsRecord(request, callState); using (var response = await request.GetResponseSyncOrAsync(callState)) { HttpHelper.VerifyCorrelationIdHeaderInReponse(response, callState); userRealmResponse = HttpHelper.DeserializeResponse<UserRealmDiscoveryResponse>(response); clientMetrics.SetLastError(null); } } catch (WebException ex) { var serviceException = new AdalServiceException(AdalError.UserRealmDiscoveryFailed, ex); clientMetrics.SetLastError(new[] { serviceException.StatusCode.ToString() }); throw serviceException; } finally { clientMetrics.EndClientMetricsRecord(ClientMetricsEndpointType.UserRealmDiscovery, callState); } return userRealmResponse; }
public async Task TimeoutTest() { const string TestServiceUrl = "http://localhost:8080"; using (WebApp.Start<TestService>(TestServiceUrl)) { HttpClientWrapper webClient = new HttpClientWrapper(TestServiceUrl + "?delay=0&response_code=200", null) { TimeoutInMilliSeconds = 10000 }; await webClient.GetResponseAsync(); webClient = new HttpClientWrapper(TestServiceUrl + "?delay=0&response_code=200", null) { TimeoutInMilliSeconds = 10000 }; await webClient.GetResponseAsync(); try { webClient = new HttpClientWrapper(TestServiceUrl + "?delay=0&response_code=400", null) { TimeoutInMilliSeconds = 10000 }; await webClient.GetResponseAsync(); } catch (HttpRequestWrapperException ex) { Verify.AreEqual(ex.WebResponse.StatusCode, HttpStatusCode.BadRequest); } try { webClient = new HttpClientWrapper(TestServiceUrl + "?delay=10000&response_code=200", null) { TimeoutInMilliSeconds = 500 }; await webClient.GetResponseAsync(); } catch (HttpRequestWrapperException ex) { Verify.IsTrue(ex.InnerException is TaskCanceledException); var serviceException = new AdalServiceException(AdalError.Unknown, ex); Verify.AreEqual(serviceException.StatusCode, (int)HttpStatusCode.RequestTimeout); } } }
private static async Task<AuthenticationParameters> CreateFromResourceUrlCommonAsync(Uri resourceUrl) { CallState callState = new CallState(Guid.NewGuid(), false); if (resourceUrl == null) { throw new ArgumentNullException("resourceUrl"); } IHttpWebResponse response = null; AuthenticationParameters authParams; try { IHttpWebRequest request = NetworkPlugin.HttpWebRequestFactory.Create(resourceUrl.AbsoluteUri); request.ContentType = "application/x-www-form-urlencoded"; response = await request.GetResponseSyncOrAsync(callState); var ex = new AdalException(AdalError.UnauthorizedResponseExpected); Logger.Error(null, ex); throw ex; } catch (WebException ex) { response = NetworkPlugin.HttpWebRequestFactory.CreateResponse(ex.Response); if (response == null) { var serviceEx = new AdalServiceException(AdalErrorMessage.UnauthorizedHttpStatusCodeExpected, ex); Logger.Error(null, serviceEx); throw serviceEx; } authParams = CreateFromUnauthorizedResponseCommon(response); } finally { if (response != null) { response.Close(); } } return authParams; }
private static async Task<AuthenticationParameters> CreateFromResourceUrlCommonAsync(Uri resourceUrl) { if (resourceUrl == null) { throw new ArgumentNullException("resourceUrl"); } AuthenticationParameters authParams; try { IHttpClient request = PlatformPlugin.HttpClientFactory.Create(resourceUrl.AbsoluteUri, null); using (await request.GetResponseAsync()) { var ex = new AdalException(AdalError.UnauthorizedResponseExpected); PlatformPlugin.Logger.Error(null, ex); throw ex; } } catch (HttpRequestWrapperException ex) { IHttpWebResponse response = ex.WebResponse; if (response == null) { var serviceEx = new AdalServiceException(AdalErrorMessage.UnauthorizedHttpStatusCodeExpected, ex); PlatformPlugin.Logger.Error(null, serviceEx); throw serviceEx; } authParams = CreateFromUnauthorizedResponseCommon(response); } return authParams; }