代码结构优化,添加readme

This commit is contained in:
xing 2022-11-04 10:38:59 +08:00
parent 5880c02eb2
commit faaafa2349
15 changed files with 64 additions and 60 deletions

4
README.md Normal file
View File

@ -0,0 +1,4 @@
## wp-go
a simple front of wordpress build with golang.
一个go写的wordress的前端功能比较简单只有列表页和详情页,rss2主题只有一个twentyfifeen主题插件的话只有一个简单的列表页的摘要生成和enlighter代码高亮。本身只用于展示文章添加评论走的转发请求到php的wordpress。

View File

@ -6,10 +6,10 @@ import (
"fmt"
"github.com/gin-gonic/gin"
"github/fthvgb1/wp-go/actions/common"
"github/fthvgb1/wp-go/config"
"github/fthvgb1/wp-go/logs"
"github/fthvgb1/wp-go/mail"
"github/fthvgb1/wp-go/models"
"github/fthvgb1/wp-go/vars"
"io"
"net/http"
"net/http/cookiejar"
@ -39,7 +39,7 @@ func PostComment(c *gin.Context) {
m := c.PostForm("email")
comment := c.PostForm("comment")
c.Request.Body = io.NopCloser(bytes.NewBuffer(data))
req, err := http.NewRequest("POST", vars.Conf.PostCommentUrl, strings.NewReader(c.Request.PostForm.Encode()))
req, err := http.NewRequest("POST", config.Conf.PostCommentUrl, strings.NewReader(c.Request.PostForm.Encode()))
if err != nil {
return
}
@ -69,7 +69,7 @@ func PostComment(c *gin.Context) {
return
}
su := fmt.Sprintf("%s: %s[%s]发表了评论对文档[%v]的评论", models.Options["siteurl"], author, m, post.PostTitle)
err = mail.SendMail([]string{vars.Conf.Mail.User}, su, comment)
err = mail.SendMail([]string{config.Conf.Mail.User}, su, comment)
logs.ErrPrintln(err, "发送邮件")
}()
return

View File

@ -4,9 +4,9 @@ import (
"context"
"fmt"
"github/fthvgb1/wp-go/cache"
"github/fthvgb1/wp-go/config"
"github/fthvgb1/wp-go/logs"
"github/fthvgb1/wp-go/models"
"github/fthvgb1/wp-go/vars"
"sync"
"time"
)
@ -32,29 +32,29 @@ func InitActionsCommonCache() {
setCacheFunc: archives,
}
searchPostIdsCache = cache.NewMapCacheByFn[string, PostIds](searchPostIds, vars.Conf.SearchPostCacheTime)
searchPostIdsCache = cache.NewMapCacheByFn[string, PostIds](searchPostIds, config.Conf.SearchPostCacheTime)
postListIdsCache = cache.NewMapCacheByFn[string, PostIds](searchPostIds, vars.Conf.PostListCacheTime)
postListIdsCache = cache.NewMapCacheByFn[string, PostIds](searchPostIds, config.Conf.PostListCacheTime)
monthPostsCache = cache.NewMapCacheByFn[string, []uint64](monthPost, vars.Conf.MonthPostCacheTime)
monthPostsCache = cache.NewMapCacheByFn[string, []uint64](monthPost, config.Conf.MonthPostCacheTime)
postContextCache = cache.NewMapCacheByFn[uint64, PostContext](getPostContext, vars.Conf.ContextPostCacheTime)
postContextCache = cache.NewMapCacheByFn[uint64, PostContext](getPostContext, config.Conf.ContextPostCacheTime)
postsCache = cache.NewMapCacheByBatchFn[uint64, models.WpPosts](getPostsByIds, vars.Conf.PostDataCacheTime)
postsCache = cache.NewMapCacheByBatchFn[uint64, models.WpPosts](getPostsByIds, config.Conf.PostDataCacheTime)
categoryCaches = cache.NewSliceCache[models.WpTermsMy](categories, vars.Conf.CategoryCacheTime)
categoryCaches = cache.NewSliceCache[models.WpTermsMy](categories, config.Conf.CategoryCacheTime)
recentPostsCaches = cache.NewSliceCache[models.WpPosts](recentPosts, vars.Conf.RecentPostCacheTime)
recentPostsCaches = cache.NewSliceCache[models.WpPosts](recentPosts, config.Conf.RecentPostCacheTime)
recentCommentsCaches = cache.NewSliceCache[models.WpComments](recentComments, vars.Conf.RecentCommentsCacheTime)
recentCommentsCaches = cache.NewSliceCache[models.WpComments](recentComments, config.Conf.RecentCommentsCacheTime)
postCommentCaches = cache.NewMapCacheByFn[uint64, []uint64](postComments, vars.Conf.PostCommentsCacheTime)
postCommentCaches = cache.NewMapCacheByFn[uint64, []uint64](postComments, config.Conf.PostCommentsCacheTime)
maxPostIdCache = cache.NewSliceCache[uint64](getMaxPostId, vars.Conf.MaxPostIdCacheTime)
maxPostIdCache = cache.NewSliceCache[uint64](getMaxPostId, config.Conf.MaxPostIdCacheTime)
usersCache = cache.NewMapCacheByBatchFn[uint64, models.WpUsers](getUsers, vars.Conf.UserInfoCacheTime)
usersCache = cache.NewMapCacheByBatchFn[uint64, models.WpUsers](getUsers, config.Conf.UserInfoCacheTime)
commentsCache = cache.NewMapCacheByBatchFn[uint64, models.WpComments](getCommentByIds, vars.Conf.CommentsCacheTime)
commentsCache = cache.NewMapCacheByBatchFn[uint64, models.WpComments](getCommentByIds, config.Conf.CommentsCacheTime)
}
func ClearCache() {

View File

@ -1,4 +1,4 @@
package vars
package config
import (
"fmt"

View File

@ -3,29 +3,29 @@ package db
import (
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
"github/fthvgb1/wp-go/vars"
"github/fthvgb1/wp-go/config"
)
var Db *sqlx.DB
func InitDb() error {
dsn := vars.Conf.Mysql.Dsn.GetDsn()
dsn := config.Conf.Mysql.Dsn.GetDsn()
var err error
Db, err = sqlx.Open("mysql", dsn)
if err != nil {
return err
}
if vars.Conf.Mysql.Pool.ConnMaxIdleTime != 0 {
Db.SetConnMaxIdleTime(vars.Conf.Mysql.Pool.ConnMaxLifetime)
if config.Conf.Mysql.Pool.ConnMaxIdleTime != 0 {
Db.SetConnMaxIdleTime(config.Conf.Mysql.Pool.ConnMaxLifetime)
}
if vars.Conf.Mysql.Pool.MaxIdleConn != 0 {
Db.SetMaxIdleConns(vars.Conf.Mysql.Pool.MaxIdleConn)
if config.Conf.Mysql.Pool.MaxIdleConn != 0 {
Db.SetMaxIdleConns(config.Conf.Mysql.Pool.MaxIdleConn)
}
if vars.Conf.Mysql.Pool.MaxOpenConn != 0 {
Db.SetMaxOpenConns(vars.Conf.Mysql.Pool.MaxOpenConn)
if config.Conf.Mysql.Pool.MaxOpenConn != 0 {
Db.SetMaxOpenConns(config.Conf.Mysql.Pool.MaxOpenConn)
}
if vars.Conf.Mysql.Pool.ConnMaxLifetime != 0 {
Db.SetConnMaxLifetime(vars.Conf.Mysql.Pool.ConnMaxLifetime)
if config.Conf.Mysql.Pool.ConnMaxLifetime != 0 {
Db.SetConnMaxLifetime(config.Conf.Mysql.Pool.ConnMaxLifetime)
}
return err
}

4
go.mod
View File

@ -10,6 +10,8 @@ require (
github.com/gin-gonic/gin v1.8.1
github.com/go-sql-driver/mysql v1.6.0
github.com/jmoiron/sqlx v1.3.5
golang.org/x/crypto v0.0.0-20220924013350-4ba4fb4dd9e7
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
gopkg.in/yaml.v2 v2.4.0
)
@ -29,11 +31,9 @@ require (
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pelletier/go-toml/v2 v2.0.5 // indirect
github.com/ugorji/go/codec v1.2.7 // indirect
golang.org/x/crypto v0.0.0-20220924013350-4ba4fb4dd9e7 // indirect
golang.org/x/net v0.0.0-20220923203811-8be639271d50 // indirect
golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 // indirect
golang.org/x/text v0.3.7 // indirect
google.golang.org/protobuf v1.28.1 // indirect
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df // indirect
)

View File

@ -280,7 +280,7 @@ func (r anyArr[T]) Less(i, j int) bool {
return r.fn(r.data[i], r.data[j])
}
func SampleSort[T any](arr []T, fn func(i, j T) bool) {
func SimpleSort[T any](arr []T, fn func(i, j T) bool) {
slice := anyArr[T]{
data: arr,
fn: fn,

View File

@ -608,7 +608,7 @@ func TestRandNum(t *testing.T) {
}
}
func TestSampleSort(t *testing.T) {
func TestSimpleSort(t *testing.T) {
type xy struct {
x int
y int
@ -654,8 +654,8 @@ func TestSampleSort(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if SampleSort(tt.args.arr, tt.args.fn); !reflect.DeepEqual(tt.args.arr, tt.wantR) {
t.Errorf("SampleSort() = %v, want %v", tt.args.arr, tt.wantR)
if SimpleSort(tt.args.arr, tt.args.fn); !reflect.DeepEqual(tt.args.arr, tt.wantR) {
t.Errorf("SimpleSort() = %v, want %v", tt.args.arr, tt.wantR)
}
})
}

View File

@ -3,7 +3,7 @@ package mail
import (
"crypto/tls"
"fmt"
"github/fthvgb1/wp-go/vars"
"github/fthvgb1/wp-go/config"
"gopkg.in/gomail.v2"
"mime"
"strings"
@ -24,8 +24,8 @@ func SendMail(mailTo []string, subject string, body string, a ...AttacheFile) er
gomail.SetEncoding(gomail.Base64),
)
m.SetHeader("From",
m.FormatAddress(vars.Conf.Mail.User,
vars.Conf.Mail.Alias,
m.FormatAddress(config.Conf.Mail.User,
config.Conf.Mail.Alias,
))
m.SetHeader("To", mailTo...)
m.SetHeader("Subject", subject)
@ -43,12 +43,12 @@ func SendMail(mailTo []string, subject string, body string, a ...AttacheFile) er
}
d := gomail.NewDialer(
vars.Conf.Mail.Host,
vars.Conf.Mail.Port,
vars.Conf.Mail.User,
vars.Conf.Mail.Pass,
config.Conf.Mail.Host,
config.Conf.Mail.Port,
config.Conf.Mail.User,
config.Conf.Mail.Pass,
)
if vars.Conf.Mail.Ssl {
if config.Conf.Mail.Ssl {
d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
}
err := d.DialAndSend(m)

View File

@ -1,12 +1,12 @@
package mail
import (
"github/fthvgb1/wp-go/vars"
"github/fthvgb1/wp-go/config"
"testing"
)
func TestSendMail(t *testing.T) {
vars.InitConfig()
config.InitConfig()
type args struct {
mailTo []string
subject string

View File

@ -3,18 +3,18 @@ package main
import (
"github/fthvgb1/wp-go/actions"
"github/fthvgb1/wp-go/actions/common"
"github/fthvgb1/wp-go/config"
"github/fthvgb1/wp-go/db"
"github/fthvgb1/wp-go/models"
"github/fthvgb1/wp-go/plugins"
"github/fthvgb1/wp-go/route"
"github/fthvgb1/wp-go/vars"
"math/rand"
"time"
)
func init() {
rand.Seed(time.Now().UnixNano())
err := vars.InitConfig()
err := config.InitConfig()
if err != nil {
panic(err)
}
@ -40,7 +40,7 @@ func init() {
}
func cronClearCache() {
t := time.NewTicker(vars.Conf.CrontabClearCacheTime)
t := time.NewTicker(config.Conf.CrontabClearCacheTime)
for {
select {
case <-t.C:

View File

@ -4,10 +4,10 @@ import (
"bytes"
"fmt"
"github.com/gin-gonic/gin"
"github/fthvgb1/wp-go/config"
"github/fthvgb1/wp-go/logs"
"github/fthvgb1/wp-go/mail"
"github/fthvgb1/wp-go/models"
"github/fthvgb1/wp-go/vars"
"io"
"io/ioutil"
"net/http"
@ -42,7 +42,7 @@ func RecoverAndSendMail(w io.Writer) func(ctx *gin.Context) {
)
er := mail.SendMail(
[]string{vars.Conf.Mail.User},
[]string{config.Conf.Mail.User},
fmt.Sprintf("%s%s %s 发生错误", fmt.Sprintf(models.Options["siteurl"]), c.FullPath(), time.Now().Format(time.RFC1123Z)), content)
if er != nil {

View File

@ -2,14 +2,14 @@ package middleware
import (
"github.com/gin-gonic/gin"
"github/fthvgb1/wp-go/config"
"github/fthvgb1/wp-go/helper"
"github/fthvgb1/wp-go/vars"
"net/http"
"strings"
)
func ValidateServerNames() func(ctx *gin.Context) {
serverName := helper.SimpleSliceToMap(vars.Conf.TrustServerNames, func(v string) string {
serverName := helper.SimpleSliceToMap(config.Conf.TrustServerNames, func(v string) string {
return v
})
return func(c *gin.Context) {

View File

@ -4,9 +4,9 @@ import (
"fmt"
"github.com/gin-gonic/gin"
"github/fthvgb1/wp-go/cache"
"github/fthvgb1/wp-go/config"
"github/fthvgb1/wp-go/helper"
"github/fthvgb1/wp-go/models"
"github/fthvgb1/wp-go/vars"
"regexp"
"strings"
"time"
@ -19,7 +19,7 @@ var digestCache *cache.MapCache[uint64, string]
var quto = regexp.MustCompile(`&quot; *|&amp; *|&lt; *|&gt; ?|&nbsp; *`)
func InitDigestCache() {
digestCache = cache.NewMapCacheByFn[uint64](digestRaw, vars.Conf.DigestCacheTime)
digestCache = cache.NewMapCacheByFn[uint64](digestRaw, config.Conf.DigestCacheTime)
}
func ClearDigestCache() {
@ -29,7 +29,7 @@ func ClearDigestCache() {
func digestRaw(arg ...any) (string, error) {
str := arg[0].(string)
id := arg[1].(uint64)
limit := vars.Conf.DigestWordCount
limit := config.Conf.DigestWordCount
if limit < 0 {
return str, nil
} else if limit == 0 {

View File

@ -7,11 +7,11 @@ import (
"github.com/gin-contrib/sessions/cookie"
"github.com/gin-gonic/gin"
"github/fthvgb1/wp-go/actions"
"github/fthvgb1/wp-go/config"
"github/fthvgb1/wp-go/helper"
"github/fthvgb1/wp-go/middleware"
"github/fthvgb1/wp-go/static"
"github/fthvgb1/wp-go/templates"
"github/fthvgb1/wp-go/vars"
"html/template"
"net/http"
"time"
@ -21,8 +21,8 @@ func SetupRouter() *gin.Engine {
// Disable Console Color
// gin.DisableConsoleColor()
r := gin.New()
if len(vars.Conf.TrustIps) > 0 {
err := r.SetTrustedProxies(vars.Conf.TrustIps)
if len(config.Conf.TrustIps) > 0 {
err := r.SetTrustedProxies(config.Conf.TrustIps)
if err != nil {
panic(err)
}
@ -40,11 +40,11 @@ func SetupRouter() *gin.Engine {
middleware.ValidateServerNames(),
gin.Logger(),
middleware.RecoverAndSendMail(gin.DefaultErrorWriter),
middleware.FlowLimit(vars.Conf.MaxRequestSleepNum, vars.Conf.MaxRequestNum, vars.Conf.SleepTime),
middleware.FlowLimit(config.Conf.MaxRequestSleepNum, config.Conf.MaxRequestNum, config.Conf.SleepTime),
middleware.SetStaticFileCache,
)
//gzip 因为一般会用nginx做反代时自动使用gzip,所以go这边本身可以不用
if vars.Conf.Gzip {
if config.Conf.Gzip {
r.Use(gzip.Gzip(gzip.DefaultCompression, gzip.WithExcludedPaths([]string{
"/wp-includes/", "/wp-content/",
})))
@ -58,7 +58,7 @@ func SetupRouter() *gin.Engine {
}))
store := cookie.NewStore([]byte("secret"))
r.Use(sessions.Sessions("go-wp", store))
r.GET("/", middleware.SearchLimit(vars.Conf.SingleIpSearchNum), actions.Index)
r.GET("/", middleware.SearchLimit(config.Conf.SingleIpSearchNum), actions.Index)
r.GET("/page/:page", actions.Index)
r.GET("/p/category/:category", actions.Index)
r.GET("/p/category/:category/page/:page", actions.Index)
@ -71,7 +71,7 @@ func SetupRouter() *gin.Engine {
r.GET("/p/:id/feed", actions.PostFeed)
r.GET("/feed", actions.Feed)
r.GET("/comments/feed", actions.CommentsFeed)
r.POST("/comment", middleware.FlowLimit(vars.Conf.MaxRequestSleepNum, 5, vars.Conf.SleepTime), actions.PostComment)
r.POST("/comment", middleware.FlowLimit(config.Conf.MaxRequestSleepNum, 5, config.Conf.SleepTime), actions.PostComment)
if helper.IsContainInArr(gin.Mode(), []string{gin.DebugMode, gin.TestMode}) {
pprof.Register(r, "dev/pprof")
}