Browse Source

文章支持密码模式

懒得勤快 3 years ago
parent
commit
b5a30de6d1

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

@@ -344,6 +344,11 @@ namespace Masuit.MyBlogs.Core.Controllers
 
                     goto case RegionLimitMode.ForbidRegion;
             }
+
+            if (HideCategories.Contains(post.CategoryId))
+            {
+                throw new NotFoundException("文章未找到");
+            }
         }
 
         private void Disallow(Post post)

+ 1 - 1
src/Masuit.MyBlogs.Core/Controllers/PostController.cs

@@ -90,7 +90,7 @@ namespace Masuit.MyBlogs.Core.Controllers
 
             ViewBag.Ads = AdsService.GetByWeightedPrice(AdvertiseType.InPage, Request.Location(), post.CategoryId);
             var regex = SearchEngine.LuceneIndexSearcher.CutKeywords(string.IsNullOrWhiteSpace(post.Keyword + post.Label) ? post.Title : post.Keyword + post.Label).Select(Regex.Escape).Join("|");
-            var related = await PostService.GetQuery(p => p.Id != id && (p.LimitMode ?? 0) == RegionLimitMode.All && Regex.IsMatch(p.Title + (p.Keyword ?? "") + (p.Label ?? ""), regex), p => p.AverageViewCount, false).Take(10).Select(p => new { p.Id, p.Title }).Cacheable().ToDictionaryAsync(p => p.Id, p => p.Title);
+            var related = await PostService.GetQuery(PostBaseWhere().And(p => p.Id != id && Regex.IsMatch(p.Title + (p.Keyword ?? "") + (p.Label ?? ""), regex)), p => p.AverageViewCount, false).Take(10).Select(p => new { p.Id, p.Title }).Cacheable().ToDictionaryAsync(p => p.Id, p => p.Title);
             ViewBag.Related = related;
             post.ModifyDate = post.ModifyDate.ToTimeZone(HttpContext.Session.Get<string>(SessionKey.TimeZone));
             post.PostDate = post.PostDate.ToTimeZone(HttpContext.Session.Get<string>(SessionKey.TimeZone));

+ 5 - 0
src/Masuit.MyBlogs.Core/Models/DTO/PostCommand.cs

@@ -110,5 +110,10 @@ namespace Masuit.MyBlogs.Core.Models.DTO
         /// 限制地区,竖线分隔
         /// </summary>
         public string ProtectContentRegions { get; set; }
+        
+        /// <summary>
+        /// 保护密码
+        /// </summary>
+        public string ProtectPassword { get; set; }
     }
 }

+ 6 - 0
src/Masuit.MyBlogs.Core/Models/DTO/PostDto.cs

@@ -151,5 +151,11 @@ namespace Masuit.MyBlogs.Core.Models.DTO
         /// 限制地区,竖线分隔
         /// </summary>
         public string ProtectContentRegions { get; set; }
+
+        /// <summary>
+        /// 保护密码
+        /// </summary>
+        public string ProtectPassword { get; set; }
+        
     }
 }

+ 10 - 0
src/Masuit.MyBlogs.Core/Models/Entity/Post.cs

@@ -169,6 +169,11 @@ namespace Masuit.MyBlogs.Core.Models.Entity
         /// </summary>
         public string ProtectContentRegions { get; set; }
 
+        /// <summary>
+        /// 保护密码
+        /// </summary>
+        public string ProtectPassword { get; set; }
+        
         /// <summary>
         /// 开启rss订阅
         /// </summary>
@@ -257,5 +262,10 @@ namespace Masuit.MyBlogs.Core.Models.Entity
         /// 授权可见
         /// </summary>
         AuthorizeVisiable,
+
+        /// <summary>
+        /// 密码可见
+        /// </summary>
+        Password
     }
 }

+ 23 - 1
src/Masuit.MyBlogs.Core/Views/Post/ProtectContent.cshtml

@@ -14,7 +14,6 @@
         {
             <p class="text-red text-center size20">↓↓↓以下是文章加密部分↓↓↓</p>
             @Html.Raw(await Model.ProtectContent.ReplaceImgAttribute(Model.Title))
-
         }
         else
         {
@@ -57,6 +56,29 @@
         }
     </div>
 }
