diff options
author | tjpcc <tjp@ctrl-c.club> | 2023-10-30 13:41:59 -0600 |
---|---|---|
committer | tjpcc <tjp@ctrl-c.club> | 2023-10-30 13:42:12 -0600 |
commit | 634b82d24335564139b43617d641d6880219e321 (patch) | |
tree | 3c22ada00c48d6cef34aa63a0c1558857363790f /gemini/gemtext/atomconv | |
parent | 3f1973b621ad10e783955244d0d9f39176feda45 (diff) |
support spartan in auto-atom conversion middleware
Diffstat (limited to 'gemini/gemtext/atomconv')
-rw-r--r-- | gemini/gemtext/atomconv/convert.go | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/gemini/gemtext/atomconv/convert.go b/gemini/gemtext/atomconv/convert.go index 30228f3..43a1939 100644 --- a/gemini/gemtext/atomconv/convert.go +++ b/gemini/gemtext/atomconv/convert.go @@ -12,9 +12,11 @@ import ( "strings" "time" + "tildegit.org/tjp/sliderule" "tildegit.org/tjp/sliderule/gemini" "tildegit.org/tjp/sliderule/gemini/gemtext" "tildegit.org/tjp/sliderule/internal/types" + "tildegit.org/tjp/sliderule/spartan" ) // Convert turns a gemini document to Atom format. @@ -43,7 +45,7 @@ func Convert(wr io.Writer, doc gemtext.Document, location *url.URL) error { // gemini://gemini.circumlunar.space/docs/companion/subscription.gmi var Auto = types.Middleware(func(h types.Handler) types.Handler { return types.HandlerFunc(func(ctx context.Context, request *types.Request) *types.Response { - if request.Scheme != "gemini" || !strings.HasSuffix(request.Path, ".atom") { + if !(request.Scheme == "gemini" || request.Scheme == "spartan") || !strings.HasSuffix(request.Path, ".atom") { return h.Handle(ctx, request) } @@ -53,7 +55,24 @@ var Auto = types.Middleware(func(h types.Handler) types.Handler { r.URL = &u response := h.Handle(ctx, &r) - if response.Status != gemini.StatusSuccess { + + var ( + success sliderule.Status + buildSuccess func(string, io.Reader) *sliderule.Response + buildFailure func(error) *sliderule.Response + ) + switch request.Scheme { + case "gemini": + success = gemini.StatusSuccess + buildSuccess = gemini.Success + buildFailure = gemini.Failure + case "spartan": + success = spartan.StatusSuccess + buildSuccess = spartan.Success + buildFailure = spartan.ServerError + } + + if response.Status != success { return response } @@ -68,14 +87,14 @@ var Auto = types.Middleware(func(h types.Handler) types.Handler { doc, err := gemtext.Parse(response.Body) if err != nil { - return gemini.Failure(err) + return buildFailure(err) } buf := &bytes.Buffer{} if err := Convert(buf, doc, request.URL); err != nil { - return gemini.Failure(err) + return buildFailure(err) } - return gemini.Success("application/atom+xml; charset=utf-8", buf) + return buildSuccess("application/atom+xml; charset=utf-8", buf) }) }) |