public async Task <bool> LoginAsync(string userName, string userPassword, string code, CancellationToken cancellationToken) { try { var getKeyboardRequest = new GetKeyboardRequest { Username = userName, SessionId = Guid.NewGuid().ToString(), }; var getKeyboardResponse = await _httpClient.PostAsync <GetKeyboardRequest, GetKeyboardResponse>(ProviderUrls.GET_KEYBOARD, getKeyboardRequest, cancellationToken); // Use the keyboard to complete the authentication var authenticateRequest = new AuthenticateRequest { Username = userName, SessionId = getKeyboardRequest.SessionId, Token = getKeyboardResponse.Token, Password = GetPasswordFromKeyboard(userPassword, getKeyboardResponse), OtpToken = code, }; await _httpClient.PostAsync(ProviderUrls.AUTHENTICATE, authenticateRequest, cancellationToken); return(true); } catch (Exception ex) { Console.WriteLine("Error authenticating to Rico Provider"); Console.WriteLine(ex.Message); return(false); } }
/// <summary> /// Generic method used to send a request to the Api /// </summary> /// <param name="requestUri">Request Uri</param> /// <param name="requestMessage">Request Message</param> /// <returns>Request response message</returns> private static T Post <T>(string requestUri, object requestMessage) where T : BaseResponseMessage { T result; var jsonObject = JsonConvert.SerializeObject(requestMessage); using (var httpClient = new BaseHttpClient()) using (var content = new BaseHttpContent(jsonObject)) using (HttpResponseMessage response = httpClient.PostAsync(requestUri, content).Result) { response.EnsureSuccessStatusCode(); Task <string> responseBody = response.Content.ReadAsStringAsync(); result = JsonConvert.DeserializeObject <T>(responseBody.Result); result.OperationSuccess = true; } return(result); }
/// <summary> /// Generic method used to send a request to the Api /// </summary> /// <param name="requestUri">Request Uri</param> /// <param name="requestMessage">Request Message</param> /// <returns>Request response message</returns> private async Task <T> Post <T>(string requestUri, object requestMessage) where T : BaseResponseMessage, new() { T result; try { var jsonObject = JsonConvert.SerializeObject(requestMessage); using (var httpClient = new BaseHttpClient() { Timeout = _configuration.Timeout }) using (var content = new BaseHttpContent(jsonObject)) { HttpResponseMessage response = await httpClient.PostAsync(requestUri, content); if (response.IsSuccessStatusCode) { string responseBody = await response.Content.ReadAsStringAsync(); result = JsonConvert.DeserializeObject <T>(responseBody); result.OperationSuccess = true; } else { result = new T(); result.ErrorMessage = string.Format("StatusCode: {0}, ReasonPhrase: '{1}'", (int)response.StatusCode, response.ReasonPhrase); } } } catch (Exception ex) { result = new T(); result.ErrorMessage = ex.Message; } return(result); }
/// <summary> /// Get authentication token using user Login and Password /// </summary> /// <returns></returns> private async Task GetAuthTokenAsync(string userName, string userPassword, CancellationToken cancellationToken) { if (!string.IsNullOrEmpty(_authToken)) { return; } var body = new AuthenticationRequest { ClientId = "other.conta", ClientSecret = "yQPeLzoHuJzlMMSAjC-LgNUJdUecx8XO", GrantType = "password", Login = userName, Password = userPassword }; var loginUrl = await _endpoints.GetLoginUrlAsync(cancellationToken); var response = await _httpClient.PostAsync <AuthenticationRequest, AuthenticationResponse>(loginUrl, body, cancellationToken); FillAuthToken(response); FillAuthenticatedUrls(response); }