From 20be8e6bf8ab190895b55e3ce5beef5c6bc523ee Mon Sep 17 00:00:00 2001 From: Giuseppe Lo Presti Date: Thu, 20 Apr 2023 17:24:46 +0200 Subject: [PATCH] apps: fixed viewMode resolution by making permissions override user's choices (#3805) --- changelog/unreleased/apps-viewmode.md | 6 ++++++ internal/http/services/appprovider/appprovider.go | 14 +++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 changelog/unreleased/apps-viewmode.md diff --git a/changelog/unreleased/apps-viewmode.md b/changelog/unreleased/apps-viewmode.md new file mode 100644 index 00000000000..634c08d3f78 --- /dev/null +++ b/changelog/unreleased/apps-viewmode.md @@ -0,0 +1,6 @@ +Bugfix: Apps: fixed viewMode resolution + +Currently, the viewMode passed on /app/open is taken without validating +the actual user's permissions. This PR fixes this. + +https://github.com/cs3org/reva/pull/3805 diff --git a/internal/http/services/appprovider/appprovider.go b/internal/http/services/appprovider/appprovider.go index c4366dc148e..c57d9fbc789 100644 --- a/internal/http/services/appprovider/appprovider.go +++ b/internal/http/services/appprovider/appprovider.go @@ -449,19 +449,23 @@ func filterAppsByUserAgent(mimeTypes []*appregistry.MimeTypeInfo, userAgent stri } func resolveViewMode(res *provider.ResourceInfo, vm string) gateway.OpenInAppRequest_ViewMode { + var viewMode gateway.OpenInAppRequest_ViewMode if vm != "" { - return utils.GetViewMode(vm) + viewMode = utils.GetViewMode(vm) + } else { + viewMode = gateway.OpenInAppRequest_VIEW_MODE_READ_WRITE } - - var viewMode gateway.OpenInAppRequest_ViewMode canEdit := res.PermissionSet.InitiateFileUpload canView := res.PermissionSet.InitiateFileDownload switch { case canEdit && canView: - viewMode = gateway.OpenInAppRequest_VIEW_MODE_READ_WRITE + // ok case canView: - viewMode = gateway.OpenInAppRequest_VIEW_MODE_READ_ONLY + if viewMode == gateway.OpenInAppRequest_VIEW_MODE_READ_WRITE || viewMode == gateway.OpenInAppRequest_VIEW_MODE_PREVIEW { + // downgrade to the maximum permitted viewmode + viewMode = gateway.OpenInAppRequest_VIEW_MODE_READ_ONLY + } default: // no permissions, will return access denied viewMode = gateway.OpenInAppRequest_VIEW_MODE_INVALID