storage

package
v2.51.0 Latest Latest
Warning

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

Go to latest
Published: Oct 5, 2026 License: Apache-2.0 Imports: 8 Imported by: 1

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ComposableFS

type ComposableFS interface {
	UseIn(composer *tusd.StoreComposer)
}

Composable is the interface that a struct needs to implement to be composable, so that it can support the TUS methods

type FS

type FS interface {

	// Shutdown is called when the process is exiting to give the driver a chance to flush and close all open handles
	Shutdown(ctx context.Context) error

	// ListStorageSpaces lists the spaces in the storage.
	// FIXME The unrestricted parameter is an implementation detail of decomposedfs, remove it from the function?
	ListStorageSpaces(ctx context.Context, filter []*provider.ListStorageSpacesRequest_Filter, unrestricted bool) ([]*provider.StorageSpace, error)

	// GetQuota returns the quota on the referenced resource
	GetQuota(ctx context.Context, ref *provider.Reference) (uint64, uint64, uint64, error)

	// GetMD returns the resuorce info for the referenced resource
	GetMD(ctx context.Context, ref *provider.Reference, mdKeys, fieldMask []string) (*provider.ResourceInfo, error)
	// ListFolder returns the resource infos for all children of the referenced resource
	ListFolder(ctx context.Context, ref *provider.Reference, mdKeys, fieldMask []string) ([]*provider.ResourceInfo, error)
	// Download returns a ReadCloser for the content of the referenced resource
	Download(ctx context.Context, ref *provider.Reference, openReaderfunc func(*provider.ResourceInfo) bool) (*provider.ResourceInfo, io.ReadCloser, error)

	// GetPathByID returns the path for the given resource id relative to the space root
	// It should only reveal the path visible to the current user to not leak the names uf unshared parent resources
	// FIXME should be deprecated in favor of calls to GetMD and the fieldmask 'path'
	GetPathByID(ctx context.Context, id *provider.ResourceId) (string, error)

	// CreateReference creates a resource of type reference
	CreateReference(ctx context.Context, path string, targetURI *url.URL) error
	// CreateDir creates a resource of type container
	CreateDir(ctx context.Context, ref *provider.Reference) error
	// TouchFile sets the mtime of a resource, creating an empty file if it does not exist
	// FIXME the markprocessing flag is an implementation detail of decomposedfs, remove it from the function
	// FIXME the mtime should either be a time.Time or a CS3 Timestamp, not a string
	TouchFile(ctx context.Context, ref *provider.Reference, markprocessing bool, mtime string) error
	// Delete deletes a resource.
	// If the storage driver supports a recycle bin it should moves it to the recycle bin
	Delete(ctx context.Context, ref *provider.Reference) error
	// Move changes the path of a resource
	Move(ctx context.Context, oldRef, newRef *provider.Reference) error
	// InitiateUpload returns a list of protocols with urls that can be used to append bytes to a new upload session
	InitiateUpload(ctx context.Context, ref *provider.Reference, uploadLength int64, metadata map[string]string) (map[string]string, error)
	// Upload creates or updates a resource of type file with a new revision
	Upload(ctx context.Context, req UploadRequest, uploadFunc UploadFinishedFunc) (*provider.ResourceInfo, error)

	// ListRevisions lists all revisions for the referenced resource
	ListRevisions(ctx context.Context, ref *provider.Reference) ([]*provider.FileVersion, error)
	// DownloadRevision downloads a revision
	DownloadRevision(ctx context.Context, ref *provider.Reference, key string, openReaderFunc func(md *provider.ResourceInfo) bool) (*provider.ResourceInfo, io.ReadCloser, error)
	// RestoreRevision restores a revision
	RestoreRevision(ctx context.Context, ref *provider.Reference, key string) error

	// ListRecycle lists the content of the recycle bin
	ListRecycle(ctx context.Context, ref *provider.Reference, key, relativePath string) ([]*provider.RecycleItem, error)
	// RestoreRecycleItem restores an item from the recyle bin
	// if restoreRef is nil the resource should be restored at the original path
	RestoreRecycleItem(ctx context.Context, ref *provider.Reference, key, relativePath string, restoreRef *provider.Reference) error
	// PurgeRecycleItem removes a resource from the recycle bin
	PurgeRecycleItem(ctx context.Context, ref *provider.Reference, key, relativePath string) error
	// EmptyRecycle removes all resource from the recycle bin
	EmptyRecycle(ctx context.Context, ref *provider.Reference) error

	// AddGrant adds a grant to a resource
	AddGrant(ctx context.Context, ref *provider.Reference, g *provider.Grant) error
	// DenyGrant marks a resource as denied for a recipient
	// The resource and its children must be completely hidden for the recipient
	DenyGrant(ctx context.Context, ref *provider.Reference, g *provider.Grantee) error
	// RemoveGrant removes a grant from a resource
	RemoveGrant(ctx context.Context, ref *provider.Reference, g *provider.Grant) error
	// UpdateGrant updates a grant on a resource
	UpdateGrant(ctx context.Context, ref *provider.Reference, g *provider.Grant) error
	// ListGrants lists all grants on a resource
	ListGrants(ctx context.Context, ref *provider.Reference) ([]*provider.Grant, error)

	// SetArbitraryMetadata sets arbitraty metadata on a resource
	SetArbitraryMetadata(ctx context.Context, ref *provider.Reference, md *provider.ArbitraryMetadata) error
	// UnsetArbitraryMetadata removes arbitraty metadata from a resource
	UnsetArbitraryMetadata(ctx context.Context, ref *provider.Reference, keys []string) error

	// AddLabel adds a label to a resource
	AddLabel(ctx context.Context, ref *provider.Reference, userID *user.UserId, label string) error
	// RemoveLabel removes a label from a resource
	RemoveLabel(ctx context.Context, ref *provider.Reference, userID *user.UserId, label string) error

	// GetLock returns an existing lock on the given reference
	GetLock(ctx context.Context, ref *provider.Reference) (*provider.Lock, error)
	// SetLock puts a lock on the given reference
	SetLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error
	// RefreshLock refreshes an existing lock on the given reference
	RefreshLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock, existingLockID string) error
	// Unlock removes an existing lock from the given reference
	Unlock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error

	// CreateStorageSpace creates a storage space
	CreateStorageSpace(ctx context.Context, req *provider.CreateStorageSpaceRequest) (*provider.CreateStorageSpaceResponse, error)
	// UpdateStorageSpace updates a storage space
	UpdateStorageSpace(ctx context.Context, req *provider.UpdateStorageSpaceRequest) (*provider.UpdateStorageSpaceResponse, error)
	// DeleteStorageSpace deletes a storage space
	DeleteStorageSpace(ctx context.Context, req *provider.DeleteStorageSpaceRequest) error

	// CreateHome creates a users home
	//
	// Deprecated: use CreateStorageSpace with type personal
	CreateHome(ctx context.Context) error
	// GetHome returns the path to the users home
	//
	// Deprecated: use ListStorageSpaces with type personal
	GetHome(ctx context.Context) (string, error)
}

