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.
46 lines
1.5 KiB
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");
|
|
}
|
|
}
|
|
} |