From 843708a558c5b9f308c8eafeaa09171a45500202 Mon Sep 17 00:00:00 2001
From: Pavel Pogodaev
Date: Mon, 26 Aug 2024 18:47:33 +0300
Subject: [PATCH] [#134] Support percent-encoding
Signed-off-by: Pavel Pogodaev
---
CHANGELOG.md | 1 +
internal/handler/handler.go | 8 +++++++-
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b322c96..a489027 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,7 @@
This document outlines major changes between releases.
## [Unreleased]
+- Support percent-encoding for GET queries (#134)
### Changed
- Update go version to 1.22 (#132)
diff --git a/internal/handler/handler.go b/internal/handler/handler.go
index 0bbcdb9..4de9d9a 100644
--- a/internal/handler/handler.go
+++ b/internal/handler/handler.go
@@ -215,6 +215,12 @@ func (h *Handler) byObjectName(req *fasthttp.RequestCtx, f func(context.Context,
log = h.log.With(zap.String("bucketname", bucketname), zap.String("key", key))
)
+ unescapedKey, err := url.QueryUnescape(key)
+ if err != nil {
+ logAndSendBucketError(req, log, err)
+ return
+ }
+
ctx := utils.GetContextFromRequest(req)
bktInfo, err := h.getBucketInfo(ctx, bucketname, log)
@@ -223,7 +229,7 @@ func (h *Handler) byObjectName(req *fasthttp.RequestCtx, f func(context.Context,
return
}
- foundOid, err := h.tree.GetLatestVersion(ctx, &bktInfo.CID, key)
+ foundOid, err := h.tree.GetLatestVersion(ctx, &bktInfo.CID, unescapedKey)
if err != nil {
if errors.Is(err, tree.ErrNodeAccessDenied) {
response.Error(req, "Access Denied", fasthttp.StatusForbidden)