handler

package
v0.30.0-rc.4 Latest Latest
Warning

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

Go to latest
Published: Jul 1, 2024 License: AGPL-3.0 Imports: 51 Imported by: 0

Documentation

Index

Constants

View Source
const (
	RetryStrategyExponential = "exponential"
	RetryStrategyConstant    = "constant"
)
View Source
const (
	PolicyStatusIsPublicFalse = "FALSE"
	PolicyStatusIsPublicTrue  = "TRUE"
)
View Source
const (
	// DefaultMaxAge is a default value of Access-Control-Max-Age if this value is not set in a rule.
	DefaultMaxAge = 600
)

Variables

This section is empty.

Functions

func New

func New(log *zap.Logger, obj *layer.Layer, cfg Config, storage APE, ffsid FrostFSID) (api.Handler, error)

New creates new api.Handler using given logger and client.

Types

type APE added in v0.29.0

type APE interface {
	PutBucketPolicy(ns string, cnrID cid.ID, policy []byte, chains []*chain.Chain) error
	DeleteBucketPolicy(ns string, cnrID cid.ID, chainIDs []chain.ID) error
	GetBucketPolicy(ns string, cnrID cid.ID) ([]byte, error)
	SaveACLChains(cid string, chains []*chain.Chain) error
}

APE is Access Policy Engine that needs to save policy and acl info to different places.

type AWSACL

type AWSACL string

AWSACL is aws permission constants.

type AccessControlPolicy

type AccessControlPolicy struct {
	XMLName           xml.Name `xml:"http://s3.amazonaws.com/doc/2006-03-01/ AccessControlPolicy" json:"-"`
	Owner             Owner
	AccessControlList []*Grant `xml:"AccessControlList>Grant"`
}

AccessControlPolicy contains ACL.

type Bucket

type Bucket struct {
	Name         string
	CreationDate string // time string of format "2006-01-02T15:04:05.000Z"
}

Bucket container for bucket metadata.

type Checksum

type Checksum struct {
	ChecksumSHA256 string `xml:"ChecksumSHA256,omitempty"`
}

type CommonPrefix

type CommonPrefix struct {
	Prefix string
}

CommonPrefix container for prefix response in ListObjects's response.

type CompleteMultipartUpload

type CompleteMultipartUpload struct {
	XMLName xml.Name               `xml:"http://s3.amazonaws.com/doc/2006-03-01/ CompleteMultipartUpload"`
	Parts   []*layer.CompletedPart `xml:"Part"`
}

type CompleteMultipartUploadResponse

type CompleteMultipartUploadResponse struct {
	XMLName xml.Name `xml:"http://s3.amazonaws.com/doc/2006-03-01/ CompleteMultipartUploadResult" json:"-"`
	Bucket  string   `xml:"Bucket"`
	Key     string   `xml:"Key"`
	ETag    string   `xml:"ETag"`
}

type Config

type Config interface {
	DefaultPlacementPolicy(namespace string) netmap.PlacementPolicy
	PlacementPolicy(namespace, constraint string) (netmap.PlacementPolicy, bool)
	CopiesNumbers(namespace, constraint string) ([]uint32, bool)
	DefaultCopiesNumbers(namespace string) []uint32
	NewXMLDecoder(io.Reader) *xml.Decoder
	DefaultMaxAge() int
	ResolveZoneList() []string
	IsResolveListAllow() bool
	BypassContentEncodingInChunks() bool
	MD5Enabled() bool
	RetryMaxAttempts() int
	RetryMaxBackoff() time.Duration
	RetryStrategy() RetryStrategy
}

Config contains data which handler needs to keep.

type CopyObjectResponse

type CopyObjectResponse struct {
	XMLName      xml.Name `xml:"http://s3.amazonaws.com/doc/2006-03-01/ CopyObjectResult" json:"-"`
	LastModified string   // time string of format "2006-01-02T15:04:05.000Z"
	ETag         string   // md5sum of the copied object.
}

CopyObjectResponse container returns ETag and LastModified of the successfully copied object.

type DeleteError

type DeleteError struct {
	Code      string `xml:"Code,omitempty"`
	Message   string `xml:"Message,omitempty"`
	Key       string `xml:"Key,omitempty"`
	VersionID string `xml:"VersionId,omitempty"`
}

DeleteError structure.

type DeleteMarkerEntry

