新增速率限制,调整本地文件上传,服务监控IP取本机网络IP,仓储增加方法
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using ZR.Admin.WebApi.Filters;
|
||||
using ZR.Model.System;
|
||||
@@ -119,7 +121,18 @@ namespace ZR.Admin.WebApi.Controllers.System
|
||||
long userId = HttpContext.GetUId();
|
||||
if (formFile == null) throw new CustomException("请选择文件");
|
||||
|
||||
SysFile file = await FileService.SaveFileToLocal(hostEnvironment.WebRootPath, "", "avatar", HttpContext.GetName(), formFile);
|
||||
var scheme = HttpContext.Request.Scheme + "://";
|
||||
var serverIP = HttpContext.Request.Host.Value;
|
||||
if (hostEnvironment.IsProduction())
|
||||
{
|
||||
var host = await Dns.GetHostEntryAsync(Dns.GetHostName());
|
||||
var ip = host.AddressList
|
||||
.FirstOrDefault(it => it.AddressFamily == AddressFamily.InterNetwork);
|
||||
serverIP = ip + ":" + Request.HttpContext.Connection.LocalPort;//获取服务器IP
|
||||
}
|
||||
|
||||
var file = await FileService.SaveFileToLocal(hostEnvironment.WebRootPath, "", "avatar",
|
||||
HttpContext.GetName(), formFile, serverIP);
|
||||
|
||||
UserService.UpdatePhoto(new SysUser() { Avatar = file.AccessUrl, UserId = userId });
|
||||
return SUCCESS(new { imgUrl = file.AccessUrl });
|
||||
|
||||
@@ -0,0 +1,195 @@
|
||||
using AspNetCoreRateLimit;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Options;
|
||||
using ZR.Admin.WebApi.Filters;
|
||||
using ZR.Model;
|
||||
using ZR.ServiceCore.Model;
|
||||
using ZR.ServiceCore.Services.IService;
|
||||
using IpRateLimitPolicy = ZR.ServiceCore.Model.IpRateLimitPolicy;
|
||||
|
||||
namespace ZR.Admin.WebApi.Controllers.System.monitor;
|
||||
|
||||
[Verify]
|
||||
[Route("ip/route/limit")]
|
||||
public class IpRateLimitController : BaseController
|
||||
{
|
||||
private readonly IpRateLimitOptions _options;
|
||||
private readonly IIpPolicyStore _ipPolicyStore;
|
||||
private readonly IIpRateLimitPolicyService _ipRateLimitPolicyService;
|
||||
private readonly IRateLimitRuleService _rateLimitRuleService;
|
||||
private readonly IIpRateLimitLogService _ipRateLimitLogService;
|
||||
|
||||
public IpRateLimitController(IOptions<IpRateLimitOptions> optionsAccessor, IIpPolicyStore ipPolicyStore,
|
||||
IIpRateLimitPolicyService ipRateLimitPolicyService, IRateLimitRuleService rateLimitRuleService,
|
||||
IIpRateLimitLogService ipRateLimitLogService)
|
||||
{
|
||||
_options = optionsAccessor.Value;
|
||||
_ipPolicyStore = ipPolicyStore;
|
||||
_ipRateLimitPolicyService = ipRateLimitPolicyService;
|
||||
_rateLimitRuleService = rateLimitRuleService;
|
||||
_ipRateLimitLogService = ipRateLimitLogService;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取限制规则
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet("getIpRateLimitPolicyPage")]
|
||||
public async Task<IActionResult> GetIpRateLimitPolicyPage([FromQuery] IpRateLimitPolicy ipRateLimitPolicy,
|
||||
PagerInfo pager)
|
||||
{
|
||||
var page = await _ipRateLimitPolicyService.SelectIpRateLimitPolicyPageAsync(ipRateLimitPolicy, pager);
|
||||
return SUCCESS(page);
|
||||
}
|
||||
|
||||
[HttpPost("addIpRateLimitPolicy")]
|
||||
public async Task<IActionResult> AddIpRateLimitPolicy([FromBody] IpRateLimitPolicy ipRateLimitPolicy)
|
||||
{
|
||||
var isExist = await _ipRateLimitPolicyService.Queryable()
|
||||
.Where(it => it.Ip == ipRateLimitPolicy.Ip)
|
||||
.AnyAsync();
|
||||
if (isExist) throw new CustomException("该IP已存在");
|
||||
var res = await _ipRateLimitPolicyService.InsertNav(ipRateLimitPolicy)
|
||||
.Include(it => it.Rules)
|
||||
.ExecuteCommandAsync();
|
||||
return SUCCESS(res);
|
||||
}
|
||||
|
||||
[HttpPut("updateIpRateLimitPolicy")]
|
||||
public async Task<IActionResult> UpdateIpRateLimitPolicy(
|
||||
[FromBody] IpRateLimitPolicy ipRateLimitPolicy)
|
||||
{
|
||||
var isEnable = await _ipRateLimitPolicyService
|
||||
.Queryable()
|
||||
.Where(it => it.Id == ipRateLimitPolicy.Id
|
||||
&& it.Flag == '1')
|
||||
.AnyAsync();
|
||||
var res = await _ipRateLimitPolicyService.UpdateNav(ipRateLimitPolicy)
|
||||
.Include(it => it.Rules)
|
||||
.ExecuteCommandAsync();
|
||||
if (!isEnable) return SUCCESS(res);
|
||||
{
|
||||
await _ipPolicyStore.RemoveAsync(_options.IpPolicyPrefix);
|
||||
var ipRateLimitPolicies = _ipRateLimitPolicyService.Queryable()
|
||||
.Includes(it => it.Rules.Where(r => r.Flag == '1').ToList())
|
||||
.Where(it => it.Flag == '1')
|
||||
.ToListAsync()
|
||||
.GetAwaiter().GetResult()
|
||||
.Adapt<List<AspNetCoreRateLimit.IpRateLimitPolicy>>();
|
||||
await _ipPolicyStore.SeedAsync();
|
||||
var pol = await _ipPolicyStore.GetAsync(_options.IpPolicyPrefix);
|
||||
pol.IpRules.AddRange(ipRateLimitPolicies);
|
||||
await _ipPolicyStore.SetAsync(_options.IpPolicyPrefix, pol);
|
||||
}
|
||||
return SUCCESS(res);
|
||||
}
|
||||
|
||||
[HttpPatch("enableIpRateLimitPolicy/{id}")]
|
||||
public async Task<IActionResult> EnableIpRateLimitPolicy([FromRoute] long id)
|
||||
{
|
||||
var isEnable = await _ipRateLimitPolicyService
|
||||
.Queryable()
|
||||
.Where(it => it.Id == id
|
||||
&& it.Flag == '1')
|
||||
.AnyAsync();
|
||||
if (isEnable)
|
||||
{
|
||||
throw new CustomException("已启用,无法再次启用");
|
||||
}
|
||||
await _ipRateLimitPolicyService.Updateable(new IpRateLimitPolicy
|
||||
{
|
||||
Id = id,
|
||||
Flag = '1'
|
||||
}).UpdateColumns(it => it.Flag)
|
||||
.ExecuteCommandAsync();
|
||||
var ipRateLimitPolicy = await _ipRateLimitPolicyService.Queryable()
|
||||
.Includes(it => it.Rules.Where(r => r.Flag == '1').ToList())
|
||||
.Where(it => it.Id == id)
|
||||
.SingleAsync();
|
||||
var pol = await _ipPolicyStore.GetAsync(_options.IpPolicyPrefix);
|
||||
pol.IpRules.Add(ipRateLimitPolicy.Adapt<AspNetCoreRateLimit.IpRateLimitPolicy>());
|
||||
await _ipPolicyStore.SetAsync(_options.IpPolicyPrefix, pol);
|
||||
return SUCCESS('1');
|
||||
}
|
||||
|
||||
[HttpPatch("disableIpRateLimitPolicy/{id}")]
|
||||
public async Task<IActionResult> DisableIpRateLimitPolicy([FromRoute] long id)
|
||||
{
|
||||
var isEnable = await _ipRateLimitPolicyService
|
||||
.Queryable()
|
||||
.Where(it => it.Id == id
|
||||
&& it.Flag == '1')
|
||||
.AnyAsync();
|
||||
if (!isEnable)
|
||||
{
|
||||
throw new CustomException("已禁用,无法再次禁用");
|
||||
}
|
||||
await _ipRateLimitPolicyService.Updateable(new IpRateLimitPolicy
|
||||
{
|
||||
Id = id,
|
||||
Flag = '0'
|
||||
}).UpdateColumns(it => it.Flag)
|
||||
.ExecuteCommandAsync();
|
||||
var ipRateLimitPolicies = _ipRateLimitPolicyService.Queryable()
|
||||
.Includes(it => it.Rules.Where(r => r.Flag == '1').ToList())
|
||||
.Where(it => it.Flag == '1')
|
||||
.ToListAsync()
|
||||
.GetAwaiter().GetResult()
|
||||
.Adapt<List<AspNetCoreRateLimit.IpRateLimitPolicy>>();
|
||||
await _ipPolicyStore.RemoveAsync(_options.IpPolicyPrefix);
|
||||
await _ipPolicyStore.SeedAsync();
|
||||
var pol = await _ipPolicyStore.GetAsync(_options.IpPolicyPrefix);
|
||||
pol.IpRules.AddRange(ipRateLimitPolicies);
|
||||
await _ipPolicyStore.SetAsync(_options.IpPolicyPrefix, pol);
|
||||
return SUCCESS('0');
|
||||
}
|
||||
|
||||
[HttpDelete("deleteIpRateLimitPolicy/{id}")]
|
||||
public async Task DeleteIpRateLimitPolicyAsync([FromRoute] long id)
|
||||
{
|
||||
var isEnable = await _ipRateLimitPolicyService
|
||||
.Queryable()
|
||||
.Where(it => it.Id == id
|
||||
&& it.Flag == '1')
|
||||
.AnyAsync();
|
||||
await _ipRateLimitPolicyService
|
||||
.DeleteNav(it => it.Id == id)
|
||||
.Include(it => it.Rules)
|
||||
.ExecuteCommandAsync();
|
||||
if (isEnable)
|
||||
{
|
||||
var ipRateLimitPolicies = _ipRateLimitPolicyService.Queryable()
|
||||
.Includes(it => it.Rules.Where(r => r.Flag == '1').ToList())
|
||||
.Where(it => it.Flag == '1')
|
||||
.ToListAsync()
|
||||
.GetAwaiter().GetResult()
|
||||
.Adapt<List<AspNetCoreRateLimit.IpRateLimitPolicy>>();
|
||||
await _ipPolicyStore.RemoveAsync(_options.IpPolicyPrefix);
|
||||
await _ipPolicyStore.SeedAsync();
|
||||
var pol = await _ipPolicyStore.GetAsync(_options.IpPolicyPrefix);
|
||||
pol.IpRules.AddRange(ipRateLimitPolicies);
|
||||
await _ipPolicyStore.SetAsync(_options.IpPolicyPrefix, pol);
|
||||
}
|
||||
}
|
||||
|
||||
[HttpGet("getIpRateLimitLogPage")]
|
||||
public async Task<IActionResult> GetIpRateLimitLogPage([FromQuery] IpRateLimitLog ipRateLimitLog, PagerInfo pager)
|
||||
{
|
||||
return SUCCESS(await _ipRateLimitLogService.SelectIpRateLimitLogPageAsync(ipRateLimitLog, pager));
|
||||
}
|
||||
|
||||
[HttpGet("get")]
|
||||
public async Task<IpRateLimitPolicies> Get()
|
||||
{
|
||||
return await _ipPolicyStore.GetAsync(_options.IpPolicyPrefix);
|
||||
}
|
||||
|
||||
[HttpGet("checkIp/{ip}")]
|
||||
public async Task<IActionResult> CheckIp(string ip)
|
||||
{
|
||||
var res = await _ipRateLimitPolicyService.Queryable()
|
||||
.Where(it => it.Ip == ip)
|
||||
.AnyAsync();
|
||||
return SUCCESS(res);
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,8 @@ using Infrastructure.Extensions;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Options;
|
||||
using System.Diagnostics;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace ZR.Admin.WebApi.Controllers.monitor
|
||||
@@ -48,8 +50,12 @@ namespace ZR.Admin.WebApi.Controllers.monitor
|
||||
string appRAM = ((double)Process.GetCurrentProcess().WorkingSet64 / 1048576).ToString("N2") + " MB";
|
||||
string startTime = Process.GetCurrentProcess().StartTime.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
string sysRunTime = ComputerHelper.GetRunTime();
|
||||
string serverIP = Request.HttpContext.Connection.LocalIpAddress.MapToIPv4().ToString() + ":" + Request.HttpContext.Connection.LocalPort;//获取服务器IP
|
||||
|
||||
// string serverIP = Request.HttpContext.Connection.LocalIpAddress.MapToIPv4().ToString() + ":" + Request.HttpContext.Connection.LocalPort;//获取服务器IP
|
||||
var host = Dns.GetHostEntry(Dns.GetHostName());
|
||||
var ip = host.AddressList
|
||||
.FirstOrDefault(it => it.AddressFamily == AddressFamily.InterNetwork);
|
||||
var serverIP = ip + ":" + Request.HttpContext.Connection.LocalPort;//获取服务器IP
|
||||
|
||||
var programStartTime = Process.GetCurrentProcess().StartTime;
|
||||
string programRunTime = DateTimeHelper.FormatTime((DateTime.Now - programStartTime).TotalMilliseconds.ToString().Split('.')[0].ParseToLong());
|
||||
var data = new
|
||||
|
||||
Reference in New Issue
Block a user