private async Task <DataRequestResult <T> > SendGenericRequestAsync <T>(HttpMethod method, string endpoint, bool isAuthenticated) { try { HttpResponseMessage response; if (isAuthenticated) { response = await retryWithAuthPolicy.ExecuteAsync(() => { HttpRequestMessage request = new HttpRequestMessage(method, endpoint).AddToken(credentialService.Token); return(client.SendAsync(request)); }); } else { HttpRequestMessage request = new HttpRequestMessage(method, endpoint); response = await client.SendAsync(request); } if (response.StatusCode == HttpStatusCode.OK) { var result = await response.Content.ReadAsJsonObjectAsync <BackendResult <T> >(); return(new DataRequestResult <T>(result.Resource, result.Message)); } else { BackendRequestFailedException exception = new BackendRequestFailedException($"Request failed due to an unexpected response status {response.StatusCode}. Endpoint: {endpoint}.") { DisplayMessage = await GetBackendMessageAsync(response.Content) }; throw exception; } } catch (Exception ex) when(ex is HttpRequestException || ex is TaskCanceledException) { throw GetDefaultException(endpoint, ex); } }
public async Task <DataRequestResult <UserPreferences> > SetRemoteSettingsAsync(UserPreferences preferences) { try { HttpResponseMessage response = await retryWithAuthPolicy.ExecuteAsync(() => { HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "preferences").AddToken(credentialService.Token); request.Content = new JsonStringContent(preferences); return(client.SendAsync(request)); }); if (response.IsSuccessStatusCode) { var result = await response.Content.ReadAsJsonObjectAsync <BackendResult <UserPreferences> >(); return(new DataRequestResult <UserPreferences>(result.Resource, result.Message)); } else { BackendRequestFailedException exception; if (response.StatusCode == HttpStatusCode.Unauthorized) { exception = new BackendAuthenticationFailedException("Request failed due to incorrect credentials. Endpoint: preferencePost."); } else { exception = new BackendRequestFailedException($"Request failed due to an unexpected response status {response.StatusCode}. Endpoint: preferencePost."); } exception.DisplayMessage = await GetBackendMessageAsync(response.Content); throw exception; } } catch (Exception ex) when(ex is HttpRequestException || ex is TaskCanceledException) { throw GetDefaultException($"preferencePost", ex); } }
public async Task <DataRequestResult <AccessToken> > SignInAsync(StudentCredential credential, bool createAccount = false) { _ = credential?.StudentId ?? throw new InvalidOperationException("User credential is not yet configured."); _ = credential?.PasswordHash ?? throw new InvalidOperationException("User credential is not yet configured."); try { HttpResponseMessage response = await client.PostAsync($"signIn/{createAccount}", new JsonStringContent(credential)); if (response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.Accepted) { var result = await response.Content.ReadAsJsonObjectAsync <BackendResult <AccessToken> >(); credentialService.Token = result.Resource.Token; return(new DataRequestResult <AccessToken>(result.Resource, result.Message)); } else { BackendRequestFailedException exception; if (response.StatusCode == HttpStatusCode.Unauthorized) { exception = new BackendAuthenticationFailedException("Request failed due to incorrect credentials. Endpoint: signIn."); } else { exception = new BackendRequestFailedException($"Request failed due to an unexpected response status {response.StatusCode}. Endpoint: signIn."); } exception.DisplayMessage = await GetBackendMessageAsync(response.Content); throw exception; } } catch (Exception ex) when(ex is HttpRequestException || ex is TaskCanceledException) { throw GetDefaultException($"signIn", ex); } }