diff --git a/README.md b/README.md index 08a9ba1..4cacb79 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ## wp-go a simple front of WordPress build with golang. -一个go写的WordPress的前端,功能比较简单,只有列表页和详情页,rss2,主题只有一个twentyfifteen主题,插件的话只有一个简单的列表页的摘要生成和enlighter代码高亮。本身只用于展示文章,不支持restful api调用,添加评论走的转发请求到php的WordPress。因为大量用了泛型功能,所以要求go的版本在1.18以上。 +一个go写的WordPress的前端,功能比较简单,只有列表页和详情页,rss2,主题只有twentyfifteen和twentyseventeen两套主题,插件的话只有一个简单的列表页的摘要生成和enlighter代码高亮。本身只用于展示文章,添加评论走的转发请求到php的WordPress。因为大量用了泛型功能,所以要求go的版本在1.18及以上。 #### 特色功能 diff --git a/config.example.yaml b/config.example.yaml index a614e89..c0c07cf 100644 --- a/config.example.yaml +++ b/config.example.yaml @@ -23,6 +23,10 @@ Mail: Port: 465 Ssl: true +ssl: + cert: "" + key: "" + # 最近文章缓存时间 recentPostCacheTime: 5m # 分类缓存时间 diff --git a/internal/cmd/main.go b/internal/cmd/main.go index 85a7254..b65c393 100644 --- a/internal/cmd/main.go +++ b/internal/cmd/main.go @@ -24,19 +24,19 @@ import ( ) var confPath string -var port string +var address string var middleWareReloadFn func() var intReg = regexp.MustCompile(`^\d`) func init() { flag.StringVar(&confPath, "c", "config.yaml", "config file") - flag.StringVar(&port, "p", "", "port") + flag.StringVar(&address, "p", "", "listen address(port)") flag.Parse() - if port == "" && os.Getenv("PORT") == "" { - port = "80" + if address == "" && os.Getenv("PORT") == "" { + address = "80" } - if intReg.MatchString(port) && !strings.Contains(port, ":") { - port = ":" + port + if intReg.MatchString(address) && !strings.Contains(address, ":") { + address = ":" + address } rand.Seed(time.Now().UnixNano()) err := initConf(confPath) @@ -129,8 +129,16 @@ func signalNotify() { func main() { go signalNotify() Gin, reloadFn := route.SetupRouter() + c := config.Conf.Load() middleWareReloadFn = reloadFn - err := Gin.Run(port) + if c.Ssl.Key != "" && c.Ssl.Cert != "" { + err := Gin.RunTLS(address, c.Ssl.Cert, c.Ssl.Key) + if err != nil { + panic(err) + } + return + } + err := Gin.Run(address) if err != nil { panic(err) } diff --git a/internal/pkg/config/config.go b/internal/pkg/config/config.go index 026020b..8302f16 100644 --- a/internal/pkg/config/config.go +++ b/internal/pkg/config/config.go @@ -11,6 +11,7 @@ import ( var Conf safety.Var[Config] type Config struct { + Ssl Ssl `yaml:"ssl"` Mysql Mysql `yaml:"mysql"` Mail Mail `yaml:"mail"` RecentPostCacheTime time.Duration `yaml:"recentPostCacheTime"` @@ -41,6 +42,11 @@ type Config struct { PostOrder string `yaml:"postOrder"` } +type Ssl struct { + Cert string `yaml:"cert"` + Key string `yaml:"key"` +} + type Mail struct { User string `yaml:"user"` Alias string `yaml:"alias"` diff --git a/internal/plugins/gravatar.go b/internal/plugins/gravatar.go index 1ebb7c5..dbb5cb1 100644 --- a/internal/plugins/gravatar.go +++ b/internal/plugins/gravatar.go @@ -2,18 +2,16 @@ package plugins import ( "fmt" + "github.com/fthvgb1/wp-go/helper/number" str "github.com/fthvgb1/wp-go/helper/strings" "github.com/fthvgb1/wp-go/internal/wpconfig" - "math/rand" "net/url" "strings" - "time" ) func Gravatar(email string, isTls bool) (u string) { email = strings.Trim(email, " \t\n\r\000\x0B") - rand.Seed(time.Now().UnixNano()) - num := rand.Intn(3) + num := number.Rand(0, 2) h := "" if email != "" { h = str.Md5(strings.ToLower(email)) diff --git a/internal/plugins/pagination.go b/internal/plugins/pagination.go index bdc68d5..d4e93bf 100644 --- a/internal/plugins/pagination.go +++ b/internal/plugins/pagination.go @@ -29,7 +29,7 @@ var twentyFifteen = PageEle{ %d`, } -func (p PageEle) Current(page int) string { +func (p PageEle) Current(page, totalPage int) string { return fmt.Sprintf(p.CurrentEle, page) } diff --git a/plugin/pagination/pagination.go b/plugin/pagination/pagination.go index 32b05ca..1783c4e 100644 --- a/plugin/pagination/pagination.go +++ b/plugin/pagination/pagination.go @@ -6,7 +6,7 @@ import ( ) type Elements interface { - Current(page int) string + Current(page, totalPage int) string Prev(url string) string Next(url string) string Dots() string @@ -68,7 +68,7 @@ func (p ParsePagination) ToHtml() (html string) { for page := start; page <= end; page++ { h := "" if p.CurrentPage == page { - h = p.Current(page) + h = p.Current(page, p.TotalPage) } else { h = p.Middle(page, p.Url(p.Path, p.Query, page)) }