From 1fd4dc4ef087307fcee5b5a92627548013dfb9fb Mon Sep 17 00:00:00 2001 From: ExplodingDragon Date: Tue, 15 Apr 2025 20:11:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=A8=A1=E6=9D=BF=E6=B8=B2?= =?UTF-8?q?=E6=9F=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.go | 8 +++++--- errors.html.tmpl | 2 +- go.mod | 5 +++-- go.sum | 17 +++++------------ pkg/renders/gotemplate.go | 6 ++---- pkg/server.go | 8 ++++++-- pkg/utils/template.go | 16 ++++++++++++++-- 7 files changed, 36 insertions(+), 26 deletions(-) diff --git a/config.go b/config.go index 711332d..87ea141 100644 --- a/config.go +++ b/config.go @@ -52,13 +52,13 @@ func (c *Config) NewPageServerOptions() (*pkg.ServerOptions, error) { if c.Page.DefaultBranch == "" { c.Page.DefaultBranch = "gh-pages" } - defaultErr := utils.NewTemplate(defaultErrPage) + defaultErr := utils.MustTemplate(defaultErrPage) if c.Page.ErrUnknownPage != "" { data, err := os.ReadFile(c.Page.ErrUnknownPage) if err != nil { return nil, errors.Wrapf(err, "failed to read file %s", string(data)) } - c.pageErrUnknown = utils.NewTemplate(c.Page.ErrUnknownPage) + c.pageErrUnknown = utils.MustTemplate(string(data)) } else { c.pageErrUnknown = defaultErr } @@ -67,7 +67,7 @@ func (c *Config) NewPageServerOptions() (*pkg.ServerOptions, error) { if err != nil { return nil, errors.Wrapf(err, "failed to read file %s", c.Page.ErrNotFoundPage) } - c.pageErrNotFound = utils.NewTemplate(string(data)) + c.pageErrNotFound = utils.MustTemplate(string(data)) } else { c.pageErrNotFound = defaultErr } @@ -97,6 +97,7 @@ func (c *Config) ErrorHandler(w http.ResponseWriter, r *http.Request, err error) if errors.Is(err, os.ErrNotExist) { w.WriteHeader(http.StatusNotFound) if err = c.pageErrNotFound.Execute(w, utils.NewTemplateInject(r, map[string]any{ + "UUID": r.Header.Get("Session-ID"), "Error": err, "Path": r.URL.Path, "Code": 404, @@ -106,6 +107,7 @@ func (c *Config) ErrorHandler(w http.ResponseWriter, r *http.Request, err error) } else { w.WriteHeader(http.StatusInternalServerError) if err = c.pageErrUnknown.Execute(w, utils.NewTemplateInject(r, map[string]any{ + "UUID": r.Header.Get("Session-ID"), "Error": err, "Path": r.URL.Path, "Code": 500, diff --git a/errors.html.tmpl b/errors.html.tmpl index 687601f..566ee4d 100644 --- a/errors.html.tmpl +++ b/errors.html.tmpl @@ -12,6 +12,6 @@ {{ if eq .Code 404 }}

404 Not Found

{{ else }}

500 Unknown Error

{{ end }}
-
Gitea Pages
+
Gitea Pages/{{ .UUID }}
\ No newline at end of file diff --git a/go.mod b/go.mod index 6f8cf38..c3d7337 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,9 @@ go 1.24.2 require ( code.gitea.io/sdk/gitea v0.21.0 github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b + github.com/go-task/slim-sprig/v3 v3.0.0 + github.com/gobwas/glob v0.2.3 + github.com/google/uuid v1.6.0 github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 github.com/pkg/errors v0.9.1 github.com/stretchr/testify v1.10.0 @@ -17,8 +20,6 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/davidmz/go-pageant v1.0.2 // indirect github.com/go-fed/httpsig v1.1.0 // indirect - github.com/go-task/slim-sprig/v3 v3.0.0 // indirect - github.com/gobwas/glob v0.2.3 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.uber.org/multierr v1.11.0 // indirect diff --git a/go.sum b/go.sum index 089ebee..2ae0fd7 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,3 @@ -code.gitea.io/sdk/gitea v0.19.0 h1:8I6s1s4RHgzxiPHhOQdgim1RWIRcr0LVMbHBjBFXq4Y= -code.gitea.io/sdk/gitea v0.19.0/go.mod h1:IG9xZJoltDNeDSW0qiF2Vqx5orMWa7OhVWrjvrd5NpI= code.gitea.io/sdk/gitea v0.21.0 h1:69n6oz6kEVHRo1+APQQyizkhrZrLsTLXey9142pfkD4= code.gitea.io/sdk/gitea v0.21.0/go.mod h1:tnBjVhuKJCn8ibdyyhvUyxrR1Ca2KHEoTWoukNhXQPA= github.com/42wim/httpsig v1.2.2 h1:ofAYoHUNs/MJOLqQ8hIxeyz2QxOz8qdSVvp3PX/oPgA= @@ -17,8 +15,8 @@ github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1v github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= -github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= @@ -33,12 +31,12 @@ github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpE github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= @@ -46,8 +44,6 @@ go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= -golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -55,14 +51,11 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= -golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= -golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o= +golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/renders/gotemplate.go b/pkg/renders/gotemplate.go index 93b1cc5..c78cde0 100644 --- a/pkg/renders/gotemplate.go +++ b/pkg/renders/gotemplate.go @@ -4,11 +4,8 @@ import ( "bytes" "io" "net/http" - "text/template" "code.d7z.net/d7z-project/gitea-pages/pkg/utils" - - sprig "github.com/go-task/slim-sprig/v3" ) type GoTemplate struct{} @@ -23,7 +20,8 @@ func (g GoTemplate) Render(w http.ResponseWriter, r *http.Request, input io.Read return err } out := &bytes.Buffer{} - parse, err := template.New("tmpl").Funcs(sprig.FuncMap()).Option("missingkey=error").Parse(string(dataB)) + + parse, err := utils.NewTemplate(string(dataB)) if err != nil { return err } diff --git a/pkg/server.go b/pkg/server.go index 52ce3ab..e81fb8c 100644 --- a/pkg/server.go +++ b/pkg/server.go @@ -9,6 +9,8 @@ import ( "strconv" "time" + "github.com/google/uuid" + "github.com/pkg/errors" "go.uber.org/zap" @@ -69,9 +71,11 @@ func NewPageServer(backend core.Backend, options ServerOptions) *Server { } func (s *Server) ServeHTTP(writer http.ResponseWriter, request *http.Request) { + sessionId, _ := uuid.NewRandom() + request.Header.Set("Session-ID", sessionId.String()) defer func() { if e := recover(); e != nil { - zap.L().Error("panic!", zap.Any("error", e)) + zap.L().Error("panic!", zap.Any("error", e), zap.Any("id", sessionId)) if err, ok := e.(error); ok { s.options.DefaultErrorHandler(writer, request, err) } @@ -79,7 +83,7 @@ func (s *Server) ServeHTTP(writer http.ResponseWriter, request *http.Request) { }() err := s.Serve(writer, request) if err != nil { - zap.L().Debug("错误请求", zap.Error(err), zap.Any("request", request.RequestURI)) + zap.L().Debug("错误请求", zap.Error(err), zap.Any("request", request.RequestURI), zap.Any("id", sessionId)) s.options.DefaultErrorHandler(writer, request, err) } } diff --git a/pkg/utils/template.go b/pkg/utils/template.go index b253a3c..95690fa 100644 --- a/pkg/utils/template.go +++ b/pkg/utils/template.go @@ -27,6 +27,18 @@ func NewTemplateInject(r *http.Request, def map[string]any) map[string]any { return def } -func NewTemplate(data string) *template.Template { - return template.Must(template.New("err").Funcs(sprig.FuncMap()).Parse(data)) +func MustTemplate(data string) *template.Template { + newTemplate, err := NewTemplate(data) + if err != nil { + panic(err) + } + return newTemplate +} + +func NewTemplate(data string) (*template.Template, error) { + funcMap := sprig.FuncMap() + delete(funcMap, "env") + delete(funcMap, "expandenv") + t := template.New("tmpl").Funcs(funcMap) + return t.Parse(data) }