From 7e2adf4e9f910a29012cbd253af3ba91202c6a11 Mon Sep 17 00:00:00 2001 From: Nikita Zinkevich Date: Fri, 2 Aug 2024 16:14:21 +0300 Subject: [PATCH] [#369] Move playback source files Move git.frostfs.info/TrueCloudLab/frostfs-s3-gw/cmd/frostfs-s3-playback/request package to git.frostfs.info/TrueCloudLab/frostfs-s3-gw/playback. Move playback.yaml example config to root config folder. Signed-off-by: Nikita Zinkevich --- .../config => config/playback}/playback.yaml | 0 .../request => playback}/multipart.go | 2 +- .../request => playback}/request.go | 2 +- .../request => playback}/request_test.go | 2 +- playback/utils/utils.go | 43 +++++++++++++++++++ 5 files changed, 46 insertions(+), 3 deletions(-) rename {cmd/s3-playback/config => config/playback}/playback.yaml (100%) rename {cmd/s3-playback/request => playback}/multipart.go (99%) rename {cmd/s3-playback/request => playback}/request.go (99%) rename {cmd/s3-playback/request => playback}/request_test.go (99%) create mode 100644 playback/utils/utils.go diff --git a/cmd/s3-playback/config/playback.yaml b/config/playback/playback.yaml similarity index 100% rename from cmd/s3-playback/config/playback.yaml rename to config/playback/playback.yaml diff --git a/cmd/s3-playback/request/multipart.go b/playback/multipart.go similarity index 99% rename from cmd/s3-playback/request/multipart.go rename to playback/multipart.go index 8253ceeb..128f2abd 100644 --- a/cmd/s3-playback/request/multipart.go +++ b/playback/multipart.go @@ -1,4 +1,4 @@ -package request +package playback import ( "context" diff --git a/cmd/s3-playback/request/request.go b/playback/request.go similarity index 99% rename from cmd/s3-playback/request/request.go rename to playback/request.go index 15b35f35..d989632f 100644 --- a/cmd/s3-playback/request/request.go +++ b/playback/request.go @@ -1,4 +1,4 @@ -package request +package playback import ( "context" diff --git a/cmd/s3-playback/request/request_test.go b/playback/request_test.go similarity index 99% rename from cmd/s3-playback/request/request_test.go rename to playback/request_test.go index 7a55dea6..bef29922 100644 --- a/cmd/s3-playback/request/request_test.go +++ b/playback/request_test.go @@ -1,4 +1,4 @@ -package request +package playback import ( "strings" diff --git a/playback/utils/utils.go b/playback/utils/utils.go new file mode 100644 index 00000000..09fbfb57 --- /dev/null +++ b/playback/utils/utils.go @@ -0,0 +1,43 @@ +package utils + +import ( + "bytes" + "encoding/base64" + "encoding/xml" + "errors" + "io" +) + +const BodyRecognizeLimit int64 = 128 + +func DetectXML(reader io.Reader) (bool, []byte, error) { + checkBuf := bytes.NewBuffer(nil) + token, err := xml.NewDecoder(io.TeeReader(io.LimitReader(reader, BodyRecognizeLimit), checkBuf)).RawToken() + if err != nil { + var xmlErr *xml.SyntaxError + if errors.Is(err, io.EOF) || errors.As(err, &xmlErr) { + return false, checkBuf.Bytes(), nil + } + return false, checkBuf.Bytes(), err + } + + switch token.(type) { + case xml.StartElement, xml.ProcInst: + return true, checkBuf.Bytes(), nil + } + return false, checkBuf.Bytes(), nil +} + +func ChooseWriter(isXML bool, body *bytes.Buffer) io.Writer { + if !isXML { + return base64.NewEncoder(base64.StdEncoding, body) + } + return body +} + +func ChooseReader(isXml bool, bodyReader io.Reader) io.Reader { + if !isXml { + return base64.NewDecoder(base64.StdEncoding, bodyReader) + } + return bodyReader +}