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);
 }
Пример #6
0
        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";
            }
        }