From 17c691c4f2136b9aff154cf2ba4c8092ead73302 Mon Sep 17 00:00:00 2001 From: Ishank Arora Date: Tue, 28 Jul 2020 11:39:07 +0200 Subject: [PATCH 1/3] Take care of trailing slashes in OCM package --- changelog/unreleased/ocm-fixes.md | 6 ++++++ internal/grpc/services/gateway/ocmshareprovider.go | 2 +- pkg/ocm/invite/manager/json/json.go | 10 +++++++++- pkg/ocm/invite/manager/memory/memory.go | 11 +++++++++-- pkg/ocm/share/manager/json/json.go | 10 +++++++++- pkg/ocm/share/manager/memory/memory.go | 10 +++++++++- 6 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 changelog/unreleased/ocm-fixes.md diff --git a/changelog/unreleased/ocm-fixes.md b/changelog/unreleased/ocm-fixes.md new file mode 100644 index 0000000000..78c20bc3ed --- /dev/null +++ b/changelog/unreleased/ocm-fixes.md @@ -0,0 +1,6 @@ +Bugfix: Take care of trailing slashes in OCM package + +Previously, we assumed that the OCM endpoints would have trailing +slashes, failing in case they didn't. This PR fixes that. + +https://github.com/cs3org/reva/pull/1024 diff --git a/internal/grpc/services/gateway/ocmshareprovider.go b/internal/grpc/services/gateway/ocmshareprovider.go index 91925a0b8d..1a2024ea65 100644 --- a/internal/grpc/services/gateway/ocmshareprovider.go +++ b/internal/grpc/services/gateway/ocmshareprovider.go @@ -297,7 +297,7 @@ func (s *svc) createWebdavReference(ctx context.Context, share *ocm.Share) (*rpc } var webdavEndpoint string for _, s := range meshProvider.ProviderInfo.Services { - if s.Endpoint.Type.Name == "Webdav" { + if strings.ToLower(s.Endpoint.Type.Name) == "webdav" { webdavEndpoint = s.Endpoint.Path } } diff --git a/pkg/ocm/invite/manager/json/json.go b/pkg/ocm/invite/manager/json/json.go index ad7eb2cfb2..9dd5a525ef 100644 --- a/pkg/ocm/invite/manager/json/json.go +++ b/pkg/ocm/invite/manager/json/json.go @@ -26,6 +26,7 @@ import ( "net/http" "net/url" "os" + "path" "strings" "sync" "time" @@ -201,13 +202,20 @@ func (m *manager) ForwardInvite(ctx context.Context, invite *invitepb.InviteToke "email": {contextUser.GetMail()}, "name": {contextUser.GetDisplayName()}, } + ocmEndpoint, err := getOCMEndpoint(originProvider) if err != nil { return err } + u, err := url.Parse(ocmEndpoint) + if err != nil { + return err + } + u.Path = path.Join(u.Path, acceptInviteEndpoint) + recipientURL := u.String() client := rhttp.GetHTTPClient(rhttp.Insecure(m.config.InsecureConnections)) - recipientURL := fmt.Sprintf("%s%s", ocmEndpoint, acceptInviteEndpoint) + req, err := http.NewRequest("POST", recipientURL, strings.NewReader(requestBody.Encode())) if err != nil { return errors.Wrap(err, "json: error framing post request") diff --git a/pkg/ocm/invite/manager/memory/memory.go b/pkg/ocm/invite/manager/memory/memory.go index 3f0d9f063d..eab229e07f 100644 --- a/pkg/ocm/invite/manager/memory/memory.go +++ b/pkg/ocm/invite/manager/memory/memory.go @@ -20,9 +20,9 @@ package memory import ( "context" - "fmt" "net/http" "net/url" + "path" "strings" "sync" "time" @@ -102,13 +102,20 @@ func (m *manager) ForwardInvite(ctx context.Context, invite *invitepb.InviteToke "email": {contextUser.GetMail()}, "name": {contextUser.GetDisplayName()}, } + ocmEndpoint, err := getOCMEndpoint(originProvider) if err != nil { return err } + u, err := url.Parse(ocmEndpoint) + if err != nil { + return err + } + u.Path = path.Join(u.Path, acceptInviteEndpoint) + recipientURL := u.String() client := rhttp.GetHTTPClient(rhttp.Insecure(m.Config.InsecureConnections)) - recipientURL := fmt.Sprintf("%s%s", ocmEndpoint, acceptInviteEndpoint) + req, err := http.NewRequest("POST", recipientURL, strings.NewReader(requestBody.Encode())) if err != nil { return errors.Wrap(err, "json: error framing post request") diff --git a/pkg/ocm/share/manager/json/json.go b/pkg/ocm/share/manager/json/json.go index d1bc4188dc..376dc7acb4 100644 --- a/pkg/ocm/share/manager/json/json.go +++ b/pkg/ocm/share/manager/json/json.go @@ -26,6 +26,7 @@ import ( "net/http" "net/url" "os" + "path" "reflect" "strings" "sync" @@ -276,13 +277,20 @@ func (m *mgr) Share(ctx context.Context, md *provider.ResourceId, g *ocm.ShareGr "protocol": {string(protocol)}, "meshProvider": {userID.Idp}, } + ocmEndpoint, err := getOCMEndpoint(pi) if err != nil { return nil, err } + u, err := url.Parse(ocmEndpoint) + if err != nil { + return nil, err + } + u.Path = path.Join(u.Path, createOCMCoreShareEndpoint) + recipientURL := u.String() client := rhttp.GetHTTPClient(rhttp.Insecure(m.c.InsecureConnections)) - recipientURL := fmt.Sprintf("%s%s", ocmEndpoint, createOCMCoreShareEndpoint) + req, err := http.NewRequest("POST", recipientURL, strings.NewReader(requestBody.Encode())) if err != nil { return nil, errors.Wrap(err, "json: error framing post request") diff --git a/pkg/ocm/share/manager/memory/memory.go b/pkg/ocm/share/manager/memory/memory.go index d1ce2219e3..3a91e271a7 100644 --- a/pkg/ocm/share/manager/memory/memory.go +++ b/pkg/ocm/share/manager/memory/memory.go @@ -24,6 +24,7 @@ import ( "fmt" "net/http" "net/url" + "path" "reflect" "strings" "sync" @@ -186,13 +187,20 @@ func (m *mgr) Share(ctx context.Context, md *provider.ResourceId, g *ocm.ShareGr "protocol": {string(protocol)}, "meshProvider": {userID.Idp}, } + ocmEndpoint, err := getOCMEndpoint(pi) if err != nil { return nil, err } + u, err := url.Parse(ocmEndpoint) + if err != nil { + return nil, err + } + u.Path = path.Join(u.Path, createOCMCoreShareEndpoint) + recipientURL := u.String() client := rhttp.GetHTTPClient(rhttp.Insecure(m.c.InsecureConnections)) - recipientURL := fmt.Sprintf("%s%s", ocmEndpoint, createOCMCoreShareEndpoint) + req, err := http.NewRequest("POST", recipientURL, strings.NewReader(requestBody.Encode())) if err != nil { return nil, errors.Wrap(err, "json: error framing post request") From a6224b812a4dca937d1a85eddbe5c23890bfdbb9 Mon Sep 17 00:00:00 2001 From: Ishank Arora Date: Tue, 28 Jul 2020 12:31:25 +0200 Subject: [PATCH 2/3] Create new example for having separate storage providers --- examples/standalone/standalone.toml | 13 ++----- examples/storage-references/gateway.toml | 27 ++++++++++++++ .../storage-home.toml | 0 .../storage-reva.toml | 0 examples/storage-references/users.demo.json | 35 +++++++++++++++++++ 5 files changed, 64 insertions(+), 11 deletions(-) create mode 100644 examples/storage-references/gateway.toml rename examples/{standalone => storage-references}/storage-home.toml (100%) rename examples/{standalone => storage-references}/storage-reva.toml (100%) create mode 100644 examples/storage-references/users.demo.json diff --git a/examples/standalone/standalone.toml b/examples/standalone/standalone.toml index 8a59ea2929..7350f2b1f2 100644 --- a/examples/standalone/standalone.toml +++ b/examples/standalone/standalone.toml @@ -1,17 +1,7 @@ # services to enable [grpc.services.gateway] -commit_share_to_storage_grant = true -commit_share_to_storage_ref = true - [grpc.services.storageregistry] -[grpc.services.storageregistry.drivers.static] -home_provider = "/home" - -[grpc.services.storageregistry.drivers.static.rules] -"/home" = "localhost:17000" -"/reva" = "localhost:18000" -"123e4567-e89b-12d3-a456-426655440000" = "localhost:18000" - +[grpc.services.storageprovider] [grpc.services.authprovider] [grpc.services.authregistry] [grpc.services.userprovider] @@ -23,5 +13,6 @@ home_provider = "/home" [grpc.services.ocmproviderauthorizer] [http.services.datagateway] +[http.services.dataprovider] [http.services.prometheus] [http.services.ocmd] diff --git a/examples/storage-references/gateway.toml b/examples/storage-references/gateway.toml new file mode 100644 index 0000000000..8a59ea2929 --- /dev/null +++ b/examples/storage-references/gateway.toml @@ -0,0 +1,27 @@ +# services to enable +[grpc.services.gateway] +commit_share_to_storage_grant = true +commit_share_to_storage_ref = true + +[grpc.services.storageregistry] +[grpc.services.storageregistry.drivers.static] +home_provider = "/home" + +[grpc.services.storageregistry.drivers.static.rules] +"/home" = "localhost:17000" +"/reva" = "localhost:18000" +"123e4567-e89b-12d3-a456-426655440000" = "localhost:18000" + +[grpc.services.authprovider] +[grpc.services.authregistry] +[grpc.services.userprovider] +[grpc.services.usershareprovider] +[grpc.services.publicshareprovider] +[grpc.services.ocmcore] +[grpc.services.ocmshareprovider] +[grpc.services.ocminvitemanager] +[grpc.services.ocmproviderauthorizer] + +[http.services.datagateway] +[http.services.prometheus] +[http.services.ocmd] diff --git a/examples/standalone/storage-home.toml b/examples/storage-references/storage-home.toml similarity index 100% rename from examples/standalone/storage-home.toml rename to examples/storage-references/storage-home.toml diff --git a/examples/standalone/storage-reva.toml b/examples/storage-references/storage-reva.toml similarity index 100% rename from examples/standalone/storage-reva.toml rename to examples/storage-references/storage-reva.toml diff --git a/examples/storage-references/users.demo.json b/examples/storage-references/users.demo.json new file mode 100644 index 0000000000..2e7567da97 --- /dev/null +++ b/examples/storage-references/users.demo.json @@ -0,0 +1,35 @@ +[ + { + "id": { + "opaque_id": "4c510ada-c86b-4815-8820-42cdf82c3d51", + "idp": "http://localhost:20080" + }, + "username": "einstein", + "secret": "relativity", + "mail": "einstein@example.org", + "display_name": "Albert Einstein", + "groups": ["sailing-lovers", "violin-haters", "physics-lovers"] + }, + { + "id": { + "opaque_id": "f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c", + "idp": "http://localhost:20080" + }, + "username": "marie", + "secret": "radioactivity", + "mail": "marie@example.org", + "display_name": "Marie Curie", + "groups": ["radium-lovers", "polonium-lovers", "physics-lovers"] + }, + { + "id": { + "opaque_id": "932b4540-8d16-481e-8ef4-588e4b6b151c", + "idp": "http://localhost:20080" + }, + "username": "richard", + "secret": "superfluidity", + "mail": "richard@example.org", + "display_name": "Richard Feynman", + "groups": ["quantum-lovers", "philosophy-haters", "physics-lovers"] + } +] From f8cf64f741d91faae644685272cd2615327364fc Mon Sep 17 00:00:00 2001 From: Ishank Arora Date: Tue, 28 Jul 2020 12:40:25 +0200 Subject: [PATCH 3/3] Remove protocol from idp examples --- examples/meshdirectory/providers.demo.json | 12 ++++++------ examples/oc-phoenix/providers.demo.json | 8 ++++---- examples/oc-phoenix/users.demo.json | 6 +++--- examples/ocmd/providers.demo.json | 8 ++++---- examples/ocmd/users.demo.json | 8 ++++---- examples/standalone/users.demo.json | 6 +++--- examples/storage-references/users.demo.json | 6 +++--- 7 files changed, 27 insertions(+), 27 deletions(-) diff --git a/examples/meshdirectory/providers.demo.json b/examples/meshdirectory/providers.demo.json index e96b6ec520..2e3c2f1502 100644 --- a/examples/meshdirectory/providers.demo.json +++ b/examples/meshdirectory/providers.demo.json @@ -3,7 +3,7 @@ "name": "cernbox", "full_name": "CERNBox", "organization": "CERN", - "domain": "https://cern.ch", + "domain": "cern.ch", "homepage": "https://cernbox.web.cern.ch", "description": "CERNBox provides cloud data storage to all CERN users.", "services": [ @@ -26,7 +26,7 @@ "name": "oc-cesnet", "full_name": "ownCloud@CESNET", "organization": "CESNET", - "domain": "https://cesnet.cz", + "domain": "cesnet.cz", "homepage": "https://owncloud.cesnet.cz", "description": "OwnCloud has been designed for individual users.", "services": [ @@ -49,7 +49,7 @@ "name": "uni-muenster", "full_name": "WWU University of Muenster", "organization": "University of Muenster", - "domain": "https://uni-muenster.de", + "domain": "uni-muenster.de", "homepage": "https://uni-muenster.de", "description": "WWU provides cloud storage to its students, faculty and researchers.", "services": [ @@ -72,7 +72,7 @@ "name": "cubbit", "full_name": "Cubbit", "organization": "Cubbit", - "domain": "https://cubbit.io", + "domain": "cubbit.io", "homepage": "https://cubbit.io", "description": "Cubbit provides distributed storage over a P2P network.", "services": [ @@ -95,7 +95,7 @@ "name": "ailleron", "full_name": "Ailleron - Software Mind", "organization": "Ailleron", - "domain": "https://ailleron.com", + "domain": "ailleron.com", "homepage": "https://ailleron.com", "description": "Ailleron is a Polish IT company providing software and storage solutions to its clients.", "services": [ @@ -118,7 +118,7 @@ "name": "surfsara", "full_name": "Surfsara", "organization": "Surfsara", - "domain": "https://surfsara.nl", + "domain": "surfsara.nl", "homepage": "https://surfsara.nl", "description": "OwnCloud has been designed for individual users.", "services": [ diff --git a/examples/oc-phoenix/providers.demo.json b/examples/oc-phoenix/providers.demo.json index ecf9246896..4c87fb8ca1 100644 --- a/examples/oc-phoenix/providers.demo.json +++ b/examples/oc-phoenix/providers.demo.json @@ -3,7 +3,7 @@ "name": "cernbox", "full_name": "CERNBox", "organization": "CERN", - "domain": "http://cernbox.cern.ch", + "domain": "cernbox.cern.ch", "homepage": "https://cernbox.web.cern.ch", "description": "CERNBox provides cloud data storage to all CERN users.", "services": [ @@ -39,7 +39,7 @@ "name": "oc-cesnet", "full_name": "ownCloud@CESNET", "organization": "CESNET", - "domain": "http://cesnet.cz", + "domain": "cesnet.cz", "homepage": "https://owncloud.cesnet.cz", "description": "OwnCloud has been designed for individual users.", "services": [ @@ -75,7 +75,7 @@ "name": "example", "full_name": "ownCloud@Example", "organization": "Example", - "domain": "http://example.org", + "domain": "example.org", "homepage": "http://example.org", "description": "Example cloud storage.", "services": [ @@ -111,7 +111,7 @@ "name": "test", "full_name": "ownCloud@Test", "organization": "Test", - "domain": "http://test.org", + "domain": "test.org", "homepage": "http://test.org", "description": "Test cloud storage.", "services": [ diff --git a/examples/oc-phoenix/users.demo.json b/examples/oc-phoenix/users.demo.json index 2e7567da97..d13a252b9b 100644 --- a/examples/oc-phoenix/users.demo.json +++ b/examples/oc-phoenix/users.demo.json @@ -2,7 +2,7 @@ { "id": { "opaque_id": "4c510ada-c86b-4815-8820-42cdf82c3d51", - "idp": "http://localhost:20080" + "idp": "localhost:20080" }, "username": "einstein", "secret": "relativity", @@ -13,7 +13,7 @@ { "id": { "opaque_id": "f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c", - "idp": "http://localhost:20080" + "idp": "localhost:20080" }, "username": "marie", "secret": "radioactivity", @@ -24,7 +24,7 @@ { "id": { "opaque_id": "932b4540-8d16-481e-8ef4-588e4b6b151c", - "idp": "http://localhost:20080" + "idp": "localhost:20080" }, "username": "richard", "secret": "superfluidity", diff --git a/examples/ocmd/providers.demo.json b/examples/ocmd/providers.demo.json index 86ddb73d79..910006174b 100644 --- a/examples/ocmd/providers.demo.json +++ b/examples/ocmd/providers.demo.json @@ -3,7 +3,7 @@ "name": "cernbox", "full_name": "CERNBox", "organization": "CERN", - "domain": "http://cernbox.cern.ch", + "domain": "cernbox.cern.ch", "homepage": "https://cernbox.web.cern.ch", "description": "CERNBox provides cloud data storage to all CERN users.", "services": [ @@ -39,7 +39,7 @@ "name": "oc-cesnet", "full_name": "ownCloud@CESNET", "organization": "CESNET", - "domain": "http://cesnet.cz", + "domain": "cesnet.cz", "homepage": "https://owncloud.cesnet.cz", "description": "OwnCloud has been designed for individual users.", "services": [ @@ -75,7 +75,7 @@ "name": "example", "full_name": "ownCloud@Example", "organization": "Example", - "domain": "http://example.org", + "domain": "example.org", "homepage": "http://example.org", "description": "Example cloud storage.", "services": [ @@ -111,7 +111,7 @@ "name": "test", "full_name": "ownCloud@Test", "organization": "Test", - "domain": "http://test.org", + "domain": "test.org", "homepage": "http://test.org", "description": "Test cloud storage.", "services": [ diff --git a/examples/ocmd/users.demo.json b/examples/ocmd/users.demo.json index 72bbf67083..a32b9da7d0 100644 --- a/examples/ocmd/users.demo.json +++ b/examples/ocmd/users.demo.json @@ -2,7 +2,7 @@ { "id": { "opaque_id": "4c510ada-c86b-4815-8820-42cdf82c3d51", - "idp": "http://cernbox.cern.ch" + "idp": "cernbox.cern.ch" }, "username": "einstein", "secret": "relativity", @@ -13,7 +13,7 @@ { "id": { "opaque_id": "f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c", - "idp": "http://cesnet.cz" + "idp": "cesnet.cz" }, "username": "marie", "secret": "radioactivity", @@ -24,7 +24,7 @@ { "id": { "opaque_id": "932b4540-8d16-481e-8ef4-588e4b6b151c", - "idp": "http://example.org" + "idp": "example.org" }, "username": "richard", "secret": "superfluidity", @@ -35,7 +35,7 @@ { "id": { "opaque_id": "932b4522-139b-4815-8ef4-42cdf82c3d51", - "idp": "http://example.com" + "idp": "example.com" }, "username": "test", "secret": "test", diff --git a/examples/standalone/users.demo.json b/examples/standalone/users.demo.json index 2e7567da97..d13a252b9b 100644 --- a/examples/standalone/users.demo.json +++ b/examples/standalone/users.demo.json @@ -2,7 +2,7 @@ { "id": { "opaque_id": "4c510ada-c86b-4815-8820-42cdf82c3d51", - "idp": "http://localhost:20080" + "idp": "localhost:20080" }, "username": "einstein", "secret": "relativity", @@ -13,7 +13,7 @@ { "id": { "opaque_id": "f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c", - "idp": "http://localhost:20080" + "idp": "localhost:20080" }, "username": "marie", "secret": "radioactivity", @@ -24,7 +24,7 @@ { "id": { "opaque_id": "932b4540-8d16-481e-8ef4-588e4b6b151c", - "idp": "http://localhost:20080" + "idp": "localhost:20080" }, "username": "richard", "secret": "superfluidity", diff --git a/examples/storage-references/users.demo.json b/examples/storage-references/users.demo.json index 2e7567da97..d13a252b9b 100644 --- a/examples/storage-references/users.demo.json +++ b/examples/storage-references/users.demo.json @@ -2,7 +2,7 @@ { "id": { "opaque_id": "4c510ada-c86b-4815-8820-42cdf82c3d51", - "idp": "http://localhost:20080" + "idp": "localhost:20080" }, "username": "einstein", "secret": "relativity", @@ -13,7 +13,7 @@ { "id": { "opaque_id": "f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c", - "idp": "http://localhost:20080" + "idp": "localhost:20080" }, "username": "marie", "secret": "radioactivity", @@ -24,7 +24,7 @@ { "id": { "opaque_id": "932b4540-8d16-481e-8ef4-588e4b6b151c", - "idp": "http://localhost:20080" + "idp": "localhost:20080" }, "username": "richard", "secret": "superfluidity",