diff --git a/pkg/storage/utils/decomposedfs/decomposedfs.go b/pkg/storage/utils/decomposedfs/decomposedfs.go index 501d3f77fde..6c424c496ac 100644 --- a/pkg/storage/utils/decomposedfs/decomposedfs.go +++ b/pkg/storage/utils/decomposedfs/decomposedfs.go @@ -241,7 +241,7 @@ func (fs *Decomposedfs) CreateHome(ctx context.Context) (err error) { } // add storage space - if err := fs.createStorageSpace(ctx, "personal", h.ID); err != nil { + if err := fs.createStorageSpace(ctx, spaceTypePersonal, h.ID); err != nil { return err } diff --git a/pkg/storage/utils/decomposedfs/grants.go b/pkg/storage/utils/decomposedfs/grants.go index aa9854599f4..9c0e3ef2af7 100644 --- a/pkg/storage/utils/decomposedfs/grants.go +++ b/pkg/storage/utils/decomposedfs/grants.go @@ -92,7 +92,7 @@ func (fs *Decomposedfs) AddGrant(ctx context.Context, ref *provider.Reference, g // when a grant is added to a space, do not add a new space under "shares" if spaceGrant := ctx.Value(utils.SpaceGrant); spaceGrant == nil { - err := fs.createStorageSpace(ctx, "share", node.ID) + err := fs.createStorageSpace(ctx, spaceTypeShare, node.ID) if err != nil { return err } diff --git a/pkg/storage/utils/decomposedfs/lookup.go b/pkg/storage/utils/decomposedfs/lookup.go index 64c3ee76c09..43b298bd198 100644 --- a/pkg/storage/utils/decomposedfs/lookup.go +++ b/pkg/storage/utils/decomposedfs/lookup.go @@ -131,7 +131,7 @@ func (lu *Lookup) Path(ctx context.Context, n *node.Node) (p string, err error) // RootNode returns the root node of the storage func (lu *Lookup) RootNode(ctx context.Context) (*node.Node, error) { - n := node.New("root", "", "", 0, "", nil, lu) + n := node.New(node.RootID, "", "", 0, "", nil, lu) n.Exists = true return n, nil } diff --git a/pkg/storage/utils/decomposedfs/node/node.go b/pkg/storage/utils/decomposedfs/node/node.go index 06bb15705e4..3ff840f2f7c 100644 --- a/pkg/storage/utils/decomposedfs/node/node.go +++ b/pkg/storage/utils/decomposedfs/node/node.go @@ -64,6 +64,9 @@ const ( // TrashIDDelimiter represents the characters used to separate the nodeid and the deletion time. TrashIDDelimiter = ".T." + + // RootID defines the root node's ID + RootID = "root" ) // Node represents a node in the tree and provides methods to get a Parent or Child instance @@ -817,7 +820,7 @@ func (n *Node) ReadUserPermissions(ctx context.Context, u *userpb.User) (ap prov if o.OpaqueId == "" { // this happens for root nodes and project spaces in the storage. the extended attributes are set to emptystring to indicate: no owner // for project spaces we need to go over the grants and check the granted permissions - if n.ID == "root" { + if n.ID == RootID { return NoOwnerPermissions(), nil } } diff --git a/pkg/storage/utils/decomposedfs/node/permissions.go b/pkg/storage/utils/decomposedfs/node/permissions.go index 59b3b0ad7c6..77642c6c2ae 100644 --- a/pkg/storage/utils/decomposedfs/node/permissions.go +++ b/pkg/storage/utils/decomposedfs/node/permissions.go @@ -112,7 +112,7 @@ func (p *Permissions) AssemblePermissions(ctx context.Context, n *Node) (ap prov if o.OpaqueId == "" { // this happens for root nodes and project spaces in the storage. the extended attributes are set to emptystring to indicate: no owner // for project spaces we need to go over the grants and check the granted permissions - if n.ID == "root" { + if n.ID == RootID { return NoOwnerPermissions(), nil } } @@ -282,7 +282,7 @@ func (p *Permissions) getUserAndPermissions(ctx context.Context, n *Node) (*user if o.OpaqueId == "" { // this happens for root nodes and project spaces in the storage. the extended attributes are set to emptystring to indicate: no owner // for project spaces we need to go over the grants and check the granted permissions - if n.ID != "root" { + if n.ID != RootID { return u, nil } perms := NoOwnerPermissions() diff --git a/pkg/storage/utils/decomposedfs/spaces.go b/pkg/storage/utils/decomposedfs/spaces.go index 7be290687d2..e4964a7d50e 100644 --- a/pkg/storage/utils/decomposedfs/spaces.go +++ b/pkg/storage/utils/decomposedfs/spaces.go @@ -48,8 +48,11 @@ import ( ) const ( - spaceTypeAny = "*" - spaceIDAny = "*" + spaceTypePersonal = "personal" + spaceTypeProject = "project" + spaceTypeShare = "share" + spaceTypeAny = "*" + spaceIDAny = "*" ) // CreateStorageSpace creates a storage space @@ -70,7 +73,7 @@ func (fs *Decomposedfs) CreateStorageSpace(ctx context.Context, req *provider.Cr } // TODO enforce a uuid? // TODO clarify if we want to enforce a single personal storage space or if we want to allow sending the spaceid - if req.Type == "personal" { + if req.Type == spaceTypePersonal { spaceID = req.Owner.Id.OpaqueId } @@ -105,7 +108,7 @@ func (fs *Decomposedfs) CreateStorageSpace(ctx context.Context, req *provider.Cr } ownerID := u.Id - if req.Type == "project" { + if req.Type == spaceTypeProject { ownerID = &userv1beta1.UserId{} } @@ -147,7 +150,7 @@ func (fs *Decomposedfs) CreateStorageSpace(ctx context.Context, req *provider.Cr }, } - if req.Type != "project" { + if req.Type != spaceTypeProject { resp.StorageSpace.Owner = u } @@ -283,7 +286,7 @@ func (fs *Decomposedfs) ListStorageSpaces(ctx context.Context, filter []*provide spaceType := filepath.Base(filepath.Dir(matches[i])) // FIXME type share evolved to grant on the edge branch ... make it configurable if the driver should support them or not for now ... ignore type share - if spaceType == "share" { + if spaceType == spaceTypeShare { numShares++ // do not list shares as spaces for the owner continue @@ -471,7 +474,7 @@ func (fs *Decomposedfs) DeleteStorageSpace(ctx context.Context, req *provider.De return err } - matches, err = filepath.Glob(filepath.Join(fs.o.Root, "nodes", "root", req.Id.OpaqueId+node.TrashIDDelimiter+"*")) + matches, err = filepath.Glob(filepath.Join(fs.o.Root, "nodes", node.RootID, req.Id.OpaqueId+node.TrashIDDelimiter+"*")) if err != nil { return err } diff --git a/pkg/storage/utils/decomposedfs/tree/tree.go b/pkg/storage/utils/decomposedfs/tree/tree.go index 1fb125ea2b3..47f0c23a77e 100644 --- a/pkg/storage/utils/decomposedfs/tree/tree.go +++ b/pkg/storage/utils/decomposedfs/tree/tree.go @@ -111,7 +111,7 @@ func (t *Tree) Setup(owner *userpb.UserId, propagateToRoot bool) error { // the root node has an empty name // the root node has no parent - n := node.New("root", "", "", 0, "", nil, t.lookup) + n := node.New(node.RootID, "", "", 0, "", nil, t.lookup) err := t.createNode(n, owner) if err != nil { return err @@ -207,7 +207,7 @@ func (t *Tree) linkSpace(spaceType, spaceID, nodeID string) { func isRootNode(nodePath string) bool { attrBytes, err := xattr.Get(nodePath, xattrs.ParentidAttr) - return err == nil && string(attrBytes) == "root" + return err == nil && string(attrBytes) == node.RootID } func isSharedNode(nodePath string) bool { if attrs, err := xattr.List(nodePath); err == nil {