forked from TrueCloudLab/frostfs-s3-gw
[TrueCloudLab#40] Add param to configure xml decoder
This parameter enables parsing xml body without xmlns="http://s3.amazonaws.com/doc/2006-03-01/" attribute for CompleteMultipartUpload requests Signed-off-by: Denis Kirillov <d.kirillov@yadro.com>
This commit is contained in:
parent
680c0dbe3d
commit
0af06c3bd9
12 changed files with 175 additions and 7 deletions
38
internal/xml/decoder.go
Normal file
38
internal/xml/decoder.go
Normal file
|
@ -0,0 +1,38 @@
|
|||
package xml
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
"io"
|
||||
"sync"
|
||||
)
|
||||
|
||||
const awsDefaultNamespace = "http://s3.amazonaws.com/doc/2006-03-01/"
|
||||
|
||||
type DecoderProvider struct {
|
||||
mu sync.RWMutex
|
||||
defaultXMLNSForCompleteMultipart bool
|
||||
}
|
||||
|
||||
func NewDecoderProvider(defaultNamespace bool) *DecoderProvider {
|
||||
return &DecoderProvider{
|
||||
defaultXMLNSForCompleteMultipart: defaultNamespace,
|
||||
}
|
||||
}
|
||||
|
||||
func (d *DecoderProvider) NewCompleteMultipartDecoder(r io.Reader) *xml.Decoder {
|
||||
dec := xml.NewDecoder(r)
|
||||
|
||||
d.mu.RLock()
|
||||
if d.defaultXMLNSForCompleteMultipart {
|
||||
dec.DefaultSpace = awsDefaultNamespace
|
||||
}
|
||||
d.mu.RUnlock()
|
||||
|
||||
return dec
|
||||
}
|
||||
|
||||
func (d *DecoderProvider) UseDefaultNamespaceForCompleteMultipart(useDefaultNamespace bool) {
|
||||
d.mu.Lock()
|
||||
d.defaultXMLNSForCompleteMultipart = useDefaultNamespace
|
||||
d.mu.Unlock()
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue