node

package
v0.0.31 Latest Latest
Warning

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

Go to latest
Published: Mar 22, 2023 License: Apache-2.0 Imports: 27 Imported by: 0

Documentation

Index

Constants

View Source
const (
	FavoriteKey   = "http://owncloud.org/ns/favorite"
	ShareTypesKey = "http://owncloud.org/ns/share-types"
	ChecksumsKey  = "http://owncloud.org/ns/checksums"
	UserShareType = "0"
	QuotaKey      = "quota"

	QuotaUncalculated = "-1"
	QuotaUnknown      = "-2"
	QuotaUnlimited    = "-3"
)

Define keys and values used in the node metadata.

Variables

View Source
var CheckQuota = func(spaceRoot *Node, fileSize uint64) (quotaSufficient bool, err error) {
	used, _ := spaceRoot.GetTreeSize()
	if !enoughDiskSpace(spaceRoot.InternalPath(), fileSize) {
		return false, errtypes.InsufficientStorage("disk full")
	}
	quotaByte, _ := xattr.Get(spaceRoot.InternalPath(), xattrs.QuotaAttr)
	var total uint64
	if quotaByte == nil {

		return true, nil
	}
	total, _ = strconv.ParseUint(string(quotaByte), 10, 64)

	if fileSize > total-used || total < used {
		return false, errtypes.InsufficientStorage("quota exceeded")
	}
	return true, nil
}

CheckQuota checks if both disk space and available quota are sufficient.

Functions

func AddPermissions

AddPermissions merges a set of permissions into another TODO we should use a bitfield for this ...

func CalculateEtag

func CalculateEtag(nodeID string, tmTime time.Time) (string, error)

CalculateEtag returns a hash of fileid + tmtime (or mtime).

func GetAvailableSize

func GetAvailableSize(path string) (uint64, error)

GetAvailableSize stats the filesystem and return the available bytes.

func IsSpaceRoot

func IsSpaceRoot(r *Node) bool

IsSpaceRoot checks if the node is a space root.

func NoOwnerPermissions

func NoOwnerPermissions() provider.ResourcePermissions

NoOwnerPermissions defines permissions for nodes that don't have an owner set, eg the root node.

func NoPermissions

func NoPermissions() provider.ResourcePermissions

NoPermissions represents an empty set of permissions.

func OwnerPermissions

func OwnerPermissions() provider.ResourcePermissions

OwnerPermissions defines permissions for nodes owned by the user.

func ReadBlobSizeAttr

func ReadBlobSizeAttr(path string) (int64, error)

ReadBlobSizeAttr reads the blobsize from the xattrs.

func ShareFolderPermissions

func ShareFolderPermissions() provider.ResourcePermissions

ShareFolderPermissions defines permissions for the shared jail.

Types

type Node

type Node struct {
	ParentID string
	ID       string
	Name     string
	Blobsize int64
	BlobID   string

	Exists    bool
	SpaceRoot *Node
	// contains filtered or unexported fields
}

Node represents a node in the tree and provides methods to get a Parent or Child instance.

func New

func New(id, parentID, name string, blobsize int64, blobID string, owner *userpb.UserId, lu PathLookup) *Node

New returns a new instance of Node.

func ReadNode

func ReadNode(ctx context.Context, lu PathLookup, id string) (n *Node, err error)

ReadNode creates a new instance from an id and checks if it exists.

func (*Node) AsResourceInfo

func (n *Node) AsResourceInfo(ctx context.Context, rp *provider.ResourcePermissions, mdKeys []string, returnBasename bool) (ri *provider.ResourceInfo, err error)

AsResourceInfo return the node as CS3 ResourceInfo.

func (*Node) ChangeOwner

func (n *Node) ChangeOwner(new *userpb.UserId) (err error)

ChangeOwner sets the owner of n to newOwner.

func (*Node) Child

func (n *Node) Child(ctx context.Context, name string) (*Node, error)

Child returns the child node with the given name.

func (*Node) FindStorageSpaceRoot

func (n *Node) FindStorageSpaceRoot() error

FindStorageSpaceRoot calls n.Parent() and climbs the tree until it finds the space root node and adds it to the node.

func (*Node) GetTMTime

func (n *Node) GetTMTime() (tmTime time.Time, err error)

GetTMTime reads the tmtime from the extended attributes.

func (*Node) GetTreeSize

func (n *Node) GetTreeSize() (treesize uint64, err error)

GetTreeSize reads the treesize from the extended attributes.

func (*Node) HasPropagation

func (n *Node) HasPropagation() (propagation bool)

