internal static string GetAccessToken(GoogleTestUser user) { string access_token; string token_type; int expires_in; GetAccessToken( user, out access_token, out token_type, out expires_in); return access_token; }
internal static void GetAccessToken( GoogleTestUser user, out string access_token, out string token_type, out int expires_in) { access_token = null; token_type = null; expires_in = 0; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(TOKEN_REQUEST_URL); request.CookieContainer = new CookieContainer(); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; string encodedParameters = string.Format( "client_id={0}&client_secret={1}&refresh_token={2}&grant_type={3}", System.Web.HttpUtility.UrlEncode(user.ClientId), System.Web.HttpUtility.UrlEncode(user.ClientSecret), System.Web.HttpUtility.UrlEncode(user.RefreshToken), System.Web.HttpUtility.UrlEncode(GrantTypes.refresh_token.ToString()) ); byte[] requestData = Encoding.UTF8.GetBytes(encodedParameters); request.ContentLength = requestData.Length; if (requestData.Length > 0) using (Stream stream = request.GetRequestStream()) stream.Write(requestData, 0, requestData.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); string responseText = null; using (TextReader reader = new StreamReader(response.GetResponseStream(), Encoding.ASCII)) responseText = reader.ReadToEnd(); foreach (string sPair in responseText. Replace("{", ""). Replace("}", ""). Replace("\"", ""). Split(new string[] { ",\n" }, StringSplitOptions.None)) { string[] pair = sPair.Split(':'); string name = pair[0].Trim().ToLower(); string value = System.Web.HttpUtility.UrlDecode(pair[1].Trim()); switch (name) { case "access_token": access_token = value; break; case "token_type": token_type = value; break; case "expires_in": expires_in = Convert.ToInt32(value); break; } } Debug.WriteLine(""); Debug.WriteLine("---------------------------------------------------------"); Debug.WriteLine("-----------OAuth 2.0 authorization information-----------"); Debug.WriteLine("---------------------------------------------------------"); Debug.WriteLine(string.Format("Login: '******'", user.EMail)); Debug.WriteLine(string.Format("Access token: '{0}'", access_token)); Debug.WriteLine(string.Format("Token type: '{0}'", token_type)); Debug.WriteLine(string.Format("Expires in: '{0}'", expires_in)); Debug.WriteLine("---------------------------------------------------------"); Debug.WriteLine(""); }
internal static string GetAuthorizationCode( GoogleTestUser acc, string scope, string redirectUri, string responseType) { Debug.WriteLine(""); Debug.WriteLine("---------------------------------------------------------"); Debug.WriteLine("-----------OAuth 2.0 authorization information-----------"); Debug.WriteLine("---------------------------------------------------------"); Debug.WriteLine(string.Format("Login: '******'", acc.EMail)); string authorizationCode = null; string error = null; string approveUrl = string.Format( "https://accounts.google.com/o/oauth2/auth?redirect_uri={0}&response_type={1}&client_id={2}&scope={3}", redirectUri, responseType, acc.ClientId, scope); AutoResetEvent are0 = new AutoResetEvent(false); Thread t = new Thread(delegate() { bool doEvents = true; WebBrowser browser = new WebBrowser(); browser.AllowNavigation = true; browser.DocumentCompleted += delegate(object sender, WebBrowserDocumentCompletedEventArgs e) { doEvents = false; }; Form f = new Form(); f.FormBorderStyle = FormBorderStyle.FixedToolWindow; f.ShowInTaskbar = false; f.StartPosition = FormStartPosition.Manual; f.Location = new System.Drawing.Point(-2000, -2000); f.Size = new System.Drawing.Size(1, 1); f.Controls.Add(browser); f.Load += delegate(object sender, EventArgs e) { try { browser.Navigate("https://accounts.google.com/Logout"); doEvents = true; while (doEvents) Application.DoEvents(); browser.Navigate("https://accounts.google.com/ServiceLogin?sacu=1"); doEvents = true; while (doEvents) Application.DoEvents(); HtmlElement loginForm = browser.Document.Forms["gaia_loginform"]; if (loginForm != null) { HtmlElement userName = browser.Document.All["Email"]; HtmlElement passwd = browser.Document.All["Passwd"]; userName.SetAttribute("value", acc.EMail); passwd.SetAttribute("value", acc.Password); loginForm.InvokeMember("submit"); doEvents = true; while (doEvents) Application.DoEvents(); } else { error = "Login form is not found in \n" + browser.Document.Body.InnerHtml; return; } browser.Navigate(approveUrl); doEvents = true; while (doEvents) Application.DoEvents(); HtmlElement approveForm = browser.Document.Forms["connect-approve"]; if (approveForm != null) { //HtmlElement script = browser.Document.CreateElement("script"); //script.SetAttribute("text", @"function test_submit() { lso.approveButtonAction();document.forms['connect-approve'].submit(); }"); //HtmlElement head = browser.Document.GetElementsByTagName("head")[0]; //head.AppendChild(script); //browser.Document.InvokeScript("test_submit"); HtmlElement submitAccess = browser.Document.All["submit_access"]; submitAccess.SetAttribute("value", "true"); approveForm.InvokeMember("submit"); doEvents = true; while (doEvents) Application.DoEvents(); } else { error = "Approve form is not found in \n" + browser.Document.Body.InnerHtml; return; } HtmlElement code = browser.Document.All["code"]; if (code != null) authorizationCode = code.GetAttribute("value"); else error = "Authorization code is not found in \n" + browser.Document.Body.InnerHtml; } catch(Exception ex) { error = ex.Message; } finally { f.Close(); } }; Application.Run(f); are0.Set(); }); t.SetApartmentState(ApartmentState.STA); t.Start(); are0.WaitOne(); if (error != null) throw new Exception(error); return authorizationCode; }
internal static void GetAccessToken( GoogleTestUser user, out string access_token, out string refresh_token, out string token_type, out int expires_in) { string authorizationCode = GoogleOAuthHelper.GetAuthorizationCode( user, GoogleOAuthHelper.SCOPE, GoogleOAuthHelper.REDIRECT_URI, GoogleOAuthHelper.REDIRECT_TYPE); GoogleOAuthHelper.GetAccessToken( authorizationCode, user, out access_token, out token_type, out expires_in, out refresh_token); }
internal static void GetAccessToken( GoogleTestUser user, out string access_token, out string refresh_token) { string token_type; int expires_in; GoogleOAuthHelper.GetAccessToken( user, out access_token, out refresh_token, out token_type, out expires_in); }
protected void SaveButton_Click(object sender, EventArgs e) { GmailCredsErrorDiv.Visible = false; Aspose_GmailSync_ServerDetails serverDetails = new Aspose_GmailSync_ServerDetails(); serverDetails.Email = EmailAddressTextBox.Text.Trim(); if (serverDetails.Email.Contains("@")) { serverDetails.Username = serverDetails.Email.Split('@')[0]; } serverDetails.Password = PasswordTextBox.Text.Trim(); serverDetails.ClientID = ClientIDTextBox.Text.Trim(); serverDetails.ClientSecret = ClientSecretTextBox.Text.Trim(); serverDetails.DNNUserID = UserId; try { string refresh_token = string.Empty; //Code segment - START //This segment of code is used to get the refresh_token. In general, you do not have to refresh refresh_token every time, you need to do it once, and then use it to retrieve access-token. //Thus, use it once to retrieve the refresh_token and then use the refresh_token value each time. string access_token; string token_type; int expires_in; GoogleTestUser user = new GoogleTestUser(serverDetails.Username, serverDetails.Email, serverDetails.Password, serverDetails.ClientID, serverDetails.ClientSecret); GoogleOAuthHelper.GetAccessToken(user, out access_token, out refresh_token, out token_type, out expires_in); serverDetails.RefreshToken = refresh_token; //Code segment - END using (IGmailClient client = Aspose.Email.Google.GmailClient.GetInstance(serverDetails.ClientID, serverDetails.ClientSecret, serverDetails.RefreshToken)) { FeedEntryCollection groups = client.FetchAllGroups(); } } catch (Exception) { GmailCredsErrorDiv.Visible = true; return; } serverDetails.Password = Crypto.Encrypt(serverDetails.Password); serverDetails.ClientID = Crypto.Encrypt(serverDetails.ClientID); serverDetails.ClientSecret = Crypto.Encrypt(serverDetails.ClientSecret); serverDetails.RefreshToken = Crypto.Encrypt(serverDetails.RefreshToken); DatabaseHelper.AddUpdateServerDetails(serverDetails); ResetControls(); if (GmailToDnnClickedHiddenField.Value.Equals("true")) { GmailToDnnSync.Visible = true; GmailToDnnClickedHiddenField.Value = "false"; } else if (DnnToGmailClickedHiddenField.Value.Equals("true")) { DnnToGmailSync.Visible = true; DnnToGmailClickedHiddenField.Value = "false"; } }