public void ProcessError(DirectAuthErrors error, string otherError = null) { switch (error) { case DirectAuthErrors.None: case DirectAuthErrors.need_captcha: case DirectAuthErrors.need_validation: break; case DirectAuthErrors.invalid_client: _dialogsService.Show(_locService["Message_Login_InvalidAccount_Text"], _locService["Message_Login_AuthorizationFailed_Title"]); break; case DirectAuthErrors.connection_error: _dialogsService.Show(_locService["Message_Login_ConnectionError_Text"], _locService["Message_Login_AuthorizationFailed_Title"]); break; case DirectAuthErrors.access_denied: _dialogsService.Show(_locService["Message_Login_AccessDenied_Text"], _locService["Message_Login_AccessDenied_Title"]); break; default: _dialogsService.Show(String.Format(_locService["Message_Login_UnknownError_Text"], otherError == null ? error.ToString() : otherError), _locService["Message_Login_AuthorizationFailed_Title"]); break; } }
public async Task <bool> Login(string captchaSid = null, string captchaKey = null) { _appLoaderService.Show(_locService["AppLoader_PleaseWait"]); var result = await _vkLoginService.Login(LoginText, PasswordText, captchaSid, captchaKey); DirectAuthErrors error = result != null ? result.Error : DirectAuthErrors.unknown_error; switch (error) { case DirectAuthErrors.None: _vkLoginService.Login(new APISession(result.AccessToken, result.UserID, result.Secret)); break; case DirectAuthErrors.need_captcha: try { string key = await _vkCaptchaHandler.GetCaptchaUserInput(result.CaptchaImg); if (key != null) { return(await Login(result.CaptchaSid, key)); } } catch (Exception) { } break; case DirectAuthErrors.need_validation: ValidationView?.StartValidation(result.RedirectUri); break; default: ProcessError(error); break; } _appLoaderService.Hide(); return(false); }
private async void browser_NavigationStarting(WebView sender, WebViewNavigationStartingEventArgs args) { _isWorking = true; _isCompleted = false; LoginCommand.RaiseCanExecuteChanged(); VisualStateManager.GoToState(this, "Loading", true); if (args.Uri.AbsoluteUri.Contains("token=")) { _isCompleted = true; var parts = args.Uri.Fragment.Substring(1).Split('&').ToArray(); string token = parts[1].Split('=')[1]; // В отличие от LoginView, здесь первым имеется либо success=1 либо fail=1. int userID = int.Parse(parts[2].Split('=')[1]); ViewModel.LoginToken(userID, token); } else if (args.Uri.AbsoluteUri.Contains("error=")) { var parts = args.Uri.Fragment.Substring(1).Split('&').ToArray(); string error = parts[0].Split('=')[1]; DirectAuthErrors errorName = DirectAuthErrors.unknown_error; Enum.TryParse(error, out errorName); ViewModel.ProcessError(errorName); _isCompleted = true; VisualStateManager.GoToState(this, "Normal", true); _isEnterDataState = false; } else if (args.Uri.AbsoluteUri.EndsWith("blank.html?success=1")) { _isCompleted = true; await ViewModel.Login(); } else if (args.Uri.AbsoluteUri.EndsWith("blank.html#fail=1")) { _isCompleted = true; } }