域名限制
This commit is contained in:
parent
5c9107fd03
commit
90120056d4
|
@ -60,5 +60,5 @@ func getCommentByIds(args ...any) (map[uint64]models.WpComments, error) {
|
||||||
}
|
}
|
||||||
return helper.SliceToMap(r, func(t models.WpComments) uint64 {
|
return helper.SliceToMap(r, func(t models.WpComments) uint64 {
|
||||||
return t.CommentId
|
return t.CommentId
|
||||||
}), err
|
}, true), err
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,3 +57,7 @@ commentsCacheTime: 24h
|
||||||
gzip: false
|
gzip: false
|
||||||
# 提交评论url
|
# 提交评论url
|
||||||
postCommentUrl: http://wp.test/wp-comments-post.php
|
postCommentUrl: http://wp.test/wp-comments-post.php
|
||||||
|
# TrustIps
|
||||||
|
trustIps: []
|
||||||
|
# trust servername 信任的域名
|
||||||
|
trustServerNames: ["xy.test","blog.xy.test"]
|
||||||
|
|
|
@ -231,10 +231,15 @@ func SliceSelfReverse[T any](arr []T) []T {
|
||||||
return arr
|
return arr
|
||||||
}
|
}
|
||||||
|
|
||||||
func SliceToMap[K comparable, V any](arr []V, fn func(V) K) map[K]V {
|
func SliceToMap[K comparable, V any](arr []V, fn func(V) K, isCoverPrev bool) map[K]V {
|
||||||
m := make(map[K]V)
|
m := make(map[K]V)
|
||||||
for _, v := range arr {
|
for _, v := range arr {
|
||||||
k := fn(v)
|
k := fn(v)
|
||||||
|
if !isCoverPrev {
|
||||||
|
if _, ok := m[k]; ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
m[k] = v
|
m[k] = v
|
||||||
}
|
}
|
||||||
return m
|
return m
|
||||||
|
|
|
@ -514,6 +514,7 @@ func TestSliceToMap(t *testing.T) {
|
||||||
type args struct {
|
type args struct {
|
||||||
arr []ss
|
arr []ss
|
||||||
fn func(ss) int
|
fn func(ss) int
|
||||||
|
isCoverPrev bool
|
||||||
}
|
}
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
|
@ -523,17 +524,28 @@ func TestSliceToMap(t *testing.T) {
|
||||||
{
|
{
|
||||||
name: "t1",
|
name: "t1",
|
||||||
args: args{
|
args: args{
|
||||||
arr: []ss{{1, "k1"}, {2, "v2"}},
|
arr: []ss{{1, "k1"}, {2, "v2"}, {2, "v3"}},
|
||||||
fn: func(s ss) int {
|
fn: func(s ss) int {
|
||||||
return s.id
|
return s.id
|
||||||
},
|
},
|
||||||
|
isCoverPrev: true,
|
||||||
|
},
|
||||||
|
want: map[int]ss{1: {1, "k1"}, 2: {2, "v3"}},
|
||||||
|
}, {
|
||||||
|
name: "t2",
|
||||||
|
args: args{
|
||||||
|
arr: []ss{{1, "k1"}, {2, "v2"}, {2, "v3"}},
|
||||||
|
fn: func(s ss) int {
|
||||||
|
return s.id
|
||||||
|
},
|
||||||
|
isCoverPrev: false,
|
||||||
},
|
},
|
||||||
want: map[int]ss{1: {1, "k1"}, 2: {2, "v2"}},
|
want: map[int]ss{1: {1, "k1"}, 2: {2, "v2"}},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
if got := SliceToMap(tt.args.arr, tt.args.fn); !reflect.DeepEqual(got, tt.want) {
|
if got := SliceToMap(tt.args.arr, tt.args.fn, tt.args.isCoverPrev); !reflect.DeepEqual(got, tt.want) {
|
||||||
t.Errorf("SliceToMap() = %v, want %v", got, tt.want)
|
t.Errorf("SliceToMap() = %v, want %v", got, tt.want)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
23
middleware/validateservername.go
Normal file
23
middleware/validateservername.go
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
package middleware
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github/fthvgb1/wp-go/helper"
|
||||||
|
"github/fthvgb1/wp-go/vars"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ValidateServerNames() func(ctx *gin.Context) {
|
||||||
|
serverName := helper.SliceToMap(vars.Conf.TrustServerNames, func(v string) string {
|
||||||
|
return v
|
||||||
|
}, true)
|
||||||
|
return func(c *gin.Context) {
|
||||||
|
if len(serverName) > 0 {
|
||||||
|
if _, ok := serverName[strings.Split(c.Request.Host, ":")[0]]; !ok {
|
||||||
|
c.Status(http.StatusForbidden)
|
||||||
|
c.Abort()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -36,7 +36,13 @@ func SetupRouter() *gin.Engine {
|
||||||
return t.Format("2006年 01月 02日")
|
return t.Format("2006年 01月 02日")
|
||||||
},
|
},
|
||||||
}).SetTemplate()
|
}).SetTemplate()
|
||||||
r.Use(gin.Logger(), middleware.FlowLimit(vars.Conf.MaxRequestSleepNum, vars.Conf.MaxRequestNum, vars.Conf.SingleIpSearchNum, vars.Conf.SleepTime), gin.Recovery(), middleware.SetStaticFileCache)
|
r.Use(
|
||||||
|
middleware.ValidateServerNames(),
|
||||||
|
gin.Logger(),
|
||||||
|
middleware.FlowLimit(vars.Conf.MaxRequestSleepNum, vars.Conf.MaxRequestNum, vars.Conf.SingleIpSearchNum, vars.Conf.SleepTime),
|
||||||
|
gin.Recovery(),
|
||||||
|
middleware.SetStaticFileCache,
|
||||||
|
)
|
||||||
//gzip 因为一般会用nginx做反代时自动使用gzip,所以go这边本身可以不用
|
//gzip 因为一般会用nginx做反代时自动使用gzip,所以go这边本身可以不用
|
||||||
if vars.Conf.Gzip {
|
if vars.Conf.Gzip {
|
||||||
r.Use(gzip.Gzip(gzip.DefaultCompression, gzip.WithExcludedPaths([]string{
|
r.Use(gzip.Gzip(gzip.DefaultCompression, gzip.WithExcludedPaths([]string{
|
||||||
|
|
|
@ -34,6 +34,7 @@ type Config struct {
|
||||||
Gzip bool `yaml:"gzip"`
|
Gzip bool `yaml:"gzip"`
|
||||||
PostCommentUrl string `yaml:"postCommentUrl"`
|
PostCommentUrl string `yaml:"postCommentUrl"`
|
||||||
TrustIps []string `yaml:"trustIps"`
|
TrustIps []string `yaml:"trustIps"`
|
||||||
|
TrustServerNames []string `yaml:"trustServerNames"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Mysql struct {
|
type Mysql struct {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user