protected void Page_Load(object sender, EventArgs e)
    {
        CurrentMaster.Title.TitleText  = ResHelper.GetString("socialnetworking.googleplus.accesstoken");
        CurrentMaster.Title.TitleImage = GetImageUrl("Others/GooglePlus/googleplus.png");

        string accessToken = null, refreshToken = null;
        Dictionary <string, string> tokens = null;
        string clientID       = Request.QueryString["token_client_id"];
        string clientSecret   = Request.QueryString["token_client_secret"];
        string txtToken       = null;
        string txtTokenSecret = null;
        string error          = Request.QueryString["error"];
        string state          = Request.QueryString["state"];

        // Check Social networking DLL and settings
        if (!SiteManagerFunctions.CheckSocialNetworkingDLL())
        {
            lblStatus.Text = ResHelper.GetString("socialnetworking.renameddll");
        }
        else if (String.IsNullOrEmpty(state) && (String.IsNullOrEmpty(clientID) || String.IsNullOrEmpty(clientSecret)))
        {
            lblStatus.Text = ResHelper.GetString("socialnetworking.googleplus.apisettingsmissing");
        }
        else
        {
            // If access denied
            if (error.EqualsCSafe("access_denied"))
            {
                // Close the window
                StringBuilder script = new StringBuilder("if(wopener.setAccessTokenToTextBox){CloseDialog();}");

                ScriptHelper.RegisterStartupScript(Page, typeof(string), "TokenScript", ScriptHelper.GetScript(script.ToString()));
            }
            else
            {
                // If this is OAuth callback -> get clientID and clientSecret from state
                if (state != null)
                {
                    foreach (string s in state.Split(new string[1] {
                        "&"
                    }, StringSplitOptions.None))
                    {
                        if (s.StartsWithCSafe("token_client_id="))
                        {
                            clientID = s.Substring(16);
                        }

                        if (s.StartsWithCSafe("token_client_secret="))
                        {
                            clientSecret = s.Substring(20);
                        }
                    }
                }

                // Authenticate and retrieve tokens
                tokens = GooglePlusProvider.Authorize(clientID, clientSecret);
                if (tokens.Count > 0)
                {
                    accessToken  = tokens["AccessToken"];
                    refreshToken = tokens["RefreshToken"];

                    if (!String.IsNullOrEmpty(accessToken))
                    {
                        // Extract txtToken values from state
                        txtToken       = null;
                        txtTokenSecret = null;
                        string[] stateParams = state.Split(new string[1] {
                            "&"
                        }, StringSplitOptions.None);
                        foreach (string s in stateParams)
                        {
                            if (s.StartsWithCSafe("txtToken="))
                            {
                                txtToken = s.Substring(9);
                            }

                            if (s.StartsWithCSafe("txtTokenSecret="))
                            {
                                txtTokenSecret = s.Substring(15);
                            }
                        }

                        // Return access token values and close the window
                        StringBuilder script = new StringBuilder("if(wopener.setAccessTokenToTextBox){wopener.setAccessTokenToTextBox('");
                        script.Append(txtToken);
                        script.Append("', '");
                        script.Append(accessToken);
                        script.Append("', '");
                        script.Append(txtTokenSecret);
                        script.Append("', '");
                        script.Append(refreshToken);
                        script.Append("');");
                        script.Append("CloseDialog();}");
                        ScriptHelper.RegisterStartupScript(Page, typeof(string), "TokenScript", ScriptHelper.GetScript(script.ToString()));
                    }
                }
                else
                {
                    // There was an error somewhere
                    lblStatus.Text = ResHelper.GetString("socialnetworking.authorizationerror");
                }
            }
        }
    }
    /// <summary>
    /// Initializes the control properties
    /// </summary>
    protected override void SetupControl()
    {
        if (this.StopProcessing)
        {
            // Do not process
        }
        else
        {
            string apiKey      = SettingsKeyInfoProvider.GetStringValue(SiteContext.CurrentSiteName + ".CMSGooglePlusClientID");
            string apiSecret   = SettingsKeyInfoProvider.GetStringValue(SiteContext.CurrentSiteName + ".CMSGooglePlusClientSecret");
            string accessToken = SettingsKeyInfoProvider.GetStringValue(SiteContext.CurrentSiteName + ".CMSGooglePlusAccessToken");

            // Check Social networking DLL and settings
            if (!SystemContext.IsFullTrustLevel)
            {
                // Error label is displayed in Design mode when Dll is renamed
                ShowDesignErrorOrHide(GetString("socialnetworking.fulltrustrequired"));
            }
            else if (String.IsNullOrEmpty(apiKey) || String.IsNullOrEmpty(apiSecret) || String.IsNullOrEmpty(accessToken))
            {
                // Error label is displayed in Design mode when missing settings
                string pathToSettings = SocialMediaHelper.GetPathToGooglePlusSettings();
                ShowDesignErrorOrHide(String.Format(GetString("socialnetworking.googleplus.allsettingsmissing"), pathToSettings));
            }
            else
            {
                // Process ID - it can be URL
                string showID = ExtractUserID(FeedID);

                GooglePlusPerson profile = null;

                // Fetch data from Google+
                try
                {
                    // Try to get person directly
                    profile = GooglePlusProvider.GetProfileInfo(showID);
                }
                catch
                {
                    try
                    {
                        // Try alternative approach (search for person)
                        profile = GooglePlusProvider.FindPerson(showID);
                    }
                    catch
                    {
                        ShowDesignErrorOrHide(String.Format(GetString("sm.googleplus.nopeoplefound"), showID));
                    }
                }


                if (profile != null)
                {
                    showID = profile.UserID;
                    List <GooglePlusActivity> activities = GooglePlusProvider.GetActivities(showID, NumberOfActivities);
                    // Build code for plugin
                    StringBuilder sb = new StringBuilder();
                    sb.Append("<div class=\"gpaf-plugin\"><div class=\"gpaf-doc\" style=\"width: ");
                    sb.Append(Width);
                    sb.Append("px; height: ");
                    sb.Append(Height);
                    sb.Append("px; border: 1px solid ");
                    sb.Append(BorderColor);
                    sb.Append("; position: relative; background-color: ");
                    sb.Append(ShellBackgroundColor);
                    sb.Append("\"><div style=\"margin: 15px;\">");

                    // Build plugin header
                    sb.Append("<div class=\"gpaf-header\">");

                    sb.Append("<table><tr><td style=\"vertical-align: center;\">");
                    sb.Append("<a href=\"");
                    sb.Append(profile.URL);
                    sb.Append("\">");
                    sb.Append("<img src=\"");
                    string imageURL = profile.ImageURL.Remove(profile.ImageURL.Length - 2) + "40";
                    sb.Append(imageURL);
                    sb.Append("\" alt=\"");
                    sb.Append(profile.DisplayName);
                    sb.Append("\" style=\"float: left; border: none;\" />");
                    sb.Append("</a>");
                    sb.Append("</td>");

                    sb.Append("<td style=\"vertical-align: center; padding-left: 10px;\">");
                    sb.Append("<a href=\"");
                    sb.Append(profile.URL);
                    sb.Append("\" style=\"text-decoration: none; font-size: 25px; color: ");
                    sb.Append(ShellTextColor);
                    sb.Append(";\">");
                    sb.Append(profile.DisplayName);
                    sb.Append("</a>");
                    sb.Append("</td></tr></table>");

                    sb.Append("</div>");

                    // Insert section separator
                    sb.Append("<div class=\"gpaf-doc-separator\" style=\"height: 15px; margin-top: 15px; width: 100%; border-top: 1px solid ");
                    sb.Append(BorderColor);
                    sb.Append(";\"></div>");

                    // Build plugin body
                    sb.Append("<div class=\"gpaf-body\" style=\"height: ");
                    sb.Append(Height - 164);
                    sb.Append("px; overflow: ");
                    sb.Append((Scrollbar) ? "auto" : "hidden");
                    sb.Append(";\">");

                    int counting = 1;
                    foreach (GooglePlusActivity s in activities)
                    {
                        sb.Append("<div class=\"gpaf-activity\" style=\"color: ");
                        sb.Append(ActivityTextColor);
                        sb.Append("\">");
                        sb.Append("<div class=\"gpaf-activity-text\">");
                        sb.Append(s.Content);
                        sb.Append("</div>");
                        sb.Append("<div class=\"gpaf-activity-footer\" style=\"color: ");
                        sb.Append(ActivityFooterTextColor);
                        sb.Append("; font-size: 13px; margin-top: 3px;\">");
                        sb.Append(s.Published);
                        sb.Append("</div>");
                        sb.Append("</div>");

                        // Insert activity separator
                        if (counting < activities.Count)
                        {
                            sb.Append("<div class=\"gpaf-body-separator\" style=\"height: 10px; margin-top: 5px; width: 100%; border-top: 1px dashed ");
                            sb.Append(BorderColor);
                            sb.Append(";\"></div>");
                            counting++;
                        }
                    }
                    sb.Append("</div></div>");

                    // Insert section separator
                    sb.Append("<div style=\"margin: 15px; position: absolute; bottom: 0px; left: 0px; width: ");
                    sb.Append(Width - 30);
                    sb.Append("px;\">");
                    sb.Append("<div class=\"gpaf-doc-separator\" style=\"height: 15px; margin-top: 15px; width: 100%; border-top: 1px solid ");
                    sb.Append(BorderColor);
                    sb.Append(";\"></div>");

                    // Build plugin footer
                    sb.Append("<div class=\"gpaf-footer\">");
                    sb.Append("<a href=\"https://plus.google.com\">");
                    sb.Append("<img src=\"https://ssl.gstatic.com/images/icons/gplus-32.png\" alt=\"\" style=\"float: left; border: none;\" />");
                    sb.Append("</a>");

                    sb.Append("<div class=\"gpaf-footer-text\" style=\"text-align: left; margin-left: 50px;\">");
                    sb.Append("<table style=\"height: 32px;\"><tr><td style=\"vertical-align: center;\">");
                    sb.Append("<a href=\"");
                    sb.Append(profile.URL);
                    sb.Append("\" style=\"text-decoration: none; font-size: 12px; color: ");
                    sb.Append(ShellTextColor);
                    sb.Append(";\">");
                    sb.Append(ResHelper.GetString("socialnetworking.viewfullprofile"));
                    sb.Append("</a>");
                    sb.Append("</td></tr></table>");
                    sb.Append("</div>");

                    sb.Append("<div style=\"clear: both;\"></div>");
                    sb.Append("</div>");

                    // Close open divs and finish plugin
                    sb.Append("</div></div></div>");
                    ltlPluginCode.Text = sb.ToString();
                }
                else
                {
                    ShowDesignErrorOrHide(String.Format(GetString("sm.googleplus.nopeoplefound"), showID));
                }
            }
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        PageTitle.TitleText            = ResHelper.GetString("socialnetworking.googleplus.accesstoken");
        PageTitle.ShowFullScreenButton = false;
        PageTitle.ShowCloseButton      = false;

        string clientID     = Request.QueryString["token_client_id"];
        string clientSecret = Request.QueryString["token_client_secret"];
        string error        = Request.QueryString["error"];
        string state        = Request.QueryString["state"];

        // Check Social networking DLL and settings
        if (!SystemContext.IsFullTrustLevel)
        {
            lblStatus.Text = ResHelper.GetString("socialnetworking.fulltrustrequired");
        }
        else if (String.IsNullOrEmpty(state) && (String.IsNullOrEmpty(clientID) || String.IsNullOrEmpty(clientSecret)))
        {
            lblStatus.Text = ResHelper.GetString("socialnetworking.googleplus.apisettingsmissing");
        }
        else
        {
            // If access denied
            if (error.EqualsCSafe("access_denied"))
            {
                // Close the window
                StringBuilder script = new StringBuilder("if(wopener.setAccessTokenToTextBox){CloseDialog();}");

                ScriptHelper.RegisterStartupScript(Page, typeof(string), "TokenScript", ScriptHelper.GetScript(script.ToString()));
            }
            else
            {
                // If this is OAuth callback -> get clientID and clientSecret from state
                if (state != null)
                {
                    foreach (string s in state.Split(new string[1] {
                        "&"
                    }, StringSplitOptions.None))
                    {
                        if (s.StartsWithCSafe("token_client_id="))
                        {
                            clientID = s.Substring(16);
                        }

                        if (s.StartsWithCSafe("token_client_secret="))
                        {
                            clientSecret = s.Substring(20);
                        }
                    }
                }

                try
                {
                    // Authenticate and retrieve tokens
                    Dictionary <string, string> tokens = GooglePlusProvider.Authorize(clientID, clientSecret);
                    if (tokens.Count > 0)
                    {
                        string accessToken  = tokens["AccessToken"];
                        string refreshToken = tokens["RefreshToken"];

                        if (!String.IsNullOrEmpty(accessToken))
                        {
                            // Extract txtToken values from state
                            string   txtToken       = null;
                            string   txtTokenSecret = null;
                            string[] stateParams    = state.Split(new string[1]
                            {
                                "&"
                            }, StringSplitOptions.None);
                            foreach (string s in stateParams)
                            {
                                if (s.StartsWithCSafe("txtToken="))
                                {
                                    txtToken = s.Substring(9);
                                }

                                if (s.StartsWithCSafe("txtTokenSecret="))
                                {
                                    txtTokenSecret = s.Substring(15);
                                }
                            }

                            // Return access token values and close the window
                            StringBuilder script = new StringBuilder("if(wopener.setAccessTokenToTextBox){wopener.setAccessTokenToTextBox('");
                            script.Append(txtToken);
                            script.Append("', '");
                            script.Append(accessToken);
                            script.Append("', '");
                            script.Append(txtTokenSecret);
                            script.Append("', '");
                            script.Append(refreshToken);
                            script.Append("');");
                            script.Append("CloseDialog();}");
                            ScriptHelper.RegisterStartupScript(Page, typeof(string), "TokenScript", ScriptHelper.GetScript(script.ToString()));
                        }
                    }
                    else
                    {
                        // There was an error somewhere
                        lblStatus.Text = ResHelper.GetString("socialnetworking.authorizationerror");
                    }
                }
                catch (Exception ex)
                {
                    LogAndShowError("SocialMedia", "GooglePlusProvider", ex);
                }
            }
        }
    }