SetingController.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. using Host.Attributes;
  2. using Host.Common;
  3. using Host.Entity;
  4. using Host.Managers;
  5. using Host.Model;
  6. using Microsoft.AspNetCore.Cors;
  7. using Microsoft.AspNetCore.Mvc;
  8. using MimeKit;
  9. using Newtonsoft.Json;
  10. using System;
  11. using System.Threading.Tasks;
  12. using Talk.Extensions;
  13. namespace Host.Controllers
  14. {
  15. /// <summary>
  16. /// 设置
  17. /// </summary>
  18. [Route("api/[controller]/[Action]")]
  19. [EnableCors("AllowSameDomain")] //允许跨域
  20. public class SetingController : Controller
  21. {
  22. private static string refreshIntervalPath = "File/RefreshInterval.json";
  23. private static string loginPasswordPath = "File/LoginPassword.json";
  24. private static UpdateLoginInfoEntity LoginInfo = null;
  25. /// <summary>
  26. /// 保存Mail信息
  27. /// </summary>
  28. /// <param name="mailEntity"></param>
  29. /// <returns></returns>
  30. [HttpPost]
  31. public async Task<bool> SaveMailInfo([FromBody] MailEntity mailEntity)
  32. {
  33. return await FileConfig.SaveMailInfoAsync(mailEntity);
  34. }
  35. /// <summary>
  36. /// 保存Mqtt的配置
  37. /// </summary>
  38. /// <returns></returns>
  39. [HttpPost]
  40. public async Task<bool> SaveMqttSet([FromBody] MqttOptionsEntity input)
  41. {
  42. await FileConfig.SaveMqttSetAsync(input);
  43. await MqttManager.Instance.RestartAsync();
  44. return true;
  45. }
  46. /// <summary>
  47. /// 获取Mqtt的配置
  48. /// </summary>
  49. /// <returns></returns>
  50. [HttpPost]
  51. public async Task<MqttOptionsEntity> GetMqttSet()
  52. {
  53. return await FileConfig.GetMqttSetAsync();
  54. }
  55. /// <summary>
  56. /// 保存Rabbit 配置
  57. /// </summary>
  58. /// <param name="input"></param>
  59. /// <returns></returns>
  60. [HttpPost]
  61. public async Task<bool> SaveRabbitSet([FromBody] RabbitOptionsEntity input)
  62. {
  63. await FileConfig.SaveRabbitSetAsync(input);
  64. return true;
  65. }
  66. /// <summary>
  67. /// 重启Rabbit
  68. /// </summary>
  69. /// <returns></returns>
  70. [HttpPost]
  71. public async Task<bool> RestartRabbit()
  72. {
  73. return await RabbitMQManager.Instance.RestartAsync();
  74. }
  75. /// <summary>
  76. /// 获取Rabbit的配置
  77. /// </summary>
  78. /// <returns></returns>
  79. [HttpPost]
  80. public async Task<RabbitOptionsEntity> GetRabbitSet()
  81. {
  82. return await FileConfig.GetRabbitSetAsync();
  83. }
  84. /// <summary>
  85. /// 保存刷新间隔
  86. /// </summary>
  87. /// <param name="entity"></param>
  88. /// <returns></returns>
  89. [HttpPost]
  90. public async Task<bool> SaveRefreshInterval([FromBody] RefreshIntervalEntity entity)
  91. {
  92. await System.IO.File.WriteAllTextAsync(refreshIntervalPath, JsonConvert.SerializeObject(entity));
  93. return true;
  94. }
  95. /// <summary>
  96. /// 保存登录密码
  97. /// </summary>
  98. /// <param name="entity"></param>
  99. /// <returns></returns>
  100. [HttpPost]
  101. public async Task<bool> SaveLoginInfo([FromBody] UpdateLoginInfoEntity entity)
  102. {
  103. LoginInfo = await GetLoginAsync();
  104. if (LoginInfo.NewPassword == entity.OldPassword)
  105. {
  106. await System.IO.File.WriteAllTextAsync(loginPasswordPath, JsonConvert.SerializeObject(entity));
  107. LoginInfo = entity;
  108. return true;
  109. }
  110. return false;
  111. }
  112. private static DateTime ErrLoginTime = DateTime.MinValue;
  113. private static int LoginNumber = 0;
  114. /// <summary>
  115. /// 登录
  116. /// </summary>
  117. /// <param name="input"></param>
  118. /// <returns></returns>
  119. [HttpPost]
  120. [NoLogin]
  121. public async Task<LoginInfoOutput> VerifyLoginInfo([FromBody] LoginInfoEntity input)
  122. {
  123. var output = new LoginInfoOutput();
  124. //防止暴力破解,2分钟内只允许错误20次。
  125. if (LoginNumber++ >= 20 || ErrLoginTime.AddMinutes(2) >= DateTime.Now)
  126. {
  127. ErrLoginTime = DateTime.Now;
  128. LoginNumber = 0;
  129. return output;
  130. }
  131. LoginInfo = await GetLoginAsync();
  132. if (input.Password == LoginInfo.NewPassword.ToBase64())
  133. {
  134. output.Token = $"{DateTime.Now}".DES3Encrypt();
  135. LoginNumber = 0;
  136. }
  137. else
  138. {
  139. var defaultPassword = ConfigurationManager.GetTryConfig("DefaultPassword");
  140. if (!string.IsNullOrWhiteSpace(defaultPassword) && input.Password == defaultPassword.ToBase64())
  141. {
  142. output.Token = $"{DateTime.Now}".DES3Encrypt();
  143. LoginNumber = 0;
  144. }
  145. }
  146. return output;
  147. }
  148. /// <summary>
  149. /// 获取登录信息
  150. /// </summary>
  151. /// <returns></returns>
  152. private async Task<UpdateLoginInfoEntity> GetLoginAsync()
  153. {
  154. if (LoginInfo == null)
  155. {
  156. if (!System.IO.File.Exists(loginPasswordPath))
  157. await System.IO.File.WriteAllTextAsync(loginPasswordPath, JsonConvert.SerializeObject(new UpdateLoginInfoEntity()));
  158. LoginInfo = JsonConvert.DeserializeObject<UpdateLoginInfoEntity>(await System.IO.File.ReadAllTextAsync(loginPasswordPath)) ?? new UpdateLoginInfoEntity();
  159. }
  160. return LoginInfo;
  161. }
  162. /// <summary>
  163. /// 获取
  164. /// </summary>
  165. /// <returns></returns>
  166. [HttpPost]
  167. public async Task<RefreshIntervalEntity> GetRefreshInterval()
  168. {
  169. return JsonConvert.DeserializeObject<RefreshIntervalEntity>(await System.IO.File.ReadAllTextAsync(refreshIntervalPath)) ?? new RefreshIntervalEntity();
  170. }
  171. /// <summary>
  172. /// 获取eMail信息
  173. /// </summary>
  174. /// <returns></returns>
  175. [HttpPost]
  176. public async Task<MailEntity> GetMailInfo()
  177. {
  178. return await FileConfig.GetMailInfoAsync();
  179. }
  180. /// <summary>
  181. /// 发送邮件
  182. /// </summary>
  183. /// <param name="model"></param>
  184. /// <returns></returns>
  185. [HttpPost]
  186. [NoLogin]
  187. public async Task<bool> SendMail([FromBody] SendMailModel model)
  188. {
  189. return await MailHelper.SendMail(model.Title, model.Content, model.MailInfo);
  190. }
  191. }
  192. }