From 89b1fdd5c1e5f778121c0c295892b8f1c562deec Mon Sep 17 00:00:00 2001 From: Vincent Boutour Date: Sat, 16 Mar 2024 22:21:03 +0100 Subject: [PATCH] refactor: Using r.Context as a variable Signed-off-by: Vincent Boutour --- pkg/crud/create.go | 6 ++++-- pkg/crud/get.go | 32 ++++++++++++++++++-------------- pkg/crud/post.go | 15 +++++++++------ pkg/crud/rename.go | 5 ++--- pkg/crud/share.go | 3 ++- pkg/crud/stats.go | 3 ++- pkg/crud/upload.go | 4 +++- pkg/crud/upload_chunk.go | 6 ++++-- pkg/crud/webhook.go | 3 ++- pkg/fibr/fibr.go | 6 ++++-- pkg/fibr/renderer.go | 4 +++- 11 files changed, 53 insertions(+), 34 deletions(-) diff --git a/pkg/crud/create.go b/pkg/crud/create.go index 952c3714..1d193a96 100644 --- a/pkg/crud/create.go +++ b/pkg/crud/create.go @@ -14,7 +14,9 @@ import ( ) func (s Service) Create(w http.ResponseWriter, r *http.Request, request provider.Request) { - telemetry.SetRouteTag(r.Context(), "/mkdir") + ctx := r.Context() + + telemetry.SetRouteTag(ctx, "/mkdir") if !request.CanEdit { s.error(w, r, request, model.WrapForbidden(ErrNotAuthorized)) @@ -35,7 +37,7 @@ func (s Service) Create(w http.ResponseWriter, r *http.Request, request provider pathname := request.SubPath(name) - if err = s.storage.Mkdir(r.Context(), pathname, absto.DirectoryPerm); err != nil { + if err = s.storage.Mkdir(ctx, pathname, absto.DirectoryPerm); err != nil { s.error(w, r, request, model.WrapInternal(err)) return } diff --git a/pkg/crud/get.go b/pkg/crud/get.go index fec565b0..8fcf1bca 100644 --- a/pkg/crud/get.go +++ b/pkg/crud/get.go @@ -62,28 +62,30 @@ func (s Service) getWithMessage(w http.ResponseWriter, r *http.Request, request } func (s Service) handleFile(w http.ResponseWriter, r *http.Request, request provider.Request, item absto.Item, message renderer.Message) (renderer.Page, error) { + ctx := r.Context() + if query.GetBool(r, "thumbnail") { - telemetry.SetRouteTag(r.Context(), "/thumbnail") + telemetry.SetRouteTag(ctx, "/thumbnail") s.thumbnail.Serve(w, r, item) return renderer.Page{}, nil } if query.GetBool(r, "stream") { - telemetry.SetRouteTag(r.Context(), "/stream") + telemetry.SetRouteTag(ctx, "/stream") s.thumbnail.Stream(w, r, item) return renderer.Page{}, nil } if query.GetBool(r, "browser") { - telemetry.SetRouteTag(r.Context(), "/browse") + telemetry.SetRouteTag(ctx, "/browse") provider.SetPrefsCookie(w, request) - go s.pushEvent(cntxt.WithoutDeadline(r.Context()), provider.NewAccessEvent(r.Context(), item, r)) + go s.pushEvent(cntxt.WithoutDeadline(ctx), provider.NewAccessEvent(ctx, item, r)) - return s.browse(r.Context(), request, item, message) + return s.browse(ctx, request, item, message) } - telemetry.SetRouteTag(r.Context(), "/download") + telemetry.SetRouteTag(ctx, "/download") return renderer.Page{}, s.serveFile(w, r, item) } @@ -112,6 +114,8 @@ func (s Service) serveFile(w http.ResponseWriter, r *http.Request, item absto.It } func (s Service) handleDir(w http.ResponseWriter, r *http.Request, request provider.Request, item absto.Item, message renderer.Message) (renderer.Page, error) { + ctx := r.Context() + if query.GetBool(r, "stats") { return s.stats(r, request, message) } @@ -122,39 +126,39 @@ func (s Service) handleDir(w http.ResponseWriter, r *http.Request, request provi } if query.GetBool(r, "geojson") { - telemetry.SetRouteTag(r.Context(), "/geojsons") + telemetry.SetRouteTag(ctx, "/geojsons") s.serveGeoJSON(w, r, request, item, items) return renderer.Page{}, nil } if query.GetBool(r, "thumbnail") { - telemetry.SetRouteTag(r.Context(), "/thumbnails") + telemetry.SetRouteTag(ctx, "/thumbnails") s.thumbnail.List(w, r, item, items) return renderer.Page{}, nil } if query.GetBool(r, "download") { - telemetry.SetRouteTag(r.Context(), "/downloads") + telemetry.SetRouteTag(ctx, "/downloads") s.Download(w, r, request, items) return errorReturn(request, err) } - go s.pushEvent(cntxt.WithoutDeadline(r.Context()), provider.NewAccessEvent(r.Context(), item, r)) + go s.pushEvent(cntxt.WithoutDeadline(ctx), provider.NewAccessEvent(ctx, item, r)) if query.GetBool(r, "search") { - telemetry.SetRouteTag(r.Context(), "/searches") + telemetry.SetRouteTag(ctx, "/searches") return s.search(r, request, item, items) } provider.SetPrefsCookie(w, request) if request.IsStory() { - telemetry.SetRouteTag(r.Context(), "/stories") + telemetry.SetRouteTag(ctx, "/stories") return s.story(r, request, item, items) } - telemetry.SetRouteTag(r.Context(), "/directory") - return s.list(r.Context(), request, message, item, items) + telemetry.SetRouteTag(ctx, "/directory") + return s.list(ctx, request, message, item, items) } func (s Service) listFiles(r *http.Request, request provider.Request, item absto.Item) (items []absto.Item, err error) { diff --git a/pkg/crud/post.go b/pkg/crud/post.go index d318343f..4ae2aa25 100644 --- a/pkg/crud/post.go +++ b/pkg/crud/post.go @@ -68,19 +68,20 @@ func (s Service) Post(w http.ResponseWriter, r *http.Request, request provider.R } func (s Service) handleFormURLEncoded(w http.ResponseWriter, r *http.Request, request provider.Request) { + ctx := r.Context() method := r.FormValue("method") switch r.FormValue("type") { case "share": - telemetry.SetRouteTag(r.Context(), "/share") + telemetry.SetRouteTag(ctx, "/share") s.handlePostShare(w, r, request, method) case "webhook": - telemetry.SetRouteTag(r.Context(), "/webhook") + telemetry.SetRouteTag(ctx, "/webhook") s.handlePostWebhook(w, r, request, method) case "description": - telemetry.SetRouteTag(r.Context(), "/description") + telemetry.SetRouteTag(ctx, "/description") s.handlePostDescription(w, r, request) default: @@ -89,6 +90,8 @@ func (s Service) handleFormURLEncoded(w http.ResponseWriter, r *http.Request, re } func (s Service) handleMultipart(w http.ResponseWriter, r *http.Request, request provider.Request) { + ctx := r.Context() + if !request.CanEdit { s.error(w, r, request, model.WrapForbidden(ErrNotAuthorized)) return @@ -114,14 +117,14 @@ func (s Service) handleMultipart(w http.ResponseWriter, r *http.Request, request chunkNumber = fmt.Sprintf("%010d", chunkNumberValue) - telemetry.SetRouteTag(r.Context(), "/chunk") + telemetry.SetRouteTag(ctx, "/chunk") s.uploadChunk(w, r, request, values["filename"], chunkNumber, file) } else { - telemetry.SetRouteTag(r.Context(), "/merge") + telemetry.SetRouteTag(ctx, "/merge") s.mergeChunk(w, r, request, values) } } else { - telemetry.SetRouteTag(r.Context(), "/upload") + telemetry.SetRouteTag(ctx, "/upload") s.upload(w, r, request, values, file) } } diff --git a/pkg/crud/rename.go b/pkg/crud/rename.go index 9a6f964b..42698e68 100644 --- a/pkg/crud/rename.go +++ b/pkg/crud/rename.go @@ -62,7 +62,8 @@ func parseRenameParams(r *http.Request, request provider.Request) (string, strin } func (s Service) Rename(w http.ResponseWriter, r *http.Request, request provider.Request) { - telemetry.SetRouteTag(r.Context(), "/rename") + ctx := r.Context() + telemetry.SetRouteTag(ctx, "/rename") if !request.CanEdit { s.error(w, r, request, model.WrapForbidden(ErrNotAuthorized)) @@ -75,8 +76,6 @@ func (s Service) Rename(w http.ResponseWriter, r *http.Request, request provider return } - ctx := r.Context() - var oldItem absto.Item var newItem absto.Item diff --git a/pkg/crud/share.go b/pkg/crud/share.go index 00b6b41d..79376ec5 100644 --- a/pkg/crud/share.go +++ b/pkg/crud/share.go @@ -122,9 +122,10 @@ func (s Service) createShare(w http.ResponseWriter, r *http.Request, request pro } func (s Service) deleteShare(w http.ResponseWriter, r *http.Request, request provider.Request) { + ctx := r.Context() id := r.FormValue("id") - if err := s.share.Delete(r.Context(), id); err != nil { + if err := s.share.Delete(ctx, id); err != nil { s.error(w, r, request, model.WrapInternal(err)) return } diff --git a/pkg/crud/stats.go b/pkg/crud/stats.go index 9d1960e9..0464905d 100644 --- a/pkg/crud/stats.go +++ b/pkg/crud/stats.go @@ -16,9 +16,10 @@ type entry struct { } func (s Service) stats(r *http.Request, request provider.Request, message renderer.Message) (renderer.Page, error) { + ctx := r.Context() pathname := request.Filepath() - stats, err := s.computeStats(r.Context(), pathname) + stats, err := s.computeStats(ctx, pathname) if err != nil { return renderer.NewPage("", http.StatusInternalServerError, nil), err } diff --git a/pkg/crud/upload.go b/pkg/crud/upload.go index 9ab70db0..d15daaee 100644 --- a/pkg/crud/upload.go +++ b/pkg/crud/upload.go @@ -97,9 +97,11 @@ func (s Service) upload(w http.ResponseWriter, r *http.Request, request provider } func (s Service) postUpload(w http.ResponseWriter, r *http.Request, request provider.Request, fileName string) { + ctx := r.Context() + if r.Header.Get("Accept") == "text/plain" { w.WriteHeader(http.StatusCreated) - provider.SafeWrite(r.Context(), w, fileName) + provider.SafeWrite(ctx, w, fileName) return } diff --git a/pkg/crud/upload_chunk.go b/pkg/crud/upload_chunk.go index 53cb848e..9622226d 100644 --- a/pkg/crud/upload_chunk.go +++ b/pkg/crud/upload_chunk.go @@ -19,6 +19,8 @@ import ( ) func (s Service) uploadChunk(w http.ResponseWriter, r *http.Request, request provider.Request, fileName, chunkNumber string, file io.Reader) { + ctx := r.Context() + if file == nil { s.error(w, r, request, model.WrapInvalid(errors.New("no file provided for save"))) return @@ -46,7 +48,7 @@ func (s Service) uploadChunk(w http.ResponseWriter, r *http.Request, request pro defer func() { if closeErr := writer.Close(); closeErr != nil { - slog.LogAttrs(r.Context(), slog.LevelError, "close chunk writer", slog.Any("error", closeErr)) + slog.LogAttrs(ctx, slog.LevelError, "close chunk writer", slog.Any("error", closeErr)) } if err == nil { @@ -54,7 +56,7 @@ func (s Service) uploadChunk(w http.ResponseWriter, r *http.Request, request pro } if removeErr := os.Remove(tempFile); removeErr != nil { - slog.LogAttrs(r.Context(), slog.LevelError, "remove chunk file", slog.String("file", tempFile), slog.Any("error", removeErr)) + slog.LogAttrs(ctx, slog.LevelError, "remove chunk file", slog.String("file", tempFile), slog.Any("error", removeErr)) } }() diff --git a/pkg/crud/webhook.go b/pkg/crud/webhook.go index 85d1f827..421765e3 100644 --- a/pkg/crud/webhook.go +++ b/pkg/crud/webhook.go @@ -119,9 +119,10 @@ func checkWebhookForm(r *http.Request) (recursive bool, kind provider.WebhookKin } func (s Service) deleteWebhook(w http.ResponseWriter, r *http.Request, request provider.Request) { + ctx := r.Context() id := r.FormValue("id") - if err := s.webhook.Delete(r.Context(), id); err != nil { + if err := s.webhook.Delete(ctx, id); err != nil { s.error(w, r, request, model.WrapInternal(err)) return } diff --git a/pkg/fibr/fibr.go b/pkg/fibr/fibr.go index 02073afd..d339ca38 100644 --- a/pkg/fibr/fibr.go +++ b/pkg/fibr/fibr.go @@ -36,6 +36,8 @@ func New(crudService provider.Crud, rendererService *renderer.Service, shareServ } func (s Service) parseRequest(r *http.Request) (provider.Request, error) { + ctx := r.Context() + request := provider.Request{ Path: r.URL.Path, CanEdit: false, @@ -52,7 +54,7 @@ func (s Service) parseRequest(r *http.Request) (provider.Request, error) { request.Path = "/" + request.Path } - if err := s.parseShare(r.Context(), &request, r.Header.Get("Authorization")); err != nil { + if err := s.parseShare(ctx, &request, r.Header.Get("Authorization")); err != nil { return request, model.WrapUnauthorized(err) } @@ -87,7 +89,7 @@ func (s Service) parseRequest(r *http.Request) (provider.Request, error) { return request, convertAuthenticationError(err) } - if s.login.IsAuthorized(authModel.StoreUser(r.Context(), user), "admin") { + if s.login.IsAuthorized(authModel.StoreUser(ctx, user), "admin") { request.CanEdit = true request.CanShare = true request.CanWebhook = true diff --git a/pkg/fibr/renderer.go b/pkg/fibr/renderer.go index f016d4bb..122a7fec 100644 --- a/pkg/fibr/renderer.go +++ b/pkg/fibr/renderer.go @@ -68,8 +68,10 @@ func (s Service) TemplateFunc(w http.ResponseWriter, r *http.Request) (renderer. return renderer.Page{}, model.WrapMethodNotAllowed(errors.New("you lack of method for calling me")) } + ctx := r.Context() + if r.URL.Path == "/sitemap.xml" { - telemetry.SetRouteTag(r.Context(), "/sitemap.xml") + telemetry.SetRouteTag(ctx, "/sitemap.xml") return renderer.NewPage("sitemap", http.StatusOK, nil), nil }