type DeleteMarkerEntry struct {
	IsLatest     bool   `xml:"IsLatest"`
	Key          string `xml:"Key"`
	LastModified string `xml:"LastModified"`
	Owner        Owner  `xml:"Owner"`
	VersionID    string `xml:"VersionId"`
}

DeleteMarkerEntry container for deleted object's version in the response of ListBucketObjectVersionsHandler.

type DeleteObjectsRequest

type DeleteObjectsRequest struct {
	XMLName xml.Name `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Delete" json:"-"`
	// Element to enable quiet mode for the request
	Quiet bool `xml:"Quiet,omitempty"`
	// List of objects to be deleted
	Objects []ObjectIdentifier `xml:"Object"`
}

DeleteObjectsRequest -- xml carrying the object key names which should be deleted.

type DeleteObjectsResponse

type DeleteObjectsResponse struct {
	XMLName xml.Name `xml:"http://s3.amazonaws.com/doc/2006-03-01/ DeleteResult" json:"-"`

	// Collection of all deleted objects
	DeletedObjects []DeletedObject `xml:"Deleted,omitempty"`

	// Collection of errors deleting certain objects.
	Errors []DeleteError `xml:"Error,omitempty"`
}

DeleteObjectsResponse container for multiple object deletes.

type DeletedObject

type DeletedObject struct {
	ObjectIdentifier
	DeleteMarker          bool   `xml:"DeleteMarker,omitempty"`
	DeleteMarkerVersionID string `xml:"DeleteMarkerVersionId,omitempty"`
}

DeletedObject carries the key name for the object to delete.

type FrostFSID added in v0.29.0

type FrostFSID interface {
	GetUserAddress(account, user string) (string, error)
	GetUserKey(account, name string) (string, error)
}

type GetObjectAttributesArgs

type GetObjectAttributesArgs struct {
	MaxParts         int
	PartNumberMarker int
	Attributes       []string
	VersionID        string
	Conditional      *conditionalArgs
}

type GetObjectAttributesResponse

type GetObjectAttributesResponse struct {
	ETag         string       `xml:"ETag,omitempty"`
	Checksum     *Checksum    `xml:"Checksum,omitempty"`
	ObjectSize   uint64       `xml:"ObjectSize,omitempty"`
	StorageClass string       `xml:"StorageClass,omitempty"`
	ObjectParts  *ObjectParts `xml:"ObjectParts,omitempty"`
}

type Grant

type Grant struct {
	Grantee    *Grantee
	Permission AWSACL
}

Grant is container for Grantee data.

type Grantee

type Grantee struct {
	XMLName      xml.Name    `xml:"Grantee"`
	XMLNS        string      `xml:"xmlns:xsi,attr"`
	ID           string      `xml:"ID,omitempty"`
	DisplayName  string      `xml:"DisplayName,omitempty"`
	EmailAddress string      `xml:"EmailAddress,omitempty"`
	URI          string      `xml:"URI,omitempty"`
	Type         GranteeType `xml:"xsi:type,attr"`
}

Grantee is info about access rights of some actor.

func NewGrantee

func NewGrantee(t GranteeType) *Grantee

NewGrantee creates new grantee using workaround https://github.com/golang/go/issues/9519#issuecomment-252196382

type GranteeType

type GranteeType string

GranteeType is aws grantee permission type constants.

type InitiateMultipartUploadResponse

type InitiateMultipartUploadResponse struct {
	XMLName  xml.Name `xml:"http://s3.amazonaws.com/doc/2006-03-01/ InitiateMultipartUploadResult" json:"-"`
	Bucket   string   `xml:"Bucket"`
	Key      string   `xml:"Key"`
	UploadID string   `xml:"UploadId"`
}

type Initiator

type Initiator struct {
	ID          string `xml:"ID"`
	DisplayName string `xml:"DisplayName"`
}

type ListBucketsResponse

type ListBucketsResponse struct {
	XMLName xml.Name `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ListAllMyBucketsResult" json:"-"`

	Owner Owner

	// Container for one or more buckets.
	Buckets struct {
		Buckets []Bucket `xml:"Bucket"`
	} // Buckets are nested
}

ListBucketsResponse -- format for list buckets response.

type ListMultipartUploadsResponse

