Documentation
¶
Overview ¶
code modified from golang std library src/internal/filepathlite/path.go to support path separator '/' for all platforms.
Index ¶
- func AddCRCChecksum(algo types.ChecksumAlgorithm, crc, partCrc string, partLen int64) (string, error)
- func ApplyOverride(original, override *string) *string
- func Base64SumString(b []byte) string
- func CheckPresignedSignature(ctx *fiber.Ctx, auth AuthData, secret string, streamBody bool) error
- func CheckValidSignature(ctx *fiber.Ctx, auth AuthData, secret, checksum string, tdate time.Time, ...) error
- func ConvertPtrToStringPtr[T any](val *T) *string
- func ConvertToStringPtr[T any](val T) *string
- func ExtractChecksumType(ctx *fiber.Ctx) (checksumType, error)
- func FilterObjectAttributes(attrs map[s3response.ObjectAttributes]struct{}, ...) s3response.GetObjectAttributesResponse
- func FormatDatePtrToString(date *time.Time, format string) *string
- func FromSlash(path string) string
- func GenerateObjectLocation(ctx *fiber.Ctx, virtualDomain, bucket, object string) string
- func GetInt64(n *int64) int64
- func GetQueryParam(ctx *fiber.Ctx, key string) *string
- func GetStringPtr(str string) *string
- func GetUserMetaData(headers *fasthttp.RequestHeader) (metadata map[string]string)
- func IsAnonymousPayloadHashSupported(hash string) error
- func IsChecksumAlgorithmValid(alg types.ChecksumAlgorithm) error
- func IsChecksumComposable(algo types.ChecksumAlgorithm) bool
- func IsChecksumTypeValid(t types.ChecksumType) error
- func IsObjectNameValid(name string) bool
- func IsPresignedURLAuth(ctx *fiber.Ctx) bool
- func IsSpecialPayload(str string) bool
- func IsStreamingPayload(str string) bool
- func IsUnsignedPaylod(hash string) bool
- func IsUnsignedStreamingPayload(str string) bool
- func IsValidBucketName(bucket string) bool
- func IsValidChecksum(checksum string, algorithm types.ChecksumAlgorithm) bool
- func IsValidOwnership(val types.ObjectOwnership) bool
- func IsValidSh256PayloadHeader(value string) bool
- func NewChunkReader(ctx *fiber.Ctx, r io.Reader, authdata AuthData, secret string, date time.Time) (io.Reader, error)
- func NewSignedChunkReader(r io.Reader, authdata AuthData, secret string, date time.Time, ...) (io.Reader, error)
- func ParsObjectLockHdrs(ctx *fiber.Ctx) (*objLockCfg, error)
- func ParseCreateMpChecksumHeaders(ctx *fiber.Ctx) (types.ChecksumAlgorithm, types.ChecksumType, error)
- func ParseDecodedContentLength(ctx *fiber.Ctx) (int64, error)
- func ParseDeleteObjects(objs []types.ObjectIdentifier) (result []string)
- func ParseIfMatchSize(ctx *fiber.Ctx) *int64
- func ParseObjectAttributes(ctx *fiber.Ctx) (map[s3response.ObjectAttributes]struct{}, error)
- func ParsePreconditionDateHeader(date string) *time.Time
- func ParsePreconditionDateHeaders(ctx *fiber.Ctx, opts ...preconditionOpt) (*time.Time, *time.Time)
- func ParsePreconditionMatchHeaders(ctx *fiber.Ctx, opts ...preconditionOpt) (*string, *string)
- func ParseTagging(data []byte, limit TagLimit) (map[string]string, error)
- func ParseUint(str string) (int32, error)
- func SetBucketNameValidationStrict(strict bool)
- func SetMetaHeaders(ctx *fiber.Ctx, meta map[string]string)
- func SetResponseHeaders(ctx *fiber.Ctx, headers []CustomHeader)
- func StreamResponseBody(ctx *fiber.Ctx, rdr io.ReadCloser, bodysize int)
- func ValidateCopySource(copysource string) error
- func ValidateDate(date time.Time) error
- func ValidateVersionId(versionId string) error
- func WithCopySource() preconditionOpt
- type AuthData
- type AuthReader
- type ChecksumValues
- type ChunkReader
- type CompositeChecksumReader
- type ConditionalHeaders
- type ContextKey
- type CustomHeader
- type HashReader
- type HashType
- type PresignedAuthReader
- type TagLimit
- type UnsignedChunkReader
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func AddCRCChecksum ¶ added in v1.0.15
func AddCRCChecksum(algo types.ChecksumAlgorithm, crc, partCrc string, partLen int64) (string, error)
AddCRCChecksum calculates the composite CRC checksum after adding the part crc. Only CRC32, CRC32C, and CRC64NVME are supported. The input checksums must be base64-encoded strings.
func ApplyOverride ¶ added in v1.0.18
ApplyOverride returns the override value if it exists and status is 200, otherwise returns original
func Base64SumString ¶ added in v1.0.11
Base64SumString converts the hash bytes to the b64 encoded string checksum value
func CheckPresignedSignature ¶
CheckPresignedSignature validates presigned request signature
func CheckValidSignature ¶
func CheckValidSignature(ctx *fiber.Ctx, auth AuthData, secret, checksum string, tdate time.Time, contentLen int64, streamBody bool) error
CheckValidSignature validates the ctx v4 auth signature
func ConvertPtrToStringPtr ¶ added in v1.0.17
Converst any pointer to a string pointer
func ConvertToStringPtr ¶ added in v1.0.17
Converts any type to a string pointer
func ExtractChecksumType ¶ added in v1.0.15
Extracts and validates the checksum type from the 'X-Amz-Trailer' header
func FilterObjectAttributes ¶
func FilterObjectAttributes(attrs map[s3response.ObjectAttributes]struct{}, output s3response.GetObjectAttributesResponse) s3response.GetObjectAttributesResponse
func FormatDatePtrToString ¶ added in v1.0.17
Formats the date with the given formatting and returns a string pointer
func GenerateObjectLocation ¶ added in v1.1.0
GenerateObjectLocation generates the object location path-styled or host-styled depending on the gateway configuration
func GetQueryParam ¶ added in v1.0.18
GetQueryParam returns a pointer to the query parameter value if it exists
func GetStringPtr ¶ added in v1.0.17
Returns the provided string pointer
func GetUserMetaData ¶
func GetUserMetaData(headers *fasthttp.RequestHeader) (metadata map[string]string)
func IsAnonymousPayloadHashSupported ¶ added in v1.0.19
IsAnonymousPayloadHashSupported returns error if payload hash is streaming signed. e.g. "STREAMING-AWS4-HMAC-SHA256-PAYLOAD", "STREAMING-AWS4-ECDSA-P256-SHA256-PAYLOAD" ...
func IsChecksumAlgorithmValid ¶ added in v1.0.11
func IsChecksumAlgorithmValid(alg types.ChecksumAlgorithm) error
func IsChecksumComposable ¶ added in v1.0.15
func IsChecksumComposable(algo types.ChecksumAlgorithm) bool
IsChecksumComposable tests if the final foll object crc can be calculated based on the part crc values.
func IsChecksumTypeValid ¶ added in v1.0.11
func IsChecksumTypeValid(t types.ChecksumType) error
Validates the provided checksum type
func IsObjectNameValid ¶ added in v1.0.15
func IsPresignedURLAuth ¶ added in v1.0.19
IsPresignedURLAuth determines if the request is presigned: which is authorization with query params
func IsSpecialPayload ¶
IsSpecialPayload checks for special authorization types
func IsStreamingPayload ¶ added in v1.0.11
IsChunkEncoding checks for streaming/unsigned authorization types
func IsUnsignedPaylod ¶ added in v1.0.19
IsUnsignedPaylod checks if the provided payload hash type is "UNSIGNED-PAYLOAD"
func IsUnsignedStreamingPayload ¶ added in v1.0.15
Checks if the provided string is unsigned payload trailer type
func IsValidBucketName ¶
func IsValidChecksum ¶ added in v1.0.11
func IsValidChecksum(checksum string, algorithm types.ChecksumAlgorithm) bool
func IsValidOwnership ¶ added in v1.0.3
func IsValidOwnership(val types.ObjectOwnership) bool
func IsValidSh256PayloadHeader ¶ added in v1.0.17
IsValidSh256PayloadHeader checks if the provided x-amz-content-sha256 paylod header is valid special paylod type or a valid sh256 hash
func NewChunkReader ¶
func NewSignedChunkReader ¶ added in v1.0.10
func NewSignedChunkReader(r io.Reader, authdata AuthData, secret string, date time.Time, chType checksumType, requireTrailer bool, cLength int64) (io.Reader, error)
NewChunkReader reads from request body io.Reader and parses out the chunk metadata in stream. The headers are validated for proper signatures. Reading from the chunk reader will read only the object data stream without the chunk headers/trailers.
func ParsObjectLockHdrs ¶
func ParseCreateMpChecksumHeaders ¶ added in v1.0.11
func ParseCreateMpChecksumHeaders(ctx *fiber.Ctx) (types.ChecksumAlgorithm, types.ChecksumType, error)
Parses and validates the x-amz-checksum-algorithm and x-amz-checksum-type headers
func ParseDecodedContentLength ¶ added in v1.0.20
ParseDecodedContentLength extracts and validates the 'x-amz-decoded-content-length' from fiber context
func ParseDeleteObjects ¶
func ParseDeleteObjects(objs []types.ObjectIdentifier) (result []string)
func ParseIfMatchSize ¶ added in v1.0.18
ParseIfMatchSize parses the 'x-amz-if-match-size' to *int64 if parsing fails, returns nil
func ParseObjectAttributes ¶
func ParseObjectAttributes(ctx *fiber.Ctx) (map[s3response.ObjectAttributes]struct{}, error)
func ParsePreconditionDateHeader ¶ added in v1.0.18
ParsePreconditionDateHeader tries to parse the given date string as - RFC1123 - RFC3339 both are valid
func ParsePreconditionDateHeaders ¶ added in v1.0.18
ParsePreconditionDateHeaders parses the "If-Modified-Since" and "If-Unmodified-Since" headers from fiber context to *time.Time
func ParsePreconditionMatchHeaders ¶ added in v1.0.18
ParsePreconditionMatchHeaders extracts "If-Match" and "If-None-Match" headers from fiber Ctx
func ParseTagging ¶ added in v1.0.13
Parses and validates tagging
func SetBucketNameValidationStrict ¶ added in v1.0.19
func SetBucketNameValidationStrict(strict bool)
func SetResponseHeaders ¶
func SetResponseHeaders(ctx *fiber.Ctx, headers []CustomHeader)
func StreamResponseBody ¶ added in v1.0.10
func StreamResponseBody(ctx *fiber.Ctx, rdr io.ReadCloser, bodysize int)
Streams the response body by chunks
func ValidateCopySource ¶ added in v1.0.17
ValidateCopySource parses and validates the copy-source
func ValidateDate ¶
func ValidateVersionId ¶ added in v1.0.19
ValidateVersionId check if the input versionId is 'ulid' compatible
func WithCopySource ¶ added in v1.0.18
func WithCopySource() preconditionOpt
Types ¶
type AuthData ¶
type AuthData struct {
Algorithm string
Access string
Region string
SignedHeaders string
Signature string
Date string
}
AuthData is the parsed authorization data from the header
func ParseAuthorization ¶
ParseAuthorization returns the parsed fields for the aws v4 auth header example authorization string from aws docs: Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;range;x-amz-date, Signature=fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024
func ParsePresignedURIParts ¶
https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html
ParsePresignedURIParts parses and validates request URL query parameters ¶
?X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=access-key-id/20130721/us-east-1/s3/aws4_request &X-Amz-Date=20130721T201207Z &X-Amz-Expires=86400 &X-Amz-SignedHeaders=host &X-Amz-Signature=1e68ad45c1db540284a4a1eca3884c293ba1a0ff63ab9db9a15b5b29dfa02cd8
type AuthReader ¶
type AuthReader struct {
// contains filtered or unexported fields
}
AuthReader is an io.Reader that validates the request authorization once the underlying reader returns io.EOF. This is needed for streaming data requests where the data size and checksum are not known until the data is completely read.
func NewAuthReader ¶
NewAuthReader initializes an io.Reader that will verify the request v4 auth when the underlying reader returns io.EOF. This postpones the authorization check until the reader is consumed. So it is important that the consumer of this reader checks for the auth errors while reading.
type ChecksumValues ¶ added in v1.0.13
type ChecksumValues map[types.ChecksumAlgorithm]string
func ParseCalculatedChecksumHeaders ¶ added in v1.0.17
func ParseCalculatedChecksumHeaders(ctx *fiber.Ctx) (ChecksumValues, error)
ParseCalculatedChecksumHeaders parses and validates x-amz-checksum-x header keys e.g x-amz-checksum-crc32, x-amz-checksum-sha256 ...
func ParseChecksumHeadersAndSdkAlgo ¶ added in v1.0.17
func ParseChecksumHeadersAndSdkAlgo(ctx *fiber.Ctx) (types.ChecksumAlgorithm, ChecksumValues, error)
ParseChecksumHeadersAndSdkAlgo parses/validates 'x-amz-sdk-checksum-algorithm' and 'x-amz-checksum-x' precalculated request headers
func ParseCompleteMpChecksumHeaders ¶ added in v1.0.19
func ParseCompleteMpChecksumHeaders(ctx *fiber.Ctx) (ChecksumValues, error)
ParseCompleteMpChecksumHeaders parses and validates the 'CompleteMultipartUpload' x-amz-checksum-x headers by supporting both 'checksum' and 'checksum-<part_length>' formats
func (ChecksumValues) Headers ¶ added in v1.0.13
func (cv ChecksumValues) Headers() string
Headers concatinates checksum algorithm by prefixing each with 'x-amz-checksum-' e.g. "x-amz-checksum-crc64nvme, x-amz-checksum-sha1"
type ChunkReader ¶
type ChunkReader struct {
// contains filtered or unexported fields
}
ChunkReader reads from chunked upload request body, and returns object data stream
func (*ChunkReader) Algorithm ¶ added in v1.1.0
func (cr *ChunkReader) Algorithm() string
Algorithm returns the checksum algorithm
func (*ChunkReader) Checksum ¶ added in v1.1.0
func (cr *ChunkReader) Checksum() string
Checksum returns the parsed trailing checksum
type CompositeChecksumReader ¶ added in v1.0.11
type CompositeChecksumReader struct {
// contains filtered or unexported fields
}
func NewCompositeChecksumReader ¶ added in v1.0.11
func NewCompositeChecksumReader(ht HashType) (*CompositeChecksumReader, error)
NewCompositeChecksumReader initializes a composite checksum processor, which decodes and validates the provided checksums and returns the final checksum based on the previous processings.
The supported checksum types are: - CRC32 - CRC32C - SHA1 - SHA256
func (*CompositeChecksumReader) Process ¶ added in v1.0.11
func (ccr *CompositeChecksumReader) Process(checksum string) error
Decodes and writes the checksum in the hasher
func (*CompositeChecksumReader) Sum ¶ added in v1.0.11
func (ccr *CompositeChecksumReader) Sum() string
Returns the base64 encoded composite checksum
type ConditionalHeaders ¶ added in v1.0.18
type ConditionalHeaders struct {
IfMatch *string
IfNoneMatch *string
IfModSince *time.Time
IfUnmodeSince *time.Time
}
ConditionalHeaders holds the conditional header values
func ParsePreconditionHeaders ¶ added in v1.0.18
func ParsePreconditionHeaders(ctx *fiber.Ctx, opts ...preconditionOpt) ConditionalHeaders
ParsePreconditionHeaders parses the precondition headers: - If-Match - If-None-Match - If-Modified-Since - If-Unmodified-Since
type ContextKey ¶ added in v1.0.15
type ContextKey string
Region, StartTime, IsRoot, Account, AccessKey context locals are set to default values in middlewares.SetDefaultValues to avoid the nil interface conversions
const ( ContextKeyRegion ContextKey = "region" ContextKeyStartTime ContextKey = "start-time" ContextKeyIsRoot ContextKey = "is-root" ContextKeyRootAccessKey ContextKey = "root-access-key" ContextKeyAccount ContextKey = "account" ContextKeyAuthenticated ContextKey = "authenticated" ContextKeyPublicBucket ContextKey = "public-bucket" ContextKeyParsedAcl ContextKey = "parsed-acl" ContextKeySkipResBodyLog ContextKey = "skip-res-body-log" ContextKeyBodyReader ContextKey = "body-reader" ContextKeySkip ContextKey = "__skip" ContextKeyStack ContextKey = "stack" ContextKeyBucketOwner ContextKey = "bucket-owner" )
func (ContextKey) Delete ¶ added in v1.0.17
func (ck ContextKey) Delete(ctx *fiber.Ctx)
func (ContextKey) Values ¶ added in v1.0.15
func (ck ContextKey) Values() []ContextKey
type CustomHeader ¶
type HashReader ¶
type HashReader struct {
// contains filtered or unexported fields
}
HashReader is an io.Reader that calculates the checksum as the data is read
func NewHashReader ¶
NewHashReader intializes an io.Reader from an underlying io.Reader that calculates the checksum while the reader is being read from. If the sum provided is not "", the reader will return an error when the underlying reader returns io.EOF if the checksum does not match the provided expected checksum. If the provided sum is "", then the Sum() method can still be used to get the current checksum for the data read so far.
func (*HashReader) Read ¶
func (hr *HashReader) Read(p []byte) (int, error)
Read allows *HashReader to be used as an io.Reader
func (*HashReader) SetReader ¶ added in v1.0.11
func (hr *HashReader) SetReader(r io.Reader)
func (*HashReader) Sum ¶
func (hr *HashReader) Sum() string
Sum returns the checksum hash of the data read so far
func (*HashReader) Type ¶ added in v1.0.11
func (hr *HashReader) Type() HashType
type HashType ¶
type HashType string
HashType identifies the checksum algorithm to be used
const ( // HashTypeMd5 generates MD5 checksum for the data stream HashTypeMd5 HashType = "md5" // HashTypeSha256 generates SHA256 Base64-Encoded checksum for the data stream HashTypeSha256 HashType = "sha256" // HashTypeSha256Hex generates SHA256 hex encoded checksum for the data stream HashTypeSha256Hex HashType = "sha256-hex" // HashTypeSha1 generates SHA1 Base64-Encoded checksum for the data stream HashTypeSha1 HashType = "sha1" // HashTypeCRC32 generates CRC32 Base64-Encoded checksum for the data stream HashTypeCRC32 HashType = "crc32" // HashTypeCRC32C generates CRC32C Base64-Encoded checksum for the data stream HashTypeCRC32C HashType = "crc32c" // HashTypeCRC64NVME generates CRC64NVME Base64-Encoded checksum for the data stream HashTypeCRC64NVME HashType = "crc64nvme" // HashTypeNone is a no-op checksum for the data stream HashTypeNone HashType = "none" )
type PresignedAuthReader ¶
type PresignedAuthReader struct {
// contains filtered or unexported fields
}
PresignedAuthReader is an io.Reader that validates presigned request authorization once the underlying reader returns io.EOF. This is needed for streaming data requests where the data size is not known until the data is completely read.
func NewPresignedAuthReader ¶
type TagLimit ¶ added in v1.0.13
type TagLimit int
TagLimit specifies the allowed tag count in a tag set
type UnsignedChunkReader ¶ added in v1.0.10
type UnsignedChunkReader struct {
// contains filtered or unexported fields
}
func NewUnsignedChunkReader ¶ added in v1.0.10
func NewUnsignedChunkReader(r io.Reader, ct checksumType, decContentLength int64) (*UnsignedChunkReader, error)
func (*UnsignedChunkReader) Algorithm ¶ added in v1.0.20
func (ucr *UnsignedChunkReader) Algorithm() string
Algorithm returns the checksum algorithm
func (*UnsignedChunkReader) Checksum ¶ added in v1.0.20
func (ucr *UnsignedChunkReader) Checksum() string
Checksum returns the parsed trailing checksum