/// <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);
            }
        }
Beispiel #2
0
        /// <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);
            }
        }