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 }); }
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); }
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); }
/// <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); }