utils

package
v1.0.14 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 27, 2025 License: Apache-2.0 Imports: 35 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Base64SumString added in v1.0.11

func Base64SumString(b []byte) string

Md5SumString converts the hash bytes to the string checksum value

func CheckPresignedSignature

func CheckPresignedSignature(ctx *fiber.Ctx, auth AuthData, secret string, debug bool) error

CheckPresignedSignature validates presigned request signature

func CheckValidSignature

func CheckValidSignature(ctx *fiber.Ctx, auth AuthData, secret, checksum string, tdate time.Time, contentLen int64, debug bool) error

CheckValidSignature validates the ctx v4 auth signature

func GetUserMetaData

func GetUserMetaData(headers *fasthttp.RequestHeader) (metadata map[string]string)

func IsBigDataAction

func IsBigDataAction(ctx *fiber.Ctx) bool

func IsChecksumAlgorithmValid added in v1.0.11

func IsChecksumAlgorithmValid(alg types.ChecksumAlgorithm) error

func IsChecksumTypeValid added in v1.0.11

func IsChecksumTypeValid(t types.ChecksumType) error

Validates the provided checksum type

func IsSpecialPayload

func IsSpecialPayload(str string) bool

IsSpecialPayload checks for special authorization types

func IsStreamingPayload added in v1.0.11

func IsStreamingPayload(str string) bool

IsChunkEncoding checks for streaming/unsigned authorization types

func IsValidBucketName

func IsValidBucketName(bucket string) bool

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 NewChunkReader

func NewChunkReader(ctx *fiber.Ctx, r io.Reader, authdata AuthData, region, secret string, date time.Time) (io.Reader, error)

func NewSignedChunkReader added in v1.0.10

func NewSignedChunkReader(r io.Reader, authdata AuthData, region, secret string, date time.Time, chType checksumType) (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 ParsObjectLockHdrs(ctx *fiber.Ctx) (*objLockCfg, error)

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 ParseDeleteObjects

func ParseDeleteObjects(objs []types.ObjectIdentifier) (result []string)

func ParseObjectAttributes

func ParseObjectAttributes(ctx *fiber.Ctx) (map[s3response.ObjectAttributes]struct{}, error)

func ParseTagging added in v1.0.13

func ParseTagging(data []byte, limit TagLimit) (map[string]string, error)

Parses and validates tagging

func ParseUint

func ParseUint(str string) (int32, error)

func SetMetaHeaders

func SetMetaHeaders(ctx *fiber.Ctx, meta map[string]string)

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 ValidateDate

func ValidateDate(date time.Time) error

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

func ParseAuthorization(authorization string) (AuthData, error)

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

func ParsePresignedURIParts(ctx *fiber.Ctx) (AuthData, error)

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

func NewAuthReader(ctx *fiber.Ctx, r io.Reader, auth AuthData, secret string, debug bool) *AuthReader

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.

func (*AuthReader) Read

func (ar *AuthReader) Read(p []byte) (int, error)

Read allows *AuthReader to be used as an io.Reader

type ChecksumValues added in v1.0.13

type ChecksumValues map[types.ChecksumAlgorithm]string

func ParseChecksumHeaders added in v1.0.11

func ParseChecksumHeaders(ctx *fiber.Ctx) (types.ChecksumAlgorithm, ChecksumValues, error)

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) Read

func (cr *ChunkReader) Read(p []byte) (int, error)

Read satisfies the io.Reader for this type

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 CustomHeader

type CustomHeader struct {
	Key   string
	Value string
}

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

func NewHashReader(r io.Reader, expectedSum string, ht HashType) (*HashReader, error)

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

func NewPresignedAuthReader(ctx *fiber.Ctx, r io.Reader, auth AuthData, secret string, debug bool) *PresignedAuthReader

func (*PresignedAuthReader) Read

func (pr *PresignedAuthReader) Read(p []byte) (int, error)

Read allows *PresignedAuthReader to be used as an io.Reader

type TagLimit added in v1.0.13

type TagLimit int

TagLimit specifies the allowed tag count in a tag set

const (
	// Tag limit for bucket tagging
	TagLimitBucket TagLimit = 50
	// Tag limit for object tagging
	TagLimitObject TagLimit = 10
)

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) (*UnsignedChunkReader, error)

func (*UnsignedChunkReader) Read added in v1.0.10

func (ucr *UnsignedChunkReader) Read(p []byte) (int, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL