public void EnsureLoggedIn(string username, string password, string service, bool showUi, string uri) { try { if (IsValid(username, password, service)) return; string captchaToken = null; string captchaValue = null; string source = string.Format(CultureInfo.InvariantCulture, "{0}-{1}-{2}", ApplicationEnvironment.CompanyName, ApplicationEnvironment.ProductName, ApplicationEnvironment.ProductVersion); while (true) { GoogleLoginRequestFactory glrf = new GoogleLoginRequestFactory(username, password, service, source, captchaToken, captchaValue); if (captchaToken != null && captchaValue != null) { captchaToken = null; captchaValue = null; } HttpWebResponse response; try { response = RedirectHelper.GetResponse(uri, new RedirectHelper.RequestFactory(glrf.Create)); } catch (WebException we) { response = (HttpWebResponse)we.Response; if (response == null) { Trace.Fail(we.ToString()); if (showUi) { showUi = false; ShowError(MessageId.WeblogConnectionError, we.Message); } throw; } } if (response.StatusCode == HttpStatusCode.OK) { Hashtable ht = ParseAuthResponse(response.GetResponseStream()); if (ht.ContainsKey("Auth")) { _auths[new AuthKey(username, password, service)] = new AuthValue((string)ht["Auth"], ht["YouTubeUser"] as string); return; } else { if (showUi) { showUi = false; ShowError(MessageId.GoogleAuthTokenNotFound); } throw new BlogClientInvalidServerResponseException(uri, "No Auth token was present in the response.", string.Empty); } } else if (response.StatusCode == HttpStatusCode.Forbidden) { // login failed Hashtable ht = ParseAuthResponse(response.GetResponseStream()); string error = ht["Error"] as string; if (error != null && error == "CaptchaRequired") { captchaToken = (string)ht["CaptchaToken"]; string captchaUrl = (string)ht["CaptchaUrl"]; GDataCaptchaHelper helper = new GDataCaptchaHelper( new Win32WindowImpl(BlogClientUIContext.ContextForCurrentThread.Handle), captchaUrl); BlogClientUIContext.ContextForCurrentThread.Invoke(new ThreadStart(helper.ShowCaptcha), null); if (helper.DialogResult == DialogResult.OK) { captchaValue = helper.Reply; continue; } else { throw new BlogClientOperationCancelledException(); } } if (showUi) { if (error == "NoLinkedYouTubeAccount") { if (DisplayMessage.Show(MessageId.YouTubeSignup, username) == DialogResult.Yes) { ShellHelper.LaunchUrl(GLink.Instance.YouTubeRegister); } return; } showUi = false; if (error == "BadAuthentication") { ShowError(MessageId.LoginFailed, ApplicationEnvironment.ProductNameQualified); } else { ShowError(MessageId.BloggerError, TranslateError(error)); } } throw new BlogClientAuthenticationException(error, TranslateError(error)); } else { if (showUi) { showUi = false; ShowError(MessageId.BloggerError, response.StatusCode + ": " + response.StatusDescription); } throw new BlogClientAuthenticationException(response.StatusCode + "", response.StatusDescription); } } } catch (BlogClientOperationCancelledException) { throw; } catch (Exception e) { Trace.WriteLine(e.ToString()); if (showUi) { ShowError(MessageId.UnexpectedErrorLogin, e.Message); } throw; } }
public void EnsureLoggedIn(string username, string password, string service, bool showUi, string uri) { try { if (IsValid(username, password, service)) { return; } string captchaToken = null; string captchaValue = null; string source = string.Format(CultureInfo.InvariantCulture, "{0}-{1}-{2}", ApplicationEnvironment.CompanyName, ApplicationEnvironment.ProductName, ApplicationEnvironment.ProductVersion); while (true) { GoogleLoginRequestFactory glrf = new GoogleLoginRequestFactory(username, password, service, source, captchaToken, captchaValue); if (captchaToken != null && captchaValue != null) { captchaToken = null; captchaValue = null; } HttpWebResponse response; try { response = RedirectHelper.GetResponse(uri, new RedirectHelper.RequestFactory(glrf.Create)); } catch (WebException we) { response = (HttpWebResponse)we.Response; if (response == null) { Trace.Fail(we.ToString()); if (showUi) { showUi = false; ShowError(MessageId.WeblogConnectionError, we.Message); } throw; } } if (response.StatusCode == HttpStatusCode.OK) { Hashtable ht = ParseAuthResponse(response.GetResponseStream()); if (ht.ContainsKey("Auth")) { _auths[new AuthKey(username, password, service)] = new AuthValue((string)ht["Auth"], ht["YouTubeUser"] as string); return; } else { if (showUi) { showUi = false; ShowError(MessageId.GoogleAuthTokenNotFound); } throw new BlogClientInvalidServerResponseException(uri, "No Auth token was present in the response.", string.Empty); } } else if (response.StatusCode == HttpStatusCode.Forbidden) { // login failed Hashtable ht = ParseAuthResponse(response.GetResponseStream()); string error = ht["Error"] as string; if (error != null && error == "CaptchaRequired") { captchaToken = (string)ht["CaptchaToken"]; string captchaUrl = (string)ht["CaptchaUrl"]; GDataCaptchaHelper helper = new GDataCaptchaHelper( new Win32WindowImpl(BlogClientUIContext.ContextForCurrentThread.Handle), captchaUrl); BlogClientUIContext.ContextForCurrentThread.Invoke(new ThreadStart(helper.ShowCaptcha), null); if (helper.DialogResult == DialogResult.OK) { captchaValue = helper.Reply; continue; } else { throw new BlogClientOperationCancelledException(); } } if (showUi) { if (error == "NoLinkedYouTubeAccount") { if (DisplayMessage.Show(MessageId.YouTubeSignup, username) == DialogResult.Yes) { ShellHelper.LaunchUrl(GLink.Instance.YouTubeRegister); } return; } showUi = false; if (error == "BadAuthentication") { ShowError(MessageId.LoginFailed, ApplicationEnvironment.ProductNameQualified); } else { ShowError(MessageId.BloggerError, TranslateError(error)); } } throw new BlogClientAuthenticationException(error, TranslateError(error)); } else { if (showUi) { showUi = false; ShowError(MessageId.BloggerError, response.StatusCode + ": " + response.StatusDescription); } throw new BlogClientAuthenticationException(response.StatusCode + "", response.StatusDescription); } } } catch (BlogClientOperationCancelledException) { throw; } catch (Exception e) { Trace.WriteLine(e.ToString()); if (showUi) { ShowError(MessageId.UnexpectedErrorLogin, e.Message); } throw; } }