type ListMultipartUploadsResponse struct {
	XMLName            xml.Name          `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ListMultipartUploadsResult" json:"-"`
	Bucket             string            `xml:"Bucket"`
	CommonPrefixes     []CommonPrefix    `xml:"CommonPrefixes"`
	Delimiter          string            `xml:"Delimiter,omitempty"`
	EncodingType       string            `xml:"EncodingType,omitempty"`
	IsTruncated        bool              `xml:"IsTruncated"`
	KeyMarker          string            `xml:"KeyMarker"`
	MaxUploads         int               `xml:"MaxUploads"`
	NextKeyMarker      string            `xml:"NextKeyMarker,omitempty"`
	NextUploadIDMarker string            `xml:"NextUploadIdMarker,omitempty"`
	Prefix             string            `xml:"Prefix"`
	Uploads            []MultipartUpload `xml:"Upload"`
	UploadIDMarker     string            `xml:"UploadIdMarker,omitempty"`
}

type ListObjectsV1Response

type ListObjectsV1Response struct {
	XMLName        xml.Name       `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ListBucketResult" json:"-"`
	CommonPrefixes []CommonPrefix `xml:"CommonPrefixes"`
	Contents       []Object       `xml:"Contents"`
	Delimiter      string         `xml:"Delimiter,omitempty"`
	EncodingType   string         `xml:"EncodingType,omitempty"`
	IsTruncated    bool           `xml:"IsTruncated"`
	Marker         string         `xml:"Marker"`
	MaxKeys        int            `xml:"MaxKeys"`
	Name           string         `xml:"Name"`
	NextMarker     string         `xml:"NextMarker,omitempty"`
	Prefix         string         `xml:"Prefix"`
}

ListObjectsV1Response -- format for ListObjectsV1 response.

type ListObjectsV2Response

type ListObjectsV2Response struct {
	XMLName               xml.Name       `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ListBucketResult" json:"-"`
	CommonPrefixes        []CommonPrefix `xml:"CommonPrefixes"`
	Contents              []Object       `xml:"Contents"`
	ContinuationToken     string         `xml:"ContinuationToken,omitempty"`
	Delimiter             string         `xml:"Delimiter,omitempty"`
	EncodingType          string         `xml:"EncodingType,omitempty"`
	IsTruncated           bool           `xml:"IsTruncated"`
	KeyCount              int            `xml:"KeyCount"`
	MaxKeys               int            `xml:"MaxKeys"`
	Name                  string         `xml:"Name"`
	NextContinuationToken string         `xml:"NextContinuationToken,omitempty"`
	Prefix                string         `xml:"Prefix"`
	StartAfter            string         `xml:"StartAfter,omitempty"`
}

ListObjectsV2Response -- format for ListObjectsV2 response.

type ListObjectsVersionsResponse

type ListObjectsVersionsResponse struct {
	XMLName             xml.Name                `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ListVersionsResult" json:"-"`
	EncodingType        string                  `xml:"EncodingType,omitempty"`
	Name                string                  `xml:"Name"`
	IsTruncated         bool                    `xml:"IsTruncated"`
	KeyMarker           string                  `xml:"KeyMarker"`
	NextKeyMarker       string                  `xml:"NextKeyMarker,omitempty"`
	NextVersionIDMarker string                  `xml:"NextVersionIdMarker,omitempty"`
	VersionIDMarker     string                  `xml:"VersionIdMarker"`
	DeleteMarker        []DeleteMarkerEntry     `xml:"DeleteMarker"`
	Version             []ObjectVersionResponse `xml:"Version"`
	CommonPrefixes      []CommonPrefix          `xml:"CommonPrefixes"`
}

ListObjectsVersionsResponse is a response of ListBucketObjectVersionsHandler.

type ListPartsResponse

type ListPartsResponse struct {
	XMLName              xml.Name      `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ListPartsResult" json:"-"`
	Bucket               string        `xml:"Bucket"`
	Initiator            Initiator     `xml:"Initiator"`
	IsTruncated          bool          `xml:"IsTruncated"`
	Key                  string        `xml:"Key"`
	MaxParts             int           `xml:"MaxParts,omitempty"`
	NextPartNumberMarker int           `xml:"NextPartNumberMarker,omitempty"`
	Owner                Owner         `xml:"Owner"`
	Parts                []*layer.Part `xml:"Part"`
	PartNumberMarker     int           `xml:"PartNumberMarker,omitempty"`
	StorageClass         string        `xml:"StorageClass"`
	UploadID             string        `xml:"UploadId"`
}

