From 66eb0c2e8b43ba97ed4b3cdd198398192bfec78e Mon Sep 17 00:00:00 2001 From: Prarup Gurung Date: Fri, 9 Sep 2022 22:20:41 +0545 Subject: [PATCH 01/83] [tests-only] Bump core commit id to latest `reva-master` (#3211) * Bump core commit id to latest * Updated expected failures --- .drone.env | 2 +- tests/acceptance/expected-failures-on-OCIS-storage.md | 6 ++++-- tests/acceptance/expected-failures-on-S3NG-storage.md | 6 ++++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.drone.env b/.drone.env index 5c366cd767..df03c83c16 100644 --- a/.drone.env +++ b/.drone.env @@ -1,3 +1,3 @@ # The test runner source for API tests -CORE_COMMITID=c9acf31ed161b66264ac5022b0d3fe148f349222 +CORE_COMMITID=808a6d7600d41af28e78bfa57f7f1f6655d9ce31 CORE_BRANCH=master diff --git a/tests/acceptance/expected-failures-on-OCIS-storage.md b/tests/acceptance/expected-failures-on-OCIS-storage.md index 79171e9deb..0935a4ec22 100644 --- a/tests/acceptance/expected-failures-on-OCIS-storage.md +++ b/tests/acceptance/expected-failures-on-OCIS-storage.md @@ -733,9 +733,10 @@ _ocdav: api compatibility, return correct status code_ #### [trying to lock file of another user gives http 200](https://github.com/owncloud/ocis/issues/2176) - [apiAuthWebDav/webDavLOCKAuth.feature:58](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavLOCKAuth.feature#L58) Scenario: send LOCK requests to another user's webDav endpoints as normal user -#### [send MOVE requests to another user's webDav endpoints as normal user gives 400 instead of 403](https://github.com/owncloud/ocis/issues/3882) +#### [send (MOVE, COPY) requests to another user's webDav endpoints as normal user gives 400 instead of 403](https://github.com/owncloud/ocis/issues/3882) _ocdav: api compatibility, return correct status code_ - [apiAuthWebDav/webDavMOVEAuth.feature:57](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavMOVEAuth.feature#L57) Scenario: send MOVE requests to another user's webDav endpoints as normal user +- [apiAuthWebDav/webDavCOPYAuth.feature:59](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavCOPYAuth.feature#L59) #### [send POST requests to another user's webDav endpoints as normal user](https://github.com/owncloud/ocis/issues/1287) _ocdav: api compatibility, return correct status code_ @@ -1251,8 +1252,9 @@ _ocs: api compatibility, return correct status code_ - [apiSharePublicLink1/createPublicLinkShare.feature:477](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L477) - [apiSharePublicLink1/createPublicLinkShare.feature:478](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L478) -#### [Valid requests with body must give 415 (Unsupported Media Type)](https://github.com/owncloud/ocis/issues/4332) +#### [valid WebDAV (DELETE, COPY or MOVE) requests with body must exit with 415](https://github.com/owncloud/ocis/issues/4332) - [apiAuthWebDav/webDavDELETEAuth.feature:188](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavDELETEAuth.feature#L188) +- [apiAuthWebDav/webDavCOPYAuth.feature:166](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavCOPYAuth.feature#L166) Note: always have an empty line at the end of this file. The bash script that processes this file may not process a scenario reference on the last line. diff --git a/tests/acceptance/expected-failures-on-S3NG-storage.md b/tests/acceptance/expected-failures-on-S3NG-storage.md index ad8244c044..6b3b80e57f 100644 --- a/tests/acceptance/expected-failures-on-S3NG-storage.md +++ b/tests/acceptance/expected-failures-on-S3NG-storage.md @@ -751,9 +751,10 @@ _ocdav: api compatibility, return correct status code_ #### [trying to lock file of another user gives http 200](https://github.com/owncloud/ocis/issues/2176) - [apiAuthWebDav/webDavLOCKAuth.feature:58](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavLOCKAuth.feature#L58) Scenario: send LOCK requests to another user's webDav endpoints as normal user -#### [send MOVE requests to another user's webDav endpoints as normal user gives 400 instead of 403](https://github.com/owncloud/ocis/issues/3882) +#### [send (MOVE, COPY) requests to another user's webDav endpoints as normal user gives 400 instead of 403](https://github.com/owncloud/ocis/issues/3882) _ocdav: api compatibility, return correct status code_ - [apiAuthWebDav/webDavMOVEAuth.feature:57](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavMOVEAuth.feature#L57) Scenario: send MOVE requests to another user's webDav endpoints as normal user +- [apiAuthWebDav/webDavCOPYAuth.feature:59](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavCOPYAuth.feature#L59) #### [send POST requests to another user's webDav endpoints as normal user](https://github.com/owncloud/ocis/issues/1287) _ocdav: api compatibility, return correct status code_ @@ -1253,8 +1254,9 @@ _ocs: api compatibility, return correct status code_ - [apiSharePublicLink1/createPublicLinkShare.feature:477](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L477) - [apiSharePublicLink1/createPublicLinkShare.feature:478](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L478) -#### [Valid requests with body must give 415 (Unsupported Media Type)](https://github.com/owncloud/ocis/issues/4332) +#### [valid WebDAV (DELETE, COPY or MOVE) requests with body must exit with 415](https://github.com/owncloud/ocis/issues/4332) - [apiAuthWebDav/webDavDELETEAuth.feature:188](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavDELETEAuth.feature#L188) +- [apiAuthWebDav/webDavCOPYAuth.feature:166](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavCOPYAuth.feature#L166) Note: always have an empty line at the end of this file. The bash script that processes this file may not process a scenario reference on the last line. From efabced910d21ca82c6fba39bcd55bee335568f4 Mon Sep 17 00:00:00 2001 From: Swikriti Tripathi <41103328+SwikritiT@users.noreply.github.com> Date: Tue, 13 Sep 2022 13:14:03 +0545 Subject: [PATCH 02/83] Update README to use different ldap image tag (#3220) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f670bce24e..ee6f26e4cc 100644 --- a/README.md +++ b/README.md @@ -114,7 +114,7 @@ This will require some PHP-related tools to run, for instance on Ubuntu you will -e LDAP_ADMIN_PASSWORD=admin \ --name docker-slapd \ -p 127.0.0.1:389:389 \ - -p 636:636 -d osixia/openldap + -p 636:636 -d osixia/openldap:1.3.0 ``` 2. start the needed services From 0a02d4e40f884756be39017fd8603ab7da6cb936 Mon Sep 17 00:00:00 2001 From: Hugo Labrador Date: Tue, 13 Sep 2022 09:31:25 +0200 Subject: [PATCH 03/83] Update CODEOWNERS Add glpatcern --- CODEOWNERS | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/CODEOWNERS b/CODEOWNERS index f22f6c60db..793111b4a3 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1,9 +1,9 @@ -* @labkode @ishank011 +* @labkode @glpatcern .drone.env @labkode @ishank011 @glpatcern @cs3org/owncloud-team changelog @labkode @ishank011 @glpatcern @cs3org/owncloud-team examples @labkode @ishank011 @glpatcern @cs3org/owncloud-team tests @labkode @ishank011 @glpatcern @cs3org/owncloud-team -internal/http/services/owncloud @cs3org/owncloud-team @labkode @ishank011 +internal/http/services/owncloud @cs3org/owncloud-team @labkode @ishank011 @glpatcern internal/http/services/appprovider @labkode @ishank011 @wkloucek @glpatcern internal/grpc/services/gateway @labkode @ishank011 @glpatcern internal/grpc/services/appprovider @labkode @ishank011 @wkloucek @glpatcern @@ -12,7 +12,5 @@ pkg/storage/fs/owncloudsql @cs3org/owncloud-team pkg/storage/fs/owncloud @cs3org/owncloud-team pkg/storage/fs/ocis @cs3org/owncloud-team pkg/storage/utils/decomposedfs @cs3org/owncloud-team -pkg/storage/utils/eosfs @labkode @ishank011 @glpatcern pkg/user/manager/owncloudsql @cs3org/owncloud-team -pkg/eosclient @labkode @ishank011 @glpatcern -pkg/app @labkode @ishank011 @wkloucek @glpatcern +pkg/app @labkode @wkloucek @glpatcern From 98e60a231165294ab0783c085e2ceb6561c306ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20M=C3=BCller?= Date: Tue, 13 Sep 2022 10:21:51 +0200 Subject: [PATCH 04/83] Site Accounts improvements (#3221) --- changelog/unreleased/siteacc-ext.md | 5 + pkg/siteacc/account/panel.go | 267 ------------------ pkg/siteacc/admin/panel.go | 115 -------- pkg/siteacc/endpoints.go | 6 +- pkg/siteacc/html/panel.go | 4 + .../{ => panels}/account/contact/contact.go | 0 .../{ => panels}/account/contact/template.go | 0 pkg/siteacc/{ => panels}/account/edit/edit.go | 0 .../{ => panels}/account/edit/template.go | 0 .../{ => panels}/account/login/login.go | 0 .../{ => panels}/account/login/template.go | 0 .../{ => panels}/account/manage/manage.go | 0 .../{ => panels}/account/manage/template.go | 0 pkg/siteacc/panels/account/panel.go | 192 +++++++++++++ .../account/registration/registration.go | 0 .../account/registration/template.go | 0 .../{ => panels}/account/settings/settings.go | 0 .../{ => panels}/account/settings/template.go | 0 .../{ => panels}/account/sites/sites.go | 0 .../{ => panels}/account/sites/template.go | 0 pkg/siteacc/panels/admin/accounts/accounts.go | 51 ++++ .../admin/accounts}/template.go | 19 +- pkg/siteacc/panels/admin/manage/manage.go | 51 ++++ pkg/siteacc/panels/admin/manage/template.go | 55 ++++ pkg/siteacc/panels/admin/panel.go | 128 +++++++++ pkg/siteacc/panels/admin/sites/sites.go | 51 ++++ pkg/siteacc/panels/admin/sites/template.go | 67 +++++ pkg/siteacc/panels/basepanel.go | 162 +++++++++++ pkg/siteacc/siteacc.go | 7 +- 29 files changed, 787 insertions(+), 393 deletions(-) create mode 100644 changelog/unreleased/siteacc-ext.md delete mode 100644 pkg/siteacc/account/panel.go delete mode 100644 pkg/siteacc/admin/panel.go rename pkg/siteacc/{ => panels}/account/contact/contact.go (100%) rename pkg/siteacc/{ => panels}/account/contact/template.go (100%) rename pkg/siteacc/{ => panels}/account/edit/edit.go (100%) rename pkg/siteacc/{ => panels}/account/edit/template.go (100%) rename pkg/siteacc/{ => panels}/account/login/login.go (100%) rename pkg/siteacc/{ => panels}/account/login/template.go (100%) rename pkg/siteacc/{ => panels}/account/manage/manage.go (100%) rename pkg/siteacc/{ => panels}/account/manage/template.go (100%) create mode 100644 pkg/siteacc/panels/account/panel.go rename pkg/siteacc/{ => panels}/account/registration/registration.go (100%) rename pkg/siteacc/{ => panels}/account/registration/template.go (100%) rename pkg/siteacc/{ => panels}/account/settings/settings.go (100%) rename pkg/siteacc/{ => panels}/account/settings/template.go (100%) rename pkg/siteacc/{ => panels}/account/sites/sites.go (100%) rename pkg/siteacc/{ => panels}/account/sites/template.go (100%) create mode 100644 pkg/siteacc/panels/admin/accounts/accounts.go rename pkg/siteacc/{admin => panels/admin/accounts}/template.go (90%) create mode 100644 pkg/siteacc/panels/admin/manage/manage.go create mode 100644 pkg/siteacc/panels/admin/manage/template.go create mode 100644 pkg/siteacc/panels/admin/panel.go create mode 100644 pkg/siteacc/panels/admin/sites/sites.go create mode 100644 pkg/siteacc/panels/admin/sites/template.go create mode 100644 pkg/siteacc/panels/basepanel.go diff --git a/changelog/unreleased/siteacc-ext.md b/changelog/unreleased/siteacc-ext.md new file mode 100644 index 0000000000..1f50de4f54 --- /dev/null +++ b/changelog/unreleased/siteacc-ext.md @@ -0,0 +1,5 @@ +Enhancement: Site Accounts improvements + +The site accounts admin panel has been reworked and now also shows which sites aren't configured properly yet. Furthermore, a bug that prevented users from changing site configurations has been fixed. + +https://github.com/cs3org/reva/pull/3221 diff --git a/pkg/siteacc/account/panel.go b/pkg/siteacc/account/panel.go deleted file mode 100644 index a1d27ac45b..0000000000 --- a/pkg/siteacc/account/panel.go +++ /dev/null @@ -1,267 +0,0 @@ -// Copyright 2018-2020 CERN -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// In applying this license, CERN does not waive the privileges and immunities -// granted to it by virtue of its status as an Intergovernmental Organization -// or submit itself to any jurisdiction. - -package account - -import ( - "net/http" - "net/url" - "strings" - - "github.com/cs3org/reva/pkg/siteacc/account/contact" - "github.com/cs3org/reva/pkg/siteacc/account/edit" - "github.com/cs3org/reva/pkg/siteacc/account/login" - "github.com/cs3org/reva/pkg/siteacc/account/manage" - "github.com/cs3org/reva/pkg/siteacc/account/registration" - "github.com/cs3org/reva/pkg/siteacc/account/settings" - "github.com/cs3org/reva/pkg/siteacc/account/sites" - "github.com/cs3org/reva/pkg/siteacc/config" - "github.com/cs3org/reva/pkg/siteacc/data" - "github.com/cs3org/reva/pkg/siteacc/html" - "github.com/pkg/errors" - "github.com/rs/zerolog" -) - -// Panel represents the account panel. -type Panel struct { - html.PanelProvider - - conf *config.Configuration - - htmlPanel *html.Panel -} - -const ( - templateLogin = "login" - templateManage = "manage" - templateSettings = "settings" - templateEdit = "edit" - templateSites = "sites" - templateContact = "contact" - templateRegistration = "register" -) - -func (panel *Panel) initialize(conf *config.Configuration, log *zerolog.Logger) error { - if conf == nil { - return errors.Errorf("no configuration provided") - } - panel.conf = conf - - // Create the internal HTML panel - htmlPanel, err := html.NewPanel("account-panel", panel, conf, log) - if err != nil { - return errors.Wrap(err, "unable to create the account panel") - } - panel.htmlPanel = htmlPanel - - // Add all templates - if err := panel.htmlPanel.AddTemplate(templateLogin, &login.PanelTemplate{}); err != nil { - return errors.Wrap(err, "unable to create the login template") - } - - if err := panel.htmlPanel.AddTemplate(templateManage, &manage.PanelTemplate{}); err != nil { - return errors.Wrap(err, "unable to create the account management template") - } - - if err := panel.htmlPanel.AddTemplate(templateSettings, &settings.PanelTemplate{}); err != nil { - return errors.Wrap(err, "unable to create the account settings template") - } - - if err := panel.htmlPanel.AddTemplate(templateEdit, &edit.PanelTemplate{}); err != nil { - return errors.Wrap(err, "unable to create the account editing template") - } - - if err := panel.htmlPanel.AddTemplate(templateSites, &sites.PanelTemplate{}); err != nil { - return errors.Wrap(err, "unable to create the sites template") - } - - if err := panel.htmlPanel.AddTemplate(templateContact, &contact.PanelTemplate{}); err != nil { - return errors.Wrap(err, "unable to create the contact template") - } - - if err := panel.htmlPanel.AddTemplate(templateRegistration, ®istration.PanelTemplate{}); err != nil { - return errors.Wrap(err, "unable to create the registration template") - } - - return nil -} - -// GetActiveTemplate returns the name of the active template. -func (panel *Panel) GetActiveTemplate(session *html.Session, path string) string { - validPaths := []string{templateLogin, templateManage, templateSettings, templateEdit, templateSites, templateContact, templateRegistration} - template := templateLogin - - // Only allow valid template paths; redirect to the login page otherwise - for _, valid := range validPaths { - if valid == path { - template = path - break - } - } - - return template -} - -// PreExecute is called before the actual template is being executed. -func (panel *Panel) PreExecute(session *html.Session, path string, w http.ResponseWriter, r *http.Request) (html.ExecutionResult, error) { - protectedPaths := []string{templateManage, templateSettings, templateEdit, templateSites, templateContact} - - if user := session.LoggedInUser(); user != nil { - switch path { - case templateSites: - // If the logged in user doesn't have sites access, redirect him back to the main account page - if !user.Account.Data.SitesAccess { - return panel.redirect(templateManage, w, r), nil - } - - case templateLogin: - case templateRegistration: - // If a user is logged in and tries to login or register again, redirect to the main account page - return panel.redirect(templateManage, w, r), nil - } - } else { - // If no user is logged in, redirect protected paths to the login page - for _, protected := range protectedPaths { - if protected == path { - return panel.redirect(templateLogin, w, r), nil - } - } - } - - return html.ContinueExecution, nil -} - -// Execute generates the HTTP output of the form and writes it to the response writer. -func (panel *Panel) Execute(w http.ResponseWriter, r *http.Request, session *html.Session) error { - dataProvider := func(*html.Session) interface{} { - flatValues := make(map[string]string, len(r.URL.Query())) - for k, v := range r.URL.Query() { - flatValues[strings.Title(k)] = v[0] - } - - availOps, err := data.QueryAvailableOperators(panel.conf.Mentix.URL, panel.conf.Mentix.DataEndpoint) - if err != nil { - return errors.Wrap(err, "unable to query available operators") - } - - type TemplateData struct { - Operator *data.Operator - Account *data.Account - Params map[string]string - - Operators []data.OperatorInformation - Sites map[string]string - Titles []string - } - - tplData := TemplateData{ - Operator: nil, - Account: nil, - Params: flatValues, - Operators: availOps, - Sites: make(map[string]string, 10), - Titles: []string{"Mr", "Mrs", "Ms", "Prof", "Dr"}, - } - if user := session.LoggedInUser(); user != nil { - availSites, err := panel.fetchAvailableSites(user.Operator) - if err != nil { - return errors.Wrap(err, "unable to query available sites") - } - - tplData.Operator = panel.cloneUserOperator(user.Operator, availSites) - tplData.Account = user.Account - tplData.Sites = availSites - } - return tplData - } - return panel.htmlPanel.Execute(w, r, session, dataProvider) -} - -func (panel *Panel) redirect(path string, w http.ResponseWriter, r *http.Request) html.ExecutionResult { - // Check if the original (full) URI path is stored in the request header; if not, use the request URI to get the path - fullPath := r.Header.Get("X-Replaced-Path") - if fullPath == "" { - uri, _ := url.Parse(r.RequestURI) - fullPath = uri.Path - } - - // Modify the original request URL by replacing the path parameter - newURL, _ := url.Parse(fullPath) - params := newURL.Query() - params.Del("path") - params.Add("path", path) - newURL.RawQuery = params.Encode() - http.Redirect(w, r, newURL.String(), http.StatusFound) - return html.AbortExecution -} - -func (panel *Panel) fetchAvailableSites(op *data.Operator) (map[string]string, error) { - ids, err := data.QueryOperatorSites(op.ID, panel.conf.Mentix.URL, panel.conf.Mentix.DataEndpoint) - if err != nil { - return nil, err - } - sites := make(map[string]string, 10) - for _, id := range ids { - if siteName, _ := data.QuerySiteName(id, true, panel.conf.Mentix.URL, panel.conf.Mentix.DataEndpoint); err == nil { - sites[id] = siteName - } else { - sites[id] = id - } - } - return sites, nil -} - -func (panel *Panel) cloneUserOperator(op *data.Operator, sites map[string]string) *data.Operator { - // Clone the user's operator and decrypt all credentials for the panel - opClone := op.Clone(false) - for _, site := range opClone.Sites { - id, secret, err := site.Config.TestClientCredentials.Get(panel.conf.Security.CredentialsPassphrase) - if err == nil { - site.Config.TestClientCredentials.ID = id - site.Config.TestClientCredentials.Secret = secret - } - } - - // Add missing sites - for id := range sites { - siteFound := false - for _, site := range opClone.Sites { - if strings.EqualFold(site.ID, id) { - siteFound = true - break - } - } - if !siteFound { - opClone.Sites = append(opClone.Sites, &data.Site{ - ID: id, - Config: data.SiteConfiguration{}, - }) - } - } - - return opClone -} - -// NewPanel creates a new account panel. -func NewPanel(conf *config.Configuration, log *zerolog.Logger) (*Panel, error) { - form := &Panel{} - if err := form.initialize(conf, log); err != nil { - return nil, errors.Wrap(err, "unable to initialize the account panel") - } - return form, nil -} diff --git a/pkg/siteacc/admin/panel.go b/pkg/siteacc/admin/panel.go deleted file mode 100644 index d322674aad..0000000000 --- a/pkg/siteacc/admin/panel.go +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2018-2020 CERN -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// In applying this license, CERN does not waive the privileges and immunities -// granted to it by virtue of its status as an Intergovernmental Organization -// or submit itself to any jurisdiction. - -package admin - -import ( - "net/http" - - "github.com/cs3org/reva/pkg/siteacc/config" - "github.com/cs3org/reva/pkg/siteacc/data" - "github.com/cs3org/reva/pkg/siteacc/html" - "github.com/pkg/errors" - "github.com/rs/zerolog" -) - -// Panel represents the web interface panel of the accounts service administration. -type Panel struct { - html.PanelProvider - html.ContentProvider - - htmlPanel *html.Panel -} - -const ( - templateMain = "main" -) - -func (panel *Panel) initialize(conf *config.Configuration, log *zerolog.Logger) error { - // Create the internal HTML panel - htmlPanel, err := html.NewPanel("admin-panel", panel, conf, log) - if err != nil { - return errors.Wrap(err, "unable to create the administration panel") - } - panel.htmlPanel = htmlPanel - - // Add all templates - if err := panel.htmlPanel.AddTemplate(templateMain, panel); err != nil { - return errors.Wrap(err, "unable to create the main template") - } - - return nil -} - -// GetActiveTemplate returns the name of the active template. -func (panel *Panel) GetActiveTemplate(*html.Session, string) string { - return templateMain -} - -// GetTitle returns the title of the htmlPanel. -func (panel *Panel) GetTitle() string { - return "ScienceMesh Site Administrator Accounts Panel" -} - -// GetCaption returns the caption which is displayed on the htmlPanel. -func (panel *Panel) GetCaption() string { - return "ScienceMesh Site Administrator Accounts ({{.Accounts | len}})" -} - -// GetContentJavaScript delivers additional JavaScript code. -func (panel *Panel) GetContentJavaScript() string { - return tplJavaScript -} - -// GetContentStyleSheet delivers additional stylesheet code. -func (panel *Panel) GetContentStyleSheet() string { - return tplStyleSheet -} - -// GetContentBody delivers the actual body content. -func (panel *Panel) GetContentBody() string { - return tplBody -} - -// PreExecute is called before the actual template is being executed. -func (panel *Panel) PreExecute(*html.Session, string, http.ResponseWriter, *http.Request) (html.ExecutionResult, error) { - return html.ContinueExecution, nil -} - -// Execute generates the HTTP output of the htmlPanel and writes it to the response writer. -func (panel *Panel) Execute(w http.ResponseWriter, r *http.Request, session *html.Session, accounts *data.Accounts) error { - dataProvider := func(*html.Session) interface{} { - type TemplateData struct { - Accounts *data.Accounts - } - - return TemplateData{ - Accounts: accounts, - } - } - return panel.htmlPanel.Execute(w, r, session, dataProvider) -} - -// NewPanel creates a new administration panel. -func NewPanel(conf *config.Configuration, log *zerolog.Logger) (*Panel, error) { - panel := &Panel{} - if err := panel.initialize(conf, log); err != nil { - return nil, errors.Wrap(err, "unable to initialize the administration panel") - } - return panel, nil -} diff --git a/pkg/siteacc/endpoints.go b/pkg/siteacc/endpoints.go index da02f21d45..ac2dfe0f6d 100644 --- a/pkg/siteacc/endpoints.go +++ b/pkg/siteacc/endpoints.go @@ -71,13 +71,13 @@ func getEndpoints() []endpoint { {config.EndpointList, callMethodEndpoint, createMethodCallbacks(handleList, nil), false}, {config.EndpointFind, callMethodEndpoint, createMethodCallbacks(handleFind, nil), false}, {config.EndpointCreate, callMethodEndpoint, createMethodCallbacks(nil, handleCreate), true}, - {config.EndpointUpdate, callMethodEndpoint, createMethodCallbacks(nil, handleUpdate), false}, - {config.EndpointConfigure, callMethodEndpoint, createMethodCallbacks(nil, handleConfigure), false}, + {config.EndpointUpdate, callMethodEndpoint, createMethodCallbacks(nil, handleUpdate), true}, + {config.EndpointConfigure, callMethodEndpoint, createMethodCallbacks(nil, handleConfigure), true}, {config.EndpointRemove, callMethodEndpoint, createMethodCallbacks(nil, handleRemove), false}, // Site endpoints {config.EndpointSiteGet, callMethodEndpoint, createMethodCallbacks(handleSiteGet, nil), false}, // Sites endpoints - {config.EndpointSitesConfigure, callMethodEndpoint, createMethodCallbacks(nil, handleSitesConfigure), false}, + {config.EndpointSitesConfigure, callMethodEndpoint, createMethodCallbacks(nil, handleSitesConfigure), true}, // Login endpoints {config.EndpointLogin, callMethodEndpoint, createMethodCallbacks(nil, handleLogin), true}, {config.EndpointLogout, callMethodEndpoint, createMethodCallbacks(handleLogout, nil), true}, diff --git a/pkg/siteacc/html/panel.go b/pkg/siteacc/html/panel.go index 3a5376bf91..de6134e23c 100644 --- a/pkg/siteacc/html/panel.go +++ b/pkg/siteacc/html/panel.go @@ -170,6 +170,10 @@ func (panel *Panel) prepareTemplate(tpl *template.Template) { } return strings.Join(sites, ", ") }, + "getSiteName": func(siteID string, fullName bool) string { + siteName, _ := data.QuerySiteName(siteID, fullName, panel.conf.Mentix.URL, panel.conf.Mentix.DataEndpoint) + return siteName + }, }) } diff --git a/pkg/siteacc/account/contact/contact.go b/pkg/siteacc/panels/account/contact/contact.go similarity index 100% rename from pkg/siteacc/account/contact/contact.go rename to pkg/siteacc/panels/account/contact/contact.go diff --git a/pkg/siteacc/account/contact/template.go b/pkg/siteacc/panels/account/contact/template.go similarity index 100% rename from pkg/siteacc/account/contact/template.go rename to pkg/siteacc/panels/account/contact/template.go diff --git a/pkg/siteacc/account/edit/edit.go b/pkg/siteacc/panels/account/edit/edit.go similarity index 100% rename from pkg/siteacc/account/edit/edit.go rename to pkg/siteacc/panels/account/edit/edit.go diff --git a/pkg/siteacc/account/edit/template.go b/pkg/siteacc/panels/account/edit/template.go similarity index 100% rename from pkg/siteacc/account/edit/template.go rename to pkg/siteacc/panels/account/edit/template.go diff --git a/pkg/siteacc/account/login/login.go b/pkg/siteacc/panels/account/login/login.go similarity index 100% rename from pkg/siteacc/account/login/login.go rename to pkg/siteacc/panels/account/login/login.go diff --git a/pkg/siteacc/account/login/template.go b/pkg/siteacc/panels/account/login/template.go similarity index 100% rename from pkg/siteacc/account/login/template.go rename to pkg/siteacc/panels/account/login/template.go diff --git a/pkg/siteacc/account/manage/manage.go b/pkg/siteacc/panels/account/manage/manage.go similarity index 100% rename from pkg/siteacc/account/manage/manage.go rename to pkg/siteacc/panels/account/manage/manage.go diff --git a/pkg/siteacc/account/manage/template.go b/pkg/siteacc/panels/account/manage/template.go similarity index 100% rename from pkg/siteacc/account/manage/template.go rename to pkg/siteacc/panels/account/manage/template.go diff --git a/pkg/siteacc/panels/account/panel.go b/pkg/siteacc/panels/account/panel.go new file mode 100644 index 0000000000..634b2e0b4a --- /dev/null +++ b/pkg/siteacc/panels/account/panel.go @@ -0,0 +1,192 @@ +// Copyright 2018-2020 CERN +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// In applying this license, CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +package account + +import ( + "net/http" + "strings" + + "github.com/cs3org/reva/pkg/siteacc/config" + "github.com/cs3org/reva/pkg/siteacc/data" + "github.com/cs3org/reva/pkg/siteacc/html" + "github.com/cs3org/reva/pkg/siteacc/panels" + "github.com/cs3org/reva/pkg/siteacc/panels/account/contact" + "github.com/cs3org/reva/pkg/siteacc/panels/account/edit" + "github.com/cs3org/reva/pkg/siteacc/panels/account/login" + "github.com/cs3org/reva/pkg/siteacc/panels/account/manage" + "github.com/cs3org/reva/pkg/siteacc/panels/account/registration" + "github.com/cs3org/reva/pkg/siteacc/panels/account/settings" + "github.com/cs3org/reva/pkg/siteacc/panels/account/sites" + "github.com/pkg/errors" + "github.com/rs/zerolog" +) + +// Panel represents the account panel. +type Panel struct { + panels.BasePanel + html.PanelProvider +} + +const ( + templateLogin = "login" + templateManage = "manage" + templateSettings = "settings" + templateEdit = "edit" + templateSites = "sites" + templateContact = "contact" + templateRegistration = "register" +) + +func (panel *Panel) initialize(conf *config.Configuration, log *zerolog.Logger) error { + // Create templates + templates := []panels.BasePanelTemplate{ + { + ID: templateLogin, + Name: "login", + Provider: &login.PanelTemplate{}, + }, + { + ID: templateManage, + Name: "management", + Provider: &manage.PanelTemplate{}, + }, + { + ID: templateSettings, + Name: "settings", + Provider: &settings.PanelTemplate{}, + }, + { + ID: templateEdit, + Name: "editing", + Provider: &edit.PanelTemplate{}, + }, + { + ID: templateSites, + Name: "sites", + Provider: &sites.PanelTemplate{}, + }, + { + ID: templateContact, + Name: "contact", + Provider: &contact.PanelTemplate{}, + }, + { + ID: templateRegistration, + Name: "registration", + Provider: ®istration.PanelTemplate{}, + }, + } + + // Initialize base + if err := panel.BasePanel.Initialize("user-panel", panel, templates, conf, log); err != nil { + return errors.Wrap(err, "unable to create the user panel") + } + + return nil +} + +// GetActiveTemplate returns the name of the active template. +func (panel *Panel) GetActiveTemplate(session *html.Session, path string) string { + validPaths := []string{templateLogin, templateManage, templateSettings, templateEdit, templateSites, templateContact, templateRegistration} + return panel.GetPathTemplate(validPaths, templateLogin, path) +} + +// PreExecute is called before the actual template is being executed. +func (panel *Panel) PreExecute(session *html.Session, path string, w http.ResponseWriter, r *http.Request) (html.ExecutionResult, error) { + protectedPaths := []string{templateManage, templateSettings, templateEdit, templateSites, templateContact} + + if user := session.LoggedInUser(); user != nil { + switch path { + case templateSites: + // If the logged in user doesn't have sites access, redirect him back to the main account page + if !user.Account.Data.SitesAccess { + return panel.Redirect(templateManage, w, r), nil + } + + case templateLogin: + case templateRegistration: + // If a user is logged in and tries to login or register again, redirect to the main account page + return panel.Redirect(templateManage, w, r), nil + } + } else { + // If no user is logged in, redirect protected paths to the login page + for _, protected := range protectedPaths { + if protected == path { + return panel.Redirect(templateLogin, w, r), nil + } + } + } + + return html.ContinueExecution, nil +} + +// Execute generates the HTTP output of the panel and writes it to the response writer. +func (panel *Panel) Execute(w http.ResponseWriter, r *http.Request, session *html.Session) error { + dataProvider := func(*html.Session) interface{} { + flatValues := make(map[string]string, len(r.URL.Query())) + for k, v := range r.URL.Query() { + flatValues[strings.Title(k)] = v[0] + } + + availOps, err := data.QueryAvailableOperators(panel.Config().Mentix.URL, panel.Config().Mentix.DataEndpoint) + if err != nil { + return errors.Wrap(err, "unable to query available operators") + } + + type TemplateData struct { + Operator *data.Operator + Account *data.Account + Params map[string]string + + Operators []data.OperatorInformation + Sites map[string]string + Titles []string + } + + tplData := TemplateData{ + Operator: nil, + Account: nil, + Params: flatValues, + Operators: availOps, + Sites: make(map[string]string, 10), + Titles: []string{"Mr", "Mrs", "Ms", "Prof", "Dr"}, + } + if user := session.LoggedInUser(); user != nil { + availSites, err := panel.FetchOperatorSites(user.Operator) + if err != nil { + return errors.Wrap(err, "unable to query available sites") + } + + tplData.Operator = panel.CloneOperator(user.Operator, availSites) + tplData.Account = user.Account + tplData.Sites = availSites + } + return tplData + } + return panel.BasePanel.Execute(w, r, session, dataProvider) +} + +// NewPanel creates a new account panel. +func NewPanel(conf *config.Configuration, log *zerolog.Logger) (*Panel, error) { + form := &Panel{} + if err := form.initialize(conf, log); err != nil { + return nil, errors.Wrap(err, "unable to initialize the account panel") + } + return form, nil +} diff --git a/pkg/siteacc/account/registration/registration.go b/pkg/siteacc/panels/account/registration/registration.go similarity index 100% rename from pkg/siteacc/account/registration/registration.go rename to pkg/siteacc/panels/account/registration/registration.go diff --git a/pkg/siteacc/account/registration/template.go b/pkg/siteacc/panels/account/registration/template.go similarity index 100% rename from pkg/siteacc/account/registration/template.go rename to pkg/siteacc/panels/account/registration/template.go diff --git a/pkg/siteacc/account/settings/settings.go b/pkg/siteacc/panels/account/settings/settings.go similarity index 100% rename from pkg/siteacc/account/settings/settings.go rename to pkg/siteacc/panels/account/settings/settings.go diff --git a/pkg/siteacc/account/settings/template.go b/pkg/siteacc/panels/account/settings/template.go similarity index 100% rename from pkg/siteacc/account/settings/template.go rename to pkg/siteacc/panels/account/settings/template.go diff --git a/pkg/siteacc/account/sites/sites.go b/pkg/siteacc/panels/account/sites/sites.go similarity index 100% rename from pkg/siteacc/account/sites/sites.go rename to pkg/siteacc/panels/account/sites/sites.go diff --git a/pkg/siteacc/account/sites/template.go b/pkg/siteacc/panels/account/sites/template.go similarity index 100% rename from pkg/siteacc/account/sites/template.go rename to pkg/siteacc/panels/account/sites/template.go diff --git a/pkg/siteacc/panels/admin/accounts/accounts.go b/pkg/siteacc/panels/admin/accounts/accounts.go new file mode 100644 index 0000000000..30396e6fa2 --- /dev/null +++ b/pkg/siteacc/panels/admin/accounts/accounts.go @@ -0,0 +1,51 @@ +// Copyright 2018-2020 CERN +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// In applying this license, CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +package accounts + +import "github.com/cs3org/reva/pkg/siteacc/html" + +// PanelTemplate is the content provider for the contact form. +type PanelTemplate struct { + html.ContentProvider +} + +// GetTitle returns the title of the panel. +func (template *PanelTemplate) GetTitle() string { + return "ScienceMesh Site Administrator Accounts" +} + +// GetCaption returns the caption which is displayed on the panel. +func (template *PanelTemplate) GetCaption() string { + return "ScienceMesh Site Administrator Accounts" +} + +// GetContentJavaScript delivers additional JavaScript code. +func (template *PanelTemplate) GetContentJavaScript() string { + return tplJavaScript +} + +// GetContentStyleSheet delivers additional stylesheet code. +func (template *PanelTemplate) GetContentStyleSheet() string { + return tplStyleSheet +} + +// GetContentBody delivers the actual body content. +func (template *PanelTemplate) GetContentBody() string { + return tplBody +} diff --git a/pkg/siteacc/admin/template.go b/pkg/siteacc/panels/admin/accounts/template.go similarity index 90% rename from pkg/siteacc/admin/template.go rename to pkg/siteacc/panels/admin/accounts/template.go index c9aa4a831c..ef142d6e84 100644 --- a/pkg/siteacc/admin/template.go +++ b/pkg/siteacc/panels/admin/accounts/template.go @@ -16,7 +16,7 @@ // granted to it by virtue of its status as an Intergovernmental Organization // or submit itself to any jurisdiction. -package admin +package accounts const tplJavaScript = ` function handleAction(action, email) { @@ -45,13 +45,19 @@ function handleAction(action, email) { const tplStyleSheet = ` html * { - font-family: monospace !important; + font-family: arial !important; +} +li::marker { + font-weight: bold; } ` -const tplBody = ` +const tplBody = ` +
+

There are currently {{.Accounts | len}} accounts stored in the system:

+
-
    +
      {{range .Accounts}}
    1. @@ -105,6 +111,9 @@ const tplBody = `
    2. {{end}} -
+ +
+
+

Go back to the main page.

` diff --git a/pkg/siteacc/panels/admin/manage/manage.go b/pkg/siteacc/panels/admin/manage/manage.go new file mode 100644 index 0000000000..58c64e699a --- /dev/null +++ b/pkg/siteacc/panels/admin/manage/manage.go @@ -0,0 +1,51 @@ +// Copyright 2018-2020 CERN +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// In applying this license, CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +package manage + +import "github.com/cs3org/reva/pkg/siteacc/html" + +// PanelTemplate is the content provider for the contact form. +type PanelTemplate struct { + html.ContentProvider +} + +// GetTitle returns the title of the panel. +func (template *PanelTemplate) GetTitle() string { + return "ScienceMesh Site Administrators Management" +} + +// GetCaption returns the caption which is displayed on the panel. +func (template *PanelTemplate) GetCaption() string { + return "ScienceMesh Site Administrators Management" +} + +// GetContentJavaScript delivers additional JavaScript code. +func (template *PanelTemplate) GetContentJavaScript() string { + return tplJavaScript +} + +// GetContentStyleSheet delivers additional stylesheet code. +func (template *PanelTemplate) GetContentStyleSheet() string { + return tplStyleSheet +} + +// GetContentBody delivers the actual body content. +func (template *PanelTemplate) GetContentBody() string { + return tplBody +} diff --git a/pkg/siteacc/panels/admin/manage/template.go b/pkg/siteacc/panels/admin/manage/template.go new file mode 100644 index 0000000000..dc88d3b585 --- /dev/null +++ b/pkg/siteacc/panels/admin/manage/template.go @@ -0,0 +1,55 @@ +// Copyright 2018-2020 CERN +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// In applying this license, CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +package manage + +const tplJavaScript = ` +function handleViewAccounts() { + setState(STATE_STATUS, "Redirecting to the accounts overview..."); + window.location.replace("{{getServerAddress}}/admin/?path=accounts"); +} + +function handleViewSites() { + setState(STATE_STATUS, "Redirecting to the sites overview..."); + window.location.replace("{{getServerAddress}}/admin/?path=sites"); +} +` + +const tplStyleSheet = ` +html * { + font-family: arial !important; +} +button { + min-width: 150px; +} +` + +const tplBody = ` +
+

Welcome to the ScienceMesh Site Administrators Mangement!

+

Using this service, you can manage all site administrator accounts as well as their corresponding sites.

+
+
+
+
+ + +
+
+
+` diff --git a/pkg/siteacc/panels/admin/panel.go b/pkg/siteacc/panels/admin/panel.go new file mode 100644 index 0000000000..64d3260d59 --- /dev/null +++ b/pkg/siteacc/panels/admin/panel.go @@ -0,0 +1,128 @@ +// Copyright 2018-2020 CERN +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// In applying this license, CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +package admin + +import ( + "net/http" + + "github.com/cs3org/reva/pkg/siteacc/config" + "github.com/cs3org/reva/pkg/siteacc/data" + "github.com/cs3org/reva/pkg/siteacc/html" + "github.com/cs3org/reva/pkg/siteacc/panels" + "github.com/cs3org/reva/pkg/siteacc/panels/admin/accounts" + "github.com/cs3org/reva/pkg/siteacc/panels/admin/manage" + "github.com/cs3org/reva/pkg/siteacc/panels/admin/sites" + "github.com/pkg/errors" + "github.com/rs/zerolog" +) + +// Panel represents the web interface panel of the accounts service administration. +type Panel struct { + panels.BasePanel + html.PanelProvider +} + +const ( + templateManage = "manage" + templateAccounts = "accounts" + templateSites = "sites" +) + +func (panel *Panel) initialize(conf *config.Configuration, log *zerolog.Logger) error { + // Create templates + templates := []panels.BasePanelTemplate{ + { + ID: templateManage, + Name: "mangement", + Provider: &manage.PanelTemplate{}, + }, + { + ID: templateAccounts, + Name: "accounts", + Provider: &accounts.PanelTemplate{}, + }, + { + ID: templateSites, + Name: "sites", + Provider: &sites.PanelTemplate{}, + }, + } + + // Initialize base + if err := panel.BasePanel.Initialize("admin-panel", panel, templates, conf, log); err != nil { + return errors.Wrap(err, "unable to create the administrator panel") + } + + return nil +} + +// GetActiveTemplate returns the name of the active template. +func (panel *Panel) GetActiveTemplate(session *html.Session, path string) string { + validPaths := []string{templateManage, templateAccounts, templateSites} + return panel.GetPathTemplate(validPaths, templateManage, path) +} + +// PreExecute is called before the actual template is being executed. +func (panel *Panel) PreExecute(*html.Session, string, http.ResponseWriter, *http.Request) (html.ExecutionResult, error) { + return html.ContinueExecution, nil +} + +// Execute generates the HTTP output of the panel and writes it to the response writer. +func (panel *Panel) Execute(w http.ResponseWriter, r *http.Request, session *html.Session, accounts *data.Accounts, operators *data.Operators) error { + // Clone all operators + opsClone, err := panel.cloneOperators(operators) + if err != nil { + return errors.Wrap(err, "unable to clone operators") + } + + dataProvider := func(*html.Session) interface{} { + type TemplateData struct { + Accounts *data.Accounts + Operators *data.Operators + } + + return TemplateData{ + Accounts: accounts, + Operators: opsClone, + } + } + return panel.BasePanel.Execute(w, r, session, dataProvider) +} + +func (panel *Panel) cloneOperators(operators *data.Operators) (*data.Operators, error) { + // Clone all available operators and decrypt all credentials for the panel + opsClone := make(data.Operators, 0, len(*operators)) + for _, op := range *operators { + availSites, err := panel.FetchOperatorSites(op) + if err != nil { + return nil, errors.Wrapf(err, "unable to query available sites of operator %v", op.ID) + } + opsClone = append(opsClone, panel.CloneOperator(op, availSites)) + } + return &opsClone, nil +} + +// NewPanel creates a new administration panel. +func NewPanel(conf *config.Configuration, log *zerolog.Logger) (*Panel, error) { + panel := &Panel{} + if err := panel.initialize(conf, log); err != nil { + return nil, errors.Wrap(err, "unable to initialize the administration panel") + } + return panel, nil +} diff --git a/pkg/siteacc/panels/admin/sites/sites.go b/pkg/siteacc/panels/admin/sites/sites.go new file mode 100644 index 0000000000..93e547df7d --- /dev/null +++ b/pkg/siteacc/panels/admin/sites/sites.go @@ -0,0 +1,51 @@ +// Copyright 2018-2020 CERN +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// In applying this license, CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +package sites + +import "github.com/cs3org/reva/pkg/siteacc/html" + +// PanelTemplate is the content provider for the contact form. +type PanelTemplate struct { + html.ContentProvider +} + +// GetTitle returns the title of the panel. +func (template *PanelTemplate) GetTitle() string { + return "ScienceMesh Site Administrators Sites" +} + +// GetCaption returns the caption which is displayed on the panel. +func (template *PanelTemplate) GetCaption() string { + return "ScienceMesh Site Administrators Sites" +} + +// GetContentJavaScript delivers additional JavaScript code. +func (template *PanelTemplate) GetContentJavaScript() string { + return tplJavaScript +} + +// GetContentStyleSheet delivers additional stylesheet code. +func (template *PanelTemplate) GetContentStyleSheet() string { + return tplStyleSheet +} + +// GetContentBody delivers the actual body content. +func (template *PanelTemplate) GetContentBody() string { + return tplBody +} diff --git a/pkg/siteacc/panels/admin/sites/template.go b/pkg/siteacc/panels/admin/sites/template.go new file mode 100644 index 0000000000..93f3239bb0 --- /dev/null +++ b/pkg/siteacc/panels/admin/sites/template.go @@ -0,0 +1,67 @@ +// Copyright 2018-2020 CERN +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// In applying this license, CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +package sites + +const tplJavaScript = ` +` + +const tplStyleSheet = ` +html * { + font-family: arial !important; +} +li::marker { + font-weight: bold; +} +` + +const tplBody = ` +
+

There are currently {{.Operators | len}} operators stored in the system:

+
+
+
    + {{range .Operators}} +
  1. +
    +
    + {{.ID}} ({{.Sites | len}} site(s))
    +
    +
    +
      + {{$parent := .}} + {{range .Sites}} +
    • + {{getSiteName .ID true}} ({{.ID}})
      + {{if not .Config.TestClientCredentials.ID}} + Test user not configured! + {{end}} +
    • + {{end}} +
    +
    +
    +
    +
  2. + {{end}} +
+
+
+

Go back to the main page.

+
+` diff --git a/pkg/siteacc/panels/basepanel.go b/pkg/siteacc/panels/basepanel.go new file mode 100644 index 0000000000..e7ff5e326d --- /dev/null +++ b/pkg/siteacc/panels/basepanel.go @@ -0,0 +1,162 @@ +// Copyright 2018-2020 CERN +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// In applying this license, CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +package panels + +import ( + "net/http" + "net/url" + "strings" + + "github.com/cs3org/reva/pkg/siteacc/config" + "github.com/cs3org/reva/pkg/siteacc/data" + "github.com/cs3org/reva/pkg/siteacc/html" + "github.com/pkg/errors" + "github.com/rs/zerolog" +) + +// BasePanel represents the base for all panels. +type BasePanel struct { + conf *config.Configuration + + htmlPanel *html.Panel +} + +// BasePanelTemplate represents an HTML template used for initialization. +type BasePanelTemplate struct { + ID string + Name string + Provider html.ContentProvider +} + +// Initialize initializes the base panel. +func (panel *BasePanel) Initialize(name string, panelProvider html.PanelProvider, templates []BasePanelTemplate, conf *config.Configuration, log *zerolog.Logger) error { + if conf == nil { + return errors.Errorf("no configuration provided") + } + panel.conf = conf + + // Create the internal HTML panel + htmlPanel, err := html.NewPanel(name, panelProvider, conf, log) + if err != nil { + return errors.Wrap(err, "unable to create the HTML panel") + } + panel.htmlPanel = htmlPanel + + // Add all templates + for _, template := range templates { + if err := panel.htmlPanel.AddTemplate(template.ID, template.Provider); err != nil { + return errors.Wrapf(err, "unable to create the %v template", template.Name) + } + } + + return nil +} + +// GetPathTemplate returns the name of the active template. +func (panel *BasePanel) GetPathTemplate(validPaths []string, defaultTemplate string, path string) string { + template := defaultTemplate + + // Only allow valid template paths; redirect to the default template otherwise + for _, valid := range validPaths { + if valid == path { + template = path + break + } + } + + return template +} + +// Execute generates the HTTP output of the panel and writes it to the response writer. +func (panel *BasePanel) Execute(w http.ResponseWriter, r *http.Request, session *html.Session, dataProvider html.PanelDataProvider) error { + return panel.htmlPanel.Execute(w, r, session, dataProvider) +} + +// Redirect performs an HTTP redirect. +func (panel *BasePanel) Redirect(path string, w http.ResponseWriter, r *http.Request) html.ExecutionResult { + // Check if the original (full) URI path is stored in the request header; if not, use the request URI to get the path + fullPath := r.Header.Get("X-Replaced-Path") + if fullPath == "" { + uri, _ := url.Parse(r.RequestURI) + fullPath = uri.Path + } + + // Modify the original request URL by replacing the path parameter + newURL, _ := url.Parse(fullPath) + params := newURL.Query() + params.Del("path") + params.Add("path", path) + newURL.RawQuery = params.Encode() + http.Redirect(w, r, newURL.String(), http.StatusFound) + return html.AbortExecution +} + +// FetchOperatorSites fetches all sites for an operator using Mentix. +func (panel *BasePanel) FetchOperatorSites(op *data.Operator) (map[string]string, error) { + ids, err := data.QueryOperatorSites(op.ID, panel.Config().Mentix.URL, panel.Config().Mentix.DataEndpoint) + if err != nil { + return nil, err + } + sites := make(map[string]string, 10) + for _, id := range ids { + if siteName, _ := data.QuerySiteName(id, true, panel.Config().Mentix.URL, panel.Config().Mentix.DataEndpoint); err == nil { + sites[id] = siteName + } else { + sites[id] = id + } + } + return sites, nil +} + +// CloneOperator clones an operator and adds missing sites. +func (panel *BasePanel) CloneOperator(op *data.Operator, sites map[string]string) *data.Operator { + // Clone the operator and decrypt all credentials for the panel + opClone := op.Clone(false) + for _, site := range opClone.Sites { + id, secret, err := site.Config.TestClientCredentials.Get(panel.conf.Security.CredentialsPassphrase) + if err == nil { + site.Config.TestClientCredentials.ID = id + site.Config.TestClientCredentials.Secret = secret + } + } + + // Add missing sites + for id := range sites { + siteFound := false + for _, site := range opClone.Sites { + if strings.EqualFold(site.ID, id) { + siteFound = true + break + } + } + if !siteFound { + opClone.Sites = append(opClone.Sites, &data.Site{ + ID: id, + Config: data.SiteConfiguration{}, + }) + } + } + + return opClone +} + +// Config gets the configuration object. +func (panel *BasePanel) Config() *config.Configuration { + return panel.conf +} diff --git a/pkg/siteacc/siteacc.go b/pkg/siteacc/siteacc.go index f099f4dac5..569e0a978f 100644 --- a/pkg/siteacc/siteacc.go +++ b/pkg/siteacc/siteacc.go @@ -22,13 +22,13 @@ import ( "fmt" "net/http" - accpanel "github.com/cs3org/reva/pkg/siteacc/account" - "github.com/cs3org/reva/pkg/siteacc/admin" "github.com/cs3org/reva/pkg/siteacc/alerting" "github.com/cs3org/reva/pkg/siteacc/config" "github.com/cs3org/reva/pkg/siteacc/data" "github.com/cs3org/reva/pkg/siteacc/html" "github.com/cs3org/reva/pkg/siteacc/manager" + accpanel "github.com/cs3org/reva/pkg/siteacc/panels/account" + "github.com/cs3org/reva/pkg/siteacc/panels/admin" "github.com/pkg/errors" "github.com/rs/zerolog" ) @@ -154,7 +154,8 @@ func (siteacc *SiteAccounts) RequestHandler() http.Handler { func (siteacc *SiteAccounts) ShowAdministrationPanel(w http.ResponseWriter, r *http.Request, session *html.Session) error { // The admin panel only shows the stored accounts and offers actions through links, so let it use cloned data accounts := siteacc.accountsManager.CloneAccounts(true) - return siteacc.adminPanel.Execute(w, r, session, &accounts) + operators := siteacc.operatorsManager.CloneOperators(false) + return siteacc.adminPanel.Execute(w, r, session, &accounts, &operators) } // ShowAccountPanel writes the account panel HTTP output directly to the response writer. From f6a33ae9f3e482c0521a2b6fb1f2e27952486a0e Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte <39946305+gmgigi96@users.noreply.github.com> Date: Tue, 13 Sep 2022 11:38:34 +0200 Subject: [PATCH 05/83] Add quicklink for public shares (#3163) --- changelog/unreleased/quicklinks.md | 4 +++ go.mod | 2 +- go.sum | 2 ++ .../services/owncloud/ocs/conversions/main.go | 2 ++ .../handlers/apps/sharing/shares/public.go | 35 ++++++++++++++++++- pkg/cbox/publicshare/sql/sql.go | 23 ++++++------ pkg/cbox/utils/conversions.go | 2 ++ 7 files changed, 58 insertions(+), 12 deletions(-) create mode 100644 changelog/unreleased/quicklinks.md diff --git a/changelog/unreleased/quicklinks.md b/changelog/unreleased/quicklinks.md new file mode 100644 index 0000000000..8633e5bf6e --- /dev/null +++ b/changelog/unreleased/quicklinks.md @@ -0,0 +1,4 @@ +Enhancement: Add support for quicklinks for public shares + +https://github.com/cs3org/reva/pull/3163 +https://github.com/cs3org/reva/pull/2715 diff --git a/go.mod b/go.mod index ddaf6fb9a0..d923b65329 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ require ( github.com/cheggaaa/pb v1.0.29 github.com/coreos/go-oidc v2.2.1+incompatible github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e - github.com/cs3org/go-cs3apis v0.0.0-20220330081745-2ad58f5932b9 + github.com/cs3org/go-cs3apis v0.0.0-20220719130120-361e9f987d64 github.com/cubewise-code/go-mime v0.0.0-20200519001935-8c5762b177d8 github.com/dgraph-io/ristretto v0.1.0 github.com/eventials/go-tus v0.0.0-20200718001131-45c7ec8f5d59 diff --git a/go.sum b/go.sum index ae4d62bf70..5174067ba4 100644 --- a/go.sum +++ b/go.sum @@ -226,6 +226,8 @@ github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e h1:tqSPWQeueWTKnJVMJff github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e/go.mod h1:XJEZ3/EQuI3BXTp/6DUzFr850vlxq11I6satRtz0YQ4= github.com/cs3org/go-cs3apis v0.0.0-20220330081745-2ad58f5932b9 h1:SuPu5Mc2mpz+J059XML+cMd0i5FZR4t/kROS3SaIsnU= github.com/cs3org/go-cs3apis v0.0.0-20220330081745-2ad58f5932b9/go.mod h1:UXha4TguuB52H14EMoSsCqDj7k8a/t7g4gVP+bgY5LY= +github.com/cs3org/go-cs3apis v0.0.0-20220719130120-361e9f987d64 h1:cFnankJOCWndnOns4sKRG7yzH61ammK2Am6rEGWCK40= +github.com/cs3org/go-cs3apis v0.0.0-20220719130120-361e9f987d64/go.mod h1:UXha4TguuB52H14EMoSsCqDj7k8a/t7g4gVP+bgY5LY= 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/internal/http/services/owncloud/ocs/conversions/main.go b/internal/http/services/owncloud/ocs/conversions/main.go index c8cb64e801..c0239e20c6 100644 --- a/internal/http/services/owncloud/ocs/conversions/main.go +++ b/internal/http/services/owncloud/ocs/conversions/main.go @@ -144,6 +144,7 @@ type ShareData struct { Attributes string `json:"attributes,omitempty" xml:"attributes,omitempty"` // PasswordProtected represents a public share is password protected // PasswordProtected bool `json:"password_protected,omitempty" xml:"password_protected,omitempty"` + Quicklink bool `json:"quicklink,omitempty" xml:"quicklink,omitempty"` } // ShareeData holds share recipient search results @@ -215,6 +216,7 @@ func PublicShare2ShareData(share *link.PublicShare, r *http.Request, publicURL s URL: publicURL + path.Join("/", "s/"+share.Token), UIDOwner: LocalUserIDToString(share.Creator), UIDFileOwner: LocalUserIDToString(share.Owner), + Quicklink: share.Quicklink, } if share.Id != nil { sd.ID = share.Id.OpaqueId diff --git a/internal/http/services/owncloud/ocs/handlers/apps/sharing/shares/public.go b/internal/http/services/owncloud/ocs/handlers/apps/sharing/shares/public.go index 959eafd3c0..126bb64829 100644 --- a/internal/http/services/owncloud/ocs/handlers/apps/sharing/shares/public.go +++ b/internal/http/services/owncloud/ocs/handlers/apps/sharing/shares/public.go @@ -33,6 +33,7 @@ import ( "github.com/cs3org/reva/internal/http/services/owncloud/ocs/conversions" "github.com/cs3org/reva/internal/http/services/owncloud/ocs/response" "github.com/cs3org/reva/pkg/appctx" + "github.com/cs3org/reva/pkg/publicshare" "github.com/cs3org/reva/pkg/rgrpc/todo/pool" "github.com/pkg/errors" ) @@ -53,6 +54,37 @@ func (h *Handler) createPublicLinkShare(w http.ResponseWriter, r *http.Request, return } + if quicklink, _ := strconv.ParseBool(r.FormValue("quicklink")); quicklink { + res, err := c.ListPublicShares(ctx, &link.ListPublicSharesRequest{ + Filters: []*link.ListPublicSharesRequest_Filter{ + publicshare.ResourceIDFilter(statInfo.Id), + }, + }) + if err != nil { + response.WriteOCSError(w, r, response.MetaServerError.StatusCode, "could not list public links", err) + return + } + if res.Status.Code != rpc.Code_CODE_OK { + response.WriteOCSError(w, r, int(res.Status.GetCode()), "could not list public links", nil) + return + } + + for _, l := range res.GetShare() { + if l.Quicklink { + s := conversions.PublicShare2ShareData(l, r, h.publicURL) + err = h.addFileInfo(ctx, s, statInfo) + if err != nil { + response.WriteOCSError(w, r, response.MetaServerError.StatusCode, "error enhancing response with share data", err) + return + } + h.mapUserIds(ctx, c, s) + response.WriteOCSSuccess(w, r, s) + return + } + } + + } + newPermissions, err := permissionFromRequest(r, h) if err != nil { response.WriteOCSError(w, r, response.MetaBadRequest.StatusCode, "Could not read permission from request", err) @@ -105,7 +137,8 @@ func (h *Handler) createPublicLinkShare(w http.ResponseWriter, r *http.Request, // set displayname and password protected as arbitrary metadata req.ResourceInfo.ArbitraryMetadata = &provider.ArbitraryMetadata{ Metadata: map[string]string{ - "name": r.FormValue("name"), + "name": r.FormValue("name"), + "quicklink": r.FormValue("quicklink"), // "password": r.FormValue("password"), }, } diff --git a/pkg/cbox/publicshare/sql/sql.go b/pkg/cbox/publicshare/sql/sql.go index 5c8082cb3f..fe94d9ec7e 100644 --- a/pkg/cbox/publicshare/sql/sql.go +++ b/pkg/cbox/publicshare/sql/sql.go @@ -133,6 +133,8 @@ func (m *manager) CreatePublicShare(ctx context.Context, u *user.User, rInfo *pr tkn := utils.RandString(15) now := time.Now().Unix() + quicklink, _ := strconv.ParseBool(rInfo.ArbitraryMetadata.Metadata["quicklink"]) + displayName, ok := rInfo.ArbitraryMetadata.Metadata["name"] if !ok { displayName = tkn @@ -154,8 +156,8 @@ func (m *manager) CreatePublicShare(ctx context.Context, u *user.User, rInfo *pr fileSource = 0 } - query := "insert into oc_share set share_type=?,uid_owner=?,uid_initiator=?,item_type=?,fileid_prefix=?,item_source=?,file_source=?,permissions=?,stime=?,token=?,share_name=?" - params := []interface{}{publicShareType, owner, creator, itemType, prefix, itemSource, fileSource, permissions, now, tkn, displayName} + query := "insert into oc_share set share_type=?,uid_owner=?,uid_initiator=?,item_type=?,fileid_prefix=?,item_source=?,file_source=?,permissions=?,stime=?,token=?,share_name=?,quicklink=?" + params := []interface{}{publicShareType, owner, creator, itemType, prefix, itemSource, fileSource, permissions, now, tkn, displayName, quicklink} var passwordProtected bool password := g.Password @@ -203,6 +205,7 @@ func (m *manager) CreatePublicShare(ctx context.Context, u *user.User, rInfo *pr PasswordProtected: passwordProtected, Expiration: g.Expiration, DisplayName: displayName, + Quicklink: quicklink, }, nil } @@ -264,8 +267,8 @@ func (m *manager) UpdatePublicShare(ctx context.Context, u *user.User, req *link func (m *manager) getByToken(ctx context.Context, token string, u *user.User) (*link.PublicShare, string, error) { s := conversions.DBShare{Token: token} - query := "select coalesce(uid_owner, '') as uid_owner, coalesce(uid_initiator, '') as uid_initiator, coalesce(share_with, '') as share_with, coalesce(fileid_prefix, '') as fileid_prefix, coalesce(item_source, '') as item_source, coalesce(item_type, '') as item_type, coalesce(expiration, '') as expiration, coalesce(share_name, '') as share_name, id, stime, permissions FROM oc_share WHERE (orphan = 0 or orphan IS NULL) AND share_type=? AND token=?" - if err := m.db.QueryRow(query, publicShareType, token).Scan(&s.UIDOwner, &s.UIDInitiator, &s.ShareWith, &s.Prefix, &s.ItemSource, &s.ItemType, &s.Expiration, &s.ShareName, &s.ID, &s.STime, &s.Permissions); err != nil { + query := "select coalesce(uid_owner, '') as uid_owner, coalesce(uid_initiator, '') as uid_initiator, coalesce(share_with, '') as share_with, coalesce(fileid_prefix, '') as fileid_prefix, coalesce(item_source, '') as item_source, coalesce(item_type, '') as item_type, coalesce(expiration, '') as expiration, coalesce(share_name, '') as share_name, id, stime, permissions, quicklink FROM oc_share WHERE (orphan = 0 or orphan IS NULL) AND share_type=? AND token=?" + if err := m.db.QueryRow(query, publicShareType, token).Scan(&s.UIDOwner, &s.UIDInitiator, &s.ShareWith, &s.Prefix, &s.ItemSource, &s.ItemType, &s.Expiration, &s.ShareName, &s.ID, &s.STime, &s.Permissions, &s.Quicklink); err != nil { if err == sql.ErrNoRows { return nil, "", errtypes.NotFound(token) } @@ -277,8 +280,8 @@ func (m *manager) getByToken(ctx context.Context, token string, u *user.User) (* func (m *manager) getByID(ctx context.Context, id *link.PublicShareId, u *user.User) (*link.PublicShare, string, error) { uid := conversions.FormatUserID(u.Id) s := conversions.DBShare{ID: id.OpaqueId} - query := "select coalesce(uid_owner, '') as uid_owner, coalesce(uid_initiator, '') as uid_initiator, coalesce(share_with, '') as share_with, coalesce(fileid_prefix, '') as fileid_prefix, coalesce(item_source, '') as item_source, coalesce(item_type, '') as item_type, coalesce(token,'') as token, coalesce(expiration, '') as expiration, coalesce(share_name, '') as share_name, stime, permissions FROM oc_share WHERE (orphan = 0 or orphan IS NULL) AND share_type=? AND id=? AND (uid_owner=? OR uid_initiator=?)" - if err := m.db.QueryRow(query, publicShareType, id.OpaqueId, uid, uid).Scan(&s.UIDOwner, &s.UIDInitiator, &s.ShareWith, &s.Prefix, &s.ItemSource, &s.ItemType, &s.Token, &s.Expiration, &s.ShareName, &s.STime, &s.Permissions); err != nil { + query := "select coalesce(uid_owner, '') as uid_owner, coalesce(uid_initiator, '') as uid_initiator, coalesce(share_with, '') as share_with, coalesce(fileid_prefix, '') as fileid_prefix, coalesce(item_source, '') as item_source, coalesce(item_type, '') as item_type, coalesce(token,'') as token, coalesce(expiration, '') as expiration, coalesce(share_name, '') as share_name, stime, permissions, quicklink FROM oc_share WHERE (orphan = 0 or orphan IS NULL) AND share_type=? AND id=? AND (uid_owner=? OR uid_initiator=?)" + if err := m.db.QueryRow(query, publicShareType, id.OpaqueId, uid, uid).Scan(&s.UIDOwner, &s.UIDInitiator, &s.ShareWith, &s.Prefix, &s.ItemSource, &s.ItemType, &s.Token, &s.Expiration, &s.ShareName, &s.STime, &s.Permissions, &s.Quicklink); err != nil { if err == sql.ErrNoRows { return nil, "", errtypes.NotFound(id.OpaqueId) } @@ -321,7 +324,7 @@ func (m *manager) GetPublicShare(ctx context.Context, u *user.User, ref *link.Pu } func (m *manager) ListPublicShares(ctx context.Context, u *user.User, filters []*link.ListPublicSharesRequest_Filter, md *provider.ResourceInfo, sign bool) ([]*link.PublicShare, error) { - query := "select coalesce(uid_owner, '') as uid_owner, coalesce(uid_initiator, '') as uid_initiator, coalesce(share_with, '') as share_with, coalesce(fileid_prefix, '') as fileid_prefix, coalesce(item_source, '') as item_source, coalesce(item_type, '') as item_type, coalesce(token,'') as token, coalesce(expiration, '') as expiration, coalesce(share_name, '') as share_name, id, stime, permissions FROM oc_share WHERE (orphan = 0 or orphan IS NULL) AND (share_type=?)" + query := "select coalesce(uid_owner, '') as uid_owner, coalesce(uid_initiator, '') as uid_initiator, coalesce(share_with, '') as share_with, coalesce(fileid_prefix, '') as fileid_prefix, coalesce(item_source, '') as item_source, coalesce(item_type, '') as item_type, coalesce(token,'') as token, coalesce(expiration, '') as expiration, coalesce(share_name, '') as share_name, id, stime, permissions, quicklink FROM oc_share WHERE (orphan = 0 or orphan IS NULL) AND (share_type=?)" var resourceFilters, ownerFilters, creatorFilters string var resourceParams, ownerParams, creatorParams []interface{} params := []interface{}{publicShareType} @@ -379,7 +382,7 @@ func (m *manager) ListPublicShares(ctx context.Context, u *user.User, filters [] var s conversions.DBShare shares := []*link.PublicShare{} for rows.Next() { - if err := rows.Scan(&s.UIDOwner, &s.UIDInitiator, &s.ShareWith, &s.Prefix, &s.ItemSource, &s.ItemType, &s.Token, &s.Expiration, &s.ShareName, &s.ID, &s.STime, &s.Permissions); err != nil { + if err := rows.Scan(&s.UIDOwner, &s.UIDInitiator, &s.ShareWith, &s.Prefix, &s.ItemSource, &s.ItemType, &s.Token, &s.Expiration, &s.ShareName, &s.ID, &s.STime, &s.Permissions, &s.Quicklink); err != nil { continue } cs3Share := conversions.ConvertToCS3PublicShare(s) @@ -438,8 +441,8 @@ func (m *manager) RevokePublicShare(ctx context.Context, u *user.User, ref *link func (m *manager) GetPublicShareByToken(ctx context.Context, token string, auth *link.PublicShareAuthentication, sign bool) (*link.PublicShare, error) { s := conversions.DBShare{Token: token} - query := "select coalesce(uid_owner, '') as uid_owner, coalesce(uid_initiator, '') as uid_initiator, coalesce(share_with, '') as share_with, coalesce(fileid_prefix, '') as fileid_prefix, coalesce(item_source, '') as item_source, coalesce(item_type, '') as item_type, coalesce(expiration, '') as expiration, coalesce(share_name, '') as share_name, id, stime, permissions FROM oc_share WHERE share_type=? AND token=?" - if err := m.db.QueryRow(query, publicShareType, token).Scan(&s.UIDOwner, &s.UIDInitiator, &s.ShareWith, &s.Prefix, &s.ItemSource, &s.ItemType, &s.Expiration, &s.ShareName, &s.ID, &s.STime, &s.Permissions); err != nil { + query := "select coalesce(uid_owner, '') as uid_owner, coalesce(uid_initiator, '') as uid_initiator, coalesce(share_with, '') as share_with, coalesce(fileid_prefix, '') as fileid_prefix, coalesce(item_source, '') as item_source, coalesce(item_type, '') as item_type, coalesce(expiration, '') as expiration, coalesce(share_name, '') as share_name, id, stime, permissions, quicklink FROM oc_share WHERE share_type=? AND token=?" + if err := m.db.QueryRow(query, publicShareType, token).Scan(&s.UIDOwner, &s.UIDInitiator, &s.ShareWith, &s.Prefix, &s.ItemSource, &s.ItemType, &s.Expiration, &s.ShareName, &s.ID, &s.STime, &s.Permissions, &s.Quicklink); err != nil { if err == sql.ErrNoRows { return nil, errtypes.NotFound(token) } diff --git a/pkg/cbox/utils/conversions.go b/pkg/cbox/utils/conversions.go index 41b8e78a44..7309b48349 100644 --- a/pkg/cbox/utils/conversions.go +++ b/pkg/cbox/utils/conversions.go @@ -48,6 +48,7 @@ type DBShare struct { STime int FileTarget string State int + Quicklink bool } // FormatGrantee formats a CS3API grantee to a string @@ -250,5 +251,6 @@ func ConvertToCS3PublicShare(s DBShare) *link.PublicShare { Expiration: expires, Ctime: ts, Mtime: ts, + Quicklink: s.Quicklink, } } From 10caf1200f38cafe58310977ade43b051a9666e3 Mon Sep 17 00:00:00 2001 From: Swikriti Tripathi <41103328+SwikritiT@users.noreply.github.com> Date: Tue, 13 Sep 2022 18:03:51 +0545 Subject: [PATCH 06/83] Bump core commit id and update expected to fail-master (#3231) --- .drone.env | 2 +- .../expected-failures-on-OCIS-storage.md | 312 ++++-------------- .../expected-failures-on-S3NG-storage.md | 312 ++++-------------- 3 files changed, 121 insertions(+), 505 deletions(-) diff --git a/.drone.env b/.drone.env index df03c83c16..4924b759a5 100644 --- a/.drone.env +++ b/.drone.env @@ -1,3 +1,3 @@ # The test runner source for API tests -CORE_COMMITID=808a6d7600d41af28e78bfa57f7f1f6655d9ce31 +CORE_COMMITID=67fad9d49fa7f3f42f77e882ee4cbb206464ca5d CORE_BRANCH=master diff --git a/tests/acceptance/expected-failures-on-OCIS-storage.md b/tests/acceptance/expected-failures-on-OCIS-storage.md index 0935a4ec22..151d7f5b01 100644 --- a/tests/acceptance/expected-failures-on-OCIS-storage.md +++ b/tests/acceptance/expected-failures-on-OCIS-storage.md @@ -53,232 +53,48 @@ Synchronization features like etag propagation, setting mtime and locking files - [apiWebdavLocks/exclusiveLocks.feature:19](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L19) - [apiWebdavLocks/exclusiveLocks.feature:20](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L20) - [apiWebdavLocks/exclusiveLocks.feature:21](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L21) -- [apiWebdavLocks/exclusiveLocks.feature:43](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L43) -- [apiWebdavLocks/exclusiveLocks.feature:44](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L44) -- [apiWebdavLocks/exclusiveLocks.feature:45](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L45) -- [apiWebdavLocks/exclusiveLocks.feature:46](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L46) -- [apiWebdavLocks/exclusiveLocks.feature:69](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L69) -- [apiWebdavLocks/exclusiveLocks.feature:70](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L70) -- [apiWebdavLocks/exclusiveLocks.feature:71](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L71) -- [apiWebdavLocks/exclusiveLocks.feature:72](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L72) -- [apiWebdavLocks/exclusiveLocks.feature:94](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L94) -- [apiWebdavLocks/exclusiveLocks.feature:95](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L95) -- [apiWebdavLocks/exclusiveLocks.feature:96](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L96) -- [apiWebdavLocks/exclusiveLocks.feature:97](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L97) -- [apiWebdavLocks/exclusiveLocks.feature:120](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L120) -- [apiWebdavLocks/exclusiveLocks.feature:121](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L121) -- [apiWebdavLocks/exclusiveLocks.feature:122](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L122) - [apiWebdavLocks/exclusiveLocks.feature:123](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L123) -- [apiWebdavLocks/exclusiveLocks.feature:147](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L147) -- [apiWebdavLocks/exclusiveLocks.feature:148](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L148) -- [apiWebdavLocks/exclusiveLocks.feature:149](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L149) +- [apiWebdavLocks/exclusiveLocks.feature:124](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L124) +- [apiWebdavLocks/exclusiveLocks.feature:125](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L125) +- [apiWebdavLocks/exclusiveLocks.feature:126](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L126) - [apiWebdavLocks/exclusiveLocks.feature:150](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L150) -- [apiWebdavLocks/exclusiveLocks.feature:174](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L174) -- [apiWebdavLocks/exclusiveLocks.feature:175](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L175) -- [apiWebdavLocks/exclusiveLocks.feature:176](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L176) +- [apiWebdavLocks/exclusiveLocks.feature:151](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L151) +- [apiWebdavLocks/exclusiveLocks.feature:152](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L152) +- [apiWebdavLocks/exclusiveLocks.feature:153](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L153) - [apiWebdavLocks/exclusiveLocks.feature:177](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L177) -- [apiWebdavLocks/exclusiveLocks.feature:201](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L201) -- [apiWebdavLocks/exclusiveLocks.feature:202](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L202) -- [apiWebdavLocks/exclusiveLocks.feature:203](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L203) -- [apiWebdavLocks/exclusiveLocks.feature:204](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L204) -- [apiWebdavLocks/folder.feature:18](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L18) -- [apiWebdavLocks/folder.feature:19](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L19) -- [apiWebdavLocks/folder.feature:20](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L20) -- [apiWebdavLocks/folder.feature:21](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L21) -- [apiWebdavLocks/folder.feature:41](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L41) -- [apiWebdavLocks/folder.feature:42](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L42) -- [apiWebdavLocks/folder.feature:43](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L43) -- [apiWebdavLocks/folder.feature:44](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L44) -- [apiWebdavLocks/folder.feature:63](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L63) -- [apiWebdavLocks/folder.feature:64](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L64) -- [apiWebdavLocks/folder.feature:65](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L65) -- [apiWebdavLocks/folder.feature:66](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L66) -- [apiWebdavLocks/folder.feature:86](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L86) -- [apiWebdavLocks/folder.feature:87](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L87) -- [apiWebdavLocks/folder.feature:88](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L88) -- [apiWebdavLocks/folder.feature:89](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L89) -- [apiWebdavLocks/folder.feature:110](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L110) -- [apiWebdavLocks/folder.feature:111](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L111) -- [apiWebdavLocks/folder.feature:112](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L112) -- [apiWebdavLocks/folder.feature:113](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L113) -- [apiWebdavLocks/folder.feature:135](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L135) -- [apiWebdavLocks/folder.feature:136](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L136) -- [apiWebdavLocks/folder.feature:137](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L137) -- [apiWebdavLocks/folder.feature:138](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L138) -- [apiWebdavLocks/folder.feature:161](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L161) -- [apiWebdavLocks/folder.feature:162](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L162) -- [apiWebdavLocks/folder.feature:163](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L163) -- [apiWebdavLocks/folder.feature:164](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L164) -- [apiWebdavLocks/publicLink.feature:33](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLink.feature#L33) -- [apiWebdavLocks/publicLink.feature:34](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLink.feature#L34) -- [apiWebdavLocks/publicLink.feature:35](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLink.feature#L35) -- [apiWebdavLocks/publicLink.feature:36](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLink.feature#L36) -- [apiWebdavLocks/publicLink.feature:58](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLink.feature#L58) -- [apiWebdavLocks/publicLink.feature:59](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLink.feature#L59) -- [apiWebdavLocks/publicLink.feature:76](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLink.feature#L76) -- [apiWebdavLocks/publicLink.feature:77](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLink.feature#L77) -- [apiWebdavLocks/publicLink.feature:96](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLink.feature#L96) -- [apiWebdavLocks/publicLink.feature:97](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLink.feature#L97) -- [apiWebdavLocks/publicLink.feature:115](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLink.feature#L115) -- [apiWebdavLocks/publicLink.feature:116](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLink.feature#L116) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:23](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L23) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:24](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L24) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:39](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L39) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:40](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L40) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:55](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L55) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:56](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L56) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:71](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L71) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:72](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L72) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:87](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L87) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:88](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L88) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:103](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L103) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:104](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L104) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:119](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L119) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:120](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L120) -- [apiWebdavLocks/requestsWithToken.feature:73](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L73) -- [apiWebdavLocks/requestsWithToken.feature:74](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L74) -- [apiWebdavLocks/requestsWithToken.feature:75](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L75) -- [apiWebdavLocks/requestsWithToken.feature:76](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L76) -- [apiWebdavLocks/requestsWithToken.feature:100](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L100) -- [apiWebdavLocks/requestsWithToken.feature:101](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L101) -- [apiWebdavLocks/requestsWithToken.feature:102](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L102) -- [apiWebdavLocks/requestsWithToken.feature:103](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L103) +- [apiWebdavLocks/exclusiveLocks.feature:178](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L178) +- [apiWebdavLocks/exclusiveLocks.feature:179](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L179) +- [apiWebdavLocks/exclusiveLocks.feature:180](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L180) +- [apiWebdavLocks/requestsWithToken.feature:130](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L130) - [apiWebdavLocks/requestsWithToken.feature:131](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L131) -- [apiWebdavLocks/requestsWithToken.feature:132](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L132) -- [apiWebdavLocks/requestsWithToken.feature:156](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L156) -- [apiWebdavLocks/requestsWithToken.feature:157](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L157) -- [apiWebdavLocks2/resharedSharesToShares.feature:31](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L31) -- [apiWebdavLocks2/resharedSharesToShares.feature:32](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L32) -- [apiWebdavLocks2/resharedSharesToShares.feature:33](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L33) -- [apiWebdavLocks2/resharedSharesToShares.feature:34](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L34) -- [apiWebdavLocks2/resharedSharesToShares.feature:55](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L55) -- [apiWebdavLocks2/resharedSharesToShares.feature:56](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L56) -- [apiWebdavLocks2/resharedSharesToShares.feature:57](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L57) -- [apiWebdavLocks2/resharedSharesToShares.feature:58](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L58) -- [apiWebdavLocks2/resharedSharesToShares.feature:75](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L75) -- [apiWebdavLocks2/resharedSharesToShares.feature:76](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L76) -- [apiWebdavLocks2/resharedSharesToShares.feature:77](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L77) -- [apiWebdavLocks2/resharedSharesToShares.feature:78](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L78) -- [apiWebdavLocks2/resharedSharesToShares.feature:97](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L97) -- [apiWebdavLocks2/resharedSharesToShares.feature:98](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L98) -- [apiWebdavLocks2/resharedSharesToShares.feature:99](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L99) -- [apiWebdavLocks2/resharedSharesToShares.feature:100](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L100) -- [apiWebdavLocks2/resharedSharesToShares.feature:118](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L118) -- [apiWebdavLocks2/resharedSharesToShares.feature:119](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L119) -- [apiWebdavLocks2/resharedSharesToShares.feature:120](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L120) -- [apiWebdavLocks2/resharedSharesToShares.feature:121](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L121) -- [apiWebdavLocks2/setTimeout.feature:24](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L24) -- [apiWebdavLocks2/setTimeout.feature:25](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L25) -- [apiWebdavLocks2/setTimeout.feature:26](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L26) -- [apiWebdavLocks2/setTimeout.feature:27](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L27) -- [apiWebdavLocks2/setTimeout.feature:47](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L47) -- [apiWebdavLocks2/setTimeout.feature:48](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L48) -- [apiWebdavLocks2/setTimeout.feature:49](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L49) -- [apiWebdavLocks2/setTimeout.feature:50](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L50) -- [apiWebdavLocks2/setTimeout.feature:51](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L51) -- [apiWebdavLocks2/setTimeout.feature:52](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L52) -- [apiWebdavLocks2/setTimeout.feature:53](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L53) -- [apiWebdavLocks2/setTimeout.feature:54](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L54) -- [apiWebdavLocks2/setTimeout.feature:55](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L55) -- [apiWebdavLocks2/setTimeout.feature:56](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L56) -- [apiWebdavLocks2/setTimeout.feature:81](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L81) -- [apiWebdavLocks2/setTimeout.feature:82](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L82) -- [apiWebdavLocks2/setTimeout.feature:83](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L83) -- [apiWebdavLocks2/setTimeout.feature:84](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L84) -- [apiWebdavLocks2/setTimeout.feature:85](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L85) -- [apiWebdavLocks2/setTimeout.feature:86](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L86) -- [apiWebdavLocks2/setTimeout.feature:87](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L87) -- [apiWebdavLocks2/setTimeout.feature:88](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L88) -- [apiWebdavLocks2/setTimeout.feature:89](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L89) -- [apiWebdavLocks2/setTimeout.feature:90](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L90) -- [apiWebdavLocks2/setTimeout.feature:91](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L91) -- [apiWebdavLocks2/setTimeout.feature:92](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L92) -- [apiWebdavLocks2/setTimeout.feature:117](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L117) -- [apiWebdavLocks2/setTimeout.feature:118](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L118) -- [apiWebdavLocks2/setTimeout.feature:119](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L119) -- [apiWebdavLocks2/setTimeout.feature:120](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L120) -- [apiWebdavLocks2/setTimeout.feature:121](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L121) -- [apiWebdavLocks2/setTimeout.feature:122](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L122) -- [apiWebdavLocks2/setTimeout.feature:123](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L123) -- [apiWebdavLocks2/setTimeout.feature:124](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L124) -- [apiWebdavLocks2/setTimeout.feature:125](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L125) -- [apiWebdavLocks2/setTimeout.feature:126](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L126) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:32](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L32) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:33](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L33) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:34](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L34) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:35](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L35) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:36](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L36) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:37](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L37) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:38](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L38) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:39](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L39) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:40](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L40) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:41](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L41) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:66](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L66) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:57](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L57) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:58](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L58) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:59](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L59) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:60](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L60) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:61](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L61) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:62](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L62) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:63](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L63) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:64](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L64) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:65](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L65) -- [apiWebdavLocks3/independentLocks.feature:25](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L25) -- [apiWebdavLocks3/independentLocks.feature:26](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L26) -- [apiWebdavLocks3/independentLocks.feature:27](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L27) -- [apiWebdavLocks3/independentLocks.feature:28](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L28) -- [apiWebdavLocks3/independentLocks.feature:51](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L51) -- [apiWebdavLocks3/independentLocks.feature:52](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L52) -- [apiWebdavLocks3/independentLocks.feature:53](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L53) -- [apiWebdavLocks3/independentLocks.feature:54](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L54) -- [apiWebdavLocks3/independentLocks.feature:77](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L77) -- [apiWebdavLocks3/independentLocks.feature:78](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L78) -- [apiWebdavLocks3/independentLocks.feature:79](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L79) -- [apiWebdavLocks3/independentLocks.feature:80](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L80) -- [apiWebdavLocks3/independentLocks.feature:105](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L105) -- [apiWebdavLocks3/independentLocks.feature:106](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L106) -- [apiWebdavLocks3/independentLocks.feature:107](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L107) -- [apiWebdavLocks3/independentLocks.feature:108](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L108) -- [apiWebdavLocks3/independentLocks.feature:109](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L109) -- [apiWebdavLocks3/independentLocks.feature:110](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L110) -- [apiWebdavLocks3/independentLocks.feature:111](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L111) -- [apiWebdavLocks3/independentLocks.feature:112](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L112) -- [apiWebdavLocks3/independentLocksShareToShares.feature:28](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L28) -- [apiWebdavLocks3/independentLocksShareToShares.feature:29](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L29) -- [apiWebdavLocks3/independentLocksShareToShares.feature:30](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L30) -- [apiWebdavLocks3/independentLocksShareToShares.feature:31](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L31) -- [apiWebdavLocks3/independentLocksShareToShares.feature:57](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L57) -- [apiWebdavLocks3/independentLocksShareToShares.feature:58](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L58) -- [apiWebdavLocks3/independentLocksShareToShares.feature:59](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L59) -- [apiWebdavLocks3/independentLocksShareToShares.feature:60](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L60) -- [apiWebdavLocks3/independentLocksShareToShares.feature:87](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L87) -- [apiWebdavLocks3/independentLocksShareToShares.feature:88](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L88) -- [apiWebdavLocks3/independentLocksShareToShares.feature:89](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L89) -- [apiWebdavLocks3/independentLocksShareToShares.feature:90](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L90) -- [apiWebdavLocks3/independentLocksShareToShares.feature:116](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L116) -- [apiWebdavLocks3/independentLocksShareToShares.feature:117](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L117) -- [apiWebdavLocks3/independentLocksShareToShares.feature:118](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L118) -- [apiWebdavLocks3/independentLocksShareToShares.feature:119](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L119) -- [apiWebdavLocksUnlock/unlock.feature:22](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L22) -- [apiWebdavLocksUnlock/unlock.feature:23](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L23) -- [apiWebdavLocksUnlock/unlock.feature:24](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L24) -- [apiWebdavLocksUnlock/unlock.feature:25](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L25) -- [apiWebdavLocksUnlock/unlock.feature:46](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L46) -- [apiWebdavLocksUnlock/unlock.feature:47](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L47) -- [apiWebdavLocksUnlock/unlock.feature:68](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L68) -- [apiWebdavLocksUnlock/unlock.feature:69](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L69) -- [apiWebdavLocksUnlock/unlock.feature:70](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L70) -- [apiWebdavLocksUnlock/unlock.feature:71](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L71) -- [apiWebdavLocksUnlock/unlock.feature:91](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L91) -- [apiWebdavLocksUnlock/unlock.feature:92](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L92) -- [apiWebdavLocksUnlock/unlock.feature:116](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L116) -- [apiWebdavLocksUnlock/unlock.feature:117](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L117) -- [apiWebdavLocksUnlock/unlock.feature:118](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L118) -- [apiWebdavLocksUnlock/unlock.feature:119](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L119) -- [apiWebdavLocksUnlock/unlock.feature:147](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L147) -- [apiWebdavLocksUnlock/unlock.feature:148](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L148) -- [apiWebdavLocksUnlock/unlock.feature:149](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L149) -- [apiWebdavLocksUnlock/unlock.feature:150](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L150) +- [apiWebdavLocks3/independentLocks.feature:65](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L65) +- [apiWebdavLocks3/independentLocks.feature:66](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L66) +- [apiWebdavLocks3/independentLocks.feature:67](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L67) +- [apiWebdavLocks3/independentLocks.feature:68](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L68) +- [apiWebdavLocks3/independentLocks.feature:93](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L93) +- [apiWebdavLocks3/independentLocks.feature:94](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L94) +- [apiWebdavLocks3/independentLocks.feature:95](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L95) +- [apiWebdavLocks3/independentLocks.feature:96](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L96) +- [apiWebdavLocks3/independentLocks.feature:97](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L97) +- [apiWebdavLocks3/independentLocks.feature:98](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L98) +- [apiWebdavLocks3/independentLocks.feature:99](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L99) +- [apiWebdavLocks3/independentLocks.feature:100](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L100) +- [apiWebdavLocks3/independentLocksShareToShares.feature:75](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L75) +- [apiWebdavLocks3/independentLocksShareToShares.feature:76](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L76) +- [apiWebdavLocks3/independentLocksShareToShares.feature:77](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L77) +- [apiWebdavLocks3/independentLocksShareToShares.feature:78](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L78) +- [apiWebdavLocks3/independentLocksShareToShares.feature:104](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L104) +- [apiWebdavLocks3/independentLocksShareToShares.feature:105](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L105) +- [apiWebdavLocks3/independentLocksShareToShares.feature:106](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L106) +- [apiWebdavLocks3/independentLocksShareToShares.feature:107](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L107) +- [apiWebdavLocksUnlock/unlock.feature:40](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L40) +- [apiWebdavLocksUnlock/unlock.feature:41](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L41) +- [apiWebdavLocksUnlock/unlock.feature:79](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L79) +- [apiWebdavLocksUnlock/unlock.feature:80](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L80) +- [apiWebdavLocksUnlock/unlock.feature:129](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L129) +- [apiWebdavLocksUnlock/unlock.feature:130](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L130) +- [apiWebdavLocksUnlock/unlock.feature:131](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L131) +- [apiWebdavLocksUnlock/unlock.feature:132](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L132) - [apiWebdavLocksUnlock/unlockSharingToShares.feature:28](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L28) - [apiWebdavLocksUnlock/unlockSharingToShares.feature:29](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L29) - [apiWebdavLocksUnlock/unlockSharingToShares.feature:30](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L30) @@ -287,26 +103,18 @@ Synchronization features like etag propagation, setting mtime and locking files - [apiWebdavLocksUnlock/unlockSharingToShares.feature:61](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L61) - [apiWebdavLocksUnlock/unlockSharingToShares.feature:62](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L62) - [apiWebdavLocksUnlock/unlockSharingToShares.feature:63](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L63) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:90](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L90) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:91](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L91) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:92](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L92) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:93](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L93) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:115](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L115) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:116](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L116) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:117](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L117) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:118](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L118) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:148](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L148) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:149](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L149) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:150](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L150) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:151](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L151) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:180](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L180) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:181](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L181) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:182](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L182) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:183](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L183) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:210](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L210) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:211](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L211) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:212](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L212) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:213](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L213) +- [apiWebdavLocksUnlock/unlockSharingToShares.feature:109](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L109) +- [apiWebdavLocksUnlock/unlockSharingToShares.feature:110](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L110) +- [apiWebdavLocksUnlock/unlockSharingToShares.feature:111](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L111) +- [apiWebdavLocksUnlock/unlockSharingToShares.feature:112](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L112) +- [apiWebdavLocksUnlock/unlockSharingToShares.feature:142](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L142) +- [apiWebdavLocksUnlock/unlockSharingToShares.feature:143](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L143) +- [apiWebdavLocksUnlock/unlockSharingToShares.feature:144](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L144) +- [apiWebdavLocksUnlock/unlockSharingToShares.feature:145](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L145) +- [apiWebdavLocksUnlock/unlockSharingToShares.feature:174](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L174) +- [apiWebdavLocksUnlock/unlockSharingToShares.feature:175](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L175) +- [apiWebdavLocksUnlock/unlockSharingToShares.feature:176](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L176) +- [apiWebdavLocksUnlock/unlockSharingToShares.feature:177](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L177) ### Share File and sync features in a shared scenario @@ -965,16 +773,16 @@ Not everything needs to be implemented for ocis. While the oc10 testsuite covers - [apiWebdavUploadTUS/optionsRequest.feature:33](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/optionsRequest.feature#L33) - [apiWebdavUploadTUS/optionsRequest.feature:59](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/optionsRequest.feature#L59) - [apiWebdavUploadTUS/optionsRequest.feature:85](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/optionsRequest.feature#L85) -- [apiWebdavUploadTUS/uploadToShare.feature:181](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L181) -- [apiWebdavUploadTUS/uploadToShare.feature:182](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L182) -- [apiWebdavUploadTUS/uploadToShare.feature:200](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L200) -- [apiWebdavUploadTUS/uploadToShare.feature:201](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L201) -- [apiWebdavUploadTUS/uploadToShare.feature:219](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L219) -- [apiWebdavUploadTUS/uploadToShare.feature:220](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L220) -- [apiWebdavUploadTUS/uploadToShare.feature:258](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L258) -- [apiWebdavUploadTUS/uploadToShare.feature:259](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L259) -- [apiWebdavUploadTUS/uploadToShare.feature:300](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L300) -- [apiWebdavUploadTUS/uploadToShare.feature:301](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L301) +- [apiWebdavUploadTUS/uploadToShare.feature:176](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L176) +- [apiWebdavUploadTUS/uploadToShare.feature:177](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L177) +- [apiWebdavUploadTUS/uploadToShare.feature:195](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L195) +- [apiWebdavUploadTUS/uploadToShare.feature:196](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L196) +- [apiWebdavUploadTUS/uploadToShare.feature:214](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L214) +- [apiWebdavUploadTUS/uploadToShare.feature:215](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L215) +- [apiWebdavUploadTUS/uploadToShare.feature:253](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L253) +- [apiWebdavUploadTUS/uploadToShare.feature:254](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L254) +- [apiWebdavUploadTUS/uploadToShare.feature:295](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L295) +- [apiWebdavUploadTUS/uploadToShare.feature:296](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L296) #### [Share inaccessible if folder with same name was deleted and recreated](https://github.com/owncloud/ocis/issues/1787) - [apiShareReshareToShares1/reShare.feature:259](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareReshareToShares1/reShare.feature#L259) diff --git a/tests/acceptance/expected-failures-on-S3NG-storage.md b/tests/acceptance/expected-failures-on-S3NG-storage.md index 6b3b80e57f..a19ba13f41 100644 --- a/tests/acceptance/expected-failures-on-S3NG-storage.md +++ b/tests/acceptance/expected-failures-on-S3NG-storage.md @@ -67,232 +67,48 @@ Synchronization features like etag propagation, setting mtime and locking files - [apiWebdavLocks/exclusiveLocks.feature:19](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L19) - [apiWebdavLocks/exclusiveLocks.feature:20](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L20) - [apiWebdavLocks/exclusiveLocks.feature:21](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L21) -- [apiWebdavLocks/exclusiveLocks.feature:43](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L43) -- [apiWebdavLocks/exclusiveLocks.feature:44](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L44) -- [apiWebdavLocks/exclusiveLocks.feature:45](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L45) -- [apiWebdavLocks/exclusiveLocks.feature:46](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L46) -- [apiWebdavLocks/exclusiveLocks.feature:69](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L69) -- [apiWebdavLocks/exclusiveLocks.feature:70](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L70) -- [apiWebdavLocks/exclusiveLocks.feature:71](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L71) -- [apiWebdavLocks/exclusiveLocks.feature:72](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L72) -- [apiWebdavLocks/exclusiveLocks.feature:94](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L94) -- [apiWebdavLocks/exclusiveLocks.feature:95](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L95) -- [apiWebdavLocks/exclusiveLocks.feature:96](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L96) -- [apiWebdavLocks/exclusiveLocks.feature:97](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L97) -- [apiWebdavLocks/exclusiveLocks.feature:120](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L120) -- [apiWebdavLocks/exclusiveLocks.feature:121](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L121) -- [apiWebdavLocks/exclusiveLocks.feature:122](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L122) - [apiWebdavLocks/exclusiveLocks.feature:123](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L123) -- [apiWebdavLocks/exclusiveLocks.feature:147](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L147) -- [apiWebdavLocks/exclusiveLocks.feature:148](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L148) -- [apiWebdavLocks/exclusiveLocks.feature:149](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L149) +- [apiWebdavLocks/exclusiveLocks.feature:124](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L124) +- [apiWebdavLocks/exclusiveLocks.feature:125](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L125) +- [apiWebdavLocks/exclusiveLocks.feature:126](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L126) - [apiWebdavLocks/exclusiveLocks.feature:150](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L150) -- [apiWebdavLocks/exclusiveLocks.feature:174](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L174) -- [apiWebdavLocks/exclusiveLocks.feature:175](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L175) -- [apiWebdavLocks/exclusiveLocks.feature:176](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L176) +- [apiWebdavLocks/exclusiveLocks.feature:151](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L151) +- [apiWebdavLocks/exclusiveLocks.feature:152](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L152) +- [apiWebdavLocks/exclusiveLocks.feature:153](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L153) - [apiWebdavLocks/exclusiveLocks.feature:177](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L177) -- [apiWebdavLocks/exclusiveLocks.feature:201](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L201) -- [apiWebdavLocks/exclusiveLocks.feature:202](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L202) -- [apiWebdavLocks/exclusiveLocks.feature:203](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L203) -- [apiWebdavLocks/exclusiveLocks.feature:204](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L204) -- [apiWebdavLocks/folder.feature:18](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L18) -- [apiWebdavLocks/folder.feature:19](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L19) -- [apiWebdavLocks/folder.feature:20](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L20) -- [apiWebdavLocks/folder.feature:21](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L21) -- [apiWebdavLocks/folder.feature:41](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L41) -- [apiWebdavLocks/folder.feature:42](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L42) -- [apiWebdavLocks/folder.feature:43](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L43) -- [apiWebdavLocks/folder.feature:44](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L44) -- [apiWebdavLocks/folder.feature:63](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L63) -- [apiWebdavLocks/folder.feature:64](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L64) -- [apiWebdavLocks/folder.feature:65](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L65) -- [apiWebdavLocks/folder.feature:66](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L66) -- [apiWebdavLocks/folder.feature:86](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L86) -- [apiWebdavLocks/folder.feature:87](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L87) -- [apiWebdavLocks/folder.feature:88](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L88) -- [apiWebdavLocks/folder.feature:89](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L89) -- [apiWebdavLocks/folder.feature:110](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L110) -- [apiWebdavLocks/folder.feature:111](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L111) -- [apiWebdavLocks/folder.feature:112](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L112) -- [apiWebdavLocks/folder.feature:113](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L113) -- [apiWebdavLocks/folder.feature:135](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L135) -- [apiWebdavLocks/folder.feature:136](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L136) -- [apiWebdavLocks/folder.feature:137](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L137) -- [apiWebdavLocks/folder.feature:138](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L138) -- [apiWebdavLocks/folder.feature:161](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L161) -- [apiWebdavLocks/folder.feature:162](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L162) -- [apiWebdavLocks/folder.feature:163](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L163) -- [apiWebdavLocks/folder.feature:164](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/folder.feature#L164) -- [apiWebdavLocks/publicLink.feature:33](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLink.feature#L33) -- [apiWebdavLocks/publicLink.feature:34](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLink.feature#L34) -- [apiWebdavLocks/publicLink.feature:35](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLink.feature#L35) -- [apiWebdavLocks/publicLink.feature:36](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLink.feature#L36) -- [apiWebdavLocks/publicLink.feature:58](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLink.feature#L58) -- [apiWebdavLocks/publicLink.feature:59](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLink.feature#L59) -- [apiWebdavLocks/publicLink.feature:76](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLink.feature#L76) -- [apiWebdavLocks/publicLink.feature:77](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLink.feature#L77) -- [apiWebdavLocks/publicLink.feature:96](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLink.feature#L96) -- [apiWebdavLocks/publicLink.feature:97](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLink.feature#L97) -- [apiWebdavLocks/publicLink.feature:115](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLink.feature#L115) -- [apiWebdavLocks/publicLink.feature:116](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLink.feature#L116) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:23](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L23) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:24](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L24) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:39](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L39) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:40](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L40) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:55](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L55) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:56](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L56) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:71](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L71) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:72](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L72) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:87](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L87) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:88](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L88) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:103](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L103) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:104](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L104) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:119](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L119) -- [apiWebdavLocks/publicLinkLockdiscovery.feature:120](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/publicLinkLockdiscovery.feature#L120) -- [apiWebdavLocks/requestsWithToken.feature:73](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L73) -- [apiWebdavLocks/requestsWithToken.feature:74](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L74) -- [apiWebdavLocks/requestsWithToken.feature:75](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L75) -- [apiWebdavLocks/requestsWithToken.feature:76](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L76) -- [apiWebdavLocks/requestsWithToken.feature:100](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L100) -- [apiWebdavLocks/requestsWithToken.feature:101](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L101) -- [apiWebdavLocks/requestsWithToken.feature:102](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L102) -- [apiWebdavLocks/requestsWithToken.feature:103](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L103) +- [apiWebdavLocks/exclusiveLocks.feature:178](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L178) +- [apiWebdavLocks/exclusiveLocks.feature:179](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L179) +- [apiWebdavLocks/exclusiveLocks.feature:180](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/exclusiveLocks.feature#L180) +- [apiWebdavLocks/requestsWithToken.feature:130](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L130) - [apiWebdavLocks/requestsWithToken.feature:131](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L131) -- [apiWebdavLocks/requestsWithToken.feature:132](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L132) -- [apiWebdavLocks/requestsWithToken.feature:156](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L156) -- [apiWebdavLocks/requestsWithToken.feature:157](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks/requestsWithToken.feature#L157) -- [apiWebdavLocks2/resharedSharesToShares.feature:31](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L31) -- [apiWebdavLocks2/resharedSharesToShares.feature:32](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L32) -- [apiWebdavLocks2/resharedSharesToShares.feature:33](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L33) -- [apiWebdavLocks2/resharedSharesToShares.feature:34](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L34) -- [apiWebdavLocks2/resharedSharesToShares.feature:55](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L55) -- [apiWebdavLocks2/resharedSharesToShares.feature:56](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L56) -- [apiWebdavLocks2/resharedSharesToShares.feature:57](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L57) -- [apiWebdavLocks2/resharedSharesToShares.feature:58](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L58) -- [apiWebdavLocks2/resharedSharesToShares.feature:75](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L75) -- [apiWebdavLocks2/resharedSharesToShares.feature:76](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L76) -- [apiWebdavLocks2/resharedSharesToShares.feature:77](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L77) -- [apiWebdavLocks2/resharedSharesToShares.feature:78](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L78) -- [apiWebdavLocks2/resharedSharesToShares.feature:97](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L97) -- [apiWebdavLocks2/resharedSharesToShares.feature:98](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L98) -- [apiWebdavLocks2/resharedSharesToShares.feature:99](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L99) -- [apiWebdavLocks2/resharedSharesToShares.feature:100](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L100) -- [apiWebdavLocks2/resharedSharesToShares.feature:118](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L118) -- [apiWebdavLocks2/resharedSharesToShares.feature:119](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L119) -- [apiWebdavLocks2/resharedSharesToShares.feature:120](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L120) -- [apiWebdavLocks2/resharedSharesToShares.feature:121](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/resharedSharesToShares.feature#L121) -- [apiWebdavLocks2/setTimeout.feature:24](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L24) -- [apiWebdavLocks2/setTimeout.feature:25](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L25) -- [apiWebdavLocks2/setTimeout.feature:26](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L26) -- [apiWebdavLocks2/setTimeout.feature:27](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L27) -- [apiWebdavLocks2/setTimeout.feature:47](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L47) -- [apiWebdavLocks2/setTimeout.feature:48](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L48) -- [apiWebdavLocks2/setTimeout.feature:49](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L49) -- [apiWebdavLocks2/setTimeout.feature:50](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L50) -- [apiWebdavLocks2/setTimeout.feature:51](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L51) -- [apiWebdavLocks2/setTimeout.feature:52](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L52) -- [apiWebdavLocks2/setTimeout.feature:53](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L53) -- [apiWebdavLocks2/setTimeout.feature:54](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L54) -- [apiWebdavLocks2/setTimeout.feature:55](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L55) -- [apiWebdavLocks2/setTimeout.feature:56](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L56) -- [apiWebdavLocks2/setTimeout.feature:81](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L81) -- [apiWebdavLocks2/setTimeout.feature:82](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L82) -- [apiWebdavLocks2/setTimeout.feature:83](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L83) -- [apiWebdavLocks2/setTimeout.feature:84](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L84) -- [apiWebdavLocks2/setTimeout.feature:85](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L85) -- [apiWebdavLocks2/setTimeout.feature:86](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L86) -- [apiWebdavLocks2/setTimeout.feature:87](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L87) -- [apiWebdavLocks2/setTimeout.feature:88](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L88) -- [apiWebdavLocks2/setTimeout.feature:89](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L89) -- [apiWebdavLocks2/setTimeout.feature:90](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L90) -- [apiWebdavLocks2/setTimeout.feature:91](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L91) -- [apiWebdavLocks2/setTimeout.feature:92](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L92) -- [apiWebdavLocks2/setTimeout.feature:117](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L117) -- [apiWebdavLocks2/setTimeout.feature:118](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L118) -- [apiWebdavLocks2/setTimeout.feature:119](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L119) -- [apiWebdavLocks2/setTimeout.feature:120](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L120) -- [apiWebdavLocks2/setTimeout.feature:121](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L121) -- [apiWebdavLocks2/setTimeout.feature:122](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L122) -- [apiWebdavLocks2/setTimeout.feature:123](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L123) -- [apiWebdavLocks2/setTimeout.feature:124](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L124) -- [apiWebdavLocks2/setTimeout.feature:125](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L125) -- [apiWebdavLocks2/setTimeout.feature:126](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeout.feature#L126) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:32](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L32) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:33](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L33) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:34](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L34) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:35](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L35) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:36](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L36) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:37](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L37) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:38](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L38) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:39](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L39) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:40](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L40) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:41](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L41) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:66](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L66) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:57](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L57) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:58](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L58) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:59](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L59) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:60](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L60) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:61](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L61) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:62](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L62) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:63](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L63) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:64](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L64) -- [apiWebdavLocks2/setTimeoutSharesToShares.feature:65](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks2/setTimeoutSharesToShares.feature#L65) -- [apiWebdavLocks3/independentLocks.feature:25](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L25) -- [apiWebdavLocks3/independentLocks.feature:26](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L26) -- [apiWebdavLocks3/independentLocks.feature:27](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L27) -- [apiWebdavLocks3/independentLocks.feature:28](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L28) -- [apiWebdavLocks3/independentLocks.feature:51](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L51) -- [apiWebdavLocks3/independentLocks.feature:52](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L52) -- [apiWebdavLocks3/independentLocks.feature:53](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L53) -- [apiWebdavLocks3/independentLocks.feature:54](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L54) -- [apiWebdavLocks3/independentLocks.feature:77](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L77) -- [apiWebdavLocks3/independentLocks.feature:78](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L78) -- [apiWebdavLocks3/independentLocks.feature:79](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L79) -- [apiWebdavLocks3/independentLocks.feature:80](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L80) -- [apiWebdavLocks3/independentLocks.feature:105](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L105) -- [apiWebdavLocks3/independentLocks.feature:106](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L106) -- [apiWebdavLocks3/independentLocks.feature:107](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L107) -- [apiWebdavLocks3/independentLocks.feature:108](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L108) -- [apiWebdavLocks3/independentLocks.feature:109](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L109) -- [apiWebdavLocks3/independentLocks.feature:110](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L110) -- [apiWebdavLocks3/independentLocks.feature:111](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L111) -- [apiWebdavLocks3/independentLocks.feature:112](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L112) -- [apiWebdavLocks3/independentLocksShareToShares.feature:28](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L28) -- [apiWebdavLocks3/independentLocksShareToShares.feature:29](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L29) -- [apiWebdavLocks3/independentLocksShareToShares.feature:30](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L30) -- [apiWebdavLocks3/independentLocksShareToShares.feature:31](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L31) -- [apiWebdavLocks3/independentLocksShareToShares.feature:57](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L57) -- [apiWebdavLocks3/independentLocksShareToShares.feature:58](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L58) -- [apiWebdavLocks3/independentLocksShareToShares.feature:59](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L59) -- [apiWebdavLocks3/independentLocksShareToShares.feature:60](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L60) -- [apiWebdavLocks3/independentLocksShareToShares.feature:87](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L87) -- [apiWebdavLocks3/independentLocksShareToShares.feature:88](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L88) -- [apiWebdavLocks3/independentLocksShareToShares.feature:89](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L89) -- [apiWebdavLocks3/independentLocksShareToShares.feature:90](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L90) -- [apiWebdavLocks3/independentLocksShareToShares.feature:116](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L116) -- [apiWebdavLocks3/independentLocksShareToShares.feature:117](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L117) -- [apiWebdavLocks3/independentLocksShareToShares.feature:118](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L118) -- [apiWebdavLocks3/independentLocksShareToShares.feature:119](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L119) -- [apiWebdavLocksUnlock/unlock.feature:22](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L22) -- [apiWebdavLocksUnlock/unlock.feature:23](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L23) -- [apiWebdavLocksUnlock/unlock.feature:24](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L24) -- [apiWebdavLocksUnlock/unlock.feature:25](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L25) -- [apiWebdavLocksUnlock/unlock.feature:46](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L46) -- [apiWebdavLocksUnlock/unlock.feature:47](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L47) -- [apiWebdavLocksUnlock/unlock.feature:68](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L68) -- [apiWebdavLocksUnlock/unlock.feature:69](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L69) -- [apiWebdavLocksUnlock/unlock.feature:70](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L70) -- [apiWebdavLocksUnlock/unlock.feature:71](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L71) -- [apiWebdavLocksUnlock/unlock.feature:91](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L91) -- [apiWebdavLocksUnlock/unlock.feature:92](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L92) -- [apiWebdavLocksUnlock/unlock.feature:116](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L116) -- [apiWebdavLocksUnlock/unlock.feature:117](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L117) -- [apiWebdavLocksUnlock/unlock.feature:118](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L118) -- [apiWebdavLocksUnlock/unlock.feature:119](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L119) -- [apiWebdavLocksUnlock/unlock.feature:147](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L147) -- [apiWebdavLocksUnlock/unlock.feature:148](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L148) -- [apiWebdavLocksUnlock/unlock.feature:149](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L149) -- [apiWebdavLocksUnlock/unlock.feature:150](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L150) +- [apiWebdavLocks3/independentLocks.feature:65](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L65) +- [apiWebdavLocks3/independentLocks.feature:66](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L66) +- [apiWebdavLocks3/independentLocks.feature:67](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L67) +- [apiWebdavLocks3/independentLocks.feature:68](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L68) +- [apiWebdavLocks3/independentLocks.feature:93](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L93) +- [apiWebdavLocks3/independentLocks.feature:94](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L94) +- [apiWebdavLocks3/independentLocks.feature:95](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L95) +- [apiWebdavLocks3/independentLocks.feature:96](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L96) +- [apiWebdavLocks3/independentLocks.feature:97](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L97) +- [apiWebdavLocks3/independentLocks.feature:98](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L98) +- [apiWebdavLocks3/independentLocks.feature:99](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L99) +- [apiWebdavLocks3/independentLocks.feature:100](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocks.feature#L100) +- [apiWebdavLocks3/independentLocksShareToShares.feature:75](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L75) +- [apiWebdavLocks3/independentLocksShareToShares.feature:76](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L76) +- [apiWebdavLocks3/independentLocksShareToShares.feature:77](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L77) +- [apiWebdavLocks3/independentLocksShareToShares.feature:78](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L78) +- [apiWebdavLocks3/independentLocksShareToShares.feature:104](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L104) +- [apiWebdavLocks3/independentLocksShareToShares.feature:105](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L105) +- [apiWebdavLocks3/independentLocksShareToShares.feature:106](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L106) +- [apiWebdavLocks3/independentLocksShareToShares.feature:107](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocks3/independentLocksShareToShares.feature#L107) +- [apiWebdavLocksUnlock/unlock.feature:40](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L40) +- [apiWebdavLocksUnlock/unlock.feature:41](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L41) +- [apiWebdavLocksUnlock/unlock.feature:79](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L79) +- [apiWebdavLocksUnlock/unlock.feature:80](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L80) +- [apiWebdavLocksUnlock/unlock.feature:129](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L129) +- [apiWebdavLocksUnlock/unlock.feature:130](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L130) +- [apiWebdavLocksUnlock/unlock.feature:131](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L131) +- [apiWebdavLocksUnlock/unlock.feature:132](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlock.feature#L132) - [apiWebdavLocksUnlock/unlockSharingToShares.feature:28](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L28) - [apiWebdavLocksUnlock/unlockSharingToShares.feature:29](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L29) - [apiWebdavLocksUnlock/unlockSharingToShares.feature:30](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L30) @@ -301,26 +117,18 @@ Synchronization features like etag propagation, setting mtime and locking files - [apiWebdavLocksUnlock/unlockSharingToShares.feature:61](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L61) - [apiWebdavLocksUnlock/unlockSharingToShares.feature:62](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L62) - [apiWebdavLocksUnlock/unlockSharingToShares.feature:63](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L63) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:90](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L90) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:91](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L91) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:92](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L92) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:93](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L93) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:115](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L115) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:116](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L116) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:117](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L117) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:118](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L118) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:148](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L148) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:149](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L149) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:150](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L150) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:151](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L151) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:180](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L180) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:181](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L181) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:182](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L182) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:183](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L183) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:210](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L210) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:211](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L211) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:212](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L212) -- [apiWebdavLocksUnlock/unlockSharingToShares.feature:213](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L213) +- [apiWebdavLocksUnlock/unlockSharingToShares.feature:109](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L109) +- [apiWebdavLocksUnlock/unlockSharingToShares.feature:110](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L110) +- [apiWebdavLocksUnlock/unlockSharingToShares.feature:111](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L111) +- [apiWebdavLocksUnlock/unlockSharingToShares.feature:112](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L112) +- [apiWebdavLocksUnlock/unlockSharingToShares.feature:142](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L142) +- [apiWebdavLocksUnlock/unlockSharingToShares.feature:143](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L143) +- [apiWebdavLocksUnlock/unlockSharingToShares.feature:144](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L144) +- [apiWebdavLocksUnlock/unlockSharingToShares.feature:145](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L145) +- [apiWebdavLocksUnlock/unlockSharingToShares.feature:174](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L174) +- [apiWebdavLocksUnlock/unlockSharingToShares.feature:175](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L175) +- [apiWebdavLocksUnlock/unlockSharingToShares.feature:176](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L176) +- [apiWebdavLocksUnlock/unlockSharingToShares.feature:177](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavLocksUnlock/unlockSharingToShares.feature#L177) ### Share File and sync features in a shared scenario @@ -984,16 +792,16 @@ Not everything needs to be implemented for ocis. While the oc10 testsuite covers - [apiWebdavUploadTUS/optionsRequest.feature:33](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/optionsRequest.feature#L33) - [apiWebdavUploadTUS/optionsRequest.feature:59](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/optionsRequest.feature#L59) - [apiWebdavUploadTUS/optionsRequest.feature:85](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/optionsRequest.feature#L85) -- [apiWebdavUploadTUS/uploadToShare.feature:181](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L181) -- [apiWebdavUploadTUS/uploadToShare.feature:182](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L182) -- [apiWebdavUploadTUS/uploadToShare.feature:200](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L200) -- [apiWebdavUploadTUS/uploadToShare.feature:201](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L201) -- [apiWebdavUploadTUS/uploadToShare.feature:219](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L219) -- [apiWebdavUploadTUS/uploadToShare.feature:220](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L220) -- [apiWebdavUploadTUS/uploadToShare.feature:258](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L258) -- [apiWebdavUploadTUS/uploadToShare.feature:259](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L259) -- [apiWebdavUploadTUS/uploadToShare.feature:300](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L300) -- [apiWebdavUploadTUS/uploadToShare.feature:301](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L301) +- [apiWebdavUploadTUS/uploadToShare.feature:176](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L176) +- [apiWebdavUploadTUS/uploadToShare.feature:177](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L177) +- [apiWebdavUploadTUS/uploadToShare.feature:195](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L195) +- [apiWebdavUploadTUS/uploadToShare.feature:196](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L196) +- [apiWebdavUploadTUS/uploadToShare.feature:214](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L214) +- [apiWebdavUploadTUS/uploadToShare.feature:215](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L215) +- [apiWebdavUploadTUS/uploadToShare.feature:253](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L253) +- [apiWebdavUploadTUS/uploadToShare.feature:254](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L254) +- [apiWebdavUploadTUS/uploadToShare.feature:295](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L295) +- [apiWebdavUploadTUS/uploadToShare.feature:296](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUploadTUS/uploadToShare.feature#L296) #### [Share inaccessible if folder with same name was deleted and recreated](https://github.com/owncloud/ocis/issues/1787) - [apiShareReshareToShares1/reShare.feature:259](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareReshareToShares1/reShare.feature#L259) From 788e1d2826db14f3248e4815449260df84162db7 Mon Sep 17 00:00:00 2001 From: Swikriti Tripathi <41103328+SwikritiT@users.noreply.github.com> Date: Tue, 20 Sep 2022 13:36:13 +0545 Subject: [PATCH 07/83] Bump commit id for tests (#3254) --- .drone.env | 2 +- tests/acceptance/expected-failures-on-OCIS-storage.md | 4 ++-- tests/acceptance/expected-failures-on-S3NG-storage.md | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.drone.env b/.drone.env index 4924b759a5..b8db040950 100644 --- a/.drone.env +++ b/.drone.env @@ -1,3 +1,3 @@ # The test runner source for API tests -CORE_COMMITID=67fad9d49fa7f3f42f77e882ee4cbb206464ca5d +CORE_COMMITID=abf37068ff0fb824fec331dce0a25c1d7ac85177 CORE_BRANCH=master diff --git a/tests/acceptance/expected-failures-on-OCIS-storage.md b/tests/acceptance/expected-failures-on-OCIS-storage.md index 151d7f5b01..d505e41054 100644 --- a/tests/acceptance/expected-failures-on-OCIS-storage.md +++ b/tests/acceptance/expected-failures-on-OCIS-storage.md @@ -702,8 +702,8 @@ Not everything needs to be implemented for ocis. While the oc10 testsuite covers #### [Blacklist files extensions](https://github.com/owncloud/ocis/issues/2177) - [apiWebdavProperties1/copyFile.feature:122](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/copyFile.feature#L122) - [apiWebdavProperties1/copyFile.feature:123](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/copyFile.feature#L123) -- [apiWebdavProperties1/createFolder.feature:95](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/createFolder.feature#L95) -- [apiWebdavProperties1/createFolder.feature:96](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/createFolder.feature#L96) +- [apiWebdavProperties1/createFileFolder.feature:98](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/createFileFolder.feature#L98) +- [apiWebdavProperties1/createFileFolder.feature:99](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/createFileFolder.feature#L99) - [apiWebdavUpload1/uploadFile.feature:181](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload1/uploadFile.feature#L181) - [apiWebdavUpload1/uploadFile.feature:182](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload1/uploadFile.feature#L182) - [apiWebdavUpload2/uploadFileToBlacklistedNameUsingOldChunking.feature:19](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload2/uploadFileToBlacklistedNameUsingOldChunking.feature#L19) diff --git a/tests/acceptance/expected-failures-on-S3NG-storage.md b/tests/acceptance/expected-failures-on-S3NG-storage.md index a19ba13f41..e39243ba6d 100644 --- a/tests/acceptance/expected-failures-on-S3NG-storage.md +++ b/tests/acceptance/expected-failures-on-S3NG-storage.md @@ -720,8 +720,8 @@ Not everything needs to be implemented for ocis. While the oc10 testsuite covers #### [Blacklist files extensions](https://github.com/owncloud/ocis/issues/2177) - [apiWebdavProperties1/copyFile.feature:122](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/copyFile.feature#L122) - [apiWebdavProperties1/copyFile.feature:123](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/copyFile.feature#L123) -- [apiWebdavProperties1/createFolder.feature:95](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/createFolder.feature#L95) -- [apiWebdavProperties1/createFolder.feature:96](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/createFolder.feature#L96) +- [apiWebdavProperties1/createFileFolder.feature:98](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/createFileFolder.feature#L98) +- [apiWebdavProperties1/createFileFolder.feature:99](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/createFileFolder.feature#L99) - [apiWebdavUpload1/uploadFile.feature:181](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload1/uploadFile.feature#L181) - [apiWebdavUpload1/uploadFile.feature:182](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload1/uploadFile.feature#L182) - [apiWebdavUpload2/uploadFileToBlacklistedNameUsingOldChunking.feature:19](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload2/uploadFileToBlacklistedNameUsingOldChunking.feature#L19) From ae1bf65a487fdb1799d92582980e949b95b6f1f6 Mon Sep 17 00:00:00 2001 From: Sagar Gurung <46086950+SagarGi@users.noreply.github.com> Date: Fri, 23 Sep 2022 11:09:26 +0545 Subject: [PATCH 08/83] Check for issue not mentioned to a test in expected to failure in reva-master (#3262) --- .../expected-failures-on-EOS-storage.md | 15 ------ .../expected-failures-on-OCIS-storage.md | 48 +++++++++---------- .../expected-failures-on-S3NG-storage.md | 13 ++--- 3 files changed, 26 insertions(+), 50 deletions(-) diff --git a/tests/acceptance/expected-failures-on-EOS-storage.md b/tests/acceptance/expected-failures-on-EOS-storage.md index ef69839599..be6148bd12 100644 --- a/tests/acceptance/expected-failures-on-EOS-storage.md +++ b/tests/acceptance/expected-failures-on-EOS-storage.md @@ -63,8 +63,6 @@ - [apiWebdavProperties1/getQuota.feature:62](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/getQuota.feature#L62) - [apiWebdavProperties1/getQuota.feature:77](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/getQuota.feature#L77) - [apiWebdavProperties1/getQuota.feature:78](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/getQuota.feature#L78) - -### [There is no such thing like a "super-user"](https://github.com/owncloud/ocis/issues/1319) ### [no command equivalent to occ](https://github.com/owncloud/ocis/issues/1317) - [apiMain/status.feature:5](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiMain/status.feature#L5) @@ -238,13 +236,6 @@ - [apiShareManagement/acceptSharesToSharesFolder.feature:30](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagement/acceptSharesToSharesFolder.feature#L30) - [apiShareManagement/acceptSharesToSharesFolder.feature:52](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagement/acceptSharesToSharesFolder.feature#L52) -### [groups endpoint does not exist](https://github.com/owncloud/ocis-reva/issues/34) -### [Sharing seems to work but does not work](https://github.com/owncloud/ocis/issues/1303) -### [Listing shares via ocs API does not show path for parent folders](https://github.com/owncloud/ocis/issues/1231) -### [Fields missing in delete share OCS response](https://github.com/owncloud/ocis-reva/issues/356) -### [file_target in share response](https://github.com/owncloud/product/issues/203) -### [Shares not deleted when user is deleted](hhttps://github.com/owncloud/ocis/issues/1226) -### [EOS no displayname owner when creating share](https://github.com/owncloud/ocis/issues/1270) ### [EOS mime-type is not set correctly when sharing](https://github.com/owncloud/ocis/issues/1271) - [apiShareToSharesManagementBasic/createShareToSharesFolder.feature:36](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareToSharesManagementBasic/createShareToSharesFolder.feature#L36) - [apiShareToSharesManagementBasic/createShareToSharesFolder.feature:37](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareToSharesManagementBasic/createShareToSharesFolder.feature#L37) @@ -336,8 +327,6 @@ - [apiShareOperations/gettingShares.feature:34](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareOperations/gettingShares.feature#L34) - [apiShareOperations/gettingShares.feature:35](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareOperations/gettingShares.feature#L35) -### [Delete shares from user when user is deleted](hhttps://github.com/owncloud/ocis/issues/1226) -### [no displayname_owner shown when creating a share](https://github.com/owncloud/ocis/issues/1270) ### [when sharing a file mime-type field is set to application/octet-stream](https://github.com/owncloud/ocis/issues/1271) - [apiShareOperations/gettingShares.feature:124](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareOperations/gettingShares.feature#L124) - [apiShareOperations/gettingShares.feature:125](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareOperations/gettingShares.feature#L125) @@ -356,7 +345,6 @@ - [apiShareOperations/getWebDAVSharePermissions.feature:134](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareOperations/getWebDAVSharePermissions.feature#L134) - [apiShareOperations/getWebDAVSharePermissions.feature:135](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareOperations/getWebDAVSharePermissions.feature#L135) -### [Split old public API webdav tests from new public webdav tests](https://github.com/owncloud/ocis-reva/issues/282) ### [Public link enforce permissions](https://github.com/owncloud/ocis/issues/1269) - [apiSharePublicLink1/accessToPublicLinkShare.feature:10](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/accessToPublicLinkShare.feature#L10) - [apiSharePublicLink1/accessToPublicLinkShare.feature:20](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/accessToPublicLinkShare.feature#L20) @@ -535,7 +523,6 @@ ### [Upload-only shares must not overwrite but create a separate file](https://github.com/owncloud/ocis/issues/1267) - [apiSharePublicLink2/uploadToPublicLinkShare.feature:262](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink2/uploadToPublicLinkShare.feature#L262) -### [Propfind to trashbin endpoint requires UUID](https://github.com/owncloud/product/issues/179) ### [File deletion using dav gives unique string in filename in the trashbin](https://github.com/owncloud/product/issues/178) - [apiTrashbin/trashbinDelete.feature:30](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinDelete.feature#L30) - [apiTrashbin/trashbinDelete.feature:31](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinDelete.feature#L31) @@ -603,7 +590,6 @@ - [apiTrashbin/trashbinRestore.feature:343](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinRestore.feature#L343) - [apiTrashbin/trashbinRestore.feature:344](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinRestore.feature#L344) -### [uploading with old-chunking does not work](https://github.com/owncloud/ocis/issues/1343) ### [remote.php/dav/uploads endpoint does not exist](https://github.com/owncloud/ocis/issues/1321) - [apiWebdavUpload2/uploadFileUsingNewChunking.feature:12](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload2/uploadFileUsingNewChunking.feature#L12) - [apiWebdavUpload2/uploadFileUsingNewChunking.feature:29](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload2/uploadFileUsingNewChunking.feature#L29) @@ -879,7 +865,6 @@ Not everything needs to be implemented for ocis. While the oc10 testsuite covers * _The `OC-LazyOps` header is [no longer supported by the client](https://github.com/owncloud/client/pull/8398), implmenting this is not necessary for a first production release. We plan to have an uploed state machine to visualize the state of a file, see https://github.com/owncloud/ocis/issues/214_ * _Blacklisted ignored files are no longer required because ocis can handle `.htaccess` files without security implications introduced by serving user provided files with apache._ -### [uploading with old-chunking does not work](https://github.com/owncloud/ocis/issues/1343) ### [remote.php/dav/uploads endpoint does not exist](https://github.com/owncloud/ocis/issues/1321) - [apiWebdavUpload1/uploadFileAsyncUsingNewChunking.feature:14](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload1/uploadFileAsyncUsingNewChunking.feature#L14) - [apiWebdavUpload1/uploadFileAsyncUsingNewChunking.feature:31](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload1/uploadFileAsyncUsingNewChunking.feature#L31) diff --git a/tests/acceptance/expected-failures-on-OCIS-storage.md b/tests/acceptance/expected-failures-on-OCIS-storage.md index d505e41054..51c17a9359 100644 --- a/tests/acceptance/expected-failures-on-OCIS-storage.md +++ b/tests/acceptance/expected-failures-on-OCIS-storage.md @@ -131,7 +131,7 @@ File and sync features in a shared scenario - [apiSharees/sharees.feature:430](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharees/sharees.feature#L430) - [apiSharees/sharees.feature:431](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharees/sharees.feature#L431) -#### User cannot create a folder named Share +#### [accepting matching name shared resources from different users/groups sets no serial identifiers on the resource name for the receiver](https://github.com/owncloud/ocis/issues/4289) - [apiShareManagementToShares/acceptShares.feature:366](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L366) - [apiShareManagementToShares/acceptShares.feature:402](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L402) @@ -279,7 +279,6 @@ _requires a [CS3 user provisioning api that can update the quota for a user](htt - [apiWebdavProperties2/getFileProperties.feature:238](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties2/getFileProperties.feature#L238) - [apiWebdavProperties2/getFileProperties.feature:239](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties2/getFileProperties.feature#L239) -#### [Scoped links](https://github.com/owncloud/ocis/issues/2809) #### [oc:privatelink property not returned in webdav responses](https://github.com/owncloud/product/issues/262) - [apiWebdavProperties2/getFileProperties.feature:306](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties2/getFileProperties.feature#L306) - [apiWebdavProperties2/getFileProperties.feature:307](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties2/getFileProperties.feature#L307) @@ -492,7 +491,6 @@ _requires a [CS3 user provisioning api that can update the quota for a user](htt - [apiShareUpdateToShares/updateShare.feature:159](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareUpdateToShares/updateShare.feature#L159) - [apiShareUpdateToShares/updateShare.feature:160](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareUpdateToShares/updateShare.feature#L160) -#### [Share additional info](https://github.com/owncloud/ocis/issues/1253) #### [Edit user share response has an "name" field](https://github.com/owncloud/ocis/issues/1225) - [apiShareUpdateToShares/updateShare.feature:288](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareUpdateToShares/updateShare.feature#L288) - [apiShareUpdateToShares/updateShare.feature:289](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareUpdateToShares/updateShare.feature#L289) @@ -518,46 +516,45 @@ User and group management features API, search, favorites, config, capabilities, not existing endpoints, CORS and others #### [no robots.txt available](https://github.com/owncloud/ocis/issues/1314) -- [apiMain/main.feature:5](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiMain/main.feature#L5) Scenario: robots.txt file should be accessible +- [apiMain/main.feature:5](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiMain/main.feature#L5) #### [Ability to return error messages in Webdav response bodies](https://github.com/owncloud/ocis/issues/1293) -- [apiAuthOcs/ocsDELETEAuth.feature:10](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthOcs/ocsDELETEAuth.feature#L10) Scenario: send DELETE requests to OCS endpoints as admin with wrong password -- [apiAuthOcs/ocsGETAuth.feature:10](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthOcs/ocsGETAuth.feature#L10) Scenario: using OCS anonymously -- [apiAuthOcs/ocsGETAuth.feature:31](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthOcs/ocsGETAuth.feature#L31) Scenario: ocs config end point accessible by unauthorized users -- [apiAuthOcs/ocsGETAuth.feature:51](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthOcs/ocsGETAuth.feature#L51) Scenario: using OCS with non-admin basic auth -- [apiAuthOcs/ocsGETAuth.feature:84](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthOcs/ocsGETAuth.feature#L84) Scenario: using OCS as normal user with wrong password -- [apiAuthOcs/ocsGETAuth.feature:115](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthOcs/ocsGETAuth.feature#L115) Scenario:using OCS with admin basic auth -- [apiAuthOcs/ocsGETAuth.feature:133](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthOcs/ocsGETAuth.feature#L133) Scenario: using OCS as admin user with wrong password -- [apiAuthOcs/ocsPOSTAuth.feature:10](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthOcs/ocsPOSTAuth.feature#L10) Scenario: send POST requests to OCS endpoints as normal user with wrong password -- [apiAuthOcs/ocsPUTAuth.feature:10](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthOcs/ocsPUTAuth.feature#L10) Scenario: send PUT request to OCS endpoints as admin with wrong password +- [apiAuthOcs/ocsDELETEAuth.feature:10](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthOcs/ocsDELETEAuth.feature#L10) +- [apiAuthOcs/ocsGETAuth.feature:10](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthOcs/ocsGETAuth.feature#L10) +- [apiAuthOcs/ocsGETAuth.feature:31](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthOcs/ocsGETAuth.feature#L31) +- [apiAuthOcs/ocsGETAuth.feature:51](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthOcs/ocsGETAuth.feature#L51) +- [apiAuthOcs/ocsGETAuth.feature:84](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthOcs/ocsGETAuth.feature#L84) +- [apiAuthOcs/ocsGETAuth.feature:115](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthOcs/ocsGETAuth.feature#L115) +- [apiAuthOcs/ocsGETAuth.feature:133](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthOcs/ocsGETAuth.feature#L133) +- [apiAuthOcs/ocsPOSTAuth.feature:10](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthOcs/ocsPOSTAuth.feature#L10) +- [apiAuthOcs/ocsPUTAuth.feature:10](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthOcs/ocsPUTAuth.feature#L10) #### [sending MKCOL requests to another user's webDav endpoints as normal user gives 404 instead of 403 ](https://github.com/owncloud/ocis/issues/3872) _ocdav: api compatibility, return correct status code_ -- [apiAuthWebDav/webDavDELETEAuth.feature:58](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavDELETEAuth.feature#L58) Scenario: send DELETE requests to another user's webDav endpoints as normal user -- [apiAuthWebDav/webDavPROPFINDAuth.feature:57](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavPROPFINDAuth.feature#L57) Scenario: send PROPFIND requests to another user's webDav endpoints as normal user -- [apiAuthWebDav/webDavPROPPATCHAuth.feature:58](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavPROPPATCHAuth.feature#L58) Scenario: send PROPPATCH requests to another user's webDav endpoints as normal user -- [apiAuthWebDav/webDavMKCOLAuth.feature:54](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavMKCOLAuth.feature#L54) Scenario: send MKCOL requests to another user's webDav endpoints as normal user +- [apiAuthWebDav/webDavDELETEAuth.feature:58](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavDELETEAuth.feature#L58) +- [apiAuthWebDav/webDavPROPFINDAuth.feature:57](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavPROPFINDAuth.feature#L57) +- [apiAuthWebDav/webDavPROPPATCHAuth.feature:58](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavPROPPATCHAuth.feature#L58) +- [apiAuthWebDav/webDavMKCOLAuth.feature:54](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavMKCOLAuth.feature#L54) #### [trying to lock file of another user gives http 200](https://github.com/owncloud/ocis/issues/2176) -- [apiAuthWebDav/webDavLOCKAuth.feature:58](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavLOCKAuth.feature#L58) Scenario: send LOCK requests to another user's webDav endpoints as normal user +- [apiAuthWebDav/webDavLOCKAuth.feature:58](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavLOCKAuth.feature#L58) #### [send (MOVE, COPY) requests to another user's webDav endpoints as normal user gives 400 instead of 403](https://github.com/owncloud/ocis/issues/3882) _ocdav: api compatibility, return correct status code_ -- [apiAuthWebDav/webDavMOVEAuth.feature:57](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavMOVEAuth.feature#L57) Scenario: send MOVE requests to another user's webDav endpoints as normal user +- [apiAuthWebDav/webDavMOVEAuth.feature:57](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavMOVEAuth.feature#L57) - [apiAuthWebDav/webDavCOPYAuth.feature:59](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavCOPYAuth.feature#L59) #### [send POST requests to another user's webDav endpoints as normal user](https://github.com/owncloud/ocis/issues/1287) _ocdav: api compatibility, return correct status code_ -- [apiAuthWebDav/webDavPOSTAuth.feature:58](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavPOSTAuth.feature#L58) Scenario: send POST requests to another user's webDav endpoints as normal user +- [apiAuthWebDav/webDavPOSTAuth.feature:58](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavPOSTAuth.feature#L58) #### [Using double slash in URL to access a folder gives 501 and other status codes](https://github.com/owncloud/ocis/issues/1667) - [apiAuthWebDav/webDavSpecialURLs.feature:34](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavSpecialURLs.feature#L34) - [apiAuthWebDav/webDavSpecialURLs.feature:121](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavSpecialURLs.feature#L121) - [apiAuthWebDav/webDavSpecialURLs.feature:163](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavSpecialURLs.feature#L163) -#### [Default capabilities for normal user not same as in oC-core](https://github.com/owncloud/ocis/issues/1285) #### [Difference in response content of status.php and default capabilities](https://github.com/owncloud/ocis/issues/1286) -- [apiCapabilities/capabilitiesWithNormalUser.feature:11](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiCapabilities/capabilitiesWithNormalUser.feature#L11) Scenario: getting default capabilities with normal user +- [apiCapabilities/capabilitiesWithNormalUser.feature:11](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiCapabilities/capabilitiesWithNormalUser.feature#L11) #### [spaces endpoint does not allow REPORT requests](https://github.com/owncloud/ocis/issues/4034) - [apiWebdavOperations/search.feature:42](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L42) @@ -581,7 +578,7 @@ _ocdav: api compatibility, return correct status code_ - [apiWebdavOperations/search.feature:264](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L264) - [apiWebdavOperations/search.feature:265](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L265) -And other missing implementation of favorites +#### [Support for favorites](https://github.com/owncloud/ocis/issues/1228) - [apiFavorites/favorites.feature:182](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiFavorites/favorites.feature#L182) - [apiFavorites/favorites.feature:183](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiFavorites/favorites.feature#L183) - [apiFavorites/favorites.feature:215](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiFavorites/favorites.feature#L215) @@ -690,7 +687,6 @@ Not everything needs to be implemented for ocis. While the oc10 testsuite covers * _The `OC-LazyOps` header is [no longer supported by the client](https://github.com/owncloud/client/pull/8398), implmenting this is not necessary for a first production release. We plan to have an uploed state machine to visualize the state of a file, see https://github.com/owncloud/ocis/issues/214_ * _Blacklisted ignored files are no longer required because ocis can handle `.htaccess` files without security implications introduced by serving user provided files with apache._ -#### [uploading with old-chunking does not work](https://github.com/owncloud/ocis/issues/1343) #### [remote.php/dav/uploads endpoint does not exist](https://github.com/owncloud/ocis/issues/1321) - [apiWebdavUpload1/uploadFileToExcludedDirectory.feature:20](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload1/uploadFileToExcludedDirectory.feature#L20) - [apiWebdavUpload1/uploadFileToExcludedDirectory.feature:21](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload1/uploadFileToExcludedDirectory.feature#L21) @@ -868,7 +864,7 @@ _ocs: api compatibility, return correct status code_ - [apiVersions/fileVersionAuthor.feature:180](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiVersions/fileVersionAuthor.feature#L180) - [apiVersions/fileVersionAuthor.feature:223](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiVersions/fileVersionAuthor.feature#L223) -### [Allow public link sharing only for certain groups feature not implemented] +#### [Allow public link sharing only for certain groups feature not implemented](https://github.com/owncloud/ocis/issues/4623) - [apiSharePublicLink3/allowGroupToCreatePublicLinks.feature:35](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink3/allowGroupToCreatePublicLinks.feature#L35) - [apiSharePublicLink3/allowGroupToCreatePublicLinks.feature:91](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink3/allowGroupToCreatePublicLinks.feature#L91) @@ -1056,7 +1052,7 @@ _ocs: api compatibility, return correct status code_ - [apiShareOperationsToShares1/gettingShares.feature:40](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareOperationsToShares1/gettingShares.feature#L40) - [apiShareOperationsToShares1/gettingShares.feature:39](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareOperationsToShares1/gettingShares.feature#L39) -#### [These tests pass in ocis and reva egde but fail in master with `file_target has unexpected value '/home'`]() +#### [These tests pass in ocis and reva egde but fail in master with `file_target has unexpected value '/home'`](https://github.com/owncloud/ocis/issues/2113) - [apiSharePublicLink1/createPublicLinkShare.feature:477](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L477) - [apiSharePublicLink1/createPublicLinkShare.feature:478](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L478) diff --git a/tests/acceptance/expected-failures-on-S3NG-storage.md b/tests/acceptance/expected-failures-on-S3NG-storage.md index e39243ba6d..9bf5f9aee5 100644 --- a/tests/acceptance/expected-failures-on-S3NG-storage.md +++ b/tests/acceptance/expected-failures-on-S3NG-storage.md @@ -145,7 +145,7 @@ File and sync features in a shared scenario - [apiSharees/sharees.feature:430](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharees/sharees.feature#L430) - [apiSharees/sharees.feature:431](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharees/sharees.feature#L431) -#### User cannot create a folder named Share +#### [accepting matching name shared resources from different users/groups sets no serial identifiers on the resource name for the receiver](https://github.com/owncloud/ocis/issues/4289) - [apiShareManagementToShares/acceptShares.feature:366](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L366) - [apiShareManagementToShares/acceptShares.feature:402](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L402) @@ -168,9 +168,6 @@ File and sync features in a shared scenario - [apiShareManagementBasicToShares/createShareToSharesFolder.feature:288](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementBasicToShares/createShareToSharesFolder.feature#L288) - [apiShareManagementBasicToShares/deleteShareFromShares.feature:59](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementBasicToShares/deleteShareFromShares.feature#L59) -#### moving a share from the /Shares jail to a user home is no longer supported. -- [apiShareManagementToShares/mergeShare.feature:105](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/mergeShare.feature#L105) - #### [file_target of a auto-renamed file is not correct directly after sharing](https://github.com/owncloud/core/issues/32322) - [apiShareManagementToShares/mergeShare.feature:105](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/mergeShare.feature#L105) @@ -510,7 +507,6 @@ _requires a [CS3 user provisioning api that can update the quota for a user](htt - [apiShareUpdateToShares/updateShare.feature:159](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareUpdateToShares/updateShare.feature#L159) - [apiShareUpdateToShares/updateShare.feature:160](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareUpdateToShares/updateShare.feature#L160) -#### [Share additional info](https://github.com/owncloud/ocis/issues/1253) #### [Edit user share response has an "name" field](https://github.com/owncloud/ocis/issues/1225) - [apiShareUpdateToShares/updateShare.feature:288](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareUpdateToShares/updateShare.feature#L288) - [apiShareUpdateToShares/updateShare.feature:289](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareUpdateToShares/updateShare.feature#L289) @@ -573,7 +569,6 @@ _ocdav: api compatibility, return correct status code_ - [apiAuthWebDav/webDavSpecialURLs.feature:121](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavSpecialURLs.feature#L121) - [apiAuthWebDav/webDavSpecialURLs.feature:163](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiAuthWebDav/webDavSpecialURLs.feature#L163) -#### [Default capabilities for normal user not same as in oC-core](https://github.com/owncloud/ocis/issues/1285) #### [Difference in response content of status.php and default capabilities](https://github.com/owncloud/ocis/issues/1286) - [apiCapabilities/capabilitiesWithNormalUser.feature:11](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiCapabilities/capabilitiesWithNormalUser.feature#L11) Scenario: getting default capabilities with normal user @@ -599,7 +594,7 @@ _ocdav: api compatibility, return correct status code_ - [apiWebdavOperations/search.feature:264](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L264) - [apiWebdavOperations/search.feature:265](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L265) -And other missing implementation of favorites +#### [Support for favorites](https://github.com/owncloud/ocis/issues/1228) - [apiFavorites/favorites.feature:182](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiFavorites/favorites.feature#L182) - [apiFavorites/favorites.feature:183](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiFavorites/favorites.feature#L183) - [apiFavorites/favorites.feature:215](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiFavorites/favorites.feature#L215) @@ -871,7 +866,7 @@ _ocs: api compatibility, return correct status code_ - [apiWebdavProperties1/copyFile.feature:498](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/copyFile.feature#L498) - [apiWebdavProperties1/copyFile.feature:525](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/copyFile.feature#L525) -### [Allow public link sharing only for certain groups feature not implemented] +### [Allow public link sharing only for certain groups feature not implemented](https://github.com/owncloud/ocis/issues/4623) - [apiSharePublicLink3/allowGroupToCreatePublicLinks.feature:35](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink3/allowGroupToCreatePublicLinks.feature#L35) - [apiSharePublicLink3/allowGroupToCreatePublicLinks.feature:91](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink3/allowGroupToCreatePublicLinks.feature#L91) @@ -1058,7 +1053,7 @@ _ocs: api compatibility, return correct status code_ - [apiShareOperationsToShares1/gettingShares.feature:40](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareOperationsToShares1/gettingShares.feature#L40) - [apiShareOperationsToShares1/gettingShares.feature:39](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareOperationsToShares1/gettingShares.feature#L39) -#### [These tests pass in ocis and reva egde but fail in master with `file_target has unexpected value '/home'`]() +#### [These tests pass in ocis and reva egde but fail in master with `file_target has unexpected value '/home'`](https://github.com/owncloud/ocis/issues/2113) - [apiSharePublicLink1/createPublicLinkShare.feature:477](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L477) - [apiSharePublicLink1/createPublicLinkShare.feature:478](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L478) From aecfba46f2b262f00e1be508b384906e64833f1c Mon Sep 17 00:00:00 2001 From: Phil Davis Date: Fri, 23 Sep 2022 17:26:39 +0545 Subject: [PATCH 09/83] [tests-only] Remove duplicated lines in expected-failures files --- .../expected-failures-on-EOS-storage.md | 34 ------------------- .../expected-failures-on-OCIS-storage.md | 6 ---- .../expected-failures-on-S3NG-storage.md | 6 ---- 3 files changed, 46 deletions(-) diff --git a/tests/acceptance/expected-failures-on-EOS-storage.md b/tests/acceptance/expected-failures-on-EOS-storage.md index be6148bd12..44a43ed8f4 100644 --- a/tests/acceptance/expected-failures-on-EOS-storage.md +++ b/tests/acceptance/expected-failures-on-EOS-storage.md @@ -122,22 +122,13 @@ - [apiWebdavOperations/search.feature:42](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L42) - [apiWebdavOperations/search.feature:43](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L43) - [apiWebdavOperations/search.feature:59](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L59) -- [apiWebdavOperations/search.feature:59](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L59) -- [apiWebdavOperations/search.feature:76](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L76) - [apiWebdavOperations/search.feature:76](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L76) - [apiWebdavOperations/search.feature:85](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L85) -- [apiWebdavOperations/search.feature:85](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L85) - [apiWebdavOperations/search.feature:103](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L103) -- [apiWebdavOperations/search.feature:103](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L103) -- [apiWebdavOperations/search.feature:121](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L121) - [apiWebdavOperations/search.feature:121](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L121) - [apiWebdavOperations/search.feature:140](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L140) -- [apiWebdavOperations/search.feature:140](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L140) -- [apiWebdavOperations/search.feature:167](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L167) - [apiWebdavOperations/search.feature:167](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L167) - [apiWebdavOperations/search.feature:193](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L193) -- [apiWebdavOperations/search.feature:193](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L193) -- [apiWebdavOperations/search.feature:212](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L212) - [apiWebdavOperations/search.feature:212](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L212) - [apiWebdavOperations/search.feature:214](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L214) - [apiWebdavOperations/search.feature:230](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/search.feature#L230) @@ -224,10 +215,7 @@ - [apiShareManagement/acceptShares.feature:696](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagement/acceptShares.feature#L696) ### Accepting a share returns empty response -- [apiShareManagement/acceptSharesToSharesFolder.feature:15](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagement/acceptSharesToSharesFolder.feature#L15) - [apiShareManagement/acceptSharesToSharesFolder.feature:22](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagement/acceptSharesToSharesFolder.feature#L22) -- [apiShareManagement/acceptSharesToSharesFolder.feature:30](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagement/acceptSharesToSharesFolder.feature#L30) -- [apiShareManagement/acceptSharesToSharesFolder.feature:52](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagement/acceptSharesToSharesFolder.feature#L52) ### [After accepting a share data in the received file cannot be downloaded](https://github.com/owncloud/product/issues/208) - [apiShareManagement/acceptSharesToSharesFolder.feature:15](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagement/acceptSharesToSharesFolder.feature#L15) @@ -351,7 +339,6 @@ - [apiSharePublicLink1/accessToPublicLinkShare.feature:30](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/accessToPublicLinkShare.feature#L30) - [apiSharePublicLink1/accessToPublicLinkShare.feature:44](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/accessToPublicLinkShare.feature#L44) - [apiSharePublicLink1/changingPublicLinkShare.feature:23](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/changingPublicLinkShare.feature#L23) -- [apiSharePublicLink1/changingPublicLinkShare.feature:23](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/changingPublicLinkShare.feature#L23) - [apiSharePublicLink1/changingPublicLinkShare.feature:35](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/changingPublicLinkShare.feature#L35) - [apiSharePublicLink1/changingPublicLinkShare.feature:39](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/changingPublicLinkShare.feature#L39) - [apiSharePublicLink1/changingPublicLinkShare.feature:49](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/changingPublicLinkShare.feature#L49) @@ -374,7 +361,6 @@ - [apiSharePublicLink1/createPublicLinkShare.feature:181](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L181) - [apiSharePublicLink1/createPublicLinkShare.feature:182](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L182) - [apiSharePublicLink1/createPublicLinkShare.feature:213](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L213) -- [apiSharePublicLink1/createPublicLinkShare.feature:213](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L213) - [apiSharePublicLink1/createPublicLinkShare.feature:307](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L307) - [apiSharePublicLink1/createPublicLinkShare.feature:308](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L308) - [apiSharePublicLink1/createPublicLinkShare.feature:372](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L372) @@ -538,7 +524,6 @@ - [apiTrashbin/trashbinFilesFolders.feature:89](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L89) - [apiTrashbin/trashbinFilesFolders.feature:90](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L90) - [apiTrashbin/trashbinFilesFolders.feature:104](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L104) -- [apiTrashbin/trashbinFilesFolders.feature:104](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L104) - [apiTrashbin/trashbinFilesFolders.feature:216](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L216) - [apiTrashbin/trashbinFilesFolders.feature:218](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L218) - [apiTrashbin/trashbinFilesFolders.feature:235](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L235) @@ -568,7 +553,6 @@ - [apiTrashbin/trashbinRestore.feature:114](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinRestore.feature#L114) - [apiTrashbin/trashbinRestore.feature:115](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinRestore.feature#L115) - [apiTrashbin/trashbinRestore.feature:116](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinRestore.feature#L116) -- [apiTrashbin/trashbinRestore.feature:116](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinRestore.feature#L116) - [apiTrashbin/trashbinRestore.feature:141](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinRestore.feature#L141) - [apiTrashbin/trashbinRestore.feature:142](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinRestore.feature#L142) - [apiTrashbin/trashbinRestore.feature:143](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinRestore.feature#L143) @@ -580,7 +564,6 @@ - [apiTrashbin/trashbinRestore.feature:206](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinRestore.feature#L206) - [apiTrashbin/trashbinRestore.feature:207](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinRestore.feature#L207) - [apiTrashbin/trashbinRestore.feature:279](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinRestore.feature#L279) -- [apiTrashbin/trashbinRestore.feature:279](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinRestore.feature#L279) - [apiTrashbin/trashbinRestore.feature:323](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinRestore.feature#L323) - [apiTrashbin/trashbinRestore.feature:324](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinRestore.feature#L324) - [apiTrashbin/trashbinRestore.feature:325](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinRestore.feature#L325) @@ -652,8 +635,6 @@ - [apiWebdavMove2/moveFile.feature:235](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFile.feature#L235) - [apiWebdavMove2/moveFile.feature:290](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFile.feature#L290) - [apiWebdavMove2/moveFile.feature:291](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFile.feature#L291) -- [apiWebdavMove2/moveFile.feature:290](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFile.feature#L290) -- [apiWebdavMove2/moveFile.feature:291](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFile.feature#L291) ### [file cannot contain ? character](https://github.com/owncloud/ocis/issues/1259) - [apiWebdavMove2/moveFile.feature:292](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFile.feature#L292) @@ -679,7 +660,6 @@ - [apiWebdavOperations/refuseAccess.feature:21](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/refuseAccess.feature#L21) - [apiWebdavOperations/refuseAccess.feature:22](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/refuseAccess.feature#L22) -- [apiWebdavOperations/refuseAccess.feature:35](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/refuseAccess.feature#L35) - [apiWebdavOperations/refuseAccess.feature:35](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/refuseAccess.feature#L35) ### [listing received shares does not work](https://github.com/owncloud/ocis-reva/issues/11) @@ -802,12 +782,10 @@ - [apiWebdavUpload2/uploadFileUsingOldChunking.feature:35](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload2/uploadFileUsingOldChunking.feature#L35) - [apiWebdavUpload2/uploadFileUsingOldChunking.feature:44](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload2/uploadFileUsingOldChunking.feature#L44) - [apiWebdavUpload2/uploadFileUsingOldChunking.feature:77](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload2/uploadFileUsingOldChunking.feature#L77) -- [apiWebdavUpload2/uploadFileUsingOldChunking.feature:77](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload2/uploadFileUsingOldChunking.feature#L77) - [apiWebdavUpload2/uploadFileUsingOldChunking.feature:98](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload2/uploadFileUsingOldChunking.feature#L98) - [apiWebdavUpload2/uploadFileUsingOldChunking.feature:99](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload2/uploadFileUsingOldChunking.feature#L99) - [apiWebdavUpload2/uploadFileUsingOldChunking.feature:100](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload2/uploadFileUsingOldChunking.feature#L100) - [apiWebdavUpload2/uploadFileUsingOldChunking.feature:101](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload2/uploadFileUsingOldChunking.feature#L101) -- [apiWebdavUpload2/uploadFileUsingOldChunking.feature:101](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload2/uploadFileUsingOldChunking.feature#L101) ### [Previews via webDAV API tests fail on OCIS](https://github.com/owncloud/ocis/issues/187) - [apiWebdavPreviews/previews.feature:15](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavPreviews/previews.feature#L15) @@ -911,10 +889,6 @@ Not everything needs to be implemented for ocis. While the oc10 testsuite covers ### [renaming a resource does not work](https://github.com/owncloud/ocis-reva/issues/14) - [apiWebdavMove1/moveFileAsync.feature:32](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFileAsync.feature#L32) - [apiWebdavMove1/moveFileAsync.feature:33](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFileAsync.feature#L33) -- [apiWebdavMove1/moveFileAsync.feature:32](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFileAsync.feature#L32) -- [apiWebdavMove1/moveFileAsync.feature:35](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFileAsync.feature#L35) -- [apiWebdavMove1/moveFileAsync.feature:32](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFileAsync.feature#L32) -- [apiWebdavMove1/moveFileAsync.feature:35](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFileAsync.feature#L35) - [apiWebdavMove1/moveFileAsync.feature:35](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFileAsync.feature#L35) - [apiWebdavMove1/moveFileAsync.feature:49](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFileAsync.feature#L49) - [apiWebdavMove1/moveFileAsync.feature:62](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFileAsync.feature#L62) @@ -927,11 +901,9 @@ Not everything needs to be implemented for ocis. While the oc10 testsuite covers - [apiWebdavMove1/moveFileAsync.feature:164](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFileAsync.feature#L164) - [apiWebdavMove1/moveFileAsync.feature:183](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFileAsync.feature#L183) - [apiWebdavMove1/moveFileAsync.feature:195](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFileAsync.feature#L195) -- [apiWebdavMove1/moveFileAsync.feature:195](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFileAsync.feature#L195) - [apiWebdavMove1/moveFileAsync.feature:196](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFileAsync.feature#L196) - [apiWebdavMove1/moveFileAsync.feature:226](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFileAsync.feature#L226) - [apiWebdavMove1/moveFileAsync.feature:216](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFileAsync.feature#L216) -- [apiWebdavMove1/moveFileAsync.feature:246](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFileAsync.feature#L246) - [apiWebdavMove1/moveFileAsync.feature:236](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFileAsync.feature#L236) - [apiWebdavMove1/moveFileAsync.feature:245](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFileAsync.feature#L245) - [apiWebdavMove1/moveFileAsync.feature:246](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFileAsync.feature#L246) @@ -947,21 +919,16 @@ Not everything needs to be implemented for ocis. While the oc10 testsuite covers - [apiWebdavMove1/moveFolderToBlacklistedName.feature:35](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFolderToBlacklistedName.feature#L35) - [apiWebdavMove1/moveFolderToBlacklistedName.feature:36](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFolderToBlacklistedName.feature#L36) - [apiWebdavMove1/moveFolderToBlacklistedName.feature:72](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFolderToBlacklistedName.feature#L72) -- [apiWebdavMove1/moveFolderToBlacklistedName.feature:72](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFolderToBlacklistedName.feature#L72) - [apiWebdavMove1/moveFolderToExcludedDirectory.feature:21](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFolderToExcludedDirectory.feature#L21) - [apiWebdavMove1/moveFolderToExcludedDirectory.feature:22](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFolderToExcludedDirectory.feature#L22) - [apiWebdavMove1/moveFolderToExcludedDirectory.feature:36](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFolderToExcludedDirectory.feature#L36) -- [apiWebdavMove1/moveFolderToExcludedDirectory.feature:36](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFolderToExcludedDirectory.feature#L36) - [apiWebdavMove1/moveFolderToExcludedDirectory.feature:72](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFolderToExcludedDirectory.feature#L72) - [apiWebdavMove1/moveFolderToExcludedDirectory.feature:73](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove1/moveFolderToExcludedDirectory.feature#L73) - [apiWebdavMove2/moveFileToBlacklistedName.feature:20](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToBlacklistedName.feature#L20) -- [apiWebdavMove2/moveFileToBlacklistedName.feature:20](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToBlacklistedName.feature#L20) -- [apiWebdavMove2/moveFileToBlacklistedName.feature:31](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToBlacklistedName.feature#L31) - [apiWebdavMove2/moveFileToBlacklistedName.feature:31](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToBlacklistedName.feature#L31) - [apiWebdavMove2/moveFileToBlacklistedName.feature:64](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToBlacklistedName.feature#L64) - [apiWebdavMove2/moveFileToBlacklistedName.feature:65](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToBlacklistedName.feature#L65) - [apiWebdavMove2/moveFileToExcludedDirectory.feature:20](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToExcludedDirectory.feature#L20) -- [apiWebdavMove2/moveFileToExcludedDirectory.feature:20](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToExcludedDirectory.feature#L20) - [apiWebdavMove2/moveFileToExcludedDirectory.feature:30](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToExcludedDirectory.feature#L30) - [apiWebdavMove2/moveFileToExcludedDirectory.feature:31](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToExcludedDirectory.feature#L31) - [apiWebdavMove2/moveFileToExcludedDirectory.feature:66](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToExcludedDirectory.feature#L66) @@ -999,6 +966,5 @@ Not everything needs to be implemented for ocis. While the oc10 testsuite covers - [apiWebdavUpload2/uploadFileToExcludedDirectoryUsingOldChunking.feature:13](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload2/uploadFileToExcludedDirectoryUsingOldChunking.feature#L13) - [apiWebdavUpload2/uploadFileToExcludedDirectoryUsingOldChunking.feature:21](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload2/uploadFileToExcludedDirectoryUsingOldChunking.feature#L21) - [apiWebdavUpload2/uploadFileToExcludedDirectoryUsingOldChunking.feature:40](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload2/uploadFileToExcludedDirectoryUsingOldChunking.feature#L40) -- [apiWebdavUpload2/uploadFileToExcludedDirectoryUsingOldChunking.feature:40](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload2/uploadFileToExcludedDirectoryUsingOldChunking.feature#L40) - [apiWebdavUpload2/uploadFileToExcludedDirectoryUsingOldChunking.feature:41](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload2/uploadFileToExcludedDirectoryUsingOldChunking.feature#L41) - [apiWebdavUpload2/uploadFileToExcludedDirectoryUsingOldChunking.feature:44](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload2/uploadFileToExcludedDirectoryUsingOldChunking.feature#L44) diff --git a/tests/acceptance/expected-failures-on-OCIS-storage.md b/tests/acceptance/expected-failures-on-OCIS-storage.md index 51c17a9359..a5f55abf07 100644 --- a/tests/acceptance/expected-failures-on-OCIS-storage.md +++ b/tests/acceptance/expected-failures-on-OCIS-storage.md @@ -739,10 +739,6 @@ Not everything needs to be implemented for ocis. While the oc10 testsuite covers - [apiWebdavMove2/moveFileToExcludedDirectory.feature:38](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToExcludedDirectory.feature#L38) - [apiWebdavMove2/moveFileToExcludedDirectory.feature:78](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToExcludedDirectory.feature#L78) - [apiWebdavMove2/moveFileToExcludedDirectory.feature:79](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToExcludedDirectory.feature#L79) -- [apiWebdavMove2/moveFileToBlacklistedName.feature:35](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToBlacklistedName.feature#L35) -- [apiWebdavMove2/moveFileToBlacklistedName.feature:36](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToBlacklistedName.feature#L36) -- [apiWebdavMove2/moveFileToBlacklistedName.feature:74](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToBlacklistedName.feature#L74) -- [apiWebdavMove2/moveFileToBlacklistedName.feature:75](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToBlacklistedName.feature#L75) #### [system configuration options missing](https://github.com/owncloud/ocis/issues/1323) - [apiWebdavUpload1/uploadFileToBlacklistedName.feature:31](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload1/uploadFileToBlacklistedName.feature#L31) @@ -845,8 +841,6 @@ _ocs: api compatibility, return correct status code_ - [apiWebdavProperties1/copyFile.feature:413](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/copyFile.feature#L413) - [apiWebdavProperties1/copyFile.feature:438](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/copyFile.feature#L438) - [apiWebdavProperties1/copyFile.feature:439](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/copyFile.feature#L439) -- [apiWebdavProperties1/copyFile.feature:498](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/copyFile.feature#L498) -- [apiWebdavProperties1/copyFile.feature:525](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/copyFile.feature#L525) #### [Downloading the older version of shared file gives 404](https://github.com/owncloud/ocis/issues/3868) - [apiVersions/fileVersions.feature:444](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiVersions/fileVersions.feature#L444) diff --git a/tests/acceptance/expected-failures-on-S3NG-storage.md b/tests/acceptance/expected-failures-on-S3NG-storage.md index 9bf5f9aee5..b4360f3ed2 100644 --- a/tests/acceptance/expected-failures-on-S3NG-storage.md +++ b/tests/acceptance/expected-failures-on-S3NG-storage.md @@ -757,10 +757,6 @@ Not everything needs to be implemented for ocis. While the oc10 testsuite covers - [apiWebdavMove2/moveFileToExcludedDirectory.feature:38](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToExcludedDirectory.feature#L38) - [apiWebdavMove2/moveFileToExcludedDirectory.feature:78](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToExcludedDirectory.feature#L78) - [apiWebdavMove2/moveFileToExcludedDirectory.feature:79](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToExcludedDirectory.feature#L79) -- [apiWebdavMove2/moveFileToBlacklistedName.feature:35](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToBlacklistedName.feature#L35) -- [apiWebdavMove2/moveFileToBlacklistedName.feature:36](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToBlacklistedName.feature#L36) -- [apiWebdavMove2/moveFileToBlacklistedName.feature:74](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToBlacklistedName.feature#L74) -- [apiWebdavMove2/moveFileToBlacklistedName.feature:75](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavMove2/moveFileToBlacklistedName.feature#L75) #### [system configuration options missing](https://github.com/owncloud/ocis/issues/1323) - [apiWebdavUpload1/uploadFileToBlacklistedName.feature:31](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavUpload1/uploadFileToBlacklistedName.feature#L31) @@ -863,8 +859,6 @@ _ocs: api compatibility, return correct status code_ - [apiWebdavProperties1/copyFile.feature:413](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/copyFile.feature#L413) - [apiWebdavProperties1/copyFile.feature:438](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/copyFile.feature#L438) - [apiWebdavProperties1/copyFile.feature:439](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/copyFile.feature#L439) -- [apiWebdavProperties1/copyFile.feature:498](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/copyFile.feature#L498) -- [apiWebdavProperties1/copyFile.feature:525](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavProperties1/copyFile.feature#L525) ### [Allow public link sharing only for certain groups feature not implemented](https://github.com/owncloud/ocis/issues/4623) - [apiSharePublicLink3/allowGroupToCreatePublicLinks.feature:35](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink3/allowGroupToCreatePublicLinks.feature#L35) From 614bc7e6ac952f216289aa5483a6cdab96f55cd3 Mon Sep 17 00:00:00 2001 From: Antoon P Date: Mon, 26 Sep 2022 12:02:23 +0200 Subject: [PATCH 10/83] Remove create OCM reference code for a data transfer type share. (#2979) Co-authored-by: Antoon P --- .../unreleased/fix-redundant-datatx-code.md | 5 +++ .../grpc/services/gateway/ocmshareprovider.go | 32 ++++--------------- 2 files changed, 12 insertions(+), 25 deletions(-) create mode 100644 changelog/unreleased/fix-redundant-datatx-code.md diff --git a/changelog/unreleased/fix-redundant-datatx-code.md b/changelog/unreleased/fix-redundant-datatx-code.md new file mode 100644 index 0000000000..ebad752c19 --- /dev/null +++ b/changelog/unreleased/fix-redundant-datatx-code.md @@ -0,0 +1,5 @@ +Bugfix: removed unused datatx code + +An OCM reference is not created for a data transfer type share. + +https://github.com/cs3org/reva/pull/2979 \ No newline at end of file diff --git a/internal/grpc/services/gateway/ocmshareprovider.go b/internal/grpc/services/gateway/ocmshareprovider.go index afdb56c459..f15bd2eb1f 100644 --- a/internal/grpc/services/gateway/ocmshareprovider.go +++ b/internal/grpc/services/gateway/ocmshareprovider.go @@ -474,31 +474,13 @@ func (s *svc) createOCMReference(ctx context.Context, share *ocm.Share) (*rpc.St } var refPath, targetURI string - if share.ShareType == ocm.Share_SHARE_TYPE_TRANSFER { - createTransferDir, err := s.CreateContainer(ctx, &provider.CreateContainerRequest{ - Ref: &provider.Reference{ - Path: path.Join(homeRes.Path, s.c.DataTransfersFolder), - }, - }) - if err != nil { - return status.NewInternal(ctx, err, "error creating transfers directory"), nil - } - if createTransferDir.Status.Code != rpc.Code_CODE_OK && createTransferDir.Status.Code != rpc.Code_CODE_ALREADY_EXISTS { - err := status.NewErrorFromCode(createTransferDir.Status.GetCode(), "gateway") - return status.NewInternal(ctx, err, "error creating transfers directory"), nil - } - - refPath = path.Join(homeRes.Path, s.c.DataTransfersFolder, path.Base(share.Name)) - targetURI = fmt.Sprintf("datatx://%s@%s?name=%s", token, share.Creator.Idp, share.Name) - } else { - // reference path is the home path + some name on the corresponding - // mesh provider (/home/MyShares/x) - // It is the responsibility of the gateway to resolve these references and merge the response back - // from the main request. - refPath = path.Join(homeRes.Path, s.c.ShareFolder, path.Base(share.Name)) - // webdav is the scheme, token@host the opaque part and the share name the query of the URL. - targetURI = fmt.Sprintf("webdav://%s@%s?name=%s", token, share.Creator.Idp, share.Name) - } + // reference path is the home path + some name on the corresponding + // mesh provider (/home/MyShares/x) + // It is the responsibility of the gateway to resolve these references and merge the response back + // from the main request. + refPath = path.Join(homeRes.Path, s.c.ShareFolder, path.Base(share.Name)) + // webdav is the scheme, token@host the opaque part and the share name the query of the URL. + targetURI = fmt.Sprintf("webdav://%s@%s?name=%s", token, share.Creator.Idp, share.Name) log.Info().Msg("mount path will be:" + refPath) createRefReq := &provider.CreateReferenceRequest{ From bf52cbe4e40487012f4e545609f9e683c0da859d Mon Sep 17 00:00:00 2001 From: Michael Barz Date: Thu, 29 Sep 2022 17:29:49 +0200 Subject: [PATCH 11/83] Refresh lock improvements - master edition (#3289) * update cs3apis * port changes to refresh lock from edge branch --- changelog/unreleased/refresh-lock-improvements.md | 6 ++++++ go.mod | 2 +- go.sum | 2 ++ internal/grpc/services/storageprovider/storageprovider.go | 2 +- pkg/storage/fs/cback/cback.go | 2 +- pkg/storage/fs/nextcloud/nextcloud.go | 2 +- pkg/storage/fs/owncloud/owncloud.go | 2 +- pkg/storage/fs/owncloudsql/owncloudsql.go | 2 +- pkg/storage/fs/s3/s3.go | 2 +- pkg/storage/storage.go | 2 +- pkg/storage/utils/decomposedfs/decomposedfs.go | 2 +- pkg/storage/utils/eosfs/eosfs.go | 8 +++++--- pkg/storage/utils/localfs/localfs.go | 2 +- 13 files changed, 23 insertions(+), 13 deletions(-) create mode 100644 changelog/unreleased/refresh-lock-improvements.md diff --git a/changelog/unreleased/refresh-lock-improvements.md b/changelog/unreleased/refresh-lock-improvements.md new file mode 100644 index 0000000000..afea87ada0 --- /dev/null +++ b/changelog/unreleased/refresh-lock-improvements.md @@ -0,0 +1,6 @@ +Enhancement: Make Refresh Lock operation WOPI compliant + +We now support the WOPI compliant `UnlockAndRelock` operation. This has been implemented in the Eos FS. To make use of it, we need a compatible WOPI server. + +https://github.com/cs3org/reva/pull/3289 +https://learn.microsoft.com/en-us/microsoft-365/cloud-storage-partner-program/rest/files/unlockandrelock diff --git a/go.mod b/go.mod index d923b65329..7c898be745 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ require ( github.com/cheggaaa/pb v1.0.29 github.com/coreos/go-oidc v2.2.1+incompatible github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e - github.com/cs3org/go-cs3apis v0.0.0-20220719130120-361e9f987d64 + github.com/cs3org/go-cs3apis v0.0.0-20220929083235-bb0b1a236d6c github.com/cubewise-code/go-mime v0.0.0-20200519001935-8c5762b177d8 github.com/dgraph-io/ristretto v0.1.0 github.com/eventials/go-tus v0.0.0-20200718001131-45c7ec8f5d59 diff --git a/go.sum b/go.sum index 5174067ba4..0f75960c3a 100644 --- a/go.sum +++ b/go.sum @@ -228,6 +228,8 @@ github.com/cs3org/go-cs3apis v0.0.0-20220330081745-2ad58f5932b9 h1:SuPu5Mc2mpz+J github.com/cs3org/go-cs3apis v0.0.0-20220330081745-2ad58f5932b9/go.mod h1:UXha4TguuB52H14EMoSsCqDj7k8a/t7g4gVP+bgY5LY= github.com/cs3org/go-cs3apis v0.0.0-20220719130120-361e9f987d64 h1:cFnankJOCWndnOns4sKRG7yzH61ammK2Am6rEGWCK40= github.com/cs3org/go-cs3apis v0.0.0-20220719130120-361e9f987d64/go.mod h1:UXha4TguuB52H14EMoSsCqDj7k8a/t7g4gVP+bgY5LY= +github.com/cs3org/go-cs3apis v0.0.0-20220929083235-bb0b1a236d6c h1:b+YTmOGlf43mnF8MzO0fsy8/Ho8JLu44Iq5Y0fKLJMM= +github.com/cs3org/go-cs3apis v0.0.0-20220929083235-bb0b1a236d6c/go.mod h1:UXha4TguuB52H14EMoSsCqDj7k8a/t7g4gVP+bgY5LY= 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/internal/grpc/services/storageprovider/storageprovider.go b/internal/grpc/services/storageprovider/storageprovider.go index bba333ad7a..2129e930f0 100644 --- a/internal/grpc/services/storageprovider/storageprovider.go +++ b/internal/grpc/services/storageprovider/storageprovider.go @@ -354,7 +354,7 @@ func (s *service) RefreshLock(ctx context.Context, req *provider.RefreshLockRequ }, nil } - if err = s.storage.RefreshLock(ctx, newRef, req.Lock); err != nil { + if err = s.storage.RefreshLock(ctx, newRef, req.Lock, req.ExistingLockId); err != nil { var st *rpc.Status switch err.(type) { case errtypes.IsNotFound: diff --git a/pkg/storage/fs/cback/cback.go b/pkg/storage/fs/cback/cback.go index 22a60e106f..63d2c162bb 100644 --- a/pkg/storage/fs/cback/cback.go +++ b/pkg/storage/fs/cback/cback.go @@ -478,7 +478,7 @@ func (fs *cback) GetLock(ctx context.Context, ref *provider.Reference) (*provide return nil, errtypes.NotSupported("Operation Not Permitted") } -func (fs *cback) RefreshLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error { +func (fs *cback) RefreshLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock, existingLockID string) error { return errtypes.NotSupported("Operation Not Permitted") } diff --git a/pkg/storage/fs/nextcloud/nextcloud.go b/pkg/storage/fs/nextcloud/nextcloud.go index bb8f7ff555..71c3617373 100644 --- a/pkg/storage/fs/nextcloud/nextcloud.go +++ b/pkg/storage/fs/nextcloud/nextcloud.go @@ -781,7 +781,7 @@ func (nc *StorageDriver) SetLock(ctx context.Context, ref *provider.Reference, l } // RefreshLock refreshes an existing lock on the given reference -func (nc *StorageDriver) RefreshLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error { +func (nc *StorageDriver) RefreshLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock, existingLockID string) error { return errtypes.NotSupported("unimplemented") } diff --git a/pkg/storage/fs/owncloud/owncloud.go b/pkg/storage/fs/owncloud/owncloud.go index 862ce823bb..1b74b7ab43 100644 --- a/pkg/storage/fs/owncloud/owncloud.go +++ b/pkg/storage/fs/owncloud/owncloud.go @@ -1484,7 +1484,7 @@ func (fs *ocfs) SetLock(ctx context.Context, ref *provider.Reference, lock *prov } // RefreshLock refreshes an existing lock on the given reference -func (fs *ocfs) RefreshLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error { +func (fs *ocfs) RefreshLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock, existingLockID string) error { return errtypes.NotSupported("unimplemented") } diff --git a/pkg/storage/fs/owncloudsql/owncloudsql.go b/pkg/storage/fs/owncloudsql/owncloudsql.go index b64d688a30..ebf2796c49 100644 --- a/pkg/storage/fs/owncloudsql/owncloudsql.go +++ b/pkg/storage/fs/owncloudsql/owncloudsql.go @@ -1035,7 +1035,7 @@ func (fs *owncloudsqlfs) SetLock(ctx context.Context, ref *provider.Reference, l } // RefreshLock refreshes an existing lock on the given reference -func (fs *owncloudsqlfs) RefreshLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error { +func (fs *owncloudsqlfs) RefreshLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock, existingLockID string) error { return errtypes.NotSupported("unimplemented") } diff --git a/pkg/storage/fs/s3/s3.go b/pkg/storage/fs/s3/s3.go index b777697e64..32a90fe428 100644 --- a/pkg/storage/fs/s3/s3.go +++ b/pkg/storage/fs/s3/s3.go @@ -291,7 +291,7 @@ func (fs *s3FS) SetLock(ctx context.Context, ref *provider.Reference, lock *prov } // RefreshLock refreshes an existing lock on the given reference -func (fs *s3FS) RefreshLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error { +func (fs *s3FS) RefreshLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock, existingLockID string) error { return errtypes.NotSupported("unimplemented") } diff --git a/pkg/storage/storage.go b/pkg/storage/storage.go index b8af0eeb1a..ebec63a004 100644 --- a/pkg/storage/storage.go +++ b/pkg/storage/storage.go @@ -60,7 +60,7 @@ type FS interface { UnsetArbitraryMetadata(ctx context.Context, ref *provider.Reference, keys []string) error SetLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error GetLock(ctx context.Context, ref *provider.Reference) (*provider.Lock, error) - RefreshLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error + RefreshLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock, existingLockID string) error Unlock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error ListStorageSpaces(ctx context.Context, filter []*provider.ListStorageSpacesRequest_Filter) ([]*provider.StorageSpace, error) CreateStorageSpace(ctx context.Context, req *provider.CreateStorageSpaceRequest) (*provider.CreateStorageSpaceResponse, error) diff --git a/pkg/storage/utils/decomposedfs/decomposedfs.go b/pkg/storage/utils/decomposedfs/decomposedfs.go index 33dadb0d06..427a429a74 100644 --- a/pkg/storage/utils/decomposedfs/decomposedfs.go +++ b/pkg/storage/utils/decomposedfs/decomposedfs.go @@ -538,7 +538,7 @@ func (fs *Decomposedfs) SetLock(ctx context.Context, ref *provider.Reference, lo } // RefreshLock refreshes an existing lock on the given reference -func (fs *Decomposedfs) RefreshLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error { +func (fs *Decomposedfs) RefreshLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock, existingLockID string) error { return errtypes.NotSupported("unimplemented") } diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 197bbcf1da..64f8981b25 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -869,9 +869,7 @@ func encodeLock(l *provider.Lock) (string, error) { } // RefreshLock refreshes an existing lock on the given reference -func (fs *eosfs) RefreshLock(ctx context.Context, ref *provider.Reference, newLock *provider.Lock) error { - // TODO (gdelmont): check if the new lock is already expired? - +func (fs *eosfs) RefreshLock(ctx context.Context, ref *provider.Reference, newLock *provider.Lock, existingLockID string) error { if newLock.Type == provider.LockType_LOCK_TYPE_SHARED { return errtypes.NotSupported("shared lock not yet implemented") } @@ -897,6 +895,10 @@ func (fs *eosfs) RefreshLock(ctx context.Context, ref *provider.Reference, newLo return errtypes.BadRequest("caller does not hold the lock") } + if existingLockID != "" && oldLock.LockId != existingLockID { + return errtypes.BadRequest("mismatching existing lock id") + } + path, err := fs.resolve(ctx, ref) if err != nil { return errors.Wrap(err, "eosfs: error resolving reference") diff --git a/pkg/storage/utils/localfs/localfs.go b/pkg/storage/utils/localfs/localfs.go index 7673ee4577..f7e6abdc59 100644 --- a/pkg/storage/utils/localfs/localfs.go +++ b/pkg/storage/utils/localfs/localfs.go @@ -722,7 +722,7 @@ func (fs *localfs) SetLock(ctx context.Context, ref *provider.Reference, lock *p } // RefreshLock refreshes an existing lock on the given reference -func (fs *localfs) RefreshLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error { +func (fs *localfs) RefreshLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock, existingLockID string) error { return errtypes.NotSupported("unimplemented") } From d13127653016babd7ab399b40b2ca5611d02f2ba Mon Sep 17 00:00:00 2001 From: Swikriti Tripathi <41103328+SwikritiT@users.noreply.github.com> Date: Fri, 30 Sep 2022 13:38:23 +0545 Subject: [PATCH 12/83] [tests-only] Bump core commit id for tests on master (#3295) * Bump core commit id for tests on master * Update expected to fail --- .drone.env | 2 +- .../expected-failures-on-OCIS-storage.md | 30 +++++++++---------- .../expected-failures-on-S3NG-storage.md | 30 +++++++++---------- 3 files changed, 29 insertions(+), 33 deletions(-) diff --git a/.drone.env b/.drone.env index b8db040950..2c73b7f9e0 100644 --- a/.drone.env +++ b/.drone.env @@ -1,3 +1,3 @@ # The test runner source for API tests -CORE_COMMITID=abf37068ff0fb824fec331dce0a25c1d7ac85177 +CORE_COMMITID=3027b2b8288211d3226ec03f308ff80b9322b10a CORE_BRANCH=master diff --git a/tests/acceptance/expected-failures-on-OCIS-storage.md b/tests/acceptance/expected-failures-on-OCIS-storage.md index a5f55abf07..a134d9e71b 100644 --- a/tests/acceptance/expected-failures-on-OCIS-storage.md +++ b/tests/acceptance/expected-failures-on-OCIS-storage.md @@ -5,8 +5,8 @@ Basic file management like up and download, move, copy, properties, quota, trash #### [invalid webdav responses for unauthorized requests.](https://github.com/owncloud/product/issues/273) These tests succeed when running against ocis because there we handle the relevant authentication in the proxy. -- [apiTrashbin/trashbinFilesFolders.feature:297](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L297) -- [apiTrashbin/trashbinFilesFolders.feature:316](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L316) +- [apiTrashbin/trashbinFilesFolders.feature:298](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L298) +- [apiTrashbin/trashbinFilesFolders.feature:317](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L317) #### [Getting information about a folder overwritten by a file gives 500 error instead of 404](https://github.com/owncloud/ocis/issues/1239) These tests are about overwriting files or folders in the `Shares` folder of a user. @@ -137,8 +137,8 @@ File and sync features in a shared scenario #### [Getting content of a shared file with same name returns 500](https://github.com/owncloud/ocis/issues/3880) -- [apiShareManagementToShares/acceptShares.feature:599](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L599) -- [apiShareManagementToShares/acceptShares.feature:664](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L664) +- [apiShareManagementToShares/acceptShares.feature:594](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L594) +- [apiShareManagementToShares/acceptShares.feature:659](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L659) - [apiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:162](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L162) - [apiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:163](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L163) - [apiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:202](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L202) @@ -189,8 +189,6 @@ File and sync features in a shared scenario - [apiSharePublicLink1/createPublicLinkShare.feature:219](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L219) - [apiSharePublicLink1/createPublicLinkShare.feature:583](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L583) - [apiSharePublicLink1/createPublicLinkShare.feature:604](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L604) -- [apiSharePublicLink1/createPublicLinkShare.feature:141](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L141) -- [apiSharePublicLink1/createPublicLinkShare.feature:142](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L142) #### [creating public links with permissions fails](https://github.com/owncloud/product/issues/252) @@ -314,7 +312,7 @@ _requires a [CS3 user provisioning api that can update the quota for a user](htt - [apiVersions/fileVersionsSharingToShares.feature:33](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiVersions/fileVersionsSharingToShares.feature#L33) #### [restoring an older version of a shared file deletes the share](https://github.com/owncloud/ocis/issues/765) -- [apiShareManagementToShares/acceptShares.feature:588](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L588) +- [apiShareManagementToShares/acceptShares.feature:583](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L583) - [apiVersions/fileVersionsSharingToShares.feature:44](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiVersions/fileVersionsSharingToShares.feature#L44) #### [not possible to move file into a received folder](https://github.com/owncloud/ocis/issues/764) @@ -873,8 +871,8 @@ _ocs: api compatibility, return correct status code_ - [apiShareManagementToShares/acceptShares.feature:252](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L252) - [apiShareManagementToShares/acceptShares.feature:295](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L295) - [apiShareManagementToShares/acceptShares.feature:304](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L304) -- [apiShareManagementToShares/acceptShares.feature:577](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L577) -- [apiShareManagementToShares/acceptShares.feature:578](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L578) +- [apiShareManagementToShares/acceptShares.feature:572](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L572) +- [apiShareManagementToShares/acceptShares.feature:573](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L573) - [apiShareOperationsToShares2/shareAccessByID.feature:124](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareOperationsToShares2/shareAccessByID.feature#L124) - [apiShareOperationsToShares2/shareAccessByID.feature:125](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareOperationsToShares2/shareAccessByID.feature#L125) - [apiShareManagementToShares/acceptShares.feature:335](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L335) @@ -913,8 +911,8 @@ _ocs: api compatibility, return correct status code_ - [apiShareManagementToShares/moveReceivedShare.feature:32](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/moveReceivedShare.feature#L32) #### [HTTP status code differ while listing the contents of another user's trash bin](https://github.com/owncloud/ocis/issues/3561) -- [apiTrashbin/trashbinFilesFolders.feature:248](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L248) -- [apiTrashbin/trashbinFilesFolders.feature:278](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L278) +- [apiTrashbin/trashbinFilesFolders.feature:249](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L249) +- [apiTrashbin/trashbinFilesFolders.feature:279](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L279) #### [Cannot disable the dav propfind depth infinity for resources](https://github.com/owncloud/ocis/issues/3720) - [apiWebdavOperations/listFiles.feature:398](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/listFiles.feature#L398) @@ -943,16 +941,16 @@ _ocs: api compatibility, return correct status code_ - [apiTrashbin/trashbinFilesFolders.feature:94](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L94) - [apiTrashbin/trashbinFilesFolders.feature:130](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L130) - [apiTrashbin/trashbinFilesFolders.feature:153](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L153) -- [apiTrashbin/trashbinFilesFolders.feature:333](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L333) - [apiTrashbin/trashbinFilesFolders.feature:334](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L334) - [apiTrashbin/trashbinFilesFolders.feature:335](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L335) - [apiTrashbin/trashbinFilesFolders.feature:336](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L336) - [apiTrashbin/trashbinFilesFolders.feature:337](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L337) - [apiTrashbin/trashbinFilesFolders.feature:338](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L338) -- [apiTrashbin/trashbinFilesFolders.feature:359](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L359) -- [apiTrashbin/trashbinFilesFolders.feature:379](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L379) -- [apiTrashbin/trashbinFilesFolders.feature:433](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L433) -- [apiTrashbin/trashbinFilesFolders.feature:470](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L470) +- [apiTrashbin/trashbinFilesFolders.feature:339](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L339) +- [apiTrashbin/trashbinFilesFolders.feature:360](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L360) +- [apiTrashbin/trashbinFilesFolders.feature:380](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L380) +- [apiTrashbin/trashbinFilesFolders.feature:434](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L434) +- [apiTrashbin/trashbinFilesFolders.feature:471](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L471) - [apiTrashbin/trashbinSharingToShares.feature:24](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinSharingToShares.feature#L24) - [apiTrashbin/trashbinSharingToShares.feature:207](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinSharingToShares.feature#L207) - [apiTrashbin/trashbinSharingToShares.feature:231](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinSharingToShares.feature#L231) diff --git a/tests/acceptance/expected-failures-on-S3NG-storage.md b/tests/acceptance/expected-failures-on-S3NG-storage.md index b4360f3ed2..89030cc0c1 100644 --- a/tests/acceptance/expected-failures-on-S3NG-storage.md +++ b/tests/acceptance/expected-failures-on-S3NG-storage.md @@ -4,8 +4,8 @@ Basic file management like up and download, move, copy, properties, quota, trash, versions and chunking. #### [invalid webdav responses for unauthorized requests.](https://github.com/owncloud/product/issues/273) -- [apiTrashbin/trashbinFilesFolders.feature:297](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L297) -- [apiTrashbin/trashbinFilesFolders.feature:316](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L316) +- [apiTrashbin/trashbinFilesFolders.feature:298](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L298) +- [apiTrashbin/trashbinFilesFolders.feature:317](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L317) ### [Downloading the older version of shared file gives 404](https://github.com/owncloud/ocis/issues/3868) - [apiVersions/fileVersions.feature:444](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiVersions/fileVersions.feature#L444) @@ -151,8 +151,8 @@ File and sync features in a shared scenario #### [Getting content of a shared file with same name returns 500](https://github.com/owncloud/ocis/issues/3880) -- [apiShareManagementToShares/acceptShares.feature:599](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L599) -- [apiShareManagementToShares/acceptShares.feature:664](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L664) +- [apiShareManagementToShares/acceptShares.feature:594](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L594) +- [apiShareManagementToShares/acceptShares.feature:659](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L659) - [apiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:162](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L162) - [apiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:163](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L163) - [apiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:202](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L202) @@ -215,8 +215,6 @@ File and sync features in a shared scenario - [apiSharePublicLink1/accessToPublicLinkShare.feature:20](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/accessToPublicLinkShare.feature#L20) - [apiSharePublicLink1/accessToPublicLinkShare.feature:30](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/accessToPublicLinkShare.feature#L30) - [apiSharePublicLink1/accessToPublicLinkShare.feature:45](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/accessToPublicLinkShare.feature#L45) -- [apiSharePublicLink1/createPublicLinkShare.feature:141](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L141) -- [apiSharePublicLink1/createPublicLinkShare.feature:142](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L142) - [apiSharePublicLink1/createPublicLinkShare.feature:218](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L218) - [apiSharePublicLink1/createPublicLinkShare.feature:219](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L219) - [apiSharePublicLink1/createPublicLinkShare.feature:583](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink1/createPublicLinkShare.feature#L583) @@ -331,7 +329,7 @@ _requires a [CS3 user provisioning api that can update the quota for a user](htt - [apiVersions/fileVersionsSharingToShares.feature:33](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiVersions/fileVersionsSharingToShares.feature#L33) #### [restoring an older version of a shared file deletes the share](https://github.com/owncloud/ocis/issues/765) -- [apiShareManagementToShares/acceptShares.feature:588](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L588) +- [apiShareManagementToShares/acceptShares.feature:583](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L583) - [apiVersions/fileVersionsSharingToShares.feature:44](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiVersions/fileVersionsSharingToShares.feature#L44) ####[not possible to move file into a received folder](https://github.com/owncloud/ocis/issues/764) @@ -875,8 +873,8 @@ _ocs: api compatibility, return correct status code_ - [apiShareManagementToShares/acceptShares.feature:252](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L252) - [apiShareManagementToShares/acceptShares.feature:295](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L295) - [apiShareManagementToShares/acceptShares.feature:304](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L304) -- [apiShareManagementToShares/acceptShares.feature:577](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L577) -- [apiShareManagementToShares/acceptShares.feature:578](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L578) +- [apiShareManagementToShares/acceptShares.feature:572](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L572) +- [apiShareManagementToShares/acceptShares.feature:573](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L573) - [apiShareOperationsToShares2/shareAccessByID.feature:124](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareOperationsToShares2/shareAccessByID.feature#L124) - [apiShareOperationsToShares2/shareAccessByID.feature:125](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareOperationsToShares2/shareAccessByID.feature#L125) - [apiShareManagementToShares/acceptShares.feature:335](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/acceptShares.feature#L335) @@ -914,8 +912,8 @@ _ocs: api compatibility, return correct status code_ - [apiShareManagementToShares/moveReceivedShare.feature:32](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareManagementToShares/moveReceivedShare.feature#L32) #### [HTTP status code differ while listing the contents of another user's trash bin](https://github.com/owncloud/ocis/issues/3561) -- [apiTrashbin/trashbinFilesFolders.feature:248](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L248) -- [apiTrashbin/trashbinFilesFolders.feature:278](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L278) +- [apiTrashbin/trashbinFilesFolders.feature:249](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L249) +- [apiTrashbin/trashbinFilesFolders.feature:279](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L279) #### [Cannot disable the dav propfind depth infinity for resources](https://github.com/owncloud/ocis/issues/3720) - [apiWebdavOperations/listFiles.feature:398](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiWebdavOperations/listFiles.feature#L398) @@ -944,16 +942,16 @@ _ocs: api compatibility, return correct status code_ - [apiTrashbin/trashbinFilesFolders.feature:94](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L94) - [apiTrashbin/trashbinFilesFolders.feature:130](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L130) - [apiTrashbin/trashbinFilesFolders.feature:153](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L153) -- [apiTrashbin/trashbinFilesFolders.feature:333](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L333) - [apiTrashbin/trashbinFilesFolders.feature:334](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L334) - [apiTrashbin/trashbinFilesFolders.feature:335](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L335) - [apiTrashbin/trashbinFilesFolders.feature:336](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L336) - [apiTrashbin/trashbinFilesFolders.feature:337](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L337) - [apiTrashbin/trashbinFilesFolders.feature:338](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L338) -- [apiTrashbin/trashbinFilesFolders.feature:359](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L359) -- [apiTrashbin/trashbinFilesFolders.feature:379](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L379) -- [apiTrashbin/trashbinFilesFolders.feature:433](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L433) -- [apiTrashbin/trashbinFilesFolders.feature:470](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L470) +- [apiTrashbin/trashbinFilesFolders.feature:339](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L339) +- [apiTrashbin/trashbinFilesFolders.feature:360](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L360) +- [apiTrashbin/trashbinFilesFolders.feature:380](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L380) +- [apiTrashbin/trashbinFilesFolders.feature:434](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L434) +- [apiTrashbin/trashbinFilesFolders.feature:471](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinFilesFolders.feature#L471) - [apiTrashbin/trashbinSharingToShares.feature:24](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinSharingToShares.feature#L24) - [apiTrashbin/trashbinSharingToShares.feature:207](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinSharingToShares.feature#L207) - [apiTrashbin/trashbinSharingToShares.feature:231](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiTrashbin/trashbinSharingToShares.feature#L231) From 9b39f5faf0525eaf274e56fa7f77ad614e090ea4 Mon Sep 17 00:00:00 2001 From: Giuseppe Lo Presti Date: Fri, 30 Sep 2022 18:03:12 +0200 Subject: [PATCH 13/83] Better display name in apps for all user types (#3280) --- changelog/unreleased/ext-users.md | 7 +++++++ pkg/app/provider/wopi/wopi.go | 24 ++++++++---------------- pkg/auth/manager/oidc/oidc.go | 4 ++++ 3 files changed, 19 insertions(+), 16 deletions(-) create mode 100644 changelog/unreleased/ext-users.md diff --git a/changelog/unreleased/ext-users.md b/changelog/unreleased/ext-users.md new file mode 100644 index 0000000000..430ff0dedc --- /dev/null +++ b/changelog/unreleased/ext-users.md @@ -0,0 +1,7 @@ +Enhancement: better display name in apps for all user types + +This includes a `FirstName FamilyName (domain)` format for non-primary accounts, +and a sanitization of the email address claim for such non-primary accounts. + +https://github.com/cs3org/reva/pull/2986 +https://github.com/cs3org/reva/pull/3280 diff --git a/pkg/app/provider/wopi/wopi.go b/pkg/app/provider/wopi/wopi.go index 0b79e1d439..bec75f63a3 100644 --- a/pkg/app/provider/wopi/wopi.go +++ b/pkg/app/provider/wopi/wopi.go @@ -144,32 +144,24 @@ func (p *wopiProvider) GetAppURL(ctx context.Context, resource *provider.Resourc q.Add("fileid", resource.GetId().OpaqueId) q.Add("endpoint", resource.GetId().StorageId) q.Add("viewmode", viewMode.String()) + q.Add("appname", p.conf.AppName) u, ok := ctxpkg.ContextGetUser(ctx) - if ok { // else defaults to "Guest xyz" - var isPublicShare bool - if u.Opaque != nil { - if _, ok := u.Opaque.Map["public-share-role"]; ok { - isPublicShare = true - } - } - + if ok { // else username defaults to "Guest xyz" if u.Id.Type == userpb.UserType_USER_TYPE_LIGHTWEIGHT || u.Id.Type == userpb.UserType_USER_TYPE_FEDERATED { q.Add("userid", resource.Owner.OpaqueId+"@"+resource.Owner.Idp) - if !isPublicShare { - // for visual display, federated/external accounts are shown with their email but act on behalf of the owner - q.Add("username", u.Mail) - } } else { q.Add("userid", u.Id.OpaqueId+"@"+u.Id.Idp) - if !isPublicShare { - q.Add("username", u.Username) + } + + q.Add("username", u.DisplayName) + if u.Opaque != nil { + if _, ok := u.Opaque.Map["public-share-role"]; ok { + q.Del("username") // on public shares default to "Guest xyz" } } } - q.Add("appname", p.conf.AppName) - var viewAppURL string if viewAppURLs, ok := p.appURLs["view"]; ok { if viewAppURL, ok = viewAppURLs[ext]; ok { diff --git a/pkg/auth/manager/oidc/oidc.go b/pkg/auth/manager/oidc/oidc.go index 9d9a6e8f16..7352850b60 100644 --- a/pkg/auth/manager/oidc/oidc.go +++ b/pkg/auth/manager/oidc/oidc.go @@ -247,6 +247,10 @@ func (am *mgr) Authenticate(ctx context.Context, clientID, clientSecret string) if err != nil { return nil, nil, err } + // strip the `guest:` prefix if present in the email claim (appears to come from LDAP at CERN?) + u.Mail = strings.Replace(u.Mail, "guest: ", "", 1) + // and decorate the display name with the email domain to make it different from a primary account + u.DisplayName = u.DisplayName + " (" + strings.Split(u.Mail, "@")[1] + ")" } else { scopes, err = scope.AddOwnerScope(nil) if err != nil { From a50b5ad59b8a46b475bda0c1e5a84b8b692551b4 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte <39946305+gmgigi96@users.noreply.github.com> Date: Tue, 4 Oct 2022 10:26:32 +0200 Subject: [PATCH 14/83] Add http service to send email for shares (#3304) --- changelog/unreleased/mailer-shares.md | 3 + internal/http/services/loader/loader.go | 1 + internal/http/services/mailer/mailer.go | 378 ++++++++++++++++++++++++ 3 files changed, 382 insertions(+) create mode 100644 changelog/unreleased/mailer-shares.md create mode 100644 internal/http/services/mailer/mailer.go diff --git a/changelog/unreleased/mailer-shares.md b/changelog/unreleased/mailer-shares.md new file mode 100644 index 0000000000..df72613e1f --- /dev/null +++ b/changelog/unreleased/mailer-shares.md @@ -0,0 +1,3 @@ +Enhancement: Add http service to send email for shares + +https://github.com/cs3org/reva/pull/3304 diff --git a/internal/http/services/loader/loader.go b/internal/http/services/loader/loader.go index 6de231b478..40d78b583e 100644 --- a/internal/http/services/loader/loader.go +++ b/internal/http/services/loader/loader.go @@ -25,6 +25,7 @@ import ( _ "github.com/cs3org/reva/internal/http/services/datagateway" _ "github.com/cs3org/reva/internal/http/services/dataprovider" _ "github.com/cs3org/reva/internal/http/services/helloworld" + _ "github.com/cs3org/reva/internal/http/services/mailer" _ "github.com/cs3org/reva/internal/http/services/mentix" _ "github.com/cs3org/reva/internal/http/services/meshdirectory" _ "github.com/cs3org/reva/internal/http/services/metrics" diff --git a/internal/http/services/mailer/mailer.go b/internal/http/services/mailer/mailer.go new file mode 100644 index 0000000000..3f47a5f64d --- /dev/null +++ b/internal/http/services/mailer/mailer.go @@ -0,0 +1,378 @@ +// Copyright 2018-2021 CERN +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// In applying this license, CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +package mailer + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "io" + "net/http" + "net/smtp" + "os" + "path/filepath" + "strings" + "text/template" + + gateway "github.com/cs3org/go-cs3apis/cs3/gateway/v1beta1" + group "github.com/cs3org/go-cs3apis/cs3/identity/group/v1beta1" + user "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" + rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" + collaboration "github.com/cs3org/go-cs3apis/cs3/sharing/collaboration/v1beta1" + provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" + ctxpkg "github.com/cs3org/reva/pkg/ctx" + "github.com/cs3org/reva/pkg/errtypes" + "github.com/cs3org/reva/pkg/rgrpc/todo/pool" + "github.com/cs3org/reva/pkg/rhttp/global" + "github.com/cs3org/reva/pkg/sharedconf" + "github.com/mitchellh/mapstructure" + "github.com/rs/zerolog" +) + +func init() { + global.Register("mailer", New) +} + +type config struct { + SMTPAddress string `mapstructure:"smtp_server" docs:";The hostname and port of the SMTP server."` + SenderLogin string `mapstructure:"sender_login" docs:";The email to be used to send mails."` + SenderPassword string `mapstructure:"sender_password" docs:";The sender's password."` + DisableAuth bool `mapstructure:"disable_auth" docs:"false;Whether to disable SMTP auth."` + Prefix string `mapstructure:"prefix"` + BodyTemplatePath string `mapstructure:"body_template_path"` + SubjectTemplate string `mapstructure:"subject_template"` + GatewaySVC string `mapstructure:"gateway_svc"` +} + +type svc struct { + conf *config + client gateway.GatewayAPIClient + tplBody *template.Template + tplSubj *template.Template +} + +// New creates a new mailer service +func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) { + conf := &config{} + if err := mapstructure.Decode(m, conf); err != nil { + return nil, err + } + + conf.init() + + client, err := pool.GetGatewayServiceClient(pool.Endpoint(conf.GatewaySVC)) + if err != nil { + return nil, err + } + + s := &svc{ + conf: conf, + client: client, + } + + if err = s.initBodyTemplate(); err != nil { + return nil, err + } + if err = s.initSubjectTemplate(); err != nil { + return nil, err + } + + return s, nil +} + +func (s *svc) Close() error { + return nil +} + +func (s *svc) initBodyTemplate() error { + f, err := os.Open(s.conf.BodyTemplatePath) + if err != nil { + return err + } + defer f.Close() + + data, err := io.ReadAll(f) + if err != nil { + return err + } + + tpl, err := template.New("tpl_body").Parse(string(data)) + if err != nil { + return err + } + + s.tplBody = tpl + return nil +} + +func (s *svc) initSubjectTemplate() error { + tpl, err := template.New("tpl_subj").Parse(s.conf.SubjectTemplate) + if err != nil { + return err + } + s.tplSubj = tpl + return nil +} + +func (c *config) init() { + if c.Prefix == "" { + c.Prefix = "mailer" + } + + if c.SubjectTemplate == "" { + c.SubjectTemplate = "{{.OwnerName}} ({{.OwnerUsername}}) shared {{if .IsDir}}folder{{else}}file{{end}} '{{.Filename}}' with you" + } + + c.GatewaySVC = sharedconf.GetGatewaySVC(c.GatewaySVC) +} + +func (s *svc) Prefix() string { + return s.conf.Prefix +} + +func (s *svc) Unprotected() []string { + return nil +} + +type out struct { + Recipients []string `json:"recipients"` +} + +func getIDsFromRequest(r *http.Request) ([]string, error) { + if err := r.ParseForm(); err != nil { + return nil, err + } + + idsSet := make(map[string]struct{}) + + for _, id := range r.Form["id"] { + if _, ok := idsSet[id]; ok { + continue + } + idsSet[id] = struct{}{} + } + + ids := make([]string, 0, len(idsSet)) + for id := range idsSet { + ids = append(ids, id) + } + + return ids, nil +} + +func (s *svc) Handler() http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + http.Error(w, http.StatusText(http.StatusMethodNotAllowed), http.StatusMethodNotAllowed) + return + } + + ctx := r.Context() + + ids, err := getIDsFromRequest(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + } + + if len(ids) == 0 { + http.Error(w, "share id not provided", http.StatusBadRequest) + return + } + + var recipients []string + for _, id := range ids { + recipient, err := s.sendMailForShare(ctx, id) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + recipients = append(recipients, recipient) + } + + w.WriteHeader(http.StatusOK) + w.Header().Add("Content-Type", "application/json") + _ = json.NewEncoder(w).Encode(out{Recipients: recipients}) + }) +} + +type shareInfo struct { + RecipientEmail string + RecipientUsername string + OwnerEmail string + OwnerName string + OwnerUsername string + ShareType string + Filename string + Path string + IsDir bool + ShareID string +} + +func (s *svc) getAuth() smtp.Auth { + if s.conf.DisableAuth { + return nil + } + return smtp.PlainAuth("", s.conf.SenderLogin, s.conf.SenderPassword, strings.SplitN(s.conf.SMTPAddress, ":", 2)[0]) +} + +func (s *svc) sendMailForShare(ctx context.Context, id string) (string, error) { + share, err := s.getShareInfoByID(ctx, id) + if err != nil { + return "", err + } + + msg, err := s.generateMsg(share.OwnerEmail, share.RecipientEmail, share) + if err != nil { + return "", err + } + + return share.RecipientEmail, smtp.SendMail(s.conf.SMTPAddress, s.getAuth(), share.OwnerEmail, []string{share.RecipientEmail}, msg) +} + +func (s *svc) generateMsg(from, to string, share *shareInfo) ([]byte, error) { + subj, err := s.generateEmailSubject(share) + if err != nil { + return nil, err + } + + body, err := s.generateEmailBody(share) + if err != nil { + return nil, err + } + + msg := fmt.Sprintf("From: %s\r\n"+ + "To: %s\r\n"+ + "Subject: %s\r\n\r\n%s\r\n", from, to, subj, body) + return []byte(msg), nil +} + +func (s *svc) getShareInfoByID(ctx context.Context, id string) (*shareInfo, error) { + user, ok := ctxpkg.ContextGetUser(ctx) + if !ok { + return nil, errtypes.UserRequired("user not in context") + } + + shareRes, err := s.client.GetShare(ctx, &collaboration.GetShareRequest{ + Ref: &collaboration.ShareReference{ + Spec: &collaboration.ShareReference_Id{ + Id: &collaboration.ShareId{ + OpaqueId: id, + }, + }, + }, + }) + + switch { + case err != nil: + return nil, err + case shareRes.Status.Code == rpc.Code_CODE_NOT_FOUND: + return nil, errtypes.NotFound(fmt.Sprintf("share %s not found", id)) + case shareRes.Status.Code != rpc.Code_CODE_OK: + return nil, errtypes.InternalError(shareRes.Status.Message) + } + + share := shareRes.Share + statRes, err := s.client.Stat(ctx, &provider.StatRequest{ + Ref: &provider.Reference{ + ResourceId: share.ResourceId, + }, + }) + + switch { + case err != nil: + return nil, err + case statRes.Status.Code == rpc.Code_CODE_NOT_FOUND: + return nil, errtypes.NotFound("reference not found") + case statRes.Status.Code != rpc.Code_CODE_OK: + return nil, errtypes.InternalError(statRes.Status.Message) + } + + file := statRes.Info + + info := &shareInfo{} + switch g := share.Grantee.Id.(type) { + case *provider.Grantee_UserId: + grantee, err := s.getUser(ctx, g.UserId) + if err != nil { + return nil, err + } + info.RecipientEmail = grantee.Mail + info.RecipientUsername = grantee.Username + info.ShareType = "user" + case *provider.Grantee_GroupId: + grantee, err := s.getGroup(ctx, g.GroupId) + if err != nil { + return nil, err + } + info.RecipientEmail = grantee.Mail + info.RecipientUsername = grantee.GroupName + info.ShareType = "group" + } + + info.OwnerEmail = user.Mail + info.OwnerName = user.DisplayName + info.OwnerUsername = user.Username + + info.Path = file.Path + info.Filename = filepath.Base(file.Path) + if file.Type == provider.ResourceType_RESOURCE_TYPE_CONTAINER { + info.IsDir = true + } else { + info.IsDir = false + } + + info.ShareID = id + + return info, nil +} + +func (s *svc) getUser(ctx context.Context, userID *user.UserId) (*user.User, error) { + res, err := s.client.GetUser(ctx, &user.GetUserRequest{ + UserId: userID, + }) + if err != nil { + return nil, err + } + + return res.User, nil +} + +func (s *svc) getGroup(ctx context.Context, groupID *group.GroupId) (*group.Group, error) { + res, err := s.client.GetGroup(ctx, &group.GetGroupRequest{ + GroupId: groupID, + }) + if err != nil { + return nil, err + } + + return res.Group, nil +} + +func (s *svc) generateEmailSubject(share *shareInfo) (string, error) { + var buf bytes.Buffer + err := s.tplSubj.Execute(&buf, share) + return buf.String(), err +} + +func (s *svc) generateEmailBody(share *shareInfo) (string, error) { + var buf bytes.Buffer + err := s.tplBody.Execute(&buf, share) + return buf.String(), err +} From db5793011f2038194e46007a72cc73db09b948c9 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte <39946305+gmgigi96@users.noreply.github.com> Date: Tue, 4 Oct 2022 18:25:34 +0200 Subject: [PATCH 15/83] oidc driver: get user from user provider (#3288) * fix oidc driver for non standard claims in user response * fix username * fix error * fix client * add changelog --- changelog/unreleased/oidc-users.md | 6 +++ pkg/auth/manager/oidc/oidc.go | 79 ++++++++++++++++++------------ 2 files changed, 55 insertions(+), 30 deletions(-) create mode 100644 changelog/unreleased/oidc-users.md diff --git a/changelog/unreleased/oidc-users.md b/changelog/unreleased/oidc-users.md new file mode 100644 index 0000000000..b642513a33 --- /dev/null +++ b/changelog/unreleased/oidc-users.md @@ -0,0 +1,6 @@ +Bugfix: Get user from user provider in oidc driver + +For oidc providers that only respond with standard claims, +use the user provider to get the user. + +https://github.com/cs3org/reva/pull/3055 diff --git a/pkg/auth/manager/oidc/oidc.go b/pkg/auth/manager/oidc/oidc.go index 7352850b60..2b36d633d1 100644 --- a/pkg/auth/manager/oidc/oidc.go +++ b/pkg/auth/manager/oidc/oidc.go @@ -199,12 +199,6 @@ func (am *mgr) Authenticate(ctx context.Context, clientID, clientSecret string) return nil, nil, fmt.Errorf("no \"email\" attribute found in userinfo: maybe the client did not request the oidc \"email\"-scope") } - uid, _ := claims[am.c.UIDClaim].(float64) - claims[am.c.UIDClaim] = int64(uid) // in case the uid claim is missing and a mapping is to be performed, resolveUser() will populate it - // Note that if not, will silently carry a user with 0 uid, potentially problematic with storage providers - gid, _ := claims[am.c.GIDClaim].(float64) - claims[am.c.GIDClaim] = int64(gid) - err = am.resolveUser(ctx, claims) if err != nil { return nil, nil, errors.Wrapf(err, "oidc: error resolving username for external user '%v'", claims["email"]) @@ -261,6 +255,15 @@ func (am *mgr) Authenticate(ctx context.Context, clientID, clientSecret string) return u, scopes, nil } +func (am *mgr) getUserID(claims map[string]interface{}) (int64, int64) { + uidf, _ := claims[am.c.UIDClaim].(float64) + uid := int64(uidf) + + gidf, _ := claims[am.c.GIDClaim].(float64) + gid := int64(gidf) + return uid, gid +} + func (am *mgr) getOAuthCtx(ctx context.Context) context.Context { // Sometimes for testing we need to skip the TLS check, that's why we need a // custom HTTP client. @@ -300,9 +303,16 @@ func (am *mgr) getOIDCProvider(ctx context.Context) (*oidc.Provider, error) { } func (am *mgr) resolveUser(ctx context.Context, claims map[string]interface{}) error { - if len(am.oidcUsersMapping) > 0 { - var username string + var ( + claim string + value string + resolve bool + ) + uid, gid := am.getUserID(claims) + + if len(am.oidcUsersMapping) > 0 { + claim = "username" // map and discover the user's username when a mapping is defined if claims[am.c.GroupClaim] == nil { // we are required to perform a user mapping but the group claim is not available @@ -324,32 +334,41 @@ func (am *mgr) resolveUser(ctx context.Context, claims map[string]interface{}) e return errtypes.PermissionDenied("no user mapping found for the given group claim(s)") } for _, m := range intersection { - username = am.oidcUsersMapping[m.(string)].Username + value = am.oidcUsersMapping[m.(string)].Username } + resolve = true + } else if uid == 0 || gid == 0 { + claim = "mail" + value = claims["email"].(string) + resolve = true + } - upsc, err := pool.GetUserProviderServiceClient(pool.Endpoint(am.c.GatewaySvc)) - if err != nil { - return errors.Wrap(err, "error getting user provider grpc client") - } - getUserByClaimResp, err := upsc.GetUserByClaim(ctx, &user.GetUserByClaimRequest{ - Claim: "username", - Value: username, - }) - if err != nil { - return errors.Wrapf(err, "error getting user by username '%v'", username) - } - if getUserByClaimResp.Status.Code != rpc.Code_CODE_OK { - return status.NewErrorFromCode(getUserByClaimResp.Status.Code, "oidc") - } + if !resolve { + return nil + } - // take the properties of the mapped target user to override the claims - claims["preferred_username"] = username - claims[am.c.IDClaim] = getUserByClaimResp.GetUser().GetId().OpaqueId - claims["iss"] = getUserByClaimResp.GetUser().GetId().Idp - claims[am.c.UIDClaim] = getUserByClaimResp.GetUser().UidNumber - claims[am.c.GIDClaim] = getUserByClaimResp.GetUser().GidNumber - appctx.GetLogger(ctx).Debug().Str("username", username).Interface("claims", claims).Msg("resolveUser: claims overridden from mapped user") + upsc, err := pool.GetGatewayServiceClient(pool.Endpoint(am.c.GatewaySvc)) + if err != nil { + return errors.Wrap(err, "error getting user provider grpc client") } + getUserByClaimResp, err := upsc.GetUserByClaim(ctx, &user.GetUserByClaimRequest{ + Claim: claim, + Value: value, + }) + if err != nil { + return errors.Wrapf(err, "error getting user by %s '%v'", claim, value) + } + if getUserByClaimResp.Status.Code != rpc.Code_CODE_OK { + return status.NewErrorFromCode(getUserByClaimResp.Status.Code, "oidc") + } + + // take the properties of the mapped target user to override the claims + claims["preferred_username"] = getUserByClaimResp.GetUser().Username + claims[am.c.IDClaim] = getUserByClaimResp.GetUser().GetId().OpaqueId + claims["iss"] = getUserByClaimResp.GetUser().GetId().Idp + claims[am.c.UIDClaim] = getUserByClaimResp.GetUser().UidNumber + claims[am.c.GIDClaim] = getUserByClaimResp.GetUser().GidNumber + appctx.GetLogger(ctx).Debug().Str("username", value).Interface("claims", claims).Msg("resolveUser: claims overridden from mapped user") return nil } From 983d950679b02d424765148651d213f6c6c084b3 Mon Sep 17 00:00:00 2001 From: Hugo Gonzalez Labrador Date: Wed, 5 Oct 2022 16:38:04 +0200 Subject: [PATCH 16/83] ocm: fix content type verification --- pkg/ocm/share/sender/sender.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/ocm/share/sender/sender.go b/pkg/ocm/share/sender/sender.go index 5cee734bad..3e2dd965ae 100644 --- a/pkg/ocm/share/sender/sender.go +++ b/pkg/ocm/share/sender/sender.go @@ -68,7 +68,7 @@ func Send(requestBodyMap map[string]interface{}, pi *ocmprovider.ProviderInfo) e if err != nil { return errors.Wrap(err, "sender: error framing post request") } - req.Header.Set("Content-Type", "application/json; param=value") + req.Header.Set("Content-Type", "application/json") client := rhttp.GetHTTPClient( rhttp.Timeout(5 * time.Second), ) From 4b17e1a0e9d4064fde40c912d8358278d1da77d6 Mon Sep 17 00:00:00 2001 From: Hugo Gonzalez Labrador Date: Wed, 5 Oct 2022 18:37:53 +0200 Subject: [PATCH 17/83] add changelog --- changelog/unreleased/ocm-content-type.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 changelog/unreleased/ocm-content-type.md diff --git a/changelog/unreleased/ocm-content-type.md b/changelog/unreleased/ocm-content-type.md new file mode 100644 index 0000000000..cf170bc756 --- /dev/null +++ b/changelog/unreleased/ocm-content-type.md @@ -0,0 +1,6 @@ +Enhancement: fix content-type for OCM sharing + +This fix change the content type to just +"application/json" + +https://github.com/cs3org/reva/pull/3313 From f9d850d18c27208dc1190abf79ea9b05c87542d6 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Thu, 6 Oct 2022 11:59:56 +0200 Subject: [PATCH 18/83] fix oidc driver --- pkg/auth/manager/oidc/oidc.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkg/auth/manager/oidc/oidc.go b/pkg/auth/manager/oidc/oidc.go index 2b36d633d1..d43e0fdfdc 100644 --- a/pkg/auth/manager/oidc/oidc.go +++ b/pkg/auth/manager/oidc/oidc.go @@ -310,6 +310,10 @@ func (am *mgr) resolveUser(ctx context.Context, claims map[string]interface{}) e ) uid, gid := am.getUserID(claims) + if uid != 0 && gid != 0 { + claims[am.c.UIDClaim] = uid + claims[am.c.GIDClaim] = gid + } if len(am.oidcUsersMapping) > 0 { claim = "username" From d5fa59554e40615df172c810bc2843e8a925541d Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Thu, 6 Oct 2022 14:37:31 +0200 Subject: [PATCH 19/83] add changelog --- changelog/unreleased/oidc-fix.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 changelog/unreleased/oidc-fix.md diff --git a/changelog/unreleased/oidc-fix.md b/changelog/unreleased/oidc-fix.md new file mode 100644 index 0000000000..9cb8c8b937 --- /dev/null +++ b/changelog/unreleased/oidc-fix.md @@ -0,0 +1,4 @@ +Bugfix: Fix oidc provider crash when custom claims are provided + +https://github.com/cs3org/reva/pull/3319 + From e58cd3098b479dfe641658b25897a3638543c5ad Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte <39946305+gmgigi96@users.noreply.github.com> Date: Thu, 6 Oct 2022 15:31:36 +0200 Subject: [PATCH 20/83] Accept reva token as a bearer authentication (#3315) --- changelog/unreleased/reva-token-bearer.md | 3 + internal/http/interceptors/auth/auth.go | 174 +++++++++++------- .../interceptors/auth/token/loader/loader.go | 1 + .../auth/token/strategy/bearer/bearer.go | 84 +++++++++ 4 files changed, 191 insertions(+), 71 deletions(-) create mode 100644 changelog/unreleased/reva-token-bearer.md create mode 100644 internal/http/interceptors/auth/token/strategy/bearer/bearer.go diff --git a/changelog/unreleased/reva-token-bearer.md b/changelog/unreleased/reva-token-bearer.md new file mode 100644 index 0000000000..224d6cfe69 --- /dev/null +++ b/changelog/unreleased/reva-token-bearer.md @@ -0,0 +1,3 @@ +Enhancement: Accept reva token as a bearer authentication + +https://github.com/cs3org/reva/pull/3315 diff --git a/internal/http/interceptors/auth/auth.go b/internal/http/interceptors/auth/auth.go index 1a10d4fccc..3348e07947 100644 --- a/internal/http/interceptors/auth/auth.go +++ b/internal/http/interceptors/auth/auth.go @@ -200,92 +200,87 @@ func authenticateUser(w http.ResponseWriter, r *http.Request, conf *config, toke return nil, err } - tkn := tokenStrategy.GetToken(r) - if tkn == "" { - log.Warn().Msg("core access token not set") + // reva token or auth token can be passed using the same tecnique (for example bearer) + // before validating it against an auth provider, we can check directly if it's a reva + // token and if not try to use it for authenticating the user. + + token := tokenStrategy.GetToken(r) + if token != "" { + if user, ok := isTokenValid(r, tokenManager, token); ok { + if err := insertGroupsInUser(ctx, userGroupsCache, client, user); err != nil { + logError(isUnprotectedEndpoint, log, err, "got an error retrieving groups for user "+user.Username, http.StatusInternalServerError, w) + return nil, err + } + return ctxWithUserInfo(ctx, r, user, token), nil + } + } - userAgentCredKeys := getCredsForUserAgent(r.UserAgent(), conf.CredentialsByUserAgent, conf.CredentialChain) + log.Warn().Msg("core access token not set") - // obtain credentials (basic auth, bearer token, ...) based on user agent - var creds *auth.Credentials - for _, k := range userAgentCredKeys { - creds, err = credChain[k].GetCredentials(w, r) - if err != nil { - log.Debug().Err(err).Msg("error retrieving credentials") - } + userAgentCredKeys := getCredsForUserAgent(r.UserAgent(), conf.CredentialsByUserAgent, conf.CredentialChain) - if creds != nil { - log.Debug().Msgf("credentials obtained from credential strategy: type: %s, client_id: %s", creds.Type, creds.ClientID) - break - } + // obtain credentials (basic auth, bearer token, ...) based on user agent + var creds *auth.Credentials + for _, k := range userAgentCredKeys { + creds, err = credChain[k].GetCredentials(w, r) + if err != nil { + log.Debug().Err(err).Msg("error retrieving credentials") } - // if no credentials are found, reply with authentication challenge depending on user agent - if creds == nil { - if !isUnprotectedEndpoint { - for _, key := range userAgentCredKeys { - if cred, ok := credChain[key]; ok { - cred.AddWWWAuthenticate(w, r, conf.Realm) - } else { - panic("auth credential strategy: " + key + "must have been loaded in init method") - } + if creds != nil { + log.Debug().Msgf("credentials obtained from credential strategy: type: %s, client_id: %s", creds.Type, creds.ClientID) + break + } + } + + // if no credentials are found, reply with authentication challenge depending on user agent + if creds == nil { + if !isUnprotectedEndpoint { + for _, key := range userAgentCredKeys { + if cred, ok := credChain[key]; ok { + cred.AddWWWAuthenticate(w, r, conf.Realm) + } else { + panic("auth credential strategy: " + key + "must have been loaded in init method") } - w.WriteHeader(http.StatusUnauthorized) } - return nil, errtypes.PermissionDenied("no credentials found") + w.WriteHeader(http.StatusUnauthorized) } + return nil, errtypes.PermissionDenied("no credentials found") + } - req := &gateway.AuthenticateRequest{ - Type: creds.Type, - ClientId: creds.ClientID, - ClientSecret: creds.ClientSecret, - } + req := &gateway.AuthenticateRequest{ + Type: creds.Type, + ClientId: creds.ClientID, + ClientSecret: creds.ClientSecret, + } - log.Debug().Msgf("AuthenticateRequest: type: %s, client_id: %s against %s", req.Type, req.ClientId, conf.GatewaySvc) + log.Debug().Msgf("AuthenticateRequest: type: %s, client_id: %s against %s", req.Type, req.ClientId, conf.GatewaySvc) - res, err := client.Authenticate(ctx, req) - if err != nil { - logError(isUnprotectedEndpoint, log, err, "error calling Authenticate", http.StatusUnauthorized, w) - return nil, err - } - - if res.Status.Code != rpc.Code_CODE_OK { - err := status.NewErrorFromCode(res.Status.Code, "auth") - logError(isUnprotectedEndpoint, log, err, "error generating access token from credentials", http.StatusUnauthorized, w) - return nil, err - } + res, err := client.Authenticate(ctx, req) + if err != nil { + logError(isUnprotectedEndpoint, log, err, "error calling Authenticate", http.StatusUnauthorized, w) + return nil, err + } - log.Info().Msg("core access token generated") - // write token to response - tkn = res.Token - tokenWriter.WriteToken(tkn, w) - } else { - log.Debug().Msg("access token is already provided") + if res.Status.Code != rpc.Code_CODE_OK { + err := status.NewErrorFromCode(res.Status.Code, "auth") + logError(isUnprotectedEndpoint, log, err, "error generating access token from credentials", http.StatusUnauthorized, w) + return nil, err } + log.Info().Msg("core access token generated") + + // write token to response + token = res.Token + tokenWriter.WriteToken(token, w) + // validate token - u, tokenScope, err := tokenManager.DismantleToken(r.Context(), tkn) + u, tokenScope, err := tokenManager.DismantleToken(r.Context(), token) if err != nil { logError(isUnprotectedEndpoint, log, err, "error dismantling token", http.StatusUnauthorized, w) return nil, err } - if sharedconf.SkipUserGroupsInToken() { - var groups []string - if groupsIf, err := userGroupsCache.Get(u.Id.OpaqueId); err == nil { - groups = groupsIf.([]string) - } else { - groupsRes, err := client.GetUserGroups(ctx, &userpb.GetUserGroupsRequest{UserId: u.Id}) - if err != nil { - logError(isUnprotectedEndpoint, log, err, "error retrieving user groups", http.StatusInternalServerError, w) - return nil, err - } - groups = groupsRes.Groups - _ = userGroupsCache.SetWithExpire(u.Id.OpaqueId, groupsRes.Groups, 3600*time.Second) - } - u.Groups = groups - } - // ensure access to the resource is allowed ok, err := scope.VerifyScope(ctx, tokenScope, r.URL.Path) if err != nil { @@ -298,14 +293,51 @@ func authenticateUser(w http.ResponseWriter, r *http.Request, conf *config, toke return nil, err } - // store user and core access token in context. - ctx = ctxpkg.ContextSetUser(ctx, u) - ctx = ctxpkg.ContextSetToken(ctx, tkn) - ctx = metadata.AppendToOutgoingContext(ctx, ctxpkg.TokenHeader, tkn) // TODO(jfd): hardcoded metadata key. use PerRPCCredentials? + return ctxWithUserInfo(ctx, r, u, token), nil +} +func ctxWithUserInfo(ctx context.Context, r *http.Request, user *userpb.User, token string) context.Context { + ctx = ctxpkg.ContextSetUser(ctx, user) + ctx = ctxpkg.ContextSetToken(ctx, token) + ctx = metadata.AppendToOutgoingContext(ctx, ctxpkg.TokenHeader, token) ctx = metadata.AppendToOutgoingContext(ctx, ctxpkg.UserAgentHeader, r.UserAgent()) - return ctx, nil + return ctx +} + +func insertGroupsInUser(ctx context.Context, userGroupsCache gcache.Cache, client gateway.GatewayAPIClient, user *userpb.User) error { + if sharedconf.SkipUserGroupsInToken() { + var groups []string + if groupsIf, err := userGroupsCache.Get(user.Id.OpaqueId); err == nil { + groups = groupsIf.([]string) + } else { + groupsRes, err := client.GetUserGroups(ctx, &userpb.GetUserGroupsRequest{UserId: user.Id}) + if err != nil { + return err + } + groups = groupsRes.Groups + _ = userGroupsCache.SetWithExpire(user.Id.OpaqueId, groupsRes.Groups, 3600*time.Second) + } + user.Groups = groups + } + return nil +} + +func isTokenValid(r *http.Request, tokenManager token.Manager, token string) (*userpb.User, bool) { + ctx := r.Context() + + u, tokenScope, err := tokenManager.DismantleToken(ctx, token) + if err != nil { + return nil, false + } + + // ensure access to the resource is allowed + ok, err := scope.VerifyScope(ctx, tokenScope, r.URL.Path) + if err != nil { + return nil, false + } + + return u, ok } func logError(isUnprotectedEndpoint bool, log *zerolog.Logger, err error, msg string, status int, w http.ResponseWriter) { diff --git a/internal/http/interceptors/auth/token/loader/loader.go b/internal/http/interceptors/auth/token/loader/loader.go index 504306c227..6b0af4e39f 100644 --- a/internal/http/interceptors/auth/token/loader/loader.go +++ b/internal/http/interceptors/auth/token/loader/loader.go @@ -20,6 +20,7 @@ package loader import ( // Load core token strategies. + _ "github.com/cs3org/reva/internal/http/interceptors/auth/token/strategy/bearer" _ "github.com/cs3org/reva/internal/http/interceptors/auth/token/strategy/header" // Add your own here. ) diff --git a/internal/http/interceptors/auth/token/strategy/bearer/bearer.go b/internal/http/interceptors/auth/token/strategy/bearer/bearer.go new file mode 100644 index 0000000000..6c472abe1a --- /dev/null +++ b/internal/http/interceptors/auth/token/strategy/bearer/bearer.go @@ -0,0 +1,84 @@ +// Copyright 2018-2021 CERN +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// In applying this license, CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +package header + +import ( + "mime" + "net/http" + "strings" + + "github.com/cs3org/reva/internal/http/interceptors/auth/token/registry" + "github.com/cs3org/reva/pkg/auth" +) + +func init() { + registry.Register("bearer", New) +} + +type b struct{} + +// New returns a new auth strategy that checks for bearer auth. +func New(m map[string]interface{}) (auth.TokenStrategy, error) { + return b{}, nil +} + +func (b) GetToken(r *http.Request) string { + // Authorization Request Header Field: https://www.rfc-editor.org/rfc/rfc6750#section-2.1 + if tkn, ok := getFromAuthorizationHeader(r); ok { + return tkn + } + + // Form-Encoded Body Parameter: https://www.rfc-editor.org/rfc/rfc6750#section-2.2 + if tkn, ok := getFromBody(r); ok { + return tkn + } + + // URI Query Parameter: https://www.rfc-editor.org/rfc/rfc6750#section-2.3 + if tkn, ok := getFromQueryParam(r); ok { + return tkn + } + + return "" +} + +func getFromAuthorizationHeader(r *http.Request) (string, bool) { + auth := r.Header.Get("Authorization") + tkn := strings.TrimPrefix(auth, "Bearer ") + return tkn, tkn != "" +} + +func getFromBody(r *http.Request) (string, bool) { + mediatype, _, err := mime.ParseMediaType(r.Header.Get("content-type")) + if err != nil { + return "", false + } + if mediatype != "application/x-www-form-urlencoded" { + return "", false + } + if err = r.ParseForm(); err != nil { + return "", false + } + tkn := r.Form.Get("access-token") + return tkn, tkn != "" +} + +func getFromQueryParam(r *http.Request) (string, bool) { + tkn := r.URL.Query().Get("access_token") + return tkn, tkn != "" +} From c26f6a9b5dd19d152900ed44c410a45534b1875c Mon Sep 17 00:00:00 2001 From: Antoon P Date: Thu, 6 Oct 2022 16:23:28 +0200 Subject: [PATCH 21/83] Issue closed. FIXME removed. (#3311) * Issue closed. FIXME removed. * Modify changelog. * Fix changelog. Co-authored-by: Antoon P --- changelog/unreleased/fix-closed-FIXME.md | 5 +++++ internal/grpc/services/ocmshareprovider/ocmshareprovider.go | 2 -- 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 changelog/unreleased/fix-closed-FIXME.md diff --git a/changelog/unreleased/fix-closed-FIXME.md b/changelog/unreleased/fix-closed-FIXME.md new file mode 100644 index 0000000000..aa7435b73b --- /dev/null +++ b/changelog/unreleased/fix-closed-FIXME.md @@ -0,0 +1,5 @@ +Bugfix: Remove FIXME + +Issue https://github.com/cs3org/reva/issues/2402 is closed. + +https://github.com/cs3org/reva/pull/3311 diff --git a/internal/grpc/services/ocmshareprovider/ocmshareprovider.go b/internal/grpc/services/ocmshareprovider/ocmshareprovider.go index 9233b7e1d1..2cf80c15f3 100644 --- a/internal/grpc/services/ocmshareprovider/ocmshareprovider.go +++ b/internal/grpc/services/ocmshareprovider/ocmshareprovider.go @@ -158,7 +158,6 @@ func (s *service) CreateOCMShare(ctx context.Context, req *ocm.CreateOCMShareReq // discover share type sharetype := ocm.Share_SHARE_TYPE_REGULAR - // FIXME: https://github.com/cs3org/reva/issues/2402 protocol, ok := req.Opaque.Map["protocol"] if ok { switch protocol.Decoder { @@ -172,7 +171,6 @@ func (s *service) CreateOCMShare(ctx context.Context, req *ocm.CreateOCMShareReq Status: status.NewInternal(ctx, err, "error creating share"), }, nil } - // token = protocol FIXME! } var sharedSecret string From 3a0b14f8e961e0daeb05b11b951ce81330b9f830 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte Date: Thu, 6 Oct 2022 17:24:52 +0200 Subject: [PATCH 22/83] Use go vet instead of golangci-lint --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index cb63c90e06..bc0a0c2274 100644 --- a/Makefile +++ b/Makefile @@ -70,7 +70,7 @@ litmus-test-new: build pkill revad lint: go run tools/check-license/check-license.go - `go env GOPATH`/bin/golangci-lint run --timeout 3m0s + go vet ./... contrib: git shortlog -se | cut -c8- | sort -u | awk '{print "-", $$0}' | grep -v 'users.noreply.github.com' > CONTRIBUTORS.md From 1e4948bf7f47f0df8543c0196d5325e8a129366c Mon Sep 17 00:00:00 2001 From: Giuseppe Lo Presti Date: Fri, 7 Oct 2022 09:31:45 +0200 Subject: [PATCH 23/83] Added support for language locales in apps (partly backported from edge) (#3303) --- changelog/unreleased/lang-supp-in-app.md | 10 ++++++++++ examples/storage-references/gateway.toml | 1 + internal/grpc/services/appprovider/appprovider.go | 3 ++- pkg/app/app.go | 2 +- pkg/app/provider/demo/demo.go | 4 ++-- pkg/app/provider/wopi/wopi.go | 15 ++++++++++++++- pkg/utils/utils.go | 2 ++ 7 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 changelog/unreleased/lang-supp-in-app.md diff --git a/changelog/unreleased/lang-supp-in-app.md b/changelog/unreleased/lang-supp-in-app.md new file mode 100644 index 0000000000..b55e6372ea --- /dev/null +++ b/changelog/unreleased/lang-supp-in-app.md @@ -0,0 +1,10 @@ +Enhancement: added support for configuring language locales in apps + +This is a partial backport from edge: we introduce a language option +in the appprovider, which if set is passed as appropriate parameter +to the external apps in order to force a given localization. In particular, +for Microsoft Office 365 the DC_LLCC option is set as well. +The default behavior is unset, where apps try and resolve the +localization from the browser headers. + +https://github.com/cs3org/reva/pull/3303 diff --git a/examples/storage-references/gateway.toml b/examples/storage-references/gateway.toml index 0031856e2c..963d0fe21d 100644 --- a/examples/storage-references/gateway.toml +++ b/examples/storage-references/gateway.toml @@ -46,6 +46,7 @@ mime_types = [ [grpc.services.appprovider] mime_types = ["text/plain"] +language = "en-GB" [http.services.datagateway] [http.services.prometheus] diff --git a/internal/grpc/services/appprovider/appprovider.go b/internal/grpc/services/appprovider/appprovider.go index eea33b20c1..881dc4c4b7 100644 --- a/internal/grpc/services/appprovider/appprovider.go +++ b/internal/grpc/services/appprovider/appprovider.go @@ -58,6 +58,7 @@ type config struct { GatewaySvc string `mapstructure:"gatewaysvc"` MimeTypes []string `mapstructure:"mime_types"` Priority uint64 `mapstructure:"priority"` + Language string `mapstructure:"language"` } func (c *config) init() { @@ -170,7 +171,7 @@ func getProvider(c *config) (app.Provider, error) { } func (s *service) OpenInApp(ctx context.Context, req *providerpb.OpenInAppRequest) (*providerpb.OpenInAppResponse, error) { - appURL, err := s.provider.GetAppURL(ctx, req.ResourceInfo, req.ViewMode, req.AccessToken) + appURL, err := s.provider.GetAppURL(ctx, req.ResourceInfo, req.ViewMode, req.AccessToken, s.conf.Language) if err != nil { res := &providerpb.OpenInAppResponse{ Status: status.NewInternal(ctx, errors.New("appprovider: error calling GetAppURL"), err.Error()), diff --git a/pkg/app/app.go b/pkg/app/app.go index a6edad2a02..50e6ce28d8 100644 --- a/pkg/app/app.go +++ b/pkg/app/app.go @@ -40,6 +40,6 @@ type Registry interface { // Provider is the interface that application providers implement // for interacting with external apps that serve the requested resource. type Provider interface { - GetAppURL(ctx context.Context, resource *provider.ResourceInfo, viewMode appprovider.OpenInAppRequest_ViewMode, token string) (*appprovider.OpenInAppURL, error) + GetAppURL(ctx context.Context, resource *provider.ResourceInfo, viewMode appprovider.OpenInAppRequest_ViewMode, token, language string) (*appprovider.OpenInAppURL, error) GetAppProviderInfo(ctx context.Context) (*registry.ProviderInfo, error) } diff --git a/pkg/app/provider/demo/demo.go b/pkg/app/provider/demo/demo.go index 896893fa65..9376251aa1 100644 --- a/pkg/app/provider/demo/demo.go +++ b/pkg/app/provider/demo/demo.go @@ -38,8 +38,8 @@ type demoProvider struct { iframeUIProvider string } -func (p *demoProvider) GetAppURL(ctx context.Context, resource *provider.ResourceInfo, viewMode appprovider.OpenInAppRequest_ViewMode, token string) (*appprovider.OpenInAppURL, error) { - url := fmt.Sprintf("