ls3

package module
v0.1.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}
)

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 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
	// 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, filesystem fs.FS, pathStyle bool) *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 Signer

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

func (*Signer) CanonicalRequest

func (s *Signer) CanonicalRequest(r *http.Request, hashedPayload []byte, signedHeaders []string) []byte

func (*Signer) RequestDate

func (s *Signer) RequestDate(r *http.Request) (time.Time, error)

func (*Signer) SigningKey

func (s *Signer) SigningKey(at time.Time) []byte

func (*Signer) StringToSign

func (s *Signer) StringToSign(at time.Time, canonicalRequest []byte) []byte

func (*Signer) Verify

func (s *Signer) Verify(r *http.Request) ([]byte, error)

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