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