FS is the interface to implement access to the storage.

type PathWrapper

type PathWrapper interface {
	Unwrap(ctx context.Context, rp string) (string, error)
	Wrap(ctx context.Context, rp string) (string, error)
}

PathWrapper is the interface to implement for path transformations

type Registry

type Registry interface {
	// GetProvider returns the Address of the storage provider that should be used for the given space.
	// Use it to determine where to create a new storage space.
	GetProvider(ctx context.Context, space *provider.StorageSpace) (*registry.ProviderInfo, error)
	// ListProviders returns the storage providers that match the given filter
	ListProviders(ctx context.Context, filters map[string]string) ([]*registry.ProviderInfo, error)
}

Registry is the interface that storage registries implement for discovering storage providers

type SpaceDisabledListableFS added in v2.46.1

type SpaceDisabledListableFS interface {
	WithDisabledSpaces() FS
}

SpaceDisabledListableFS is the interface to implement for storage drivers that can list resources in disabled spaces.

type UnscopeFunc

type UnscopeFunc func()

UnscopeFunc is a function that unscopes a user

type UploadFinishedFunc

type UploadFinishedFunc func(spaceOwner, executant *userpb.UserId, ref *provider.Reference)

UploadFinishedFunc is a callback function used in storage drivers to indicate that an upload has finished

