密码查看
This commit is contained in:
parent
f205d83a13
commit
f21dae1058
8
go.mod
8
go.mod
|
@ -10,11 +10,15 @@ require (
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
github.com/gin-contrib/sessions v0.0.5 // indirect
|
||||||
github.com/gin-contrib/sse v0.1.0 // indirect
|
github.com/gin-contrib/sse v0.1.0 // indirect
|
||||||
github.com/go-playground/locales v0.14.0 // indirect
|
github.com/go-playground/locales v0.14.0 // indirect
|
||||||
github.com/go-playground/universal-translator v0.18.0 // indirect
|
github.com/go-playground/universal-translator v0.18.0 // indirect
|
||||||
github.com/go-playground/validator/v10 v10.11.0 // indirect
|
github.com/go-playground/validator/v10 v10.11.1 // indirect
|
||||||
github.com/goccy/go-json v0.9.11 // indirect
|
github.com/goccy/go-json v0.9.11 // indirect
|
||||||
|
github.com/gorilla/context v1.1.1 // indirect
|
||||||
|
github.com/gorilla/securecookie v1.1.1 // indirect
|
||||||
|
github.com/gorilla/sessions v1.2.1 // indirect
|
||||||
github.com/json-iterator/go v1.1.12 // indirect
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
github.com/leodido/go-urn v1.2.1 // indirect
|
github.com/leodido/go-urn v1.2.1 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.16 // indirect
|
github.com/mattn/go-isatty v0.0.16 // indirect
|
||||||
|
@ -24,7 +28,7 @@ require (
|
||||||
github.com/ugorji/go/codec v1.2.7 // indirect
|
github.com/ugorji/go/codec v1.2.7 // indirect
|
||||||
golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 // indirect
|
golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 // indirect
|
||||||
golang.org/x/net v0.0.0-20220909164309-bea034e7d591 // indirect
|
golang.org/x/net v0.0.0-20220909164309-bea034e7d591 // indirect
|
||||||
golang.org/x/sys v0.0.0-20220913175220-63ea55921009 // indirect
|
golang.org/x/sys v0.0.0-20220915200043-7b5979e65e41 // indirect
|
||||||
golang.org/x/text v0.3.7 // indirect
|
golang.org/x/text v0.3.7 // indirect
|
||||||
google.golang.org/protobuf v1.28.1 // indirect
|
google.golang.org/protobuf v1.28.1 // indirect
|
||||||
)
|
)
|
||||||
|
|
|
@ -2,6 +2,7 @@ package route
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/gin-contrib/sessions"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github/fthvgb1/wp-go/helper"
|
"github/fthvgb1/wp-go/helper"
|
||||||
"github/fthvgb1/wp-go/models"
|
"github/fthvgb1/wp-go/models"
|
||||||
|
@ -17,6 +18,7 @@ var PostsCache sync.Map
|
||||||
|
|
||||||
type IndexHandle struct {
|
type IndexHandle struct {
|
||||||
c *gin.Context
|
c *gin.Context
|
||||||
|
session sessions.Session
|
||||||
page int
|
page int
|
||||||
pageSize int
|
pageSize int
|
||||||
title string
|
title string
|
||||||
|
@ -39,6 +41,7 @@ type IndexHandle struct {
|
||||||
func NewIndexHandle(ctx *gin.Context) *IndexHandle {
|
func NewIndexHandle(ctx *gin.Context) *IndexHandle {
|
||||||
return &IndexHandle{
|
return &IndexHandle{
|
||||||
c: ctx,
|
c: ctx,
|
||||||
|
session: sessions.Default(ctx),
|
||||||
page: 1,
|
page: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
paginationStep: 1,
|
paginationStep: 1,
|
||||||
|
@ -222,10 +225,10 @@ func index(c *gin.Context) {
|
||||||
post, _ := PostsCache.Load(v.Id)
|
post, _ := PostsCache.Load(v.Id)
|
||||||
pp := post.(*models.WpPosts)
|
pp := post.(*models.WpPosts)
|
||||||
px := *pp
|
px := *pp
|
||||||
formatTitleAndContent(&px)
|
h.formatTitleAndContent(&px)
|
||||||
postIds[i] = px
|
postIds[i] = px
|
||||||
}
|
}
|
||||||
recent, err := recentPosts()
|
recent, err := h.recentPosts()
|
||||||
archive, err := archives()
|
archive, err := archives()
|
||||||
categoryItems, err := categories()
|
categoryItems, err := categories()
|
||||||
q := c.Request.URL.Query().Encode()
|
q := c.Request.URL.Query().Encode()
|
||||||
|
@ -243,14 +246,15 @@ func index(c *gin.Context) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func formatTitleAndContent(post *models.WpPosts) {
|
func (h *IndexHandle) formatTitleAndContent(post *models.WpPosts) {
|
||||||
if post.PostPassword != "" {
|
pw := h.session.Get("post_password")
|
||||||
|
if post.PostPassword != "" && post.PostPassword != pw {
|
||||||
if post.PostTitle != "" {
|
if post.PostTitle != "" {
|
||||||
post.PostTitle = fmt.Sprintf("密码保护:%s", post.PostTitle)
|
post.PostTitle = fmt.Sprintf("密码保护:%s", post.PostTitle)
|
||||||
}
|
}
|
||||||
if post.PostContent != "" {
|
if post.PostContent != "" {
|
||||||
format := `
|
format := `
|
||||||
<form action="/wp-login.php?action=postpass" class="post-password-form" method="post">
|
<form action="/login" class="post-password-form" method="post">
|
||||||
<p>此内容受密码保护。如需查阅,请在下列字段中输入您的密码。</p>
|
<p>此内容受密码保护。如需查阅,请在下列字段中输入您的密码。</p>
|
||||||
<p><label for="pwbox-%d">密码: <input name="post_password" id="pwbox-%d" type="password" size="20"></label> <input type="submit" name="Submit" value="提交"></p>
|
<p><label for="pwbox-%d">密码: <input name="post_password" id="pwbox-%d" type="password" size="20"></label> <input type="submit" name="Submit" value="提交"></p>
|
||||||
</form>`
|
</form>`
|
||||||
|
@ -259,12 +263,12 @@ func formatTitleAndContent(post *models.WpPosts) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func recentPosts() (r []models.WpPosts, err error) {
|
func (h *IndexHandle) recentPosts() (r []models.WpPosts, err error) {
|
||||||
r, err = models.Find[models.WpPosts](models.SqlBuilder{{
|
r, err = models.Find[models.WpPosts](models.SqlBuilder{{
|
||||||
"post_type", "post",
|
"post_type", "post",
|
||||||
}, {"post_status", "publish"}}, "ID,post_title,post_password", "", models.SqlBuilder{{"post_date", "desc"}}, nil, 5)
|
}, {"post_status", "publish"}}, "ID,post_title,post_password", "", models.SqlBuilder{{"post_date", "desc"}}, nil, 5)
|
||||||
for i := 0; i < len(r); i++ {
|
for i := 0; i < len(r); i++ {
|
||||||
formatTitleAndContent(&r[i])
|
h.formatTitleAndContent(&r[i])
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
27
route/login.go
Normal file
27
route/login.go
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
package route
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gin-contrib/sessions"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func login(c *gin.Context) {
|
||||||
|
password := c.PostForm("post_password")
|
||||||
|
ref := c.Request.Referer()
|
||||||
|
if ref == "" {
|
||||||
|
ref = "/"
|
||||||
|
}
|
||||||
|
if password == "" || strings.Replace(password, " ", "", -1) == "" {
|
||||||
|
c.Redirect(304, ref)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
s := sessions.Default(c)
|
||||||
|
s.Set("post_password", password)
|
||||||
|
err := s.Save()
|
||||||
|
if err != nil {
|
||||||
|
c.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.Redirect(302, ref)
|
||||||
|
}
|
|
@ -1,6 +1,8 @@
|
||||||
package route
|
package route
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/gin-contrib/sessions"
|
||||||
|
"github.com/gin-contrib/sessions/cookie"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github/fthvgb1/wp-go/middleware"
|
"github/fthvgb1/wp-go/middleware"
|
||||||
"github/fthvgb1/wp-go/static"
|
"github/fthvgb1/wp-go/static"
|
||||||
|
@ -35,12 +37,15 @@ func SetupRouter() *gin.Engine {
|
||||||
FS: static.FsEx,
|
FS: static.FsEx,
|
||||||
Path: "wp-content",
|
Path: "wp-content",
|
||||||
}))
|
}))
|
||||||
|
store := cookie.NewStore([]byte("secret"))
|
||||||
|
r.Use(sessions.Sessions("go-wp", store))
|
||||||
r.GET("/", index)
|
r.GET("/", index)
|
||||||
r.GET("/page/:page", index)
|
r.GET("/page/:page", index)
|
||||||
r.GET("/p/category/:category", index)
|
r.GET("/p/category/:category", index)
|
||||||
r.GET("/p/tag/:tag", index)
|
r.GET("/p/tag/:tag", index)
|
||||||
r.GET("/p/date/:year/:month", index)
|
r.GET("/p/date/:year/:month", index)
|
||||||
r.GET("/p/date/:year/:month/page/:page", index)
|
r.GET("/p/date/:year/:month/page/:page", index)
|
||||||
|
r.POST("/login", login)
|
||||||
|
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user