From 07d12326f0ff59432da3de9f2e1314cb4d748da7 Mon Sep 17 00:00:00 2001 From: Ronmi Ren Date: Wed, 8 Jan 2025 05:59:50 +0800 Subject: [PATCH] support .well-known dir --- cmd/serve.go | 3 ++- lib/web.go | 15 +++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/cmd/serve.go b/cmd/serve.go index 2ce26c8..f6f6810 100644 --- a/cmd/serve.go +++ b/cmd/serve.go @@ -48,7 +48,7 @@ var serveCmd = &cobra.Command{ Branch: branch, } - s, err := lib.UseAPI(bind, f) + s, err := lib.UseAPI(bind, viper.GetString("well-known"), f) if err != nil { fmt.Println("cannot create server: ", err) return @@ -82,5 +82,6 @@ func init() { f.StringP("server", "s", "", "Forgejo server address") f.StringP("token", "k", "", "Forgejo api token") f.StringP("branch", "b", "static-pages", "branch to use") + f.StringP("well-known", "w", "/.well-known", "well-known path, used by LetsEncrypt") viper.BindPFlags(f) } diff --git a/lib/web.go b/lib/web.go index 7c57c9e..5616a9f 100644 --- a/lib/web.go +++ b/lib/web.go @@ -54,13 +54,24 @@ func (f *Forgejo) GetFile(ctx context.Context, headers map[string]string, user, return resp, nil } -func UseAPI(bind string, f *Forgejo) (*http.Server, error) { +func UseAPI(bind, wellKnown string, f *Forgejo) (*http.Server, error) { if f == nil { return nil, errors.New("forgejo is nil") } + mux := http.NewServeMux() + if wellKnown != "" { + mux.Handle( + "/.well-known/", + http.StripPrefix( + "/.well-known/", + http.FileServer(http.Dir(wellKnown)), + ), + ) + } + mux.HandleFunc("/", f.handle) s := &http.Server{ Addr: bind, - Handler: http.HandlerFunc(f.handle), + Handler: mux, } return s, nil }