Esempio n. 1
0
        private string getCaptchaImageUrl(DNTCaptchaTagHelperHtmlAttributes captchaAttributes, string encryptedText)
        {
            var values = new CaptchaImageParams
            {
                Text      = encryptedText,
                RndDate   = DateTime.Now.Ticks.ToString(),
                ForeColor = captchaAttributes.ForeColor,
                BackColor = captchaAttributes.BackColor,
                FontSize  = captchaAttributes.FontSize,
                FontName  = captchaAttributes.FontName
            };
            var encryptSerializedValues = _captchaProtectionProvider.Encrypt(_serializationProvider.Serialize(values));
            var actionUrl = captchaAttributes.UseRelativeUrls ?
                            _urlHelper.Action(action: nameof(DNTCaptchaImageController.Show),
                                              controller: nameof(DNTCaptchaImageController).Replace("Controller", string.Empty),
                                              values: new { data = encryptSerializedValues, area = "" }) :
                            _urlHelper.Action(action: nameof(DNTCaptchaImageController.Show),
                                              controller: nameof(DNTCaptchaImageController).Replace("Controller", string.Empty),
                                              values: new { data = encryptSerializedValues, area = "" },
                                              protocol: _httpContextAccessor.HttpContext.Request.Scheme);

            if (string.IsNullOrWhiteSpace(actionUrl))
            {
                throw new NullReferenceException("It's not possible to determine the URL of the `DNTCaptchaImageController.Show` method. Please register the `services.AddControllers()` and `endpoints.MapControllerRoute(...)`.");
            }

            return(actionUrl);
        }
        /// <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
            });
        }
Esempio n. 3
0
        public IActionResult Refresh(string rndDate, DNTCaptchaTagHelperHtmlAttributes model)
        {
            _captchaStorageProvider.Remove(HttpContext, model.CaptchaToken);

            var tagHelper = HttpContext.RequestServices.GetRequiredService <DNTCaptchaTagHelper>();

            tagHelper.BackColor              = model.BackColor;
            tagHelper.FontName               = model.FontName;
            tagHelper.FontSize               = model.FontSize;
            tagHelper.ForeColor              = model.ForeColor;
            tagHelper.Language               = model.Language;
            tagHelper.Max                    = model.Max;
            tagHelper.Min                    = model.Min;
            tagHelper.Placeholder            = model.Placeholder;
            tagHelper.TextBoxClass           = model.TextBoxClass;
            tagHelper.TextBoxTemplate        = model.TextBoxTemplate;
            tagHelper.ValidationErrorMessage = model.ValidationErrorMessage;
            tagHelper.ValidationMessageClass = model.ValidationMessageClass;
            tagHelper.RefreshButtonClass     = model.RefreshButtonClass;

            var tagHelperContext = new TagHelperContext(
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>(),
                uniqueId: Guid.NewGuid().ToString("N"));

            var tagHelperOutput = new TagHelperOutput(
                tagName: "div",
                attributes: new TagHelperAttributeList(),
                getChildContentAsync: (useCachedResult, encoder) =>
            {
                var tagHelperContent = new DefaultTagHelperContent();
                tagHelperContent.SetContent(string.Empty);
                return(Task.FromResult <TagHelperContent>(tagHelperContent));
            });

            tagHelper.ViewContext = ViewContext ?? new ViewContext(
                new ActionContext(this.HttpContext, HttpContext.GetRouteData(), ControllerContext.ActionDescriptor),
                new FakeView(),
                new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary())
            {
                Model = null
            },
                new TempDataDictionary(this.HttpContext, _tempDataProvider),
                TextWriter.Null,
                new HtmlHelperOptions());

            tagHelper.Process(tagHelperContext, tagHelperOutput);

            var attrs = new StringBuilder();

            foreach (var attr in tagHelperOutput.Attributes)
            {
                attrs.Append($" {attr.Name}='{attr.Value}'");
            }

            var content = $"<div {attrs}>{tagHelperOutput.Content.GetContent()}</div>";

            return(Content(content));
        }
        private string getCaptchaImageUrl(DNTCaptchaTagHelperHtmlAttributes captchaAttributes, string encryptedText)
        {
            var actionUrl = Url.Action(action: nameof(DNTCaptchaImageController.Show),
                                       controller: nameof(DNTCaptchaImageController).Replace("Controller", string.Empty),
                                       values:
                                       new
            {
                text      = encryptedText,
                rndDate   = DateTime.Now.Ticks,
                foreColor = captchaAttributes.ForeColor,
                backColor = captchaAttributes.BackColor,
                fontSize  = captchaAttributes.FontSize,
                fontName  = captchaAttributes.FontName,
                area      = ""
            },
                                       protocol: HttpContext.Request.Scheme);

            return(actionUrl);
        }
