소스 검색

地理位置检测增加时区检测

懒得勤快 3 년 전
부모
커밋
67be62ab75

+ 11 - 0
src/Masuit.MyBlogs.Core.sln

@@ -13,6 +13,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masuit.Tools.AspNetCore", "
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masuit.Tools.Abstractions", "..\..\Masuit.Tools\Masuit.Tools.Abstractions\Masuit.Tools.Abstractions.csproj", "{0661EDB7-12E8-4F8B-AD0B-1CDEF7D03FAD}"
 EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "工具库", "工具库", "{51B677E0-194F-4A0F-9E86-4B147F22728E}"
+	ProjectSection(SolutionItems) = preProject
+		工具库可用同名nuget包替代 = 工具库可用同名nuget包替代
+	EndProjectSection
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -43,6 +48,12 @@ Global
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 	EndGlobalSection
+	GlobalSection(NestedProjects) = preSolution
+		{3C73BA9B-EBD5-41AF-9B83-D2D5F9BBE022} = {51B677E0-194F-4A0F-9E86-4B147F22728E}
+		{D0D32A1B-13C8-49E6-AC5A-112AD981FD1A} = {51B677E0-194F-4A0F-9E86-4B147F22728E}
+		{F67A19C8-5ACE-4111-8DB5-51A0159AF5A3} = {51B677E0-194F-4A0F-9E86-4B147F22728E}
+		{0661EDB7-12E8-4F8B-AD0B-1CDEF7D03FAD} = {51B677E0-194F-4A0F-9E86-4B147F22728E}
+	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {2D2DF884-78F6-45E0-80C5-25FAE9F0B5C9}
 	EndGlobalSection

+ 6 - 3
src/Masuit.MyBlogs.Core/Controllers/BaseController.cs

@@ -236,7 +236,8 @@ namespace Masuit.MyBlogs.Core.Controllers
                 return;
             }
 
-            var location = Request.Location() + "|" + Request.Headers[HeaderNames.Referer] + "|" + Request.Headers[HeaderNames.UserAgent];
+            var ipLocation = Request.Location();
+            var location = ipLocation + ipLocation.Coodinate + "|" + Request.Headers[HeaderNames.Referer] + "|" + Request.Headers[HeaderNames.UserAgent];
             if (Request.Cookies.TryGetValue(SessionKey.RawIP, out var rawip))
             {
                 var s = rawip.Base64Decrypt();
@@ -295,7 +296,8 @@ namespace Masuit.MyBlogs.Core.Controllers
                 return where;
             }
 
-            var location = Request.Location() + "|" + Request.Headers[HeaderNames.Referer] + "|" + Request.Headers[HeaderNames.UserAgent];
+            var ipLocation = Request.Location();
+            var location = ipLocation + ipLocation.Coodinate + "|" + Request.Headers[HeaderNames.Referer] + "|" + Request.Headers[HeaderNames.UserAgent];
             if (Request.Cookies.TryGetValue(SessionKey.RawIP, out var rawip) && ClientIP != rawip)
             {
                 var s = rawip.Base64Decrypt();
@@ -318,7 +320,8 @@ namespace Masuit.MyBlogs.Core.Controllers
                 return;
             }
 
