You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
iot/projects/Infrastructure/Web/Mvc/CaptchaController.cs

46 lines
1.5 KiB

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<CaptchaController> _logger;
private readonly IWebHostEnvironment _env;
public CaptchaController(ILogger<CaptchaController> logger, IWebHostEnvironment 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];
using var generator = RandomNumberGenerator.Create();
generator.GetBytes(random);
builder.Append(new Random(Convert.ToInt32(random[0])).Next(0, 9));
}
code = builder.ToString();
this.HttpContext.Session.Set<ImageCaptchaModel>(ImageCaptchaModel.Key, new ImageCaptchaModel
{
Captcha = code,
ExpireDateUtc = DateTime.UtcNow.AddSeconds(300)
});
using var helper = new CaptchaHelper(this._env);
return File(helper.GetCaptcha(code), "image/jpeg");
}
}
}