ls3

package module
v0.3.0 Latest Latest
Warning

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

Go to latest
Published: Jul 21, 2022 License: MIT Imports: 26 Imported by: 0

README

LS3

Lightweight read-only S3 compatible object storage interface for local filesystems.

Much like MinIO except simplified to only provide read access to a local directory without any persistent state.

Documentation

Index

Constants

This section is empty.

Variables

View Source
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}
)

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 BucketLookup added in v0.2.0

type BucketLookup func(bucket string) (fs.FS, error)

BucketLookup is a function that when given a bucket name, it returns a filesystem for that bucket.

func SingleBucketFilesystem added in v0.2.0

func SingleBucketFilesystem(fileSystem fs.FS) BucketLookup

SingleBucketFilesystem returns a BucketLookup that always returns the same filesystem for all buckets

func SubdirBucketFilesystem added in v0.2.0

func SubdirBucketFilesystem(base fs.FS) BucketLookup

SubdirBucketFilesystem returns a BucketLookup that 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 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

type ErrInvalidCredential

type ErrInvalidCredential struct {
	WrappedError
}

func (*ErrInvalidCredential) Error

func (e *ErrInvalidCredential) Error() string

type Error

type Error struct {
	ErrorCode
	Message string `xml:"Message"`
}

func ErrorFrom

func ErrorFrom(err error) *Error

func (*Error) Error

func (e *Error) Error() string

type ErrorCode

type ErrorCode struct {
	Code       string `xml:"Code"`
	StatusCode int    `xml:"-"`
}

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

func (ctx *RequestContext) SendPlain(statusCode int) io.Writer

func (*RequestContext) SendXML

func (ctx *RequestContext) SendXML(statusCode int, payload any)

type Server

type Server struct {
	// contains filtered or unexported fields
}

func NewServer

func NewServer(log *zap.Logger, signer Signer, buckets BucketLookup, domain string) *Server

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

func (s *Server) ListObjectsV2(ctx *RequestContext) *Error

func (*Server) ServeHTTP

func (s *Server) ServeHTTP(rw http.ResponseWriter, r *http.Request)

type SignAWSV4 added in v0.2.0

type SignAWSV4 struct {
	Region                string
	AccessKeyID           string
	SecretAccessKey       string
	MaxCredentialValidity time.Duration
}

func (SignAWSV4) Sign added in v0.2.0

func (s SignAWSV4) Sign(r *http.Request, payload []byte) error

func (SignAWSV4) SigningRegion added in v0.2.0

func (s SignAWSV4) SigningRegion() string

func (SignAWSV4) Verify added in v0.2.0

func (s SignAWSV4) Verify(r *http.Request) error

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 WrappedError

type WrappedError struct {
	Cause error
}

func (WrappedError) Unwrap

func (e WrappedError) Unwrap() error

Directories

Path Synopsis
cmd
ls3 command

Jump to

Keyboard shortcuts

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