+@if (!string.IsNullOrEmpty(Model.ProtectContent)&&Model.ProtectContentMode==ProtectContentMode.Password)
+{
+    <div class="row protected-content">
+        @if (Context.Request.Query["password"]!=Model.ProtectPassword)
+        {
+            <p class="text-red text-center size24 margin-bot10">此处内容需要密码可见:</p>
+            <form method="get" enctype="multipart/form-data" class="form-inline">
+                <div class="input-group">
+                    <span class="input-group-addon">密码:</span>
+                    <input class="form-control" type="text" name="password">
+                    <input type="hidden" name="t" value="@SnowFlake.NewId">
+                    <span class="input-group-btn">
+                        <button class="btn btn-info" type="submit">确定</button>
+                    </span>
+                </div>
+            </form>
+        }
+        else
+        {
+            @Html.Raw(await Model.ProtectContent.ReplaceImgAttribute(Model.Title))
+        }
+    </div>
+}
 @if(Model.ProtectContentMode==ProtectContentMode.Regions) {
     if (Model.ProtectContentLimitMode==RegionLimitMode.AllowRegion&&Regex.IsMatch(Context.Request.Location(),Model.ProtectContentRegions)) {
         @Html.Raw(await Model.ProtectContent.ReplaceImgAttribute(Model.Title))

+ 17 - 7
src/Masuit.MyBlogs.Core/wwwroot/Scripts/global/scripts.js

@@ -399,13 +399,23 @@ async function blockCategory(id,name) {
 		animation: true,
 		allowOutsideClick: false
 	}).then(async function() {
-		cookieStore.set("HideCategories",id+"%2C"+(await cookieStore.get("HideCategories")||{value:"0"}).value);
-		swal({
-			text: "屏蔽成功",type:"success",
-			showConfirmButton: false,
-			timer:1500
-		}).catch(swal.noop)
-	}, function() {
+		cookieStore.set({
+          name: "HideCategories",
+          value: id+"%2C"+(await cookieStore.get("HideCategories")||{value:"0"}).value,
+          expires: Date.now() + 24*60*60*365
+        }).then(
+          function() {
+            swal({
+			    text: "屏蔽成功",type:"success",
+			    showConfirmButton: false,
+			    timer:1500
+		    }).catch(swal.noop)
+          },
+          function(reason) {
+            console.error("It failed: ", reason);
+          }
+        );
+    }, function() {
 	}).catch(swal.noop);
 }
 

+ 7 - 0
src/Masuit.MyBlogs.Core/wwwroot/ng-views/views/post/edit.html

@@ -22,6 +22,7 @@
                         <option ng-value="1">评论可见</option>
                         <option ng-value="2">地区可见:</option>
                         <option ng-value="3">授权可见</option>
+                        <option ng-value="4">密码可见</option>
                     </select>
                 </div>
                 <div class="input-group" ng-if="post.ProtectContentMode==2">
@@ -37,6 +38,12 @@
                         </select>
                     </div>
                 </div>
+                <div class="input-group" ng-if="post.ProtectContentMode==4">
+                    <span class="input-group-addon">密码:</span>
+                    <div class="fg-line">
+                        <input class="form-control" ng-model="post.ProtectPassword" style="width: 200px" type="text">
+                    </div>
+                </div>
             </small>
         </h3>
         <div ng-if="post.ProtectContentMode>0">

+ 7 - 0
src/Masuit.MyBlogs.Core/wwwroot/ng-views/views/post/writeblog.html

@@ -42,6 +42,7 @@
                         <option ng-value="1">评论可见</option>
                         <option ng-value="2">地区可见:</option>
                         <option ng-value="3">授权可见</option>
+                        <option ng-value="4">密码可见</option>
                     </select>
                 </div>
                 <div class="input-group" ng-if="post.ProtectContentMode==2">
@@ -56,6 +57,12 @@
                         </select>
                     </div>
                 </div>
+                <div class="input-group" ng-if="post.ProtectContentMode==4">
+                    <span class="input-group-addon">密码:</span>
+                    <div class="fg-line">
+                        <input class="form-control" ng-model="post.ProtectPassword" style="width: 200px" type="text">
+                    </div>
+                </div>
             </small>
         </h3>
         <div ng-if="post.ProtectContentMode>0">