-            var location = Request.Location() + "|" + Request.Headers[HeaderNames.Referer] + "|" + Request.Headers[HeaderNames.UserAgent];
+            var ipLocation = Request.Location();
+            var location = ipLocation + ipLocation.Coodinate + "|" + Request.Headers[HeaderNames.Referer] + "|" + Request.Headers[HeaderNames.UserAgent];
             if (Request.Cookies.TryGetValue(SessionKey.RawIP, out var rawip) && ClientIP != rawip)
             {
                 var s = rawip.Base64Decrypt();

+ 4 - 2
src/Masuit.MyBlogs.Core/Controllers/SubscribeController.cs

@@ -293,7 +293,8 @@ namespace Masuit.MyBlogs.Core.Controllers
 
         protected Expression<Func<Post, bool>> PostBaseWhere()
         {
-            var location = Request.Location() + "|" + Request.Headers[HeaderNames.Referer] + "|" + Request.Headers[HeaderNames.UserAgent];
+            var ipLocation = Request.Location();
+            var location = ipLocation + ipLocation.Coodinate + "|" + Request.Headers[HeaderNames.Referer] + "|" + Request.Headers[HeaderNames.UserAgent];
             return p => p.Status == Status.Published && p.LimitMode != RegionLimitMode.OnlyForSearchEngine
                 && (p.LimitMode == null || p.LimitMode == RegionLimitMode.All ? true :
                     p.LimitMode == RegionLimitMode.AllowRegion ? Regex.IsMatch(location, p.Regions, RegexOptions.IgnoreCase) :
@@ -304,7 +305,8 @@ namespace Masuit.MyBlogs.Core.Controllers
 
         private void CheckPermission(Post post)
         {
-            var location = Request.Location() + "|" + Request.Headers[HeaderNames.Referer] + "|" + Request.Headers[HeaderNames.UserAgent];
+            var ipLocation = Request.Location();
+            var location = ipLocation + ipLocation.Coodinate + "|" + Request.Headers[HeaderNames.Referer] + "|" + Request.Headers[HeaderNames.UserAgent];
             switch (post.LimitMode)
             {
                 case RegionLimitMode.OnlyForSearchEngine:

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

@@ -109,7 +109,9 @@ public class FirewallAttribute : IAsyncActionFilter
         }
 
         //白名单地区
-        var (location, network, pos) = ip.GetIPLocation();
+        var ipLocation = ip.GetIPLocation();
+        var (location, network, pos) = ipLocation;
+        pos += ipLocation.Coodinate;
         var allowedAreas = CommonHelper.SystemSettings.GetOrAdd("AllowedArea", "").Split(new[] { ',', ',' }, StringSplitOptions.RemoveEmptyEntries);
         if (allowedAreas.Any() && pos.Contains(allowedAreas))
         {

+ 1 - 2
src/Masuit.MyBlogs.Core/Masuit.MyBlogs.Core.csproj

@@ -34,7 +34,6 @@
     <ItemGroup>
         <ProjectReference Include="..\..\..\Masuit.LuceneEFCore.SearchEngine\Masuit.LuceneEFCore.SearchEngine\Masuit.LuceneEFCore.SearchEngine.csproj" />
         <ProjectReference Include="..\..\..\Masuit.Tools\Masuit.Tools.AspNetCore\Masuit.Tools.AspNetCore.csproj" />
-        <ProjectReference Include="..\..\..\Masuit.Tools\Masuit.Tools.Core\Masuit.Tools.Core.csproj" />
     </ItemGroup>
 
     <ItemGroup>
@@ -71,7 +70,7 @@
         <PackageReference Include="System.Linq.Dynamic.Core" Version="1.2.20" />
         <PackageReference Include="TimeZoneConverter" Version="6.0.1" />
         <PackageReference Include="WilderMinds.RssSyndication" Version="1.7.0" />
-        <PackageReference Include="Z.EntityFramework.Plus.EFCore" Version="6.15.2" />
+        <PackageReference Include="Z.EntityFramework.Plus.EFCore" Version="6.16.0" />
     </ItemGroup>
     <ItemGroup>
         <Content Update="appsettings.json">

+ 4 - 2
src/Masuit.MyBlogs.Core/Views/Post/ProtectContent.cshtml

@@ -83,11 +83,13 @@
     return;
 }
 @if(Model.ProtectContentMode==ProtectContentMode.Regions) {
-    if (Model.ProtectContentLimitMode==RegionLimitMode.AllowRegion&&Regex.IsMatch(Context.Request.Location(),Model.ProtectContentRegions, RegexOptions.IgnoreCase)) {
+    var loc = Context.Request.Location();
+    if (Model.ProtectContentLimitMode==RegionLimitMode.AllowRegion&&Regex.IsMatch(loc+loc.Coodinate,Model.ProtectContentRegions, RegexOptions.IgnoreCase)) {
         @Html.Raw(await Model.ProtectContent.ReplaceImgAttribute(Model.Title))
         return;
     }
-    if (Model.ProtectContentLimitMode==RegionLimitMode.ForbidRegion&&!Regex.IsMatch(Context.Request.Location(),Model.ProtectContentRegions, RegexOptions.IgnoreCase)) {
+    if (Model.ProtectContentLimitMode == RegionLimitMode.ForbidRegion && !Regex.IsMatch(loc + loc.Coodinate, Model.ProtectContentRegions, RegexOptions.IgnoreCase))
+    {
         @Html.Raw(await Model.ProtectContent.ReplaceImgAttribute(Model.Title))
         return;
     }

+ 4 - 2
src/Masuit.MyBlogs.Core/Views/Shared/CloudflareTurnstileChallenge.cshtml

@@ -30,7 +30,7 @@
             <h2>检测到您的浏览器不支持javascript或已禁用javascript功能,当前页面无法正常显示!</h2>
         </div>
     </noscript>
-    <h2>请先解决下方的验证码:</h2>
+    <h2>访问前请先解决下方的验证码:</h2>
     <form asp-controller="Firewall" asp-action="CloudflareTurnstileHandler" method="post">
         @Html.AntiForgeryToken()
         <div class="cf-turnstile" data-sitekey="@CommonHelper.SystemSettings["TurnstileClientKey"]" data-theme="light"></div>
@@ -45,7 +45,9 @@
         const interval = setInterval(function() {
             if ($("input[name=cf-turnstile-response]").val().length) {
                 clearInterval(interval);
-                $("#btn").show();
+                setTimeout(function() {
+                    $("#btn").show();
+                }, 2000);
                 $("form").submit();
             }
         },1500);