/// <summary> /// Creates an instance of the <see cref="RecaptchaConfiguration"/> class. /// </summary> /// <param name="siteKey">The site key.</param> /// <param name="secretKey">The secret key.</param> /// <param name="apiVersion">The API version of reCAPTCHA to be used.</param> /// <param name="theme">The color theme of the widget.</param> /// <param name="language">Forces the reCAPTCHA widget to render in a specific language. By default, the user's language is used.</param> /// <param name="size">The size of the reCAPTCHA widget.</param> /// <param name="useSsl">Determines if SSL is to be used in Google reCAPTCHA API calls.</param> /// public RecaptchaConfiguration(string siteKey, string secretKey, string apiVersion, string language = null, RecaptchaTheme theme = RecaptchaTheme.Default, RecaptchaSize size = RecaptchaSize.Default, RecaptchaSslBehavior useSsl = RecaptchaSslBehavior.AlwaysUseSsl) { SiteKey = siteKey; SecretKey = secretKey; ApiVersion = apiVersion; Language = language; Theme = theme; Size = size; UseSsl = useSsl; }
/// <summary> /// Gets the configuration from the default source. /// </summary> /// <returns>Returns configuration as an instance of the <see cref="RecaptchaConfiguration"/> class.</returns> public static RecaptchaConfiguration GetConfiguration() { string siteKey = _configuration["RecaptchaSiteKey"]; string secretKey = _configuration["RecaptchaSecretKey"]; string language = _configuration["RecaptchaLanguage"]; string apiVersion = _configuration["RecaptchaApiVersion"] ?? "2"; RecaptchaSize size = _configuration["RecaptchaSize"] == null ? RecaptchaSize.Default : Enum.Parse <RecaptchaSize>(_configuration["RecaptchaSize"]); RecaptchaTheme theme = _configuration["RecaptchaTheme"] == null ? RecaptchaTheme.Default : Enum.Parse <RecaptchaTheme>(_configuration["RecaptchaTheme"]); RecaptchaSslBehavior useSsl = _configuration["RecaptchaUseSsl"] == null ? RecaptchaSslBehavior.AlwaysUseSsl : Enum.Parse <RecaptchaSslBehavior>(_configuration["RecaptchaUseSsl"]); return(new RecaptchaConfiguration(siteKey, secretKey, apiVersion, language, theme, size, useSsl)); }
/// <summary> /// Creates the HTML that can be used to render reCAPTCHA API script.. /// </summary> /// <param name="language">Forces the reCAPTCHA widget to render in a specific language. By default, the user's language is used.</param> /// <param name="useSsl">Determines if SSL is to be used in Google reCAPTCHA API calls.</param> /// <returns>Returns the HTML as an instance of the <see cref="string"/> type.</returns> public string CreateApiScripttHtml(string language, RecaptchaSslBehavior useSsl) { bool doUseSsl = true; if (useSsl == RecaptchaSslBehavior.DoNotUseSsl) { doUseSsl = false; } else if (useSsl == RecaptchaSslBehavior.AlwaysUseSsl) { doUseSsl = true; } else if (useSsl == RecaptchaSslBehavior.SameAsRequestUrl) { doUseSsl = _httpContext.Request.IsHttps; } var protocol = "https://"; if (!doUseSsl) { protocol = "http://"; } var dictQS = new Dictionary <string, string>(); var url = $"{protocol}www.google.com/recaptcha/api.js"; if (!string.IsNullOrEmpty(language)) { dictQS.Add(PARAM_HL, language); } var qs = new StringBuilder(); foreach (var key in dictQS.Keys) { if (qs.Length <= 0) { qs.Append($"?{key}={dictQS[key]}"); } else { qs.Append($"&{key}={dictQS[key]}"); } } return($"<script src=\"{url}{qs.ToString()}\" async defer></script>"); }
/// <summary> /// Gets the configuration from the default source. /// </summary> /// <returns>Returns configuration as an instance of the <see cref="RecaptchaConfiguration"/> class.</returns> public static RecaptchaConfiguration GetConfiguration() { string siteKey = null, secretKey = null, language = null, apiVersion = "2"; RecaptchaSize size = RecaptchaSize.Default; RecaptchaTheme theme = RecaptchaTheme.Default; RecaptchaSslBehavior useSsl = RecaptchaSslBehavior.AlwaysUseSsl; if (ConfigurationManager.AppSettings.AllKeys.Contains("RecaptchaSiteKey")) { siteKey = ConfigurationManager.AppSettings["RecaptchaSiteKey"]; } if (ConfigurationManager.AppSettings.AllKeys.Contains("RecaptchaSecretKey")) { secretKey = ConfigurationManager.AppSettings["RecaptchaSecretKey"]; } if (ConfigurationManager.AppSettings.AllKeys.Contains("RecaptchaApiVersion")) { apiVersion = ConfigurationManager.AppSettings["RecaptchaApiVersion"]; } if (ConfigurationManager.AppSettings.AllKeys.Contains("RecaptchaLanguage")) { language = ConfigurationManager.AppSettings["RecaptchaLanguage"]; } if (ConfigurationManager.AppSettings.AllKeys.Contains("RecaptchaTheme")) { Enum.TryParse <RecaptchaTheme>(ConfigurationManager.AppSettings["RecaptchaTheme"], out theme); } if (ConfigurationManager.AppSettings.AllKeys.Contains("RecaptchaSize")) { Enum.TryParse <RecaptchaSize>(ConfigurationManager.AppSettings["RecaptchaSize"], out size); } if (ConfigurationManager.AppSettings.AllKeys.Contains("RecaptchaUseSsl")) { Enum.TryParse <RecaptchaSslBehavior>(ConfigurationManager.AppSettings["RecaptchaUseSsl"], out useSsl); } return(new RecaptchaConfiguration(siteKey, secretKey, apiVersion, language, theme, size, useSsl)); }
/// <summary> /// Creates the reCAPTCHA HTML that needs to be rendered. /// </summary> /// <param name="renderApiScript">Determines if the API script is to be rendered.</param> /// <param name="theme">The color theme of the widget.</param> /// <param name="language">Forces the reCAPTCHA widget to render in a specific language. By default, the user's language is used.</param> /// <param name="tabIndex">The tabindex of the reCAPTCHA widget.</param> /// <param name="size">The size of the reCAPTCHA widget.</param> /// <param name="useSsl">Determines if SSL is to be used in Google reCAPTCHA API calls.</param> /// <returns>Returns the reCAPTCHA HTML as an instance of the <see cref="string"/> type.</returns> public string CreateWidgetHtml(bool renderApiScript, RecaptchaTheme theme, string language, int tabIndex, RecaptchaSize size, RecaptchaSslBehavior useSsl) { var dictAttributes = new Dictionary <string, string> { { "data-" + PARAM_SITEKEY, SiteKey } }; if (theme != RecaptchaTheme.Default) { dictAttributes.Add("data-" + PARAM_THEME, theme.ToString().ToLower()); } if (tabIndex != 0) { dictAttributes.Add("data-" + PARAM_TABINDEX, tabIndex.ToString()); } if (size != RecaptchaSize.Default) { dictAttributes.Add("data-" + PARAM_SIZE, size.ToString().ToLower()); } var sbAttributes = new StringBuilder(); foreach (var key in dictAttributes.Keys) { sbAttributes.Append($"{key}=\"{dictAttributes[key]}\" "); } StringBuilder sbHtml = new StringBuilder(); if (renderApiScript) { sbHtml.Append(CreateApiScripttHtml(language, useSsl)); } sbHtml.Append($"<div class=\"g-recaptcha\" {sbAttributes.ToString()}></div>"); return(sbHtml.ToString()); }