using System; using System.Security.Cryptography; using System.Text; using Infrastructure.Extensions; using Infrastructure.Security; using Infrastructure.Web.DataAnnotations; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; namespace Infrastructure.Web.Mvc { public class CaptchaController : Controller { private readonly ILogger _logger; private readonly IHostingEnvironment _env; public CaptchaController(ILogger logger, IHostingEnvironment env) { this._logger = logger; this._env = env; } public IActionResult Image() { var code = string.Empty; var builder = new StringBuilder(); builder.Append(code); for (int i = 0; i < 4; i++) { var random = new byte[1]; RandomNumberGenerator.Create().GetBytes(random); builder.Append(new Random(Convert.ToInt32(random[0])).Next(0, 9)); } code = builder.ToString(); this.HttpContext.Session.Set(ImageCaptchaModel.Key, new ImageCaptchaModel { Captcha = code, ExpireDateUtc = DateTime.UtcNow.AddSeconds(300) }); return File(new CaptchaHelper(this._env).GetCaptcha(code), "image/jpeg"); } } }