1
0
懒得勤快 5 жил өмнө
parent
commit
78a3533255

+ 1 - 0
src/Masuit.MyBlogs.Core/Common/CommonHelper.cs

@@ -19,6 +19,7 @@ using System.Net;
 using System.Net.Sockets;
 using System.Text;
 using System.Threading;
+using Masuit.MyBlogs.Core.Common.Mails;
 using TimeZoneConverter;
 
 #if !DEBUG

+ 1 - 1
src/Masuit.MyBlogs.Core/Common/IMailSender.cs → src/Masuit.MyBlogs.Core/Common/Mails/IMailSender.cs

@@ -1,4 +1,4 @@
-namespace Masuit.MyBlogs.Core.Common
+namespace Masuit.MyBlogs.Core.Common.Mails
 {
     public interface IMailSender
     {

+ 23 - 0
src/Masuit.MyBlogs.Core/Common/Mails/MailServiceCollectionExt.cs

@@ -0,0 +1,23 @@
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace Masuit.MyBlogs.Core.Common.Mails
+{
+    public static class MailServiceCollectionExt
+    {
+        public static IServiceCollection AddMailSender(this IServiceCollection services, IConfiguration configuration)
+        {
+            switch (configuration["MailSender"])
+            {
+                case "Mailgun":
+                    services.AddHttpClient<IMailSender, MailgunSender>();
+                    break;
+                default:
+                    services.AddSingleton<IMailSender, SmtpSender>();
+                    break;
+            }
+
+            return services;
+        }
+    }
+}

+ 4 - 4
src/Masuit.MyBlogs.Core/Common/MailgunSender.cs → src/Masuit.MyBlogs.Core/Common/Mails/MailgunSender.cs

@@ -1,11 +1,11 @@
-using Masuit.Tools.Models;
-using Microsoft.Extensions.Configuration;
-using System;
+using System;
 using System.Net.Http;
 using System.Net.Http.Headers;
 using System.Text;
+using Masuit.Tools.Models;
+using Microsoft.Extensions.Configuration;
 
-namespace Masuit.MyBlogs.Core.Common
+namespace Masuit.MyBlogs.Core.Common.Mails
 {
     public class MailgunSender : IMailSender
     {

+ 1 - 1
src/Masuit.MyBlogs.Core/Common/SmtpSender.cs → src/Masuit.MyBlogs.Core/Common/Mails/SmtpSender.cs

@@ -1,7 +1,7 @@
 using Masuit.Tools;
 using Masuit.Tools.Models;
 
-namespace Masuit.MyBlogs.Core.Common
+namespace Masuit.MyBlogs.Core.Common.Mails
 {
     public class SmtpSender : IMailSender
     {

+ 1 - 0
src/Masuit.MyBlogs.Core/Configs/AutofacModule.cs

@@ -3,6 +3,7 @@ using Hangfire;
 using Masuit.MyBlogs.Core.Extensions;
 using Masuit.MyBlogs.Core.Extensions.Hangfire;
 using System.Reflection;
+using Masuit.MyBlogs.Core.Extensions.Firewall;
 
 namespace Masuit.MyBlogs.Core.Configs
 {

+ 1 - 0
src/Masuit.MyBlogs.Core/Controllers/BaseController.cs

@@ -15,6 +15,7 @@ using Microsoft.EntityFrameworkCore.Internal;
 using System;
 using System.Linq;
 using System.Net;
+using Masuit.MyBlogs.Core.Extensions.Firewall;
 
 namespace Masuit.MyBlogs.Core.Controllers
 {

+ 3 - 1
src/Masuit.MyBlogs.Core/Extensions/CloudflareRepoter.cs → src/Masuit.MyBlogs.Core/Extensions/Firewall/CloudflareRepoter.cs

@@ -6,7 +6,7 @@ using System.Net.Http;
 using System.Net.Sockets;
 using System.Threading.Tasks;
 
-namespace Masuit.MyBlogs.Core.Extensions
+namespace Masuit.MyBlogs.Core.Extensions.Firewall
 {
     public class CloudflareRepoter : IFirewallRepoter
     {
@@ -19,6 +19,8 @@ namespace Masuit.MyBlogs.Core.Extensions
             _configuration = configuration;
         }
 
+        public string ReporterName { get; set; } = "cloudflare";
+
         public void Report(IPAddress ip)
         {
             ReportAsync(ip).Wait();

+ 3 - 1
src/Masuit.MyBlogs.Core/Extensions/DefaultFirewallRepoter.cs → src/Masuit.MyBlogs.Core/Extensions/Firewall/DefaultFirewallRepoter.cs

@@ -1,10 +1,12 @@
 using System.Net;
 using System.Threading.Tasks;
 
-namespace Masuit.MyBlogs.Core.Extensions
+namespace Masuit.MyBlogs.Core.Extensions.Firewall
 {
     public class DefaultFirewallRepoter : IFirewallRepoter
     {
+        public string ReporterName { get; set; }
+
         /// <summary>
         /// 上报IP
         /// </summary>

+ 2 - 2
src/Masuit.MyBlogs.Core/Extensions/FirewallAttribute.cs → src/Masuit.MyBlogs.Core/Extensions/Firewall/FirewallAttribute.cs

@@ -18,7 +18,7 @@ using System.Text.RegularExpressions;
 using System.Web;
 using HeaderNames = Microsoft.Net.Http.Headers.HeaderNames;
 
-namespace Masuit.MyBlogs.Core.Extensions
+namespace Masuit.MyBlogs.Core.Extensions.Firewall
 {
     public class FirewallAttribute : ActionFilterAttribute
     {
@@ -87,7 +87,7 @@ namespace Masuit.MyBlogs.Core.Extensions
             {
                 CacheManager.Expire("Frequency:" + ip, ExpirationMode.Sliding, TimeSpan.FromMinutes(CommonHelper.SystemSettings.GetOrAdd("BanIPTimespan", "10").ToInt32()));
                 FirewallRepoter.ReportAsync(IPAddress.Parse(ip));
-                AccessDeny(ip, request, "访问频次限制");
+                AccessDeny(ip, request, "访问频次限制,已上报至:" + FirewallRepoter.ReporterName);
             }
 
             throw new TempDenyException("访问地区限制");

+ 29 - 0
src/Masuit.MyBlogs.Core/Extensions/Firewall/FirewallServiceCollectionExt.cs

@@ -0,0 +1,29 @@
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace Masuit.MyBlogs.Core.Extensions.Firewall
+{
+    public static class FirewallServiceCollectionExt
+    {
+        public static IServiceCollection AddFirewallReporter(this IServiceCollection services, IConfiguration configuration)
+        {
+            switch (configuration["FirewallService:type"])
+            {
+                case "Cloudflare":
+                case "cloudflare":
+                case "cf":
+                    services.AddHttpClient<IFirewallRepoter, CloudflareRepoter>().ConfigureHttpClient(c =>
+                    {
+                        c.DefaultRequestHeaders.Add("X-Auth-Email", configuration["FirewallService:Cloudflare:AuthEmail"]);
+                        c.DefaultRequestHeaders.Add("X-Auth-Key", configuration["FirewallService:Cloudflare:AuthKey"]);
+                    });
+                    break;
+                default:
+                    services.AddSingleton<IFirewallRepoter, DefaultFirewallRepoter>();
+                    break;
+            }
+
+            return services;
+        }
+    }
+}

+ 2 - 0
src/Masuit.MyBlogs.Core/Extensions/IFirewallRepoter.cs

@@ -5,6 +5,8 @@ namespace Masuit.MyBlogs.Core.Extensions
 {
     public interface IFirewallRepoter
     {
+        string ReporterName { get; set; }
+
         /// <summary>
         /// 上报IP
         /// </summary>

+ 4 - 25
src/Masuit.MyBlogs.Core/Startup.cs

@@ -39,6 +39,8 @@ using System;
 using System.IO;
 using System.Linq;
 using System.Threading.Tasks;
+using Masuit.MyBlogs.Core.Common.Mails;
+using Masuit.MyBlogs.Core.Extensions.Firewall;
 using IWebHostEnvironment = Microsoft.AspNetCore.Hosting.IWebHostEnvironment;
 using SameSiteMode = Microsoft.AspNetCore.Http.SameSiteMode;
 
@@ -127,6 +129,8 @@ namespace Masuit.MyBlogs.Core
             services.AddHttpClient("", c => c.Timeout = TimeSpan.FromSeconds(30)); //注入HttpClient
             services.AddHttpClient<ImagebedClient>();
             services.AddHttpContextAccessor(); //注入静态HttpContext
+            services.AddMailSender(Configuration).AddFirewallReporter(Configuration);
+            services.AddBundling().UseDefaults(_env).UseNUglify().EnableMinification().EnableChangeDetection().EnableCacheHeader(TimeSpan.FromHours(1));
             services.AddMiniProfiler(options =>
             {
                 options.RouteBasePath = "/profiler";
@@ -138,31 +142,6 @@ namespace Masuit.MyBlogs.Core
                 options.PopupShowTimeWithChildren = true;
                 options.PopupShowTrivial = true;
             }).AddEntityFramework();
-            services.AddBundling().UseDefaults(_env).UseNUglify().EnableMinification().EnableChangeDetection().EnableCacheHeader(TimeSpan.FromHours(1));
-            switch (Configuration["MailSender"])
-            {
-                case "Mailgun":
-                    services.AddHttpClient<IMailSender, MailgunSender>();
-                    break;
-                default:
-                    services.AddSingleton<IMailSender, SmtpSender>();
-                    break;
-            }
-            switch (Configuration["FirewallService:type"])
-            {
-                case "Cloudflare":
-                case "cloudflare":
-                case "cf":
-                    services.AddHttpClient<IFirewallRepoter, CloudflareRepoter>().ConfigureHttpClient(c =>
-                    {
-                        c.DefaultRequestHeaders.Add("X-Auth-Email", Configuration["FirewallService:Cloudflare:AuthEmail"]);
-                        c.DefaultRequestHeaders.Add("X-Auth-Key", Configuration["FirewallService:Cloudflare:AuthKey"]);
-                    });
-                    break;
-                default:
-                    services.AddSingleton<IFirewallRepoter, DefaultFirewallRepoter>();
-                    break;
-            }
             services.AddMapper().AddAutofac().AddMyMvc().Configure<ForwardedHeadersOptions>(options => // X-Forwarded-For
             {
                 options.ForwardLimit = null;