/// <summary> /// Creates DNTCaptcha /// </summary> /// <param name="captchaAttributes">captcha attributes</param> public DNTCaptchaApiResponse CreateDNTCaptcha(DNTCaptchaTagHelperHtmlAttributes captchaAttributes) { if (captchaAttributes == null) { throw new ArgumentNullException(nameof(captchaAttributes)); } if (_httpContextAccessor.HttpContext == null) { throw new InvalidOperationException("`_httpContextAccessor.HttpContext` is null."); } var number = _randomNumberProvider.NextNumber(captchaAttributes.Min, captchaAttributes.Max); var randomText = _captchaTextProvider(captchaAttributes.DisplayMode).GetText(number, captchaAttributes.Language); var encryptedText = _captchaProtectionProvider.Encrypt(randomText); var captchaImageUrl = getCaptchaImageUrl(captchaAttributes, encryptedText); var captchaDivId = Invariant($"{_captchaOptions.CaptchaClass}{Guid.NewGuid():N}{_randomNumberProvider.NextNumber(captchaAttributes.Min, captchaAttributes.Max)}"); var cookieToken = $".{captchaDivId}"; var hiddenInputToken = _captchaProtectionProvider.Encrypt(cookieToken); _captchaStorageProvider.Add(_httpContextAccessor.HttpContext, cookieToken, randomText); return(new DNTCaptchaApiResponse { DntCaptchaImgUrl = captchaImageUrl, DntCaptchaId = captchaDivId, DntCaptchaTextValue = encryptedText, DntCaptchaTokenValue = hiddenInputToken }); }
/// <summary> /// Process the taghelper and generate the output. /// </summary> public void Process(TagHelperContext context, TagHelperOutput output) { context.CheckArgumentNull(nameof(context)); output.CheckArgumentNull(nameof(output)); setUrlHelper(); output.TagName = "div"; output.Attributes.Add("class", "dntCaptcha"); var captchaDivId = $"dntCaptcha{context.UniqueId}{_randomNumberProvider.Next(Min, Max)}"; output.Attributes.Add("id", captchaDivId); output.TagMode = TagMode.StartTagAndEndTag; var number = _randomNumberProvider.Next(Min, Max); var randomText = _captchaTextProvider(DisplayMode).GetText(number, Language); var encryptedText = _captchaProtectionProvider.Encrypt(randomText); var captchaImage = getCaptchaImageTagBuilder(encryptedText); output.Content.AppendHtml(captchaImage); var cookieToken = $".{captchaDivId}"; var refreshButton = getRefreshButtonTagBuilder(captchaDivId, cookieToken); output.Content.AppendHtml(refreshButton); var hiddenInput = getHiddenInputTagBuilder(encryptedText); output.Content.AppendHtml(hiddenInput); var textInput = getTextInputTagBuilder(); output.Content.AppendHtml($"{string.Format(TextBoxTemplate, textInput.GetString())}"); var validationMessage = getValidationMessageTagBuilder(); output.Content.AppendHtml(validationMessage); var hiddenInputToken = getHiddenInputTokenTagBuilder(_captchaProtectionProvider.Encrypt(cookieToken)); output.Content.AppendHtml(hiddenInputToken); var dataAjaxBeginScript = getOnRefreshButtonDataAjaxBegin(); output.Content.AppendHtml(dataAjaxBeginScript); _captchaStorageProvider.Add(ViewContext.HttpContext, cookieToken, randomText); }
/// <summary> /// Adds the specified token and its value to the storage. /// </summary> public void Add(HttpContext context, string token, string value) { value = _captchaProtectionProvider.Encrypt($"{value}{context.GetSalt(_captchaProtectionProvider)}"); _distributedCache.Set(token, Encoding.UTF8.GetBytes(value), new DistributedCacheEntryOptions { AbsoluteExpiration = DateTimeOffset.UtcNow.AddMinutes(_options.AbsoluteExpirationMinutes) }); }
/// <summary> /// Adds the specified token and its value to the storage. /// </summary> public void Add(HttpContext context, string token, string value) { value = _captchaProtectionProvider.Encrypt($"{value}{context.GetSalt(_captchaProtectionProvider)}"); _memoryCache.Set(token, value, new MemoryCacheEntryOptions { AbsoluteExpiration = DateTimeOffset.UtcNow.AddMinutes(_options.AbsoluteExpirationMinutes), Size = 1 // the size limit is the count of entries }); }
/// <summary> /// Creates DNTCaptcha /// </summary> /// <param name="captchaAttributes">captcha attributes</param> public DNTCaptchaApiResponse CreateDNTCaptcha(DNTCaptchaTagHelperHtmlAttributes captchaAttributes) { var number = _randomNumberProvider.Next(captchaAttributes.Min, captchaAttributes.Max); var randomText = _captchaTextProvider(captchaAttributes.DisplayMode).GetText(number, captchaAttributes.Language); var encryptedText = _captchaProtectionProvider.Encrypt(randomText); var captchaImageUrl = getCaptchaImageUrl(captchaAttributes, encryptedText); var captchaDivId = $"dntCaptcha{Guid.NewGuid():N}{_randomNumberProvider.Next(captchaAttributes.Min, captchaAttributes.Max)}"; var cookieToken = $".{captchaDivId}"; var hiddenInputToken = _captchaProtectionProvider.Encrypt(cookieToken); _captchaStorageProvider.Add(_httpContextAccessor.HttpContext, cookieToken, randomText); return(new DNTCaptchaApiResponse { DntCaptchaImgUrl = captchaImageUrl, DntCaptchaId = captchaDivId, DntCaptchaTextValue = encryptedText, DntCaptchaTokenValue = hiddenInputToken }); }
/// <summary> /// Adds the specified token and its value to the storage. /// </summary> public void Add(HttpContext context, string token, string value) { value = _captchaProtectionProvider.Encrypt($"{value}{context.GetSalt(_captchaProtectionProvider)}"); context.Response.Cookies.Append(token, value, getCookieOptions(context)); }
/// <summary> /// Process the taghelper and generate the output. /// </summary> public void Process(TagHelperContext context, TagHelperOutput output) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (output == null) { throw new ArgumentNullException(nameof(output)); } if (ViewContext == null) { throw new InvalidOperationException("`ViewContext` is null."); } setUrlHelper(ViewContext); output.TagName = "div"; output.Attributes.Add("class", _captchaOptions.CaptchaClass); var captchaDivId = Invariant($"{_captchaOptions.CaptchaClass}{context.UniqueId}{_randomNumberProvider.NextNumber(Min, Max)}"); output.Attributes.Add("id", captchaDivId); output.TagMode = TagMode.StartTagAndEndTag; var number = _randomNumberProvider.NextNumber(Min, Max); var randomText = _captchaTextProvider(DisplayMode).GetText(number, Language); var encryptedText = _captchaProtectionProvider.Encrypt(randomText); var captchaImage = getCaptchaImageTagBuilder(ViewContext, encryptedText); output.Content.AppendHtml(captchaImage); var cookieToken = $".{captchaDivId}"; var refreshButton = getRefreshButtonTagBuilder(ViewContext, captchaDivId, cookieToken); output.Content.AppendHtml(refreshButton); var hiddenInput = getHiddenInputTagBuilder(encryptedText); output.Content.AppendHtml(hiddenInput); var textInput = getTextInputTagBuilder(); output.Content.AppendHtml($"{string.Format(CultureInfo.InvariantCulture, TextBoxTemplate, textInput.GetString())}"); var validationMessage = getValidationMessageTagBuilder(ViewContext); output.Content.AppendHtml(validationMessage); var hiddenInputToken = getHiddenInputTokenTagBuilder(_captchaProtectionProvider.Encrypt(cookieToken)); output.Content.AppendHtml(hiddenInputToken); var dataAjaxBeginScript = getOnRefreshButtonDataAjaxBegin(ViewContext); output.Content.AppendHtml(dataAjaxBeginScript); _captchaStorageProvider.Add(ViewContext.HttpContext, cookieToken, randomText); }
/// <summary> /// Adds the specified token and its value to the storage. /// </summary> public void Add(HttpContext context, string token, string value) { value = _captchaProtectionProvider.Encrypt($"{value}{context.GetSalt(_captchaProtectionProvider)}"); context.Session.SetString(token, value); }