/// <summary> /// Gets GiHub OAuth token. /// </summary> /// <param name="login">User login.</param> /// <param name="pass">User password.</param> /// <returns>OAuth token or string.Empty in case of failure.</returns> public static async Task <string> GetGithubOAuthToken(string login, string pass) { try { var response = await LoginGithub(login, pass).ConfigureAwait(false); if (!response.IsSuccessStatusCode) { if (response.StatusCode == HttpStatusCode.Unauthorized && response.Headers.Contains(GithubOtpHeader)) { CakeTubeLogger.Trace(Resources_Logs.TwoFactorAuthenticationEnabled); var requestAuthCode = ServiceLocator.Current.GetInstance <RequestAuthCode>(); requestAuthCode.ShowDialog(); if (requestAuthCode.DialogResult != true) { CakeTubeLogger.Trace(Resources_Logs.CancelAuthorization); return(string.Empty); } var authCode = requestAuthCode.RequestAuthCodeViewModel.AuthCode; CakeTubeLogger.Trace(Resources_Logs.SendingAuthenticationCode); response = await LoginGithub(login, pass, authCode).ConfigureAwait(false); if (!response.IsSuccessStatusCode) { CakeTubeLogger.Trace(Resources_Logs.TwoFactorAuthenticationFailedError); return(string.Empty); } } else { CakeTubeLogger.Trace(Resources_Logs.UnableToGetOAuthError); return(string.Empty); } } CakeTubeLogger.Trace(Resources_Logs.GettingValidResponse); var responseString = await response.Content.ReadAsStringAsync().ConfigureAwait(false); var responseJson = JObject.Parse(responseString); return(responseJson["token"].ToObject <string>()); } catch (Exception exception) { CakeTubeLogger.Error(Resources_Logs.GitHubLoginError, exception); return(string.Empty); } }
/// <summary> /// Gets GiHub OAuth token. /// </summary> /// <param name="login">User login.</param> /// <param name="pass">User password.</param> /// <returns>OAuth token or string.Empty in case of failure.</returns> public static async Task <string> GetGithubOAuthToken(string login, string pass) { try { var response = await LoginGithub(login, pass); if (!response.IsSuccessStatusCode) { if (response.StatusCode == HttpStatusCode.Unauthorized && response.Headers.Contains(GithubOtpHeader)) { CakeTubeLogger.Trace("Two-factor authentication enabled"); var requestAuthCode = ServiceLocator.Current.GetInstance <RequestAuthCode>(); requestAuthCode.ShowDialog(); if (requestAuthCode.DialogResult != true) { CakeTubeLogger.Trace("Cancel authorization!"); return(string.Empty); } var authCode = requestAuthCode.RequestAuthCodeViewModel.AuthCode; CakeTubeLogger.Trace("Sending authentication code..."); response = await LoginGithub(login, pass, authCode); if (!response.IsSuccessStatusCode) { CakeTubeLogger.Trace("Two-factor authentication failed!"); return(string.Empty); } } else { CakeTubeLogger.Trace("Unable to get OAuth token from GitHub!"); return(string.Empty); } } CakeTubeLogger.Trace("Got valid response from GitHub"); var responseString = await response.Content.ReadAsStringAsync(); var responseJson = JObject.Parse(responseString); return(responseJson["token"].ToObject <string>()); } catch (Exception exception) { CakeTubeLogger.Error("Can not login via GitHub", exception); return(string.Empty); } }