type UploadRequest

type UploadRequest struct {
	Ref    *provider.Reference
	Body   io.ReadCloser
	Length int64
}

UploadRequest us used in FS.Upload() to carry required upload metadata

type UploadSession

type UploadSession interface {
	// ID returns the upload id
	ID() string
	// Filename returns the filename of the file
	Filename() string
	// Size returns the size of the upload
	Size() int64
	// Offset returns the current offset
	Offset() int64
	// Reference returns a reference for the file being uploaded. May be absolute id based or relative to e.g. a space root
	Reference() provider.Reference
	// Executant returns the userid of the user that created the upload
	Executant() userpb.UserId
	// SpaceOwner returns the owner of a space if set. optional
	SpaceOwner() *userpb.UserId
	// Expires returns the time when the upload can no longer be used
	Expires() time.Time

	// IsProcessing returns true if postprocessing has not finished, yet
	// The actual postprocessing state is tracked in the postprocessing service.
	IsProcessing() bool

	// Purge allows completely removing an upload.
	Purge(ctx context.Context)

	// ScanData returns the scan data for the UploadSession
	ScanData() (string, time.Time)

	// Status returns the status for the UploadSession
	Status() string
	// StatusMessage returns the status message for the UploadSession
	StatusMessage() string
}

UploadSession is the interface that storage drivers need to return whan listing upload sessions.

type UploadSessionFilter

type UploadSessionFilter struct {
	ID         *string
	Processing *bool
	Expired    *bool
	HasVirus   *bool
}

UploadSessionFilter can be used to filter upload sessions

type UploadSessionLister

type UploadSessionLister interface {
	// ListUploadSessions returns the upload sessions matching the given filter
	ListUploadSessions(ctx context.Context, filter UploadSessionFilter) ([]UploadSession, error)
}

UploadSessionLister defines the interface for FS implementations that allow listing and purging upload sessions

type UploadSessionResolver added in v2.47.0

type UploadSessionResolver interface {
	// ResolveUpload stats the resource produced by the given finished upload and returns it
	// together with a context carrying the upload's executant identity, so the caller can derive
	// identity dependent values such as the WebDAV permissions. The upload is identified by the
	// given tus FileInfo rather than a session store lookup, so the call still works after a
	// synchronous upload has cleaned up its session.
	ResolveUpload(ctx context.Context, info tusd.FileInfo) (*provider.ResourceInfo, context.Context, error)
}

UploadSessionResolver defines the interface for FS implementations that can resolve a finished upload to the resource it produced, read as the upload's executant. The tus data path is authenticated by a transfer token that carries no user identity, so a caller there cannot stat the resource itself; this lets the storage driver, which knows the upload's executant, do it. https://github.com/opencloud-eu/opencloud/issues/2409

type UploadsManager deprecated

type UploadsManager interface {
	ListUploads() ([]tusd.FileInfo, error)
	PurgeExpiredUploads(chan<- tusd.FileInfo) error
}

UploadsManager defines the interface for storage drivers that allow for managing uploads

Deprecated: No longer used. Storage drivers should implement the UploadSessionLister.

Directories

Path Synopsis
fs
eos
posix/tree/assimilation
Package assimilation contains helpers for assimilating files into the posix fs
Package assimilation contains helpers for assimilating files into the posix fs
internal
pkg
utils
ace
acl
templates
Package templates contains data-driven templates for path layouts.
Package templates contains data-driven templates for path layouts.

Jump to

Keyboard shortcuts

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