mirror of
https://github.com/minio/minio.git
synced 2025-11-20 18:06:10 -05:00
Simplify PutObjReader for plain-text reader usage (#11470)
This change moves away from a unified constructor for plaintext and encrypted usage. NewPutObjReader is simplified for the plain-text reader use. For encrypted reader use, WithEncryption should be called on an initialized PutObjReader. Plaintext: func NewPutObjReader(rawReader *hash.Reader) *PutObjReader The hash.Reader is used to provide payload size and md5sum to the downstream consumers. This is different from the previous version in that there is no need to pass nil values for unused parameters. Encrypted: func WithEncryption(encReader *hash.Reader, key *crypto.ObjectKey) (*PutObjReader, error) This method sets up encrypted reader along with the key to seal the md5sum produced by the plain-text reader (already setup when NewPutObjReader was called). Usage: ``` pReader := NewPutObjReader(rawReader) // ... other object handler code goes here // Prepare the encrypted hashed reader pReader, err = pReader.WithEncryption(encReader, objEncKey) ```
This commit is contained in:
committed by
GitHub
parent
b8b44c879f
commit
b87fae0049
@@ -20,6 +20,7 @@ import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/hex"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"math/rand"
|
||||
@@ -865,17 +866,23 @@ func (p *PutObjReader) MD5CurrentHexString() string {
|
||||
return hex.EncodeToString(md5sumCurr)
|
||||
}
|
||||
|
||||
// NewPutObjReader returns a new PutObjReader and holds
|
||||
// reference to underlying data stream from client and the encrypted
|
||||
// data reader
|
||||
func NewPutObjReader(rawReader *hash.Reader, encReader *hash.Reader, key *crypto.ObjectKey) *PutObjReader {
|
||||
p := PutObjReader{Reader: rawReader, rawReader: rawReader}
|
||||
|
||||
if key != nil && encReader != nil {
|
||||
p.sealMD5Fn = sealETagFn(*key)
|
||||
p.Reader = encReader
|
||||
// WithEncryption sets up encrypted reader and the sealing for content md5sum
|
||||
// using objEncKey. Unsealed md5sum is computed from the rawReader setup when
|
||||
// NewPutObjReader was called. It returns an error if called on an uninitialized
|
||||
// PutObjReader.
|
||||
func (p *PutObjReader) WithEncryption(encReader *hash.Reader, objEncKey *crypto.ObjectKey) (*PutObjReader, error) {
|
||||
if p.Reader == nil {
|
||||
return nil, errors.New("put-object reader uninitialized")
|
||||
}
|
||||
return &p
|
||||
p.Reader = encReader
|
||||
p.sealMD5Fn = sealETagFn(*objEncKey)
|
||||
return p, nil
|
||||
}
|
||||
|
||||
// NewPutObjReader returns a new PutObjReader. It uses given hash.Reader's
|
||||
// MD5Current method to construct md5sum when requested downstream.
|
||||
func NewPutObjReader(rawReader *hash.Reader) *PutObjReader {
|
||||
return &PutObjReader{Reader: rawReader, rawReader: rawReader}
|
||||
}
|
||||
|
||||
func sealETag(encKey crypto.ObjectKey, md5CurrSum []byte) []byte {
|
||||
|
||||
Reference in New Issue
Block a user