From 3167377fca2582c9afd39cec2624412bc32472b9 Mon Sep 17 00:00:00 2001 From: Michael Barz Date: Tue, 15 Feb 2022 21:49:45 +0100 Subject: [PATCH 1/7] use id wrap and unwrap from reva --- go.mod | 2 ++ go.sum | 4 ---- graph/pkg/service/v0/driveitems.go | 17 +++++++++-------- graph/pkg/service/v0/drives.go | 3 ++- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/go.mod b/go.mod index a68352d4a9..42929044b8 100644 --- a/go.mod +++ b/go.mod @@ -266,3 +266,5 @@ require ( // we need to use a fork to make the windows build pass replace github.com/pkg/xattr => github.com/micbar/xattr v0.4.6-0.20220215112335-88e74d648fb7 + +replace github.com/cs3org/reva => ../reva diff --git a/go.sum b/go.sum index 9227da0676..d53771f8f0 100644 --- a/go.sum +++ b/go.sum @@ -337,10 +337,6 @@ github.com/crewjam/saml v0.4.5/go.mod h1:qCJQpUtZte9R1ZjUBcW8qtCNlinbO363ooNl02S github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e/go.mod h1:XJEZ3/EQuI3BXTp/6DUzFr850vlxq11I6satRtz0YQ4= github.com/cs3org/go-cs3apis v0.0.0-20220126114148-64c025ccdd19 h1:1jqPH58jCxvbaJ9WLIJ7W2/m622bWS6ChptzljSG6IQ= github.com/cs3org/go-cs3apis v0.0.0-20220126114148-64c025ccdd19/go.mod h1:UXha4TguuB52H14EMoSsCqDj7k8a/t7g4gVP+bgY5LY= -github.com/cs3org/reva v1.16.1-0.20220214105747-d217886c962b h1:E53EHbKiHIIJeZgDEx5tE3AflxgL1dHughNbBQU7Dfk= -github.com/cs3org/reva v1.16.1-0.20220214105747-d217886c962b/go.mod h1:gdKuhou74V47snANuHNIhGNJfCKUSCHPPvuhSx7nu5M= -github.com/cs3org/reva v1.16.1-0.20220215130802-df1264deff58 h1:CBSpClYZp8Q7Cl/xENW42Zy7M9+vqACAulqXFnWn3Ug= -github.com/cs3org/reva v1.16.1-0.20220215130802-df1264deff58/go.mod h1:gdKuhou74V47snANuHNIhGNJfCKUSCHPPvuhSx7nu5M= github.com/cubewise-code/go-mime v0.0.0-20200519001935-8c5762b177d8 h1:Z9lwXumT5ACSmJ7WGnFl+OMLLjpz5uR2fyz7dC255FI= github.com/cubewise-code/go-mime v0.0.0-20200519001935-8c5762b177d8/go.mod h1:4abs/jPXcmJzYoYGF91JF9Uq9s/KL5n1jvFDix8KcqY= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= diff --git a/graph/pkg/service/v0/driveitems.go b/graph/pkg/service/v0/driveitems.go index a698652b90..3b188a89d1 100644 --- a/graph/pkg/service/v0/driveitems.go +++ b/graph/pkg/service/v0/driveitems.go @@ -11,6 +11,7 @@ import ( cs3rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" storageprovider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" types "github.com/cs3org/go-cs3apis/cs3/types/v1beta1" + "github.com/cs3org/reva/pkg/utils/resourceid" "github.com/go-chi/render" libregraph "github.com/owncloud/libre-graph-api-go" "github.com/owncloud/ocis/graph/pkg/service/v0/errorcode" @@ -113,7 +114,7 @@ func cs3ResourceToDriveItem(res *storageprovider.ResourceInfo) (*libregraph.Driv *size = int64(res.Size) // TODO lurking overflow: make size of libregraph drive item use uint64 driveItem := &libregraph.DriveItem{ - Id: &res.Id.OpaqueId, + Id: libregraph.PtrString(resourceid.OwnCloudResourceIDWrap(res.Id)), Size: size, } @@ -164,7 +165,7 @@ func (g Graph) GetExtendedSpaceProperties(ctx context.Context, baseURL *url.URL, for _, itemName := range names { if itemID, ok := metadata[itemName]; ok { - spaceItem := g.getSpecialDriveItem(ctx, string(itemID.Value), itemName, baseURL, space) + spaceItem := g.getSpecialDriveItem(ctx, resourceid.OwnCloudResourceIDUnwrap(string(itemID.Value)), itemName, baseURL, space) if spaceItem != nil { spaceItems = append(spaceItems, *spaceItem) } @@ -173,20 +174,20 @@ func (g Graph) GetExtendedSpaceProperties(ctx context.Context, baseURL *url.URL, return spaceItems } -func (g Graph) getSpecialDriveItem(ctx context.Context, itemID string, itemName string, baseURL *url.URL, space *storageprovider.StorageSpace) *libregraph.DriveItem { +func (g Graph) getSpecialDriveItem(ctx context.Context, ID *storageprovider.ResourceId, itemName string, baseURL *url.URL, space *storageprovider.StorageSpace) *libregraph.DriveItem { var spaceItem *libregraph.DriveItem - if itemID == "" { + if ID == nil { return nil } - spaceItem, err := g.getDriveItem(ctx, &storageprovider.ResourceId{StorageId: space.Root.StorageId, OpaqueId: itemID}) + spaceItem, err := g.getDriveItem(ctx, ID) if err != nil { - g.logger.Error().Err(err).Str("ID", itemID).Msg("Could not get readme Item") + g.logger.Error().Err(err).Str("ID", ID.OpaqueId).Msg("Could not get readme Item") return nil } - itemPath, err := g.getPathForDriveItem(ctx, &storageprovider.ResourceId{StorageId: space.Root.StorageId, OpaqueId: itemID}) + itemPath, err := g.getPathForDriveItem(ctx, ID) if err != nil { - g.logger.Error().Err(err).Str("ID", itemID).Msg("Could not get readme path") + g.logger.Error().Err(err).Str("ID", ID.OpaqueId).Msg("Could not get readme path") return nil } spaceItem.SpecialFolder = &libregraph.SpecialFolder{Name: libregraph.PtrString(itemName)} diff --git a/graph/pkg/service/v0/drives.go b/graph/pkg/service/v0/drives.go index 58daa2c697..02c577a87d 100644 --- a/graph/pkg/service/v0/drives.go +++ b/graph/pkg/service/v0/drives.go @@ -18,6 +18,7 @@ import ( types "github.com/cs3org/go-cs3apis/cs3/types/v1beta1" ctxpkg "github.com/cs3org/reva/pkg/ctx" "github.com/cs3org/reva/pkg/utils" + "github.com/cs3org/reva/pkg/utils/resourceid" "github.com/go-chi/chi/v5" "github.com/go-chi/render" libregraph "github.com/owncloud/libre-graph-api-go" @@ -409,7 +410,7 @@ func (g Graph) ListStorageSpacesWithFilters(ctx context.Context, filters []*stor } func (g Graph) cs3StorageSpaceToDrive(baseURL *url.URL, space *storageprovider.StorageSpace) (*libregraph.Drive, error) { - rootID := space.Root.StorageId + "!" + space.Root.OpaqueId + rootID := resourceid.OwnCloudResourceIDWrap(space.Root) if space.Root.StorageId == space.Root.OpaqueId { // omit opaqueid rootID = space.Root.StorageId From a2f540fcb55dec4689eef6da703df95cf57dc02e Mon Sep 17 00:00:00 2001 From: Michael Barz Date: Wed, 16 Feb 2022 17:38:42 +0100 Subject: [PATCH 2/7] use reva from fork --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 42929044b8..1e31d16a23 100644 --- a/go.mod +++ b/go.mod @@ -267,4 +267,4 @@ require ( // we need to use a fork to make the windows build pass replace github.com/pkg/xattr => github.com/micbar/xattr v0.4.6-0.20220215112335-88e74d648fb7 -replace github.com/cs3org/reva => ../reva +replace github.com/cs3org/reva => github.com/micbar/reva v1.9.1-0.20220216163611-c8b1d89c4f8b diff --git a/go.sum b/go.sum index d53771f8f0..26d6694623 100644 --- a/go.sum +++ b/go.sum @@ -997,6 +997,8 @@ github.com/mendsley/gojwk v0.0.0-20141217222730-4d5ec6e58103 h1:Z/i1e+gTZrmcGeZy github.com/mendsley/gojwk v0.0.0-20141217222730-4d5ec6e58103/go.mod h1:o9YPB5aGP8ob35Vy6+vyq3P3bWe7NQWzf+JLiXCiMaE= github.com/mennanov/fieldmask-utils v0.5.0 h1:8em4akN0NM3hmmrg8VbvOPfdS4SSBdbFd53m9VtfOg0= github.com/mennanov/fieldmask-utils v0.5.0/go.mod h1:lah2lHczE2ff+7SqnNKpB+YzaO7M3h5iNO4LgPTJheM= +github.com/micbar/reva v1.9.1-0.20220216163611-c8b1d89c4f8b h1:LoS2H6RNMEd+NVlq95WsZXaPvIpj3FABG12zYewhv18= +github.com/micbar/reva v1.9.1-0.20220216163611-c8b1d89c4f8b/go.mod h1:gdKuhou74V47snANuHNIhGNJfCKUSCHPPvuhSx7nu5M= github.com/micbar/xattr v0.4.6-0.20220215112335-88e74d648fb7 h1:M0R40eUlyqxMuZn3Knx4DJTwHE3TiPFzcWUA/BKtDMM= github.com/micbar/xattr v0.4.6-0.20220215112335-88e74d648fb7/go.mod h1:sBD3RAqlr8Q+RC3FutZcikpT8nyDrIEEBw2J744gVWs= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= From 8d34907e13394473ddfc026470edc90da21b7172 Mon Sep 17 00:00:00 2001 From: Michael Barz Date: Wed, 16 Feb 2022 17:45:17 +0100 Subject: [PATCH 3/7] add changelog --- changelog/unreleased/unify-file-ids.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 changelog/unreleased/unify-file-ids.md diff --git a/changelog/unreleased/unify-file-ids.md b/changelog/unreleased/unify-file-ids.md new file mode 100644 index 0000000000..10f13a9dcf --- /dev/null +++ b/changelog/unreleased/unify-file-ids.md @@ -0,0 +1,5 @@ +Change: Unify file IDs + +We changed the file IDs to be consistent across all our APIs (WebDAV, LibreGraph, OCS). We removed the base64 encoding. Now they are formatted like !. They are using a reserved character ``!`` as a URL safe separator. + +https://github.com/owncloud/ocis/pull/3185 From 405e3a7693a9ae96fbd39088b7b587bc9e28e08b Mon Sep 17 00:00:00 2001 From: Michael Barz Date: Wed, 16 Feb 2022 21:13:58 +0100 Subject: [PATCH 4/7] use latest reva edge --- go.mod | 4 +--- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 1e31d16a23..2b1cff1b48 100644 --- a/go.mod +++ b/go.mod @@ -21,7 +21,7 @@ require ( github.com/blevesearch/bleve/v2 v2.3.0 github.com/coreos/go-oidc/v3 v3.1.0 github.com/cs3org/go-cs3apis v0.0.0-20220126114148-64c025ccdd19 - github.com/cs3org/reva v1.16.1-0.20220215130802-df1264deff58 + github.com/cs3org/reva v1.16.1-0.20220216200955-a7653146c7c6 github.com/disintegration/imaging v1.6.2 github.com/glauth/glauth/v2 v2.0.0-20211021011345-ef3151c28733 github.com/go-chi/chi/v5 v5.0.7 @@ -266,5 +266,3 @@ require ( // we need to use a fork to make the windows build pass replace github.com/pkg/xattr => github.com/micbar/xattr v0.4.6-0.20220215112335-88e74d648fb7 - -replace github.com/cs3org/reva => github.com/micbar/reva v1.9.1-0.20220216163611-c8b1d89c4f8b diff --git a/go.sum b/go.sum index 26d6694623..91a40a4038 100644 --- a/go.sum +++ b/go.sum @@ -337,6 +337,8 @@ github.com/crewjam/saml v0.4.5/go.mod h1:qCJQpUtZte9R1ZjUBcW8qtCNlinbO363ooNl02S github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e/go.mod h1:XJEZ3/EQuI3BXTp/6DUzFr850vlxq11I6satRtz0YQ4= github.com/cs3org/go-cs3apis v0.0.0-20220126114148-64c025ccdd19 h1:1jqPH58jCxvbaJ9WLIJ7W2/m622bWS6ChptzljSG6IQ= github.com/cs3org/go-cs3apis v0.0.0-20220126114148-64c025ccdd19/go.mod h1:UXha4TguuB52H14EMoSsCqDj7k8a/t7g4gVP+bgY5LY= +github.com/cs3org/reva v1.16.1-0.20220216200955-a7653146c7c6 h1:4X09ACVOdFSnyhmwzFulajv4NhQApfCw6eTjmXsASEY= +github.com/cs3org/reva v1.16.1-0.20220216200955-a7653146c7c6/go.mod h1:gdKuhou74V47snANuHNIhGNJfCKUSCHPPvuhSx7nu5M= github.com/cubewise-code/go-mime v0.0.0-20200519001935-8c5762b177d8 h1:Z9lwXumT5ACSmJ7WGnFl+OMLLjpz5uR2fyz7dC255FI= github.com/cubewise-code/go-mime v0.0.0-20200519001935-8c5762b177d8/go.mod h1:4abs/jPXcmJzYoYGF91JF9Uq9s/KL5n1jvFDix8KcqY= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= @@ -997,8 +999,6 @@ github.com/mendsley/gojwk v0.0.0-20141217222730-4d5ec6e58103 h1:Z/i1e+gTZrmcGeZy github.com/mendsley/gojwk v0.0.0-20141217222730-4d5ec6e58103/go.mod h1:o9YPB5aGP8ob35Vy6+vyq3P3bWe7NQWzf+JLiXCiMaE= github.com/mennanov/fieldmask-utils v0.5.0 h1:8em4akN0NM3hmmrg8VbvOPfdS4SSBdbFd53m9VtfOg0= github.com/mennanov/fieldmask-utils v0.5.0/go.mod h1:lah2lHczE2ff+7SqnNKpB+YzaO7M3h5iNO4LgPTJheM= -github.com/micbar/reva v1.9.1-0.20220216163611-c8b1d89c4f8b h1:LoS2H6RNMEd+NVlq95WsZXaPvIpj3FABG12zYewhv18= -github.com/micbar/reva v1.9.1-0.20220216163611-c8b1d89c4f8b/go.mod h1:gdKuhou74V47snANuHNIhGNJfCKUSCHPPvuhSx7nu5M= github.com/micbar/xattr v0.4.6-0.20220215112335-88e74d648fb7 h1:M0R40eUlyqxMuZn3Knx4DJTwHE3TiPFzcWUA/BKtDMM= github.com/micbar/xattr v0.4.6-0.20220215112335-88e74d648fb7/go.mod h1:sBD3RAqlr8Q+RC3FutZcikpT8nyDrIEEBw2J744gVWs= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= From 8fd70fd350298eb21ca79825bf8d404b3e32c40e Mon Sep 17 00:00:00 2001 From: Michael Barz Date: Wed, 16 Feb 2022 21:23:30 +0100 Subject: [PATCH 5/7] change root item ID to match the format --- graph/pkg/service/v0/drives.go | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/graph/pkg/service/v0/drives.go b/graph/pkg/service/v0/drives.go index 02c577a87d..0b3b57185e 100644 --- a/graph/pkg/service/v0/drives.go +++ b/graph/pkg/service/v0/drives.go @@ -411,10 +411,6 @@ func (g Graph) ListStorageSpacesWithFilters(ctx context.Context, filters []*stor func (g Graph) cs3StorageSpaceToDrive(baseURL *url.URL, space *storageprovider.StorageSpace) (*libregraph.Drive, error) { rootID := resourceid.OwnCloudResourceIDWrap(space.Root) - if space.Root.StorageId == space.Root.OpaqueId { - // omit opaqueid - rootID = space.Root.StorageId - } var permissions []libregraph.Permission if space.Opaque != nil { @@ -473,7 +469,7 @@ func (g Graph) cs3StorageSpaceToDrive(baseURL *url.URL, space *storageprovider.S } drive := &libregraph.Drive{ - Id: &rootID, + Id: &space.Root.StorageId, Name: &space.Name, //"createdDateTime": "string (timestamp)", // TODO read from StorageSpace ... needs Opaque for now //"description": "string", // TODO read from StorageSpace ... needs Opaque for now @@ -502,7 +498,7 @@ func (g Graph) cs3StorageSpaceToDrive(baseURL *url.URL, space *storageprovider.S // TODO read from StorageSpace ... needs Opaque for now // TODO how do we build the url? // for now: read from request - webDavURL := baseURL.String() + rootID + webDavURL := baseURL.String() + space.Root.StorageId drive.Root.WebDavUrl = &webDavURL } From efe292738f0a0774184f9eb6436d65cd7a6c0a35 Mon Sep 17 00:00:00 2001 From: Michael Barz Date: Wed, 16 Feb 2022 22:04:23 +0100 Subject: [PATCH 6/7] Show not found error message --- go.mod | 2 +- go.sum | 4 ++-- graph/pkg/service/v0/drives.go | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 2b1cff1b48..1e290ad4e1 100644 --- a/go.mod +++ b/go.mod @@ -21,7 +21,7 @@ require ( github.com/blevesearch/bleve/v2 v2.3.0 github.com/coreos/go-oidc/v3 v3.1.0 github.com/cs3org/go-cs3apis v0.0.0-20220126114148-64c025ccdd19 - github.com/cs3org/reva v1.16.1-0.20220216200955-a7653146c7c6 + github.com/cs3org/reva v1.16.1-0.20220216213129-67204fec6e50 github.com/disintegration/imaging v1.6.2 github.com/glauth/glauth/v2 v2.0.0-20211021011345-ef3151c28733 github.com/go-chi/chi/v5 v5.0.7 diff --git a/go.sum b/go.sum index 91a40a4038..fc777cd440 100644 --- a/go.sum +++ b/go.sum @@ -337,8 +337,8 @@ github.com/crewjam/saml v0.4.5/go.mod h1:qCJQpUtZte9R1ZjUBcW8qtCNlinbO363ooNl02S github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e/go.mod h1:XJEZ3/EQuI3BXTp/6DUzFr850vlxq11I6satRtz0YQ4= github.com/cs3org/go-cs3apis v0.0.0-20220126114148-64c025ccdd19 h1:1jqPH58jCxvbaJ9WLIJ7W2/m622bWS6ChptzljSG6IQ= github.com/cs3org/go-cs3apis v0.0.0-20220126114148-64c025ccdd19/go.mod h1:UXha4TguuB52H14EMoSsCqDj7k8a/t7g4gVP+bgY5LY= -github.com/cs3org/reva v1.16.1-0.20220216200955-a7653146c7c6 h1:4X09ACVOdFSnyhmwzFulajv4NhQApfCw6eTjmXsASEY= -github.com/cs3org/reva v1.16.1-0.20220216200955-a7653146c7c6/go.mod h1:gdKuhou74V47snANuHNIhGNJfCKUSCHPPvuhSx7nu5M= +github.com/cs3org/reva v1.16.1-0.20220216213129-67204fec6e50 h1:K5HI9Pyq7hF6FH5Sc4phrkgFtLNMo0NrEL8NoEjWU/E= +github.com/cs3org/reva v1.16.1-0.20220216213129-67204fec6e50/go.mod h1:gdKuhou74V47snANuHNIhGNJfCKUSCHPPvuhSx7nu5M= github.com/cubewise-code/go-mime v0.0.0-20200519001935-8c5762b177d8 h1:Z9lwXumT5ACSmJ7WGnFl+OMLLjpz5uR2fyz7dC255FI= github.com/cubewise-code/go-mime v0.0.0-20200519001935-8c5762b177d8/go.mod h1:4abs/jPXcmJzYoYGF91JF9Uq9s/KL5n1jvFDix8KcqY= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= diff --git a/graph/pkg/service/v0/drives.go b/graph/pkg/service/v0/drives.go index 0b3b57185e..24104af77e 100644 --- a/graph/pkg/service/v0/drives.go +++ b/graph/pkg/service/v0/drives.go @@ -330,7 +330,7 @@ func (g Graph) UpdateDrive(w http.ResponseWriter, r *http.Request) { if resp.GetStatus().GetCode() != cs3rpc.Code_CODE_OK { switch resp.Status.GetCode() { case cs3rpc.Code_CODE_NOT_FOUND: - errorcode.ItemNotFound.Render(w, r, http.StatusNotFound, "Space not found") + errorcode.ItemNotFound.Render(w, r, http.StatusNotFound, resp.GetStatus().GetMessage()) return case cs3rpc.Code_CODE_PERMISSION_DENIED: errorcode.NotAllowed.Render(w, r, http.StatusForbidden, resp.GetStatus().GetMessage()) From 3ff984ec80fc901e2d39207246028840ecc94ce4 Mon Sep 17 00:00:00 2001 From: Michael Barz Date: Wed, 16 Feb 2022 23:49:25 +0100 Subject: [PATCH 7/7] fix unit test --- graph/pkg/service/v0/graph_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/graph/pkg/service/v0/graph_test.go b/graph/pkg/service/v0/graph_test.go index 2c751b55b6..976f4509aa 100644 --- a/graph/pkg/service/v0/graph_test.go +++ b/graph/pkg/service/v0/graph_test.go @@ -90,11 +90,11 @@ var _ = Describe("Graph", func() { "value":[ { "driveType":"aspacetype", - "id":"aspaceid!anopaqueid", + "id":"aspaceid", "name":"aspacename", "root":{ "id":"aspaceid!anopaqueid", - "webDavUrl":"https://localhost:9200/dav/spaces/aspaceid!anopaqueid" + "webDavUrl":"https://localhost:9200/dav/spaces/aspaceid" } } ]