Documentation
¶
Index ¶
- Variables
- type Authorization
- type BucketFilesystemProvider
- type Credential
- type ErrInvalidAuthorizationHeader
- type ErrInvalidCredential
- type Error
- type ErrorCode
- type Method
- type Object
- type RequestContext
- type Server
- func (s *Server) GetBucketLocation(ctx *RequestContext) *Error
- func (s *Server) GetObject(ctx *RequestContext) *Error
- func (s *Server) HeadBucket(ctx *RequestContext) *Error
- func (s *Server) HeadObject(ctx *RequestContext) *Error
- func (s *Server) ListBuckets(ctx *RequestContext) *Error
- func (s *Server) ListObjectsV2(ctx *RequestContext) *Error
- func (s *Server) ServeHTTP(rw http.ResponseWriter, r *http.Request)
- type SignAWSV4
- type Signer
- type SingleBucketFilesystem
- type SubdirBucketFilesystem
- type WrappedError
Constants ¶
This section is empty.
Variables ¶
var ( AccessDenied = ErrorCode{Code: "AccessDenied", StatusCode: 403} InvalidAccessKeyId = ErrorCode{Code: "InvalidAccessKeyId", StatusCode: 403} SignatureDoesNotMatch = ErrorCode{Code: "SignatureDoesNotMatch", StatusCode: 403} MethodNotAllowed = ErrorCode{Code: "MethodNotAllowed", StatusCode: 405} InvalidRequest = ErrorCode{Code: "InvalidRequest", StatusCode: 400} ExpiredToken = ErrorCode{Code: "ExpiredToken", StatusCode: 400} InvalidArgument = ErrorCode{Code: "InvalidArgument", StatusCode: 400} BadDigest = ErrorCode{Code: "BadDigest", StatusCode: 400} NoSuchKey = ErrorCode{Code: "NoSuchKey", StatusCode: 404} MissingSecurityHeader = ErrorCode{Code: "MissingSecurityHeader", StatusCode: 400} InvalidToken = ErrorCode{Code: "InvalidToken", StatusCode: 400} InvalidObjectState = ErrorCode{Code: "InvalidObjectState", StatusCode: 403} InvalidRange = ErrorCode{Code: "InvalidRange", StatusCode: 416} InvalidBucketName = ErrorCode{Code: "InvalidBucketName", StatusCode: 400} NotImplemented = ErrorCode{Code: "NotImplemented", StatusCode: 501} NoSuchBucket = ErrorCode{Code: "NoSuchBucket", StatusCode: 404} InvalidBucketState = ErrorCode{Code: "InvalidBucketState", StatusCode: 409} InternalError = ErrorCode{Code: "InternalError", StatusCode: 500} )
Functions ¶
This section is empty.
Types ¶
type Authorization ¶
type Authorization struct {
Method []byte
Credentials Credential
SignedHeaders []string
Signature []byte // raw decoded hex
}
func ParseAuthorization ¶
func ParseAuthorization(hdr []byte) (*Authorization, error)
ParseAuthorization parses the contents of the given Authorization header. Returns a non-nil *ErrInvalidAuthorizationHeader when an invalid header is given.
func (Authorization) AppendFormat ¶
func (a Authorization) AppendFormat(b []byte) []byte
type BucketFilesystemProvider ¶ added in v0.5.0
type Credential ¶
type Credential struct {
AccessKeyID []byte
Date time.Time
Region []byte
Service []byte
Method []byte
}
func ParseCredential ¶
func ParseCredential(value []byte) (*Credential, error)
func (Credential) AppendFormat ¶
func (c Credential) AppendFormat(b []byte) []byte
type ErrInvalidAuthorizationHeader ¶
type ErrInvalidAuthorizationHeader struct {
WrappedError
}
func (*ErrInvalidAuthorizationHeader) Error ¶
func (e *ErrInvalidAuthorizationHeader) Error() string
type ErrInvalidCredential ¶
type ErrInvalidCredential struct {
WrappedError
}
func (*ErrInvalidCredential) Error ¶
func (e *ErrInvalidCredential) Error() string
type Method ¶
type Method func(ctx *RequestContext) *Error
type Object ¶
type Object struct {
io.ReadCloser
Size int64
Range *http_range.Range
LastModified time.Time
}
type RequestContext ¶
type RequestContext struct {
*zap.Logger
*http.Request
ID uuid.UUID
Bucket string
Filesystem fs.FS
// contains filtered or unexported fields
}
func (*RequestContext) Header ¶
func (ctx *RequestContext) Header() http.Header
func (*RequestContext) SendKnownError ¶
func (ctx *RequestContext) SendKnownError(err *Error)
SendKnownError replies to the caller with a concrete *Error type using the standard Amazon S3 XML error encoding.
func (*RequestContext) SendXML ¶
func (ctx *RequestContext) SendXML(statusCode int, payload any)
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
func (*Server) GetBucketLocation ¶
func (s *Server) GetBucketLocation(ctx *RequestContext) *Error
func (*Server) GetObject ¶
func (s *Server) GetObject(ctx *RequestContext) *Error
func (*Server) HeadBucket ¶
func (s *Server) HeadBucket(ctx *RequestContext) *Error
func (*Server) HeadObject ¶
func (s *Server) HeadObject(ctx *RequestContext) *Error
func (*Server) ListBuckets ¶ added in v0.5.0
func (s *Server) ListBuckets(ctx *RequestContext) *Error
func (*Server) ListObjectsV2 ¶
func (s *Server) ListObjectsV2(ctx *RequestContext) *Error
type SignAWSV4 ¶ added in v0.2.0
type SignAWSV4 struct {
Region string
AccessKeyID string
SecretAccessKey string
MaxCredentialValidity time.Duration
}
func (SignAWSV4) SigningRegion ¶ added in v0.2.0
type Signer ¶
type Signer interface {
// SigningRegion returns the region string that is used to verify requests.
SigningRegion() string
// Sign computes and signs the given HTTP request using the given request payload.
// payload should be the contents of r.Body.
Sign(r *http.Request, payload []byte) error
// Verify verifies the authorization and request signature present in the HTTP request.
// Verify should return a non-nil error on verification failure, ideally this should contain the underlying type *Error.
// If Verify reads data from r.Body, it must ensure that the data can be re-read from r if Verify returns a nil error.
Verify(r *http.Request) error
}
A Signer is a type capable of signing and verifying the authorization and request signature present in an HTTP request.
type SingleBucketFilesystem ¶ added in v0.2.0
SingleBucketFilesystem implements BucketFilesystemProvider that always returns the same filesystem for any bucket name provided.
func (*SingleBucketFilesystem) ListBuckets ¶ added in v0.5.0
func (p *SingleBucketFilesystem) ListBuckets() ([]string, error)
ListBuckets always returns the same bucket name. The actual name doesn't matter, as the provider will always return the same filesystem.
type SubdirBucketFilesystem ¶ added in v0.2.0
func (*SubdirBucketFilesystem) ListBuckets ¶ added in v0.5.0
func (p *SubdirBucketFilesystem) ListBuckets() ([]string, error)
ListBuckets returns all subdirectories of the base filesystem.
func (*SubdirBucketFilesystem) Open ¶ added in v0.5.0
func (p *SubdirBucketFilesystem) Open(bucket string) (fs.FS, error)
Open returns a subdirectory of the base filesystem for each bucket. The error NoSuchBucket is returned if fs.Stat of the bucket path returns an error. The error InvalidBucketState is returned if fs.Sub returns an error.
type WrappedError ¶
type WrappedError struct {
Cause error
}
func (WrappedError) Unwrap ¶
func (e WrappedError) Unwrap() error