2022-09-01 02:31:11 +00:00
|
|
|
package route
|
|
|
|
|
|
|
|
import (
|
2023-01-18 15:02:59 +00:00
|
|
|
"github.com/fthvgb1/wp-go/internal/actions"
|
|
|
|
"github.com/fthvgb1/wp-go/internal/middleware"
|
|
|
|
"github.com/fthvgb1/wp-go/internal/pkg/config"
|
|
|
|
"github.com/fthvgb1/wp-go/internal/static"
|
|
|
|
"github.com/fthvgb1/wp-go/internal/theme"
|
2022-10-07 15:48:42 +00:00
|
|
|
"github.com/gin-contrib/gzip"
|
2022-09-24 09:52:06 +00:00
|
|
|
"github.com/gin-contrib/pprof"
|
2022-09-18 03:57:43 +00:00
|
|
|
"github.com/gin-contrib/sessions"
|
|
|
|
"github.com/gin-contrib/sessions/cookie"
|
2022-09-01 02:31:11 +00:00
|
|
|
"github.com/gin-gonic/gin"
|
2022-09-13 03:23:28 +00:00
|
|
|
"net/http"
|
2022-09-01 02:31:11 +00:00
|
|
|
)
|
|
|
|
|
2022-11-16 02:17:29 +00:00
|
|
|
func SetupRouter() (*gin.Engine, func()) {
|
2022-09-01 02:31:11 +00:00
|
|
|
// Disable Console Color
|
|
|
|
// gin.DisableConsoleColor()
|
2022-09-29 09:23:02 +00:00
|
|
|
r := gin.New()
|
2022-11-15 08:36:21 +00:00
|
|
|
c := config.Conf.Load()
|
|
|
|
if len(c.TrustIps) > 0 {
|
|
|
|
err := r.SetTrustedProxies(c.TrustIps)
|
2022-10-09 15:22:18 +00:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-01-21 06:49:24 +00:00
|
|
|
r.HTMLRender = theme.GetTemplate()
|
|
|
|
|
2023-01-14 04:21:31 +00:00
|
|
|
validServerName, reloadValidServerNameFn := middleware.ValidateServerNames()
|
|
|
|
fl, flReload := middleware.FlowLimit(c.MaxRequestSleepNum, c.MaxRequestNum, c.SleepTime)
|
2022-10-10 13:07:39 +00:00
|
|
|
r.Use(
|
|
|
|
gin.Logger(),
|
2022-11-16 02:17:29 +00:00
|
|
|
validServerName,
|
2023-01-14 04:21:31 +00:00
|
|
|
middleware.RecoverAndSendMail(gin.DefaultErrorWriter),
|
2022-11-16 02:51:39 +00:00
|
|
|
fl,
|
2023-01-14 04:21:31 +00:00
|
|
|
middleware.SetStaticFileCache,
|
2022-10-10 13:07:39 +00:00
|
|
|
)
|
2022-09-17 13:57:45 +00:00
|
|
|
//gzip 因为一般会用nginx做反代时自动使用gzip,所以go这边本身可以不用
|
2022-11-15 08:36:21 +00:00
|
|
|
if c.Gzip {
|
2022-10-07 15:48:42 +00:00
|
|
|
r.Use(gzip.Gzip(gzip.DefaultCompression, gzip.WithExcludedPaths([]string{
|
|
|
|
"/wp-includes/", "/wp-content/",
|
|
|
|
})))
|
|
|
|
}
|
2022-11-16 02:51:39 +00:00
|
|
|
|
2023-01-30 12:16:03 +00:00
|
|
|
f := static.Fs{FS: static.FsDir, Path: "wp-includes"}
|
|
|
|
r.StaticFileFS("/favicon.ico", "favicon.ico", http.FS(static.FsDir))
|
2022-09-13 03:23:28 +00:00
|
|
|
r.StaticFS("/wp-includes", http.FS(f))
|
2023-01-30 12:16:03 +00:00
|
|
|
r.StaticFS("/wp-content/plugins", http.FS(static.Fs{
|
|
|
|
FS: static.FsDir,
|
|
|
|
Path: "wp-content/plugins",
|
2022-09-13 03:23:28 +00:00
|
|
|
}))
|
2023-01-30 12:16:03 +00:00
|
|
|
r.StaticFS("/wp-content/themes", http.FS(static.Fs{
|
|
|
|
FS: static.FsDir,
|
|
|
|
Path: "wp-content/themes",
|
|
|
|
}))
|
|
|
|
if c.UploadDir != "" {
|
|
|
|
r.Static("/wp-content/uploads", c.UploadDir)
|
|
|
|
}
|
2022-09-18 03:57:43 +00:00
|
|
|
store := cookie.NewStore([]byte("secret"))
|
|
|
|
r.Use(sessions.Sessions("go-wp", store))
|
2023-01-14 04:21:31 +00:00
|
|
|
sl, slRload := middleware.SearchLimit(c.SingleIpSearchNum)
|
|
|
|
r.GET("/", sl, actions.Index)
|
|
|
|
r.GET("/page/:page", actions.Index)
|
|
|
|
r.GET("/p/category/:category", actions.Index)
|
|
|
|
r.GET("/p/category/:category/page/:page", actions.Index)
|
|
|
|
r.GET("/p/tag/:tag", actions.Index)
|
|
|
|
r.GET("/p/tag/:tag/page/:page", actions.Index)
|
|
|
|
r.GET("/p/date/:year/:month", actions.Index)
|
|
|
|
r.GET("/p/date/:year/:month/page/:page", actions.Index)
|
|
|
|
r.GET("/p/author/:author", actions.Index)
|
|
|
|
r.GET("/p/author/:author/page/:page", actions.Index)
|
|
|
|
r.POST("/login", actions.Login)
|
|
|
|
r.GET("/p/:id", actions.Detail)
|
|
|
|
r.GET("/p/:id/feed", actions.PostFeed)
|
|
|
|
r.GET("/feed", actions.Feed)
|
|
|
|
r.GET("/comments/feed", actions.CommentsFeed)
|
|
|
|
cfl, _ := middleware.FlowLimit(c.MaxRequestSleepNum, 5, c.SleepTime)
|
|
|
|
r.POST("/comment", cfl, actions.PostComment)
|
2023-01-31 16:58:42 +00:00
|
|
|
if c.Pprof != "" {
|
|
|
|
pprof.Register(r, c.Pprof)
|
2022-09-29 09:23:02 +00:00
|
|
|
}
|
2022-11-16 02:51:39 +00:00
|
|
|
fn := func() {
|
|
|
|
reloadValidServerNameFn()
|
|
|
|
c := config.Conf.Load()
|
|
|
|
flReload(c.MaxRequestSleepNum, c.MaxRequestNum, c.SleepTime)
|
2022-11-16 03:09:25 +00:00
|
|
|
slRload(c.SingleIpSearchNum)
|
2022-11-16 02:51:39 +00:00
|
|
|
}
|
2022-11-16 02:17:29 +00:00
|
|
|
return r, fn
|
2022-09-01 02:31:11 +00:00
|
|
|
}
|