예제 #1
0
        public LoginResultData ContinueLogin(LoginResultData loginResultData, string twofacode)
        {
            var host            = loginResultData.Host;
            var keychainAdapter = keychain.Connect(host);

            if (keychainAdapter.Credential == null)
            {
                return(new LoginResultData(LoginResultCodes.Failed, Localization.LoginFailed, host));
            }
            var username = keychainAdapter.Credential.Username;
            var password = keychainAdapter.Credential.Token;

            try
            {
                loginResultData = TryLogin(host, username, password, twofacode);

                if (loginResultData.Code == LoginResultCodes.Success)
                {
                    if (string.IsNullOrEmpty(loginResultData.Token))
                    {
                        throw new InvalidOperationException("Returned token is null or empty");
                    }

                    keychainAdapter.Update(loginResultData.Token, username);
                    username = RetrieveUsername(loginResultData.Token, host);
                    keychainAdapter.Update(loginResultData.Token, username);
                    keychain.SaveToSystem(host);

                    return(loginResultData);
                }

                return(loginResultData);
            }
            catch (Exception e)
            {
                logger.Warning(e, "Login Exception");

                keychain.Clear(host, false);
                return(new LoginResultData(LoginResultCodes.Failed, Localization.LoginFailed, host));
            }
        }
예제 #2
0
 internal LoginResult(LoginResultData data, Action <bool, string> callback, Action <LoginResult> twofaCallback)
 {
     this.Data          = data;
     this.Callback      = callback;
     this.TwoFACallback = twofaCallback;
 }