using Host.Attributes;
using Host.Common;
using Host.Entity;
using Host.Managers;
using Host.Model;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using MimeKit;
using Newtonsoft.Json;
using System;
using System.Threading.Tasks;
using Talk.Extensions;
namespace Host.Controllers
{
///
/// 设置
///
[Route("api/[controller]/[Action]")]
[EnableCors("AllowSameDomain")] //允许跨域
public class SetingController : Controller
{
private static string refreshIntervalPath = "File/RefreshInterval.json";
private static string loginPasswordPath = "File/LoginPassword.json";
private static UpdateLoginInfoEntity LoginInfo = null;
///
/// 保存Mail信息
///
///
///
[HttpPost]
public async Task SaveMailInfo([FromBody] MailEntity mailEntity)
{
return await FileConfig.SaveMailInfoAsync(mailEntity);
}
///
/// 保存Mqtt的配置
///
///
[HttpPost]
public async Task SaveMqttSet([FromBody] MqttOptionsEntity input)
{
await FileConfig.SaveMqttSetAsync(input);
await MqttManager.Instance.RestartAsync();
return true;
}
///
/// 获取Mqtt的配置
///
///
[HttpPost]
public async Task GetMqttSet()
{
return await FileConfig.GetMqttSetAsync();
}
///
/// 保存Rabbit 配置
///
///
///
[HttpPost]
public async Task SaveRabbitSet([FromBody] RabbitOptionsEntity input)
{
await FileConfig.SaveRabbitSetAsync(input);
return true;
}
///
/// 重启Rabbit
///
///
[HttpPost]
public async Task RestartRabbit()
{
return await RabbitMQManager.Instance.RestartAsync();
}
///
/// 获取Rabbit的配置
///
///
[HttpPost]
public async Task GetRabbitSet()
{
return await FileConfig.GetRabbitSetAsync();
}
///
/// 保存刷新间隔
///
///
///
[HttpPost]
public async Task SaveRefreshInterval([FromBody] RefreshIntervalEntity entity)
{
await System.IO.File.WriteAllTextAsync(refreshIntervalPath, JsonConvert.SerializeObject(entity));
return true;
}
///
/// 保存登录密码
///
///
///
[HttpPost]
public async Task SaveLoginInfo([FromBody] UpdateLoginInfoEntity entity)
{
LoginInfo = await GetLoginAsync();
if (LoginInfo.NewPassword == entity.OldPassword)
{
await System.IO.File.WriteAllTextAsync(loginPasswordPath, JsonConvert.SerializeObject(entity));
LoginInfo = entity;
return true;
}
return false;
}
private static DateTime ErrLoginTime = DateTime.MinValue;
private static int LoginNumber = 0;
///
/// 登录
///
///
///
[HttpPost]
[NoLogin]
public async Task VerifyLoginInfo([FromBody] LoginInfoEntity input)
{
var output = new LoginInfoOutput();
//防止暴力破解,2分钟内只允许错误20次。
if (LoginNumber++ >= 20 || ErrLoginTime.AddMinutes(2) >= DateTime.Now)
{
ErrLoginTime = DateTime.Now;
LoginNumber = 0;
return output;
}
LoginInfo = await GetLoginAsync();
if (input.Password == LoginInfo.NewPassword.ToBase64())
{
output.Token = $"{DateTime.Now}".DES3Encrypt();
LoginNumber = 0;
}
else
{
var defaultPassword = ConfigurationManager.GetTryConfig("DefaultPassword");
if (!string.IsNullOrWhiteSpace(defaultPassword) && input.Password == defaultPassword.ToBase64())
{
output.Token = $"{DateTime.Now}".DES3Encrypt();
LoginNumber = 0;
}
}
return output;
}
///
/// 获取登录信息
///
///
private async Task GetLoginAsync()
{
if (LoginInfo == null)
{
if (!System.IO.File.Exists(loginPasswordPath))
await System.IO.File.WriteAllTextAsync(loginPasswordPath, JsonConvert.SerializeObject(new UpdateLoginInfoEntity()));
LoginInfo = JsonConvert.DeserializeObject(await System.IO.File.ReadAllTextAsync(loginPasswordPath)) ?? new UpdateLoginInfoEntity();
}
return LoginInfo;
}
///
/// 获取
///
///
[HttpPost]
public async Task GetRefreshInterval()
{
return JsonConvert.DeserializeObject(await System.IO.File.ReadAllTextAsync(refreshIntervalPath)) ?? new RefreshIntervalEntity();
}
///
/// 获取eMail信息
///
///
[HttpPost]
public async Task GetMailInfo()
{
return await FileConfig.GetMailInfoAsync();
}
///
/// 发送邮件
///
///
///
[HttpPost]
[NoLogin]
public async Task SendMail([FromBody] SendMailModel model)
{
return await MailHelper.SendMail(model.Title, model.Content, model.MailInfo);
}
}
}