node

package
v1.10.0 Latest Latest
Warning

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

Go to latest
Published: Jul 13, 2021 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

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

NoPermissions represents an empty set of permssions

View Source
var OwnerPermissions *provider.ResourcePermissions = &provider.ResourcePermissions{

	AddGrant:             true,
	CreateContainer:      true,
	Delete:               true,
	GetPath:              true,
	GetQuota:             true,
	InitiateFileDownload: true,
	InitiateFileUpload:   true,
	ListContainer:        true,
	ListFileVersions:     true,
	ListGrants:           true,
	ListRecycle:          true,
	Move:                 true,
	PurgeRecycle:         true,
	RemoveGrant:          true,
	RestoreFileVersion:   true,
	RestoreRecycleItem:   true,
	Stat:                 true,
	UpdateGrant:          true,
}

OwnerPermissions defines permissions for nodes owned by the user

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 ReadBlobSizeAttr

func ReadBlobSizeAttr(path string) (int64, error)

ReadBlobSizeAttr reads the blobsize from the xattrs

Types

type Node

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

	Exists bool
	// 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) (ri *provider.ResourceInfo, err error)

AsResourceInfo return the node as CS3 ResourceInfo

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) 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() (o *userpb.UserId, err 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) 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)
}

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