type LocationResponse

type LocationResponse struct {
	XMLName  xml.Name `xml:"http://s3.amazonaws.com/doc/2006-03-01/ LocationConstraint" json:"-"`
	Location string   `xml:",chardata"`
}

LocationResponse -- format for location response.

type MultipartUpload

type MultipartUpload struct {
	Initiated    string    `xml:"Initiated"`
	Initiator    Initiator `xml:"Initiator"`
	Key          string    `xml:"Key"`
	Owner        Owner     `xml:"Owner"`
	StorageClass string    `xml:"StorageClass"`
	UploadID     string    `xml:"UploadId"`
}

type Object

type Object struct {
	Key          string
	LastModified string // time string of format "2006-01-02T15:04:05.000Z"
	ETag         string `xml:"ETag,omitempty"`
	Size         uint64

	// Owner of the object.
	Owner *Owner `xml:"Owner,omitempty"`

	// Class of storage used to store the object.
	StorageClass string `xml:"StorageClass"`
}

Object container for object metadata.

type ObjectIdentifier

type ObjectIdentifier struct {
	ObjectName string `xml:"Key"`
	VersionID  string `xml:"VersionId,omitempty"`
}

ObjectIdentifier carries the key name for the object to delete.

type ObjectParts

type ObjectParts struct {
	IsTruncated          bool   `xml:"IsTruncated,omitempty"`
	MaxParts             int    `xml:"MaxParts,omitempty"`
	NextPartNumberMarker int    `xml:"NextPartNumberMarker,omitempty"`
	PartNumberMarker     int    `xml:"PartNumberMarker,omitempty"`
	Parts                []Part `xml:"Part,omitempty"`
	PartsCount           int    `xml:"PartsCount,omitempty"`
}

type ObjectVersionResponse

type ObjectVersionResponse struct {
	ETag         string `xml:"ETag"`
	IsLatest     bool   `xml:"IsLatest"`
	Key          string `xml:"Key"`
	LastModified string `xml:"LastModified"`
	Owner        Owner  `xml:"Owner"`
	Size         uint64 `xml:"Size"`
	StorageClass string `xml:"StorageClass"`
	VersionID    string `xml:"VersionId"`
}

ObjectVersionResponse container for object version in the response of ListBucketObjectVersionsHandler.

type Owner

type Owner struct {
	ID          string
	DisplayName string
}

Owner -- bucket owner/principal.

type Part

type Part struct {
	ChecksumSHA256 string `xml:"ChecksumSHA256,omitempty"`
	PartNumber     int    `xml:"PartNumber,omitempty"`
	Size           int    `xml:"Size,omitempty"`
}

type PolicyStatus added in v0.30.0

type PolicyStatus struct {
	XMLName  xml.Name             `xml:"http://s3.amazonaws.com/doc/2006-03-01/ PolicyStatus" json:"-"`
	IsPublic PolicyStatusIsPublic `xml:"IsPublic"`
}

PolicyStatus contains status of bucket policy.

type PolicyStatusIsPublic added in v0.30.0

type PolicyStatusIsPublic string

type PostResponse

type PostResponse struct {
	Bucket string `xml:"Bucket"`
	Key    string `xml:"Key"`
	ETag   string `xml:"Etag"`
}

PostResponse contains result of posting object.

type RetryStrategy added in v0.29.1

type RetryStrategy string

type StringMap

type StringMap map[string]string

StringMap is a map[string]string.

func (StringMap) MarshalXML

func (s StringMap) MarshalXML(e *xml.Encoder, start xml.StartElement) error

MarshalXML -- StringMap marshals into XML.

type UploadPartCopyResponse

type UploadPartCopyResponse struct {
	ETag         string `xml:"ETag"`
	LastModified string `xml:"LastModified"`
}

type VersioningConfiguration

type VersioningConfiguration struct {
	XMLName   xml.Name `xml:"http://s3.amazonaws.com/doc/2006-03-01/ VersioningConfiguration"`
	Status    string   `xml:"Status,omitempty"`
	MfaDelete string   `xml:"MfaDelete,omitempty"`
}

VersioningConfiguration contains VersioningConfiguration XML representation.

Jump to

Keyboard shortcuts

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