/// <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    = _humanReadableIntegerProvider.NumberToText(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);
        }
示例#3
0
        /// <summary>
        /// Process the taghelper and generate the output.
        /// </summary>
        public void Process(TagHelperContext context, TagHelperOutput output)
        {
            context.CheckArgumentNull(nameof(context));
            output.CheckArgumentNull(nameof(output));

            output.TagName = "div";
            output.Attributes.Add("class", "captcha");
            var captchaDivId = $"captcha{context.UniqueId}{_randomNumberProvider.Next(Min, Max)}";

            output.Attributes.Add("id", captchaDivId);
            output.TagMode = TagMode.StartTagAndEndTag;

            var number     = _randomNumberProvider.Next(Min, Max);
            var randomText = "";

            randomText = OutputType == OutputType.InDigits ? DNTPersianUtils.Core.PersianNumbersUtils.ToPersianNumbers(number) : _humanReadableIntegerProvider.NumberToText(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);
            if (!ImageOnly)
            {
                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);

            _captchaStorageProvider.Add(ViewContext.HttpContext, cookieToken, randomText);
        }
示例#4
0
        public byte[] GeneratorCaptcha(string name, int captchaLength, bool hasNumber, bool haslower, bool hasUpper, int imageWidth, int imageHeight, float fontSize)
        {
            var text = _captchaCodeGenerator.OutputText(haslower, hasUpper, hasNumber, captchaLength);

            if (_captchaOptions.Enable)
            {
                _captchaStorageProvider.Add(_httpContextAccessor.HttpContext, name, text);
            }
            byte[] image = null;
            try
            {
                image = _captchaImageProvider.DrawCaptcha(text, fontSize, imageWidth, imageHeight);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(image);
        }
示例#5
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
            }));
        }
        /// <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);
        }