HasPropagation checks if the propagation attribute exists and is set to "1".

func (*Node) InternalPath

func (n *Node) InternalPath() string

InternalPath returns the internal path of the Node.

func (*Node) ListGrantees

func (n *Node) ListGrantees(ctx context.Context) (grantees []string, err error)

ListGrantees lists the grantees of the current node We don't want to wast time and memory by creating grantee objects. The function will return a list of opaque strings that can be used to make a ReadGrant call.

func (*Node) Owner

func (n *Node) Owner() (*userpb.UserId, error)

Owner returns the cached owner id or reads it from the extended attributes TODO can be private as only the AsResourceInfo uses it.

func (*Node) Parent

func (n *Node) Parent() (p *Node, err error)

Parent returns the parent node.

func (*Node) PermissionSet

func (n *Node) PermissionSet(ctx context.Context) provider.ResourcePermissions

PermissionSet returns the permission set for the current user the parent nodes are not taken into account.

func (*Node) ReadGrant

func (n *Node) ReadGrant(ctx context.Context, grantee string) (g *provider.Grant, err error)

ReadGrant reads a CS3 grant.

func (*Node) ReadUserPermissions

func (n *Node) ReadUserPermissions(ctx context.Context, u *userpb.User) (ap provider.ResourcePermissions, err error)

ReadUserPermissions will assemble the permissions for the current user on the given node without parent nodes.

func (*Node) SetChecksum

func (n *Node) SetChecksum(csType string, h hash.Hash) (err error)

SetChecksum writes the checksum with the given checksum type to the extended attributes.

func (*Node) SetEtag

func (n *Node) SetEtag(ctx context.Context, val string) (err error)

SetEtag sets the temporary etag of a node if it differs from the current etag.

func (*Node) SetFavorite

func (n *Node) SetFavorite(uid *userpb.UserId, val string) error

SetFavorite sets the favorite for the current user TODO we should not mess with the user here ... the favorites is now a user specific property for a file that cannot be mapped to extended attributes without leaking who has marked a file as a favorite it is a specific case of a tag, which is user individual as well TODO there are different types of tags 1. public that are managed by everyone 2. private tags that are only visible to the user 3. system tags that are only visible to the system 4. group tags that are only visible to a group ... urgh ... well this can be solved using different namespaces 1. public = p: 2. private = u:<uid>: for user specific 3. system = s: for system 4. group = g:<gid>: 5. app? = a:<aid>: for apps? obviously this only is secure when the u/s/g/a namespaces are not accessible by users in the filesystem public tags can be mapped to extended attributes.

func (*Node) SetMetadata

func (n *Node) SetMetadata(key string, val string) (err error)

SetMetadata populates a given key with its value. Note that consumers should be aware of the metadata options on xattrs.go.

func (*Node) SetMtime

func (n *Node) SetMtime(ctx context.Context, mtime string) error

SetMtime sets the mtime and atime of a node.

func (*Node) SetTMTime

func (n *Node) SetTMTime(t time.Time) (err error)

SetTMTime writes the tmtime to the extended attributes.

func (*Node) SetTreeSize

func (n *Node) SetTreeSize(ts uint64) (err error)

SetTreeSize writes the treesize to the extended attributes.

func (*Node) UnsetTempEtag

func (n *Node) UnsetTempEtag() (err error)

UnsetTempEtag removes the temporary etag attribute.

func (*Node) WriteMetadata

func (n *Node) WriteMetadata(owner *userpb.UserId) (err error)

WriteMetadata writes the Node metadata to disk.

type PathLookup

type PathLookup interface {
	RootNode(ctx context.Context) (node *Node, err error)
	HomeOrRootNode(ctx context.Context) (node *Node, err error)

	InternalRoot() string
	InternalPath(ID string) string
	Path(ctx context.Context, n *Node) (path string, err error)
	ShareFolder() string
}

PathLookup defines the interface for the lookup component.

type Permissions

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

Permissions implements permission checks.

func NewPermissions

func NewPermissions(lu PathLookup) *Permissions

NewPermissions returns a new Permissions instance.

func (*Permissions) AssemblePermissions

func (p *Permissions) AssemblePermissions(ctx context.Context, n *Node) (ap provider.ResourcePermissions, err error)

AssemblePermissions will assemble the permissions for the current user on the given node, taking into account all parent nodes.

func (*Permissions) HasPermission

func (p *Permissions) HasPermission(ctx context.Context, n *Node, check func(*provider.ResourcePermissions) bool) (can bool, err error)

HasPermission call check() for every node up to the root until check returns true.

Jump to

Keyboard shortcuts

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