forked from TrueCloudLab/frostfs-s3-gw
38 lines
814 B
Go
38 lines
814 B
Go
|
// This file is part of https://github.com/aws/smithy-go/blob/f0c6adfdec6e40bb8bb2920a40d016943b4ad762/encoding/httpbinding/path_replace.go
|
||
|
|
||
|
package httpbinding
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"fmt"
|
||
|
)
|
||
|
|
||
|
// EscapePath escapes part of a URL path in Amazon style.
|
||
|
func EscapePath(path string, encodeSep bool) string {
|
||
|
var buf bytes.Buffer
|
||
|
for i := 0; i < len(path); i++ {
|
||
|
c := path[i]
|
||
|
if noEscape[c] || (c == '/' && !encodeSep) {
|
||
|
buf.WriteByte(c)
|
||
|
} else {
|
||
|
fmt.Fprintf(&buf, "%%%02X", c)
|
||
|
}
|
||
|
}
|
||
|
return buf.String()
|
||
|
}
|
||
|
|
||
|
var noEscape [256]bool
|
||
|
|
||
|
func init() {
|
||
|
for i := 0; i < len(noEscape); i++ {
|
||
|
// AWS expects every character except these to be escaped
|
||
|
noEscape[i] = (i >= 'A' && i <= 'Z') ||
|
||
|
(i >= 'a' && i <= 'z') ||
|
||
|
(i >= '0' && i <= '9') ||
|
||
|
i == '-' ||
|
||
|
i == '.' ||
|
||
|
i == '_' ||
|
||
|
i == '~'
|
||
|
}
|
||
|
}
|