Esempio n. 5
0
 private string getCaptchaImageUrl(DNTCaptchaTagHelperHtmlAttributes captchaAttributes, string encryptedText)
 {
     return("");
     //var actionUrl = Url.Action(action: nameof(DNTCaptchaImageController.Show),
     //   controller: nameof(DNTCaptchaImageController).Replace("Controller", string.Empty),
     //   values:
     //   new
     //   {
     //       text = encryptedText,
     //       rndDate = DateTime.Now.Ticks,
     //       foreColor = captchaAttributes.ForeColor,
     //       backColor = captchaAttributes.BackColor,
     //       fontSize = captchaAttributes.FontSize,
     //       fontName = captchaAttributes.FontName,
     //       area = ""
     //   },
     //   protocol: HttpContext.Request.Scheme);
     //return actionUrl;
 }
        private string getCaptchaImageUrl(DNTCaptchaTagHelperHtmlAttributes captchaAttributes, string encryptedText)
        {
            var values = new CaptchaImageParams
            {
                Text      = encryptedText,
                RndDate   = DateTime.Now.Ticks.ToString(),
                ForeColor = captchaAttributes.ForeColor,
                BackColor = captchaAttributes.BackColor,
                FontSize  = captchaAttributes.FontSize,
                FontName  = captchaAttributes.FontName
            };
            var encryptSerializedValues = _captchaProtectionProvider.Encrypt(_serializationProvider.Serialize(values));
            var actionUrl = Url.Action(action: nameof(DNTCaptchaImageController.Show),
                                       controller: nameof(DNTCaptchaImageController).Replace("Controller", string.Empty),
                                       values: new { data = encryptSerializedValues, area = "" },
                                       protocol: HttpContext.Request.Scheme);

            return(actionUrl);
        }
Esempio n. 7
0
        /// <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
            });
        }
        public IActionResult CreateDNTCaptcha([FromBody] DNTCaptchaTagHelperHtmlAttributes captchaAttributes)
        {
            var number           = _randomNumberProvider.Next(captchaAttributes.Min, captchaAttributes.Max);
            var randomText       = _humanReadableIntegerProvider.NumberToText(number, captchaAttributes.Language);
            var encryptedText    = _captchaProtectionProvider.Encrypt(randomText);
            var captchaImageUrl  = getCaptchaImageUrl(captchaAttributes, encryptedText);
            var captchaDivId     = $"dntCaptcha{Guid.NewGuid().ToString("N")}{_randomNumberProvider.Next(captchaAttributes.Min, captchaAttributes.Max)}";
            var cookieToken      = $".{captchaDivId}";
            var hiddenInputToken = _captchaProtectionProvider.Encrypt(cookieToken);

            _captchaStorageProvider.Add(HttpContext, cookieToken, randomText);

            return(Json(new
            {
                dntCaptchaImgUrl = captchaImageUrl,
                dntCaptchaId = captchaDivId,
                dntCaptchaTextValue = encryptedText,
                dntCaptchaTokenValue = hiddenInputToken
            }));
        }
 private void invalidateToken(DNTCaptchaTagHelperHtmlAttributes model)
 {
     _captchaStorageProvider.Remove(HttpContext, model.CaptchaToken);
 }