From 4c392b4b525aa08d788ed93025272708767fa295 Mon Sep 17 00:00:00 2001 From: Lukas Schulte Pelkum Date: Mon, 21 Jun 2021 20:09:40 +0200 Subject: [PATCH] Implement raw paste endpoint --- internal/web/web.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/internal/web/web.go b/internal/web/web.go index c6fd663..ee2411f 100644 --- a/internal/web/web.go +++ b/internal/web/web.go @@ -8,6 +8,7 @@ import ( routing "github.com/fasthttp/router" "github.com/lus/pasty/internal/config" "github.com/lus/pasty/internal/static" + "github.com/lus/pasty/internal/storage" v1 "github.com/lus/pasty/internal/web/controllers/v1" "github.com/ulule/limiter/v3" limitFasthttp "github.com/ulule/limiter/v3/drivers/middleware/fasthttp" @@ -28,6 +29,7 @@ func Serve() error { // Route the frontend requests frontend := frontendHandler() + raw := rawHandler() router.GET("/{path:*}", func(ctx *fasthttp.RequestCtx) { path := string(ctx.Path()) if !strings.HasPrefix(path, "/api") && (strings.Count(path, "/") == 1 || strings.HasPrefix(path, "/assets")) { @@ -36,6 +38,9 @@ func Serve() error { } frontend(ctx) return + } else if strings.HasSuffix(strings.TrimSuffix(path, "/"), "/raw") { + raw(ctx) + return } router.NotFound(ctx) }) @@ -101,3 +106,26 @@ func frontendHandler() fasthttp.RequestHandler { } return fs.NewRequestHandler() } + +func rawHandler() fasthttp.RequestHandler { + return func(ctx *fasthttp.RequestCtx) { + path := string(ctx.Path()) + pathSanitized := strings.TrimPrefix(strings.TrimSuffix(path, "/"), "/") + pasteID := strings.TrimSuffix(pathSanitized, "/raw") + + paste, err := storage.Current.Get(pasteID) + if err != nil { + ctx.SetStatusCode(fasthttp.StatusInternalServerError) + ctx.SetBodyString(err.Error()) + return + } + + if paste == nil { + ctx.SetStatusCode(fasthttp.StatusNotFound) + ctx.SetBodyString("paste not found") + return + } + + ctx.SetBodyString(paste.Content) + } +}