diff --git a/.github/workflows/test-docker.yml b/.github/workflows/test-docker.yml
new file mode 100644
index 0000000000..7808d94693
--- /dev/null
+++ b/.github/workflows/test-docker.yml
@@ -0,0 +1,29 @@
+name: Test
+on:
+ pull_request:
+ push:
+ branches:
+ - "*"
+ workflow_dispatch:
+
+jobs:
+ docker:
+ strategy:
+ fail-fast: false
+ matrix:
+ file: [docker/Dockerfile.reva, docker/Dockerfile.revad-eos, docker/Dockerfile.revad-ceph]
+ uses: ./.github/workflows/docker.yml
+ with:
+ file: ${{ matrix.file }}
+ docker-revad:
+ name: docker (docker/Dockerfile.revad)
+ uses: ./.github/workflows/docker.yml
+ with:
+ file: docker/Dockerfile.revad
+ load: true
+ docker-revad-eos:
+ name: docker (docker/Dockerfile.revad-eos)
+ uses: ./.github/workflows/docker.yml
+ with:
+ file: docker/Dockerfile.revad-eos
+ load: false
diff --git a/.github/workflows/test-integration.yml b/.github/workflows/test-integration.yml
new file mode 100644
index 0000000000..534b28a5de
--- /dev/null
+++ b/.github/workflows/test-integration.yml
@@ -0,0 +1,37 @@
+name: Test
+on:
+ pull_request:
+ push:
+ branches:
+ - "*"
+ workflow_dispatch:
+
+jobs:
+ integration:
+ runs-on: self-hosted
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ - name: Setup Go environment
+ uses: actions/setup-go@v4
+ with:
+ go-version-file: go.mod
+ cache: false
+ - name: Test integration
+ run: make test-integration
+ env:
+ REDIS_ADDRESS: redis:6379
+ SQL_USERNAME: root
+ SQL_PASSWORD: my-secret-pw
+ SQL_ADDRESS: localhost:3306
+ SQL_DBNAME: reva
+ services:
+ redis:
+ image: registry.cern.ch/docker.io/webhippie/redis
+ mysql:
+ image: mysql
+ ports:
+ - 3306:3306
+ env:
+ MYSQL_ROOT_PASSWORD: my-secret-pw
+ MYSQL_DATABASE: reva
diff --git a/.github/workflows/test-litmus.yml b/.github/workflows/test-litmus.yml
new file mode 100644
index 0000000000..e0ca065eb5
--- /dev/null
+++ b/.github/workflows/test-litmus.yml
@@ -0,0 +1,19 @@
+name: Test
+on:
+ pull_request:
+ push:
+ branches:
+ - "*"
+ workflow_dispatch:
+
+jobs:
+ litmus:
+ needs:
+ - docker-revad-eos
+ strategy:
+ fail-fast: false
+ matrix:
+ test: [litmus-1, litmus-2]
+ uses: ./.github/workflows/compose.yml
+ with:
+ test: ${{ matrix.test }}
diff --git a/.github/workflows/test-unit.yml b/.github/workflows/test-unit.yml
new file mode 100644
index 0000000000..6f85f416d5
--- /dev/null
+++ b/.github/workflows/test-unit.yml
@@ -0,0 +1,30 @@
+name: Test
+on:
+ pull_request:
+ push:
+ branches:
+ - "*"
+ workflow_dispatch:
+
+jobs:
+ unit-tests:
+ runs-on: self-hosted
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ - name: Setup Go environment
+ uses: actions/setup-go@v4
+ with:
+ go-version-file: go.mod
+ cache: false
+ - name: Test
+ run: make test-go
+ env:
+ COVER_PROFILE: ${{ github.event_name == 'push' && 'coverage.out' || '' }}
+ - name: Run codacy-coverage-reporter
+ uses: codacy/codacy-coverage-reporter-action@v1
+ if: github.event_name == 'push'
+ with:
+ project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
+ coverage-reports: coverage.out
+ force-coverage-parser: go
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
deleted file mode 100644
index 71f486522b..0000000000
--- a/.github/workflows/test.yml
+++ /dev/null
@@ -1,108 +0,0 @@
-name: Test
-on:
- pull_request:
- push:
- branches:
- - "*"
- workflow_dispatch:
-
-jobs:
- integration:
- runs-on: self-hosted
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Setup Go environment
- uses: actions/setup-go@v4
- with:
- go-version-file: go.mod
- cache: false
- - name: Test integration
- run: make test-integration
- env:
- REDIS_ADDRESS: redis:6379
- SQL_USERNAME: root
- SQL_PASSWORD: my-secret-pw
- SQL_ADDRESS: localhost:3306
- SQL_DBNAME: reva
- services:
- redis:
- image: registry.cern.ch/docker.io/webhippie/redis
- mysql:
- image: mysql
- ports:
- - 3306:3306
- env:
- MYSQL_ROOT_PASSWORD: my-secret-pw
- MYSQL_DATABASE: reva
- go:
- runs-on: self-hosted
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Setup Go environment
- uses: actions/setup-go@v4
- with:
- go-version-file: go.mod
- cache: false
- - name: Test
- run: make test-go
- env:
- COVER_PROFILE: ${{ github.event_name == 'push' && 'coverage.out' || '' }}
- - name: Run codacy-coverage-reporter
- uses: codacy/codacy-coverage-reporter-action@v1
- if: github.event_name == 'push'
- with:
- project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
- coverage-reports: coverage.out
- force-coverage-parser: go
- docker:
- strategy:
- fail-fast: false
- matrix:
- file: [docker/Dockerfile.reva, docker/Dockerfile.revad-eos, docker/Dockerfile.revad-ceph]
- uses: ./.github/workflows/docker.yml
- with:
- file: ${{ matrix.file }}
- docker-revad:
- name: docker (docker/Dockerfile.revad)
- uses: ./.github/workflows/docker.yml
- with:
- file: docker/Dockerfile.revad
- load: true
- docker-revad-eos:
- name: docker (docker/Dockerfile.revad-eos)
- uses: ./.github/workflows/docker.yml
- with:
- file: docker/Dockerfile.revad-eos
- load: false
- litmus:
- needs:
- - docker-revad-eos
- strategy:
- fail-fast: false
- matrix:
- test: [litmus-1, litmus-2]
- uses: ./.github/workflows/compose.yml
- with:
- test: ${{ matrix.test }}
- acceptance-1:
- needs:
- - docker-revad-eos
- uses: ./.github/workflows/compose.yml
- with:
- test: acceptance-1
- submodules: true
- acceptance-2:
- needs:
- - docker-revad-eos
- strategy:
- fail-fast: false
- matrix:
- part: [1, 2, 3, 4, 5, 6]
- uses: ./.github/workflows/compose.yml
- with:
- test: acceptance-2
- submodules: true
- parts: 6
- part: ${{ matrix.part }}
diff --git a/.golangci.yaml b/.golangci.yaml
index 5ec02ab851..192fde39d7 100644
--- a/.golangci.yaml
+++ b/.golangci.yaml
@@ -2,74 +2,9 @@ run:
timeout: 20m
linters:
- enable-all: true
- disable:
- - exhaustive # TODO: consider enabling the 'exhaustive' linter to check the exhaustiveness of enum switch statements and map literals.
- - wrapcheck # TODO: consider enabling the 'wrapcheck' linter to check that errors from external packages are wrapped during return to help identify the error source during debugging.
- - cyclop # TODO: consider enabling the 'cyclop' linter to calculate the cyclomatic complexities of functions/packages.
- - varnamelen # TODO: consider enabling the 'varnamelen' linter to check that the length of a variable's name matches its usage scope.
- - testpackage # TODO: consider enabling the 'testpackage' linter to make sure that separate _test packages are used.
- - gosec # TODO: consider enabling the 'gosec' linter to inspect source code for security problems.
- - tagliatelle # TODO: consider enabling the 'tagliatelle' linter to check the struct tags.
- - thelper # TODO: consider enabling the 'thelper' linter to detect golang test helpers without t.Helper() call and check the consistency of test helpers.
- - predeclared # TODO: consider enabling the 'predeclared' linter to find code that shadows one of Go's predeclared identifiers.
- - paralleltest # TODO: consider enabling the 'paralleltest' linter to detect missing usage of t.Parallel() method in Go test.
- - ireturn # TODO: consider enabling the 'ireturn' linter to accept interfaces and return concrete types.
- - nosprintfhostport # TODO: consider enabling the 'nosprintfhostport' linter to check for misuse of Sprintf to construct a host with port in a URL.
- - nonamedreturns # TODO: consider enabling the 'nonamedreturns' linter to reports all named returns.
- - gomnd # TODO: consider enabling the 'gomnd' linter to detect magic numbers.
- - noctx # TODO: consider enabling the 'noctx' linter to find sending http request without context.Context.
- - nlreturn # TODO: consider enabling the 'nlreturn' linter to check for a new line before return and branch statements to increase code clarity.
- - nilnil # TODO: consider enabling the 'nilnil' linter to check that there is no simultaneous return of nil error and an invalid value.
- - nilerr # TODO: consider enabling the 'nilerr' linter to find the code that returns nil even if it checks that the error is not nil.
- - interfacebloat # TODO: consider enabling the 'interfacebloat' linter to check the number of methods inside an interface.
- - goerr113 # TODO: consider enabling the 'goerr113' linter to check the errors handling expressions.
- - gochecknoglobals # TODO: consider enabling the 'gochecknoglobals' linter to check that no global variables exist.
- - forcetypeassert # TODO: consider enabling the 'forcetypeassert' linter to find forced type assertions.
- - exhaustruct # TODO: consider enabling the 'exhaustruct' linter to check if all structure fields are initialized.
- - execinquery # TODO: consider enabling the 'execinquery' linter to check query strings.
- - errorlint # TODO: consider enabling the 'errorlint' linter to find code that will cause problems with the error wrapping scheme introduced in Go 1.13.
- - errname # TODO: consider enabling the 'errname' linter to check that sentinel errors are prefixed with the Err and error types are suffixed with the Error.
- - wsl # TODO: consider enabling the 'wsl' linter to force the use of empty lines.
- - nestif # TODO: consider enabling the 'nestif' linter to report deeply nested if statements.
- - errchkjson # TODO: consider enabling the 'errchkjson' linter to checks types passed to the json encoding functions.
- - contextcheck # TODO: consider enabling the 'contextcheck' linter to check whether the function uses a non-inherited context.
- - asasalint # TODO: consider enabling the 'asasalint' linter to check for pass []any as any in variadic func(...any).
- - containedctx # TODO: consider enabling the 'containedctx' linter to detect struct contained context.Context field.
- - unparam # TODO: consider enabling the 'unparam' linter to report unused function parameters.
- - nakedret # TODO: consider enabling the 'nakedret' linter to find naked returns in functions greater than a specified function length.
- - makezero # TODO: consider enabling the 'makezero' linter to find slice declarations with non-zero initial length.
- - lll # TODO: consider enabling the 'lll' linter to report long lines.
- - gomoddirectives # TODO: consider enabling the 'gomoddirectives' linter to manage the use of 'replace', 'retract', and 'excludes' directives in go.mod.
- - gofumpt # TODO: consider enabling the 'gofumpt' linter to check whether code was gofumpt-ed.
- - godox # TODO: consider enabling the 'godox' linter to detect FIXME, TODO and other comment keywords.
- - goconst # TODO: consider enabling the 'goconst' linter to find repeated strings that could be replaced by a constant.
- - gocognit # TODO: consider enabling the 'gocognit' linter to compute and check the cognitive complexity of functions.
- - gochecknoinits # TODO: consider enabling the 'gochecknoinits' linter to check that no init functions are present in Go code.
- - gci # TODO: consider enabling the 'gci' linter to control golang package import order and make it always deterministic.
- - funlen # TODO: consider enabling the 'funlen' linter to detect long functions.
- - maintidx # TODO: consider enabling the 'maintidx' linter to measure the maintainability index of each function.
- - gocyclo # TODO: consider enabling the 'gocyclo' linter to compute and check the cyclomatic complexity of functions.
- - forbidigo # TODO: consider enabling the 'forbidigo' linter to forbid identifiers.
- - dupl # TODO: consider enabling the 'dupl' linter to detect code cloning.
- - musttag
- - ginkgolinter
- - depguard
- - revive
- - nolintlint
- - golint # deprecated since v1.41.0 - replaced by 'revive'.
- - ifshort # deprecated since v1.48.0
- - structcheck # deprecated since v1.49.0 - replaced by 'unused'.
- - exhaustivestruct # deprecated since v1.46.0 - replaced by 'exhaustruct'.
- - deadcode # deprecated since v1.49.0 - replaced by 'unused'.
- - interfacer # deprecated since v1.38.0
- - nosnakecase # deprecated since v1.48.1 - replaced by 'revive'(var-naming).
- - varcheck # deprecated since v1.49.0 - replaced by 'unused'.
- - maligned # deprecated since v1.38.0 - replaced by 'govet' 'fieldalignment'.
- - scopelint # deprecated since v1.39.0 - replaced by 'exportloopref'.
- - rowserrcheck # disabled because of generics - https://github.com/golangci/golangci-lint/issues/2649.
- - sqlclosecheck # disabled because of generics - https://github.com/golangci/golangci-lint/issues/2649.
- - wastedassign # disabled because of generics - https://github.com/golangci/golangci-lint/issues/2649.
+ disable-all: true
+ enable:
+ - govet
linters-settings:
goheader:
@@ -90,4 +25,9 @@ linters-settings:
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.
\ No newline at end of file
+ or submit itself to any jurisdiction.
+issues:
+ exclude-rules:
+ - linters:
+ - govet
+ text: ".*lock.*"
diff --git a/Makefile b/Makefile
index 92165ad613..e8d9e63fe2 100644
--- a/Makefile
+++ b/Makefile
@@ -18,7 +18,7 @@ toolchain: $(GOLANGCI_LINT) $(CALENS)
$(GOLANGCI_LINT):
@mkdir -p $(@D)
- curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | BINDIR=$(@D) sh -s v1.54.2
+ curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | BINDIR=$(@D) sh -s v1.60.3
CALENS_DIR := $(shell mktemp -d)
$(CALENS):
@@ -87,7 +87,7 @@ docker-eos-full-tests:
# Test
################################################################################
-TEST = litmus-1 litmus-2 acceptance-1 acceptance-2
+TEST = litmus-1 litmus-2
export REVAD_IMAGE ?= revad-eos
export EOS_FULL_IMAGE ?= eos-full
export PARTS ?= 1
diff --git a/changelog/unreleased/enhance-ceph.md b/changelog/unreleased/enhance-ceph.md
new file mode 100644
index 0000000000..b4fc855ff7
--- /dev/null
+++ b/changelog/unreleased/enhance-ceph.md
@@ -0,0 +1,3 @@
+Enhancement: Refactor Ceph code
+
+https://github.com/cs3org/reva/pull/4824
diff --git a/changelog/unreleased/enhance-ci.md b/changelog/unreleased/enhance-ci.md
new file mode 100644
index 0000000000..2f6c8d24d3
--- /dev/null
+++ b/changelog/unreleased/enhance-ci.md
@@ -0,0 +1,3 @@
+Enhancement: Refactor CI jobs and bump to latest deps
+
+https://github.com/cs3org/reva/pull/4797
diff --git a/changelog/unreleased/locks-uploads.md b/changelog/unreleased/locks-uploads.md
new file mode 100644
index 0000000000..0c66fca473
--- /dev/null
+++ b/changelog/unreleased/locks-uploads.md
@@ -0,0 +1,6 @@
+Enhancement: Pass lock holder metadata on uploads
+
+We now pass relevant metadata (lock id and lock holder) downstream
+on uploads, and handle the case of conflicts due to lock mismatch.
+
+https://github.com/cs3org/reva/pull/4514
diff --git a/cmd/reva/grpc.go b/cmd/reva/grpc.go
index e7852b35f5..6ef7b66b46 100644
--- a/cmd/reva/grpc.go
+++ b/cmd/reva/grpc.go
@@ -57,14 +57,14 @@ func getClient() (gateway.GatewayAPIClient, error) {
func getConn() (*grpc.ClientConn, error) {
if insecure {
- return grpc.Dial(conf.Host, grpc.WithTransportCredentials(ins.NewCredentials()))
+ return grpc.NewClient(conf.Host, grpc.WithTransportCredentials(ins.NewCredentials()))
}
// TODO(labkode): if in the future we want client-side certificate validation,
// we need to load the client cert here
tlsconf := &tls.Config{InsecureSkipVerify: skipverify}
creds := credentials.NewTLS(tlsconf)
- return grpc.Dial(conf.Host, grpc.WithTransportCredentials(creds))
+ return grpc.NewClient(conf.Host, grpc.WithTransportCredentials(creds))
}
func formatError(status *rpc.Status) error {
diff --git a/cmd/reva/ls.go b/cmd/reva/ls.go
index a6b81f7602..bc6c0b7fef 100644
--- a/cmd/reva/ls.go
+++ b/cmd/reva/ls.go
@@ -72,7 +72,7 @@ func lsCommand() *command {
}
if len(w) == 0 {
if *longFlag {
- fmt.Printf("%s %d %d %v %s\n", info.Type, info.Mtime, info.Size, info.Id, p)
+ fmt.Printf("%s %s %d %v %s\n", info.Type, info.Mtime, info.Size, info.Id, p)
} else {
fmt.Println(p)
}
diff --git a/go.mod b/go.mod
index 4a26493062..43860145f6 100644
--- a/go.mod
+++ b/go.mod
@@ -9,11 +9,12 @@ require (
github.com/bluele/gcache v0.0.2
github.com/c-bata/go-prompt v0.2.6
github.com/ceph/go-ceph v0.26.0
+ github.com/cern-eos/go-eosgrpc v0.0.0-20240812132646-f105d2304f38
github.com/cheggaaa/pb v1.0.29
github.com/coreos/go-oidc/v3 v3.9.0
github.com/creasty/defaults v1.7.0
github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e
- github.com/cs3org/go-cs3apis v0.0.0-20230727093620-0f4399be4543
+ github.com/cs3org/go-cs3apis v0.0.0-20240802083356-d617314e1795
github.com/dgraph-io/ristretto v0.1.1
github.com/dolthub/go-mysql-server v0.14.0
github.com/gdexlab/go-render v1.0.1
@@ -33,6 +34,7 @@ require (
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0
github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.0
github.com/jedib0t/go-pretty v4.3.0+incompatible
+ github.com/jt-nti/gproto v0.0.0-20210304092907-23e645af1351
github.com/juliangruber/go-intersect v1.1.0
github.com/mattn/go-sqlite3 v1.14.22
github.com/maxymania/go-system v0.0.0-20170110133659-647cc364bf0b
@@ -53,14 +55,14 @@ require (
github.com/wk8/go-ordered-map v1.0.0
go.opencensus.io v0.24.0
go.step.sm/crypto v0.43.1
- golang.org/x/crypto v0.21.0
- golang.org/x/oauth2 v0.18.0
- golang.org/x/sync v0.6.0
- golang.org/x/sys v0.18.0
- golang.org/x/term v0.18.0
+ golang.org/x/crypto v0.23.0
+ golang.org/x/oauth2 v0.20.0
+ golang.org/x/sync v0.7.0
+ golang.org/x/sys v0.20.0
+ golang.org/x/term v0.20.0
google.golang.org/genproto v0.0.0-20240314234333-6e1732d8331c
- google.golang.org/grpc v1.62.1
- google.golang.org/protobuf v1.33.0
+ google.golang.org/grpc v1.65.0
+ google.golang.org/protobuf v1.34.1
gotest.tools v2.2.0+incompatible
)
@@ -73,7 +75,7 @@ require (
github.com/beorn7/perks v1.0.1 // indirect
github.com/bmizerany/pat v0.0.0-20210406213842-e4b6760bdd6f // indirect
github.com/cespare/xxhash v1.1.0 // indirect
- github.com/cespare/xxhash/v2 v2.2.0 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/dolthub/vitess v0.0.0-20221031111135-9aad77e7b39f // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
@@ -86,7 +88,7 @@ require (
github.com/go-openapi/errors v0.22.0 // indirect
github.com/go-openapi/strfmt v0.23.0 // indirect
github.com/gocraft/dbr/v2 v2.7.2 // indirect
- github.com/golang/glog v1.2.0 // indirect
+ github.com/golang/glog v1.2.1 // indirect
github.com/google/flatbuffers v2.0.8+incompatible // indirect
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 // indirect
github.com/hashicorp/golang-lru v1.0.2 // indirect
@@ -121,11 +123,10 @@ require (
go.opentelemetry.io/otel v1.23.1 // indirect
go.opentelemetry.io/otel/trace v1.23.1 // indirect
golang.org/x/mod v0.13.0 // indirect
- golang.org/x/net v0.23.0 // indirect
- golang.org/x/text v0.14.0 // indirect
+ golang.org/x/net v0.25.0 // indirect
+ golang.org/x/text v0.15.0 // indirect
golang.org/x/tools v0.14.0 // indirect
- google.golang.org/appengine v1.6.8 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20240314234333-6e1732d8331c // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 // indirect
gopkg.in/src-d/go-errors.v1 v1.0.0 // indirect
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
diff --git a/go.sum b/go.sum
index 78ba809f8d..6927c6794d 100644
--- a/go.sum
+++ b/go.sum
@@ -848,12 +848,15 @@ github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA
github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw=
github.com/ceph/go-ceph v0.26.0 h1:LZoATo25ZH5aeL5t85BwIbrNLKCDfcDM+e0qV0cmwHY=
github.com/ceph/go-ceph v0.26.0/go.mod h1:ISxb295GszZwtLPkeWi+L2uLYBVsqbsh0M104jZMOX4=
+github.com/cern-eos/go-eosgrpc v0.0.0-20240812132646-f105d2304f38 h1:+81ss4Vut1khzEhl7ximWF/V+EadspY47V4JrQkwlI4=
+github.com/cern-eos/go-eosgrpc v0.0.0-20240812132646-f105d2304f38/go.mod h1:ZiIzbg4sDO2MwYlspcnauUR2dfwZHUzxker+HP9k+20=
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cheggaaa/pb v1.0.29 h1:FckUN5ngEk2LpvuG0fw1GEFx6LtyY2pWI/Z2QgCnEYo=
github.com/cheggaaa/pb v1.0.29/go.mod h1:W40334L7FMC5JKWldsTWbdGjLo0RxUKK73K+TuPxX30=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
@@ -890,8 +893,8 @@ github.com/creasty/defaults v1.7.0 h1:eNdqZvc5B509z18lD8yc212CAqJNvfT1Jq6L8WowdB
github.com/creasty/defaults v1.7.0/go.mod h1:iGzKe6pbEHnpMPtfDXZEr0NVxWnPTjb1bbDy08fPzYM=
github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e h1:tqSPWQeueWTKnJVMJffz4pz0o1WuQxJ28+5x5JgaHD8=
github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e/go.mod h1:XJEZ3/EQuI3BXTp/6DUzFr850vlxq11I6satRtz0YQ4=
-github.com/cs3org/go-cs3apis v0.0.0-20230727093620-0f4399be4543 h1:IFo6dj0XEOIA6i2baRWMC3vd+fAmuIUAVfSf77ZhoQg=
-github.com/cs3org/go-cs3apis v0.0.0-20230727093620-0f4399be4543/go.mod h1:UXha4TguuB52H14EMoSsCqDj7k8a/t7g4gVP+bgY5LY=
+github.com/cs3org/go-cs3apis v0.0.0-20240802083356-d617314e1795 h1:8WkweBxMQ1W6IhcK0X3eWY+aQCjEktGwVt/4KLrtOZ8=
+github.com/cs3org/go-cs3apis v0.0.0-20240802083356-d617314e1795/go.mod h1:yyP8PRo0EZou3nSH7H4qjlzQwaydPeIRNgX50npQHpE=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -1025,8 +1028,8 @@ github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGw
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4=
github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ=
-github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68=
-github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
+github.com/golang/glog v1.2.1 h1:OptwRhECazUx5ix5TTWC3EZhsZEHWcYWY4FQHTIubm4=
+github.com/golang/glog v1.2.1/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -1216,6 +1219,8 @@ github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
+github.com/jt-nti/gproto v0.0.0-20210304092907-23e645af1351 h1:jYsiD6zdBzctjZ4sDB+gGJJPB3NROHrUuCp/wUj5p9Y=
+github.com/jt-nti/gproto v0.0.0-20210304092907-23e645af1351/go.mod h1:yfoLDf8VFUCWSxFJsPuQT5BlqdDbGkDl5m6hzABroMI=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/juliangruber/go-intersect v1.1.0 h1:sc+y5dCjMMx0pAdYk/N6KBm00tD/f3tq+Iox7dYDUrY=
github.com/juliangruber/go-intersect v1.1.0/go.mod h1:WMau+1kAmnlQnKiikekNJbtGtfmILU/mMU6H7AgKbWQ=
@@ -1360,6 +1365,7 @@ github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xl
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
+github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48=
github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8=
github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ=
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
@@ -1589,8 +1595,8 @@ golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIi
golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw=
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
-golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
-golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
+golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
+golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -1691,6 +1697,7 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
@@ -1725,8 +1732,8 @@ golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI=
-golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
-golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
+golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac=
+golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -1759,8 +1766,8 @@ golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4
golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE=
golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI=
golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk=
-golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI=
-golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8=
+golang.org/x/oauth2 v0.20.0 h1:4mQdhULixXKP1rwYBW0vAijoXnkTG0BLCDRzfe1idMo=
+golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -1779,8 +1786,8 @@ golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
-golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
-golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
+golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -1793,7 +1800,6 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190415081028-16da32be82c5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1896,8 +1902,8 @@ golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
-golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
+golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
@@ -1913,8 +1919,8 @@ golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o=
golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU=
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
-golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=
-golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
+golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw=
+golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1935,8 +1941,9 @@ golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
-golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
+golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
+golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -2109,11 +2116,8 @@ google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
-google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
@@ -2276,8 +2280,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130/go.
google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM=
google.golang.org/genproto/googleapis/rpc v0.0.0-20230731190214-cbb8c96f2d6d/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM=
google.golang.org/genproto/googleapis/rpc v0.0.0-20230807174057-1744710a1577/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240314234333-6e1732d8331c h1:lfpJ/2rWPa/kJgxyyXM8PrNnfCzcmxJ265mADgwmvLI=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240314234333-6e1732d8331c/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 h1:Zy9XzmMEflZ/MAaA7vNcoebnRAld7FsPW1EeBB7V0m8=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0=
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
@@ -2328,8 +2332,8 @@ google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGO
google.golang.org/grpc v1.56.1/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s=
google.golang.org/grpc v1.56.2/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s=
google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo=
-google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
-google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
+google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc=
+google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ=
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
@@ -2349,8 +2353,8 @@ google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqw
google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
-google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
+google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
+google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/Acconut/lockfile.v1 v1.1.0/go.mod h1:6UCz3wJ8tSFUsPR6uP/j8uegEtDuEEqFxlpi0JI4Umw=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
diff --git a/internal/grpc/services/gateway/appprovider.go b/internal/grpc/services/gateway/appprovider.go
index 8a345ba1dc..60c6b33443 100644
--- a/internal/grpc/services/gateway/appprovider.go
+++ b/internal/grpc/services/gateway/appprovider.go
@@ -308,12 +308,12 @@ func getGRPCConfig(opaque *typespb.Opaque) (bool, bool) {
func getConn(host string, ins, skipverify bool) (*grpc.ClientConn, error) {
if ins {
- return grpc.Dial(host, grpc.WithTransportCredentials(insecure.NewCredentials()))
+ return grpc.NewClient(host, grpc.WithTransportCredentials(insecure.NewCredentials()))
}
// TODO(labkode): if in the future we want client-side certificate validation,
// we need to load the client cert here
tlsconf := &tls.Config{InsecureSkipVerify: skipverify}
creds := credentials.NewTLS(tlsconf)
- return grpc.Dial(host, grpc.WithTransportCredentials(creds))
+ return grpc.NewClient(host, grpc.WithTransportCredentials(creds))
}
diff --git a/internal/grpc/services/gateway/gateway.go b/internal/grpc/services/gateway/gateway.go
index 20bea533e9..ebaf168985 100644
--- a/internal/grpc/services/gateway/gateway.go
+++ b/internal/grpc/services/gateway/gateway.go
@@ -71,6 +71,7 @@ type config struct {
EtagCacheTTL int `mapstructure:"etag_cache_ttl"`
AllowedUserAgents map[string][]string `mapstructure:"allowed_user_agents"` // map[path][]user-agent
CreateHomeCacheTTL int `mapstructure:"create_home_cache_ttl"`
+ HomeLayout string `mapstructure:"home_layout"`
}
// sets defaults.
@@ -111,6 +112,11 @@ func (c *config) ApplyDefaults() {
if c.TransferExpires == 0 {
c.TransferExpires = 100 * 60 // seconds
}
+
+ // default to /home
+ if c.HomeLayout == "" {
+ c.HomeLayout = "/home"
+ }
}
type svc struct {
diff --git a/internal/grpc/services/gateway/publicshareprovider.go b/internal/grpc/services/gateway/publicshareprovider.go
index c6e4142ae8..8111de49ad 100644
--- a/internal/grpc/services/gateway/publicshareprovider.go
+++ b/internal/grpc/services/gateway/publicshareprovider.go
@@ -21,7 +21,9 @@ package gateway
import (
"context"
+ gateway "github.com/cs3org/go-cs3apis/cs3/gateway/v1beta1"
rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1"
+ collaboration "github.com/cs3org/go-cs3apis/cs3/sharing/collaboration/v1beta1"
link "github.com/cs3org/go-cs3apis/cs3/sharing/link/v1beta1"
"github.com/cs3org/reva/pkg/appctx"
"github.com/cs3org/reva/pkg/errtypes"
@@ -99,6 +101,16 @@ func (s *svc) GetPublicShare(ctx context.Context, req *link.GetPublicShareReques
return pClient.GetPublicShare(ctx, req)
}
+func (s *svc) ListExistingPublicShares(ctx context.Context, req *link.ListPublicSharesRequest) (*gateway.ListExistingPublicSharesResponse, error) {
+ return nil, nil
+}
+func (s *svc) ListExistingReceivedShares(ctx context.Context, req *collaboration.ListReceivedSharesRequest) (*gateway.ListExistingReceivedSharesResponse, error) {
+ return nil, nil
+}
+func (s *svc) ListExistingShares(ctx context.Context, req *collaboration.ListSharesRequest) (*gateway.ListExistingSharesResponse, error) {
+ return nil, nil
+}
+
func (s *svc) ListPublicShares(ctx context.Context, req *link.ListPublicSharesRequest) (*link.ListPublicSharesResponse, error) {
log := appctx.GetLogger(ctx)
log.Info().Msg("listing public shares")
diff --git a/internal/grpc/services/gateway/spaces.go b/internal/grpc/services/gateway/spaces.go
new file mode 100644
index 0000000000..5a157694c4
--- /dev/null
+++ b/internal/grpc/services/gateway/spaces.go
@@ -0,0 +1,41 @@
+// Copyright 2018-2024 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 gateway
+
+import (
+ "context"
+
+ provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
+)
+
+func (s *svc) CreateStorageSpace(ctx context.Context, req *provider.CreateStorageSpaceRequest) (*provider.CreateStorageSpaceResponse, error) {
+ return nil, nil
+}
+
+func (s *svc) ListStorageSpaces(ctx context.Context, req *provider.ListStorageSpacesRequest) (*provider.ListStorageSpacesResponse, error) {
+ return nil, nil
+}
+
+func (s *svc) UpdateStorageSpace(ctx context.Context, req *provider.UpdateStorageSpaceRequest) (*provider.UpdateStorageSpaceResponse, error) {
+ return nil, nil
+}
+
+func (s *svc) DeleteStorageSpace(ctx context.Context, req *provider.DeleteStorageSpaceRequest) (*provider.DeleteStorageSpaceResponse, error) {
+ return nil, nil
+}
diff --git a/internal/grpc/services/gateway/storageprovider.go b/internal/grpc/services/gateway/storageprovider.go
index 086f3f95df..40fb72a4ab 100644
--- a/internal/grpc/services/gateway/storageprovider.go
+++ b/internal/grpc/services/gateway/storageprovider.go
@@ -24,12 +24,10 @@ import (
"net/url"
"path"
"strings"
- "sync"
"time"
gateway "github.com/cs3org/go-cs3apis/cs3/gateway/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"
registry "github.com/cs3org/go-cs3apis/cs3/storage/registry/v1beta1"
types "github.com/cs3org/go-cs3apis/cs3/types/v1beta1"
@@ -38,14 +36,13 @@ import (
"github.com/cs3org/reva/pkg/errtypes"
"github.com/cs3org/reva/pkg/rgrpc/status"
"github.com/cs3org/reva/pkg/rgrpc/todo/pool"
- "github.com/cs3org/reva/pkg/storage/utils/etag"
+ "github.com/cs3org/reva/pkg/storage/utils/templates"
"github.com/cs3org/reva/pkg/utils"
"github.com/golang-jwt/jwt"
"github.com/google/uuid"
"github.com/pkg/errors"
"google.golang.org/grpc/codes"
gstatus "google.golang.org/grpc/status"
- "google.golang.org/protobuf/types/known/fieldmaskpb"
)
// transferClaims are custom claims for a JWT token to be used between the metadata and data gateways.
@@ -81,7 +78,6 @@ func (s *svc) sign(_ context.Context, target, versionKey string) (string, error)
func (s *svc) CreateHome(ctx context.Context, req *provider.CreateHomeRequest) (*provider.CreateHomeResponse, error) {
log := appctx.GetLogger(ctx)
-
home := s.getHome(ctx)
c, err := s.findByPath(ctx, home)
if err != nil {
@@ -100,203 +96,6 @@ func (s *svc) CreateHome(ctx context.Context, req *provider.CreateHomeRequest) (
return res, nil
}
-func (s *svc) CreateStorageSpace(ctx context.Context, req *provider.CreateStorageSpaceRequest) (*provider.CreateStorageSpaceResponse, error) {
- log := appctx.GetLogger(ctx)
- // TODO: needs to be fixed
- c, err := s.findByPath(ctx, "/users")
- if err != nil {
- return &provider.CreateStorageSpaceResponse{
- Status: status.NewStatusFromErrType(ctx, "error finding path", err),
- }, nil
- }
-
- res, err := c.CreateStorageSpace(ctx, req)
- if err != nil {
- log.Err(err).Msg("gateway: error creating storage space on storage provider")
- return &provider.CreateStorageSpaceResponse{
- Status: status.NewInternal(ctx, err, "error calling CreateStorageSpace"),
- }, nil
- }
- return res, nil
-}
-
-func (s *svc) ListStorageSpaces(ctx context.Context, req *provider.ListStorageSpacesRequest) (*provider.ListStorageSpacesResponse, error) {
- log := appctx.GetLogger(ctx)
- var id *provider.StorageSpaceId
- for _, f := range req.Filters {
- if f.Type == provider.ListStorageSpacesRequest_Filter_TYPE_ID {
- id = f.GetId()
- }
- }
-
- var (
- providers []*registry.ProviderInfo
- err error
- )
- c, err := pool.GetStorageRegistryClient(pool.Endpoint(s.c.StorageRegistryEndpoint))
- if err != nil {
- return nil, errors.Wrap(err, "gateway: error getting storage registry client")
- }
-
- if id != nil {
- // query that specific storage provider
- storageid, opaqeid, err := utils.SplitStorageSpaceID(id.OpaqueId)
- if err != nil {
- return &provider.ListStorageSpacesResponse{
- Status: status.NewInvalidArg(ctx, "space id must be separated by !"),
- }, nil
- }
- res, err := c.GetStorageProviders(ctx, ®istry.GetStorageProvidersRequest{
- Ref: &provider.Reference{ResourceId: &provider.ResourceId{
- StorageId: storageid,
- OpaqueId: opaqeid,
- }},
- })
- if err != nil {
- return &provider.ListStorageSpacesResponse{
- Status: status.NewStatusFromErrType(ctx, "ListStorageSpaces filters: req "+req.String(), err),
- }, nil
- }
- if res.Status.Code != rpc.Code_CODE_OK {
- return &provider.ListStorageSpacesResponse{
- Status: res.Status,
- }, nil
- }
- providers = res.Providers
- } else {
- // get list of all storage providers
- res, err := c.ListStorageProviders(ctx, ®istry.ListStorageProvidersRequest{})
-
- if err != nil {
- return &provider.ListStorageSpacesResponse{
- Status: status.NewStatusFromErrType(ctx, "error listing providers", err),
- }, nil
- }
- if res.Status.Code != rpc.Code_CODE_OK {
- return &provider.ListStorageSpacesResponse{
- Status: res.Status,
- }, nil
- }
-
- providers = make([]*registry.ProviderInfo, 0, len(res.Providers))
- // FIXME filter only providers that have an id set ... currently none have?
- // bug? only ProviderPath is set
- for i := range res.Providers {
- // use only providers whose path does not start with a /?
- if strings.HasPrefix(res.Providers[i].ProviderPath, "/") {
- continue
- }
- providers = append(providers, res.Providers[i])
- }
- }
-
- spacesFromProviders := make([][]*provider.StorageSpace, len(providers))
- errors := make([]error, len(providers))
-
- var wg sync.WaitGroup
- for i, p := range providers {
- wg.Add(1)
- go s.listStorageSpacesOnProvider(ctx, req, &spacesFromProviders[i], p, &errors[i], &wg)
- }
- wg.Wait()
-
- uniqueSpaces := map[string]*provider.StorageSpace{}
- for i := range providers {
- if errors[i] != nil {
- if len(providers) > 1 {
- log.Debug().Err(errors[i]).Msg("skipping provider")
- continue
- }
- return &provider.ListStorageSpacesResponse{
- Status: status.NewStatusFromErrType(ctx, "error listing space", errors[i]),
- }, nil
- }
- for j := range spacesFromProviders[i] {
- uniqueSpaces[spacesFromProviders[i][j].Id.OpaqueId] = spacesFromProviders[i][j]
- }
- }
- spaces := make([]*provider.StorageSpace, 0, len(uniqueSpaces))
- for spaceID := range uniqueSpaces {
- spaces = append(spaces, uniqueSpaces[spaceID])
- }
- if len(spaces) == 0 {
- return &provider.ListStorageSpacesResponse{
- Status: status.NewNotFound(ctx, "space not found"),
- }, nil
- }
-
- return &provider.ListStorageSpacesResponse{
- Status: status.NewOK(ctx),
- StorageSpaces: spaces,
- }, nil
-}
-
-func (s *svc) listStorageSpacesOnProvider(ctx context.Context, req *provider.ListStorageSpacesRequest, res *[]*provider.StorageSpace, p *registry.ProviderInfo, e *error, wg *sync.WaitGroup) {
- defer wg.Done()
- c, err := s.getStorageProviderClient(ctx, p)
- if err != nil {
- *e = errors.Wrap(err, "error connecting to storage provider="+p.Address)
- return
- }
-
- r, err := c.ListStorageSpaces(ctx, req)
- if err != nil {
- *e = errors.Wrap(err, "gateway: error calling ListStorageSpaces")
- return
- }
-
- *res = r.StorageSpaces
-}
-
-func (s *svc) UpdateStorageSpace(ctx context.Context, req *provider.UpdateStorageSpaceRequest) (*provider.UpdateStorageSpaceResponse, error) {
- log := appctx.GetLogger(ctx)
- // TODO: needs to be fixed
- c, err := s.find(ctx, &provider.Reference{ResourceId: req.StorageSpace.Root})
- if err != nil {
- return &provider.UpdateStorageSpaceResponse{
- Status: status.NewStatusFromErrType(ctx, "error finding ID", err),
- }, nil
- }
-
- res, err := c.UpdateStorageSpace(ctx, req)
- if err != nil {
- log.Err(err).Msg("gateway: error creating update space on storage provider")
- return &provider.UpdateStorageSpaceResponse{
- Status: status.NewInternal(ctx, err, "error calling UpdateStorageSpace"),
- }, nil
- }
- return res, nil
-}
-
-func (s *svc) DeleteStorageSpace(ctx context.Context, req *provider.DeleteStorageSpaceRequest) (*provider.DeleteStorageSpaceResponse, error) {
- log := appctx.GetLogger(ctx)
- // TODO: needs to be fixed
- storageid, opaqeid, err := utils.SplitStorageSpaceID(req.Id.OpaqueId)
- if err != nil {
- return &provider.DeleteStorageSpaceResponse{
- Status: status.NewInvalidArg(ctx, "space id must be separated by !"),
- }, nil
- }
- c, err := s.find(ctx, &provider.Reference{ResourceId: &provider.ResourceId{
- StorageId: storageid,
- OpaqueId: opaqeid,
- }})
- if err != nil {
- return &provider.DeleteStorageSpaceResponse{
- Status: status.NewStatusFromErrType(ctx, "error finding path", err),
- }, nil
- }
-
- res, err := c.DeleteStorageSpace(ctx, req)
- if err != nil {
- log.Err(err).Msg("gateway: error deleting storage space on storage provider")
- return &provider.DeleteStorageSpaceResponse{
- Status: status.NewInternal(ctx, err, "error calling DeleteStorageSpace"),
- }, nil
- }
- return res, nil
-}
-
func (s *svc) GetHome(ctx context.Context, _ *provider.GetHomeRequest) (*provider.GetHomeResponse, error) {
return &provider.GetHomeResponse{
Path: s.getHome(ctx),
@@ -304,171 +103,30 @@ func (s *svc) GetHome(ctx context.Context, _ *provider.GetHomeRequest) (*provide
}, nil
}
-func (s *svc) getHome(_ context.Context) string {
- // TODO(labkode): issue #601, /home will be hardcoded.
- return "/home"
+func (s *svc) getHome(ctx context.Context) string {
+ u := appctx.ContextMustGetUser(ctx)
+ return templates.WithUser(u, s.c.HomeLayout)
}
func (s *svc) InitiateFileDownload(ctx context.Context, req *provider.InitiateFileDownloadRequest) (*gateway.InitiateFileDownloadResponse, error) {
- log := appctx.GetLogger(ctx)
-
if utils.IsRelativeReference(req.Ref) {
return s.initiateFileDownload(ctx, req)
}
- p, st := s.getPath(ctx, req.Ref)
- if st.Code != rpc.Code_CODE_OK {
- return &gateway.InitiateFileDownloadResponse{
- Status: st,
- }, nil
- }
-
- if !s.inSharedFolder(ctx, p) {
- statReq := &provider.StatRequest{Ref: req.Ref}
- statRes, err := s.stat(ctx, statReq)
- if err != nil {
- return &gateway.InitiateFileDownloadResponse{
- Status: status.NewInternal(ctx, err, "gateway: error stating ref:"+statReq.Ref.String()),
- }, nil
- }
- if statRes.Status.Code != rpc.Code_CODE_OK {
- return &gateway.InitiateFileDownloadResponse{
- Status: statRes.Status,
- }, nil
- }
- return s.initiateFileDownload(ctx, req)
- }
-
- if s.isSharedFolder(ctx, p) {
- log.Debug().Str("path", p).Msg("path points to shared folder")
- err := errtypes.PermissionDenied("gateway: cannot download share folder: path=" + p)
- log.Err(err).Msg("gateway: error downloading")
+ statReq := &provider.StatRequest{Ref: req.Ref}
+ statRes, err := s.stat(ctx, statReq)
+ if err != nil {
return &gateway.InitiateFileDownloadResponse{
- Status: status.NewInvalidArg(ctx, "path points to share folder"),
+ Status: status.NewInternal(ctx, err, "gateway: error stating ref:"+statReq.Ref.String()),
}, nil
}
-
- if s.isShareName(ctx, p) {
- statReq := &provider.StatRequest{Ref: req.Ref}
- statRes, err := s.stat(ctx, statReq)
- if err != nil {
- return &gateway.InitiateFileDownloadResponse{
- Status: status.NewInternal(ctx, err, "gateway: error stating ref:"+statReq.Ref.String()),
- }, nil
- }
- if statRes.Status.Code != rpc.Code_CODE_OK {
- return &gateway.InitiateFileDownloadResponse{
- Status: statRes.Status,
- }, nil
- }
-
- if statRes.Info.Type != provider.ResourceType_RESOURCE_TYPE_REFERENCE {
- err := errtypes.BadRequest(fmt.Sprintf("gateway: expected reference: got:%+v", statRes.Info))
- log.Err(err).Msg("gateway: error stating share name")
- return &gateway.InitiateFileDownloadResponse{
- Status: status.NewInternal(ctx, err, "gateway: error initiating download"),
- }, nil
- }
-
- ri, protocol, err := s.checkRef(ctx, statRes.Info)
- if err != nil {
- return &gateway.InitiateFileDownloadResponse{
- Status: status.NewStatusFromErrType(ctx, "error resolving reference "+statRes.Info.Target, err),
- }, nil
- }
-
- if protocol == "webdav" {
- // TODO(ishank011): pass this through the datagateway service
- // For now, we just expose the file server to the user
- ep, opaque, err := s.webdavRefTransferEndpoint(ctx, statRes.Info.Target)
- if err != nil {
- return &gateway.InitiateFileDownloadResponse{
- Status: status.NewInternal(ctx, err, "gateway: error downloading from webdav host: "+p),
- }, nil
- }
- return &gateway.InitiateFileDownloadResponse{
- Status: status.NewOK(ctx),
- Protocols: []*gateway.FileDownloadProtocol{
- {
- Opaque: opaque,
- Protocol: "simple",
- DownloadEndpoint: ep,
- },
- },
- }, nil
- }
-
- // if it is a file allow download
- if ri.Type == provider.ResourceType_RESOURCE_TYPE_FILE {
- log.Debug().Str("path", p).Interface("ri", ri).Msg("path points to share name file")
- req.Ref.Path = ri.Path
- log.Debug().Str("path", ri.Path).Msg("download")
- return s.initiateFileDownload(ctx, req)
- }
-
- log.Debug().Str("path", p).Interface("statRes", statRes).Msg("path:%s points to share name")
- err = errtypes.PermissionDenied("gateway: cannot download share name: path=" + p)
- log.Err(err).Str("path", p).Msg("gateway: error downloading")
+ if statRes.Status.Code != rpc.Code_CODE_OK {
return &gateway.InitiateFileDownloadResponse{
- Status: status.NewInvalidArg(ctx, "path points to share name"),
+ Status: statRes.Status,
}, nil
}
+ return s.initiateFileDownload(ctx, req)
- if s.isShareChild(ctx, p) {
- log.Debug().Msgf("shared child: %s", p)
- shareName, shareChild := s.splitShare(ctx, p)
-
- statReq := &provider.StatRequest{
- Ref: &provider.Reference{Path: shareName},
- }
- statRes, err := s.stat(ctx, statReq)
- if err != nil {
- return &gateway.InitiateFileDownloadResponse{
- Status: status.NewInternal(ctx, err, "gateway: error stating ref:"+statReq.Ref.String()),
- }, nil
- }
-
- if statRes.Status.Code != rpc.Code_CODE_OK {
- return &gateway.InitiateFileDownloadResponse{
- Status: statRes.Status,
- }, nil
- }
-
- ri, protocol, err := s.checkRef(ctx, statRes.Info)
- if err != nil {
- return &gateway.InitiateFileDownloadResponse{
- Status: status.NewStatusFromErrType(ctx, "error resolving reference "+statRes.Info.Target, err),
- }, nil
- }
-
- if protocol == "webdav" {
- // TODO(ishank011): pass this through the datagateway service
- // For now, we just expose the file server to the user
- ep, opaque, err := s.webdavRefTransferEndpoint(ctx, statRes.Info.Target, shareChild)
- if err != nil {
- return &gateway.InitiateFileDownloadResponse{
- Status: status.NewInternal(ctx, err, "gateway: error downloading from webdav host: "+p),
- }, nil
- }
- return &gateway.InitiateFileDownloadResponse{
- Status: status.NewOK(ctx),
- Protocols: []*gateway.FileDownloadProtocol{
- {
- Opaque: opaque,
- Protocol: "simple",
- DownloadEndpoint: ep,
- },
- },
- }, nil
- }
-
- // append child to target
- req.Ref.Path = path.Join(ri.Path, shareChild)
- log.Debug().Str("path", req.Ref.Path).Msg("download")
- return s.initiateFileDownload(ctx, req)
- }
-
- panic("gateway: download: unknown path:" + p)
}
func versionKey(req *provider.InitiateFileDownloadRequest) string {
@@ -538,148 +196,7 @@ func (s *svc) initiateFileDownload(ctx context.Context, req *provider.InitiateFi
}
func (s *svc) InitiateFileUpload(ctx context.Context, req *provider.InitiateFileUploadRequest) (*gateway.InitiateFileUploadResponse, error) {
- log := appctx.GetLogger(ctx)
- if utils.IsRelativeReference(req.Ref) {
- return s.initiateFileUpload(ctx, req)
- }
- p, st := s.getPath(ctx, req.Ref)
- if st.Code != rpc.Code_CODE_OK {
- return &gateway.InitiateFileUploadResponse{
- Status: st,
- }, nil
- }
-
- if !s.inSharedFolder(ctx, p) {
- return s.initiateFileUpload(ctx, req)
- }
-
- if s.isSharedFolder(ctx, p) {
- log.Debug().Str("path", p).Msg("path points to shared folder")
- err := errtypes.PermissionDenied("gateway: cannot upload to share folder: path=" + p)
- log.Err(err).Msg("gateway: error downloading")
- return &gateway.InitiateFileUploadResponse{
- Status: status.NewInvalidArg(ctx, "path points to share folder"),
- }, nil
- }
-
- if s.isShareName(ctx, p) {
- log.Debug().Str("path", p).Msg("path points to share name")
- statReq := &provider.StatRequest{Ref: req.Ref}
- statRes, err := s.stat(ctx, statReq)
- if err != nil {
- return &gateway.InitiateFileUploadResponse{
- Status: status.NewInternal(ctx, err, "gateway: error stating ref:"+statReq.Ref.String()),
- }, nil
- }
- if statRes.Status.Code != rpc.Code_CODE_OK {
- return &gateway.InitiateFileUploadResponse{
- Status: statRes.Status,
- }, nil
- }
-
- if statRes.Info.Type != provider.ResourceType_RESOURCE_TYPE_REFERENCE {
- err := errtypes.BadRequest(fmt.Sprintf("gateway: expected reference: got:%+v", statRes.Info))
- log.Err(err).Msg("gateway: error stating share name")
- return &gateway.InitiateFileUploadResponse{
- Status: status.NewInternal(ctx, err, "gateway: error initiating upload"),
- }, nil
- }
-
- ri, protocol, err := s.checkRef(ctx, statRes.Info)
- if err != nil {
- return &gateway.InitiateFileUploadResponse{
- Status: status.NewStatusFromErrType(ctx, "error resolving reference "+statRes.Info.Target, err),
- }, nil
- }
-
- if protocol == "webdav" {
- // TODO(ishank011): pass this through the datagateway service
- // For now, we just expose the file server to the user
- ep, opaque, err := s.webdavRefTransferEndpoint(ctx, statRes.Info.Target)
- if err != nil {
- return &gateway.InitiateFileUploadResponse{
- Status: status.NewInternal(ctx, err, "gateway: error downloading from webdav host: "+p),
- }, nil
- }
- return &gateway.InitiateFileUploadResponse{
- Status: status.NewOK(ctx),
- Protocols: []*gateway.FileUploadProtocol{
- {
- Opaque: opaque,
- Protocol: "simple",
- UploadEndpoint: ep,
- },
- },
- }, nil
- }
-
- // if it is a file allow upload
- if ri.Type == provider.ResourceType_RESOURCE_TYPE_FILE {
- log.Debug().Str("path", p).Interface("ri", ri).Msg("path points to share name file")
- req.Ref.Path = ri.Path
- log.Debug().Str("path", ri.Path).Msg("upload")
- return s.initiateFileUpload(ctx, req)
- }
-
- err = errtypes.PermissionDenied("gateway: cannot upload to share name: path=" + p)
- log.Err(err).Msg("gateway: error uploading")
- return &gateway.InitiateFileUploadResponse{
- Status: status.NewInvalidArg(ctx, "path points to share name"),
- }, nil
- }
-
- if s.isShareChild(ctx, p) {
- log.Debug().Msgf("shared child: %s", p)
- shareName, shareChild := s.splitShare(ctx, p)
-
- statReq := &provider.StatRequest{Ref: &provider.Reference{Path: shareName}}
- statRes, err := s.stat(ctx, statReq)
- if err != nil {
- return &gateway.InitiateFileUploadResponse{
- Status: status.NewInternal(ctx, err, "gateway: error stating ref:"+statReq.Ref.String()),
- }, nil
- }
-
- if statRes.Status.Code != rpc.Code_CODE_OK {
- return &gateway.InitiateFileUploadResponse{
- Status: statRes.Status,
- }, nil
- }
-
- ri, protocol, err := s.checkRef(ctx, statRes.Info)
- if err != nil {
- return &gateway.InitiateFileUploadResponse{
- Status: status.NewStatusFromErrType(ctx, "error resolving reference "+statRes.Info.Target, err),
- }, nil
- }
-
- if protocol == "webdav" {
- // TODO(ishank011): pass this through the datagateway service
- // For now, we just expose the file server to the user
- ep, opaque, err := s.webdavRefTransferEndpoint(ctx, statRes.Info.Target, shareChild)
- if err != nil {
- return &gateway.InitiateFileUploadResponse{
- Status: status.NewInternal(ctx, err, "gateway: error uploading to webdav host: "+p),
- }, nil
- }
- return &gateway.InitiateFileUploadResponse{
- Status: status.NewOK(ctx),
- Protocols: []*gateway.FileUploadProtocol{
- {
- Opaque: opaque,
- Protocol: "simple",
- UploadEndpoint: ep,
- },
- },
- }, nil
- }
-
- // append child to target
- req.Ref.Path = path.Join(ri.Path, shareChild)
- return s.initiateFileUpload(ctx, req)
- }
-
- panic("gateway: upload: unknown path:" + p)
+ return s.initiateFileUpload(ctx, req)
}
func (s *svc) initiateFileUpload(ctx context.Context, req *provider.InitiateFileUploadRequest) (*gateway.InitiateFileUploadResponse, error) {
@@ -704,6 +221,8 @@ func (s *svc) initiateFileUpload(ctx context.Context, req *provider.InitiateFile
}, nil
}
+ fmt.Println("debugging initiatefileupload response", storageRes)
+
protocols := make([]*gateway.FileUploadProtocol, len(storageRes.Protocols))
for p := range storageRes.Protocols {
protocols[p] = &gateway.FileUploadProtocol{
@@ -764,75 +283,11 @@ func (s *svc) GetPath(ctx context.Context, req *provider.GetPathRequest) (*provi
}
func (s *svc) CreateContainer(ctx context.Context, req *provider.CreateContainerRequest) (*provider.CreateContainerResponse, error) {
- log := appctx.GetLogger(ctx)
-
if utils.IsRelativeReference(req.Ref) {
return s.createContainer(ctx, req)
}
- p, st := s.getPath(ctx, req.Ref)
- if st.Code != rpc.Code_CODE_OK {
- return &provider.CreateContainerResponse{
- Status: st,
- }, nil
- }
-
- if !s.inSharedFolder(ctx, p) {
- return s.createContainer(ctx, req)
- }
-
- if s.isSharedFolder(ctx, p) || s.isShareName(ctx, p) {
- log.Debug().Msgf("path:%s points to shared folder or share name", p)
- err := errtypes.PermissionDenied("gateway: cannot create container on share folder or share name: path=" + p)
- log.Err(err).Msg("gateway: error creating container")
- return &provider.CreateContainerResponse{
- Status: status.NewInvalidArg(ctx, "path points to share folder or share name"),
- }, nil
- }
-
- if s.isShareChild(ctx, p) {
- log.Debug().Msgf("shared child: %s", p)
- shareName, shareChild := s.splitShare(ctx, p)
-
- statReq := &provider.StatRequest{Ref: &provider.Reference{Path: shareName}}
- statRes, err := s.stat(ctx, statReq)
- if err != nil {
- return &provider.CreateContainerResponse{
- Status: status.NewInternal(ctx, err, "gateway: error stating ref:"+statReq.Ref.String()),
- }, nil
- }
-
- if statRes.Status.Code != rpc.Code_CODE_OK {
- return &provider.CreateContainerResponse{
- Status: statRes.Status,
- }, nil
- }
-
- ri, protocol, err := s.checkRef(ctx, statRes.Info)
- if err != nil {
- return &provider.CreateContainerResponse{
- Status: status.NewStatusFromErrType(ctx, "error resolving reference "+statRes.Info.Target, err),
- }, nil
- }
-
- if protocol == "webdav" {
- err = s.webdavRefMkdir(ctx, statRes.Info.Target, shareChild)
- if err != nil {
- return &provider.CreateContainerResponse{
- Status: status.NewInternal(ctx, err, "gateway: error creating container on webdav host: "+p),
- }, nil
- }
- return &provider.CreateContainerResponse{
- Status: status.NewOK(ctx),
- }, nil
- }
-
- // append child to target
- req.Ref.Path = path.Join(ri.Path, shareChild)
- return s.createContainer(ctx, req)
- }
-
- panic("gateway: create container on unknown path:" + p)
+ return s.createContainer(ctx, req)
}
func (s *svc) createContainer(ctx context.Context, req *provider.CreateContainerRequest) (*provider.CreateContainerResponse, error) {
@@ -873,137 +328,8 @@ func (s *svc) TouchFile(ctx context.Context, req *provider.TouchFileRequest) (*p
return res, nil
}
-// check if the path contains the prefix of the shared folder.
-func (s *svc) inSharedFolder(ctx context.Context, p string) bool {
- sharedFolder := s.getSharedFolder(ctx)
- return strings.HasPrefix(p, sharedFolder)
-}
-
func (s *svc) Delete(ctx context.Context, req *provider.DeleteRequest) (*provider.DeleteResponse, error) {
- log := appctx.GetLogger(ctx)
- p, st := s.getPath(ctx, req.Ref)
- if st.Code != rpc.Code_CODE_OK {
- return &provider.DeleteResponse{
- Status: st,
- }, nil
- }
-
- if !s.inSharedFolder(ctx, p) {
- return s.delete(ctx, req)
- }
-
- if s.isSharedFolder(ctx, p) {
- // TODO(labkode): deleting share names should be allowed, means unmounting.
- return &provider.DeleteResponse{
- Status: status.NewInvalidArg(ctx, "path points to share folder or share name"),
- }, nil
- }
-
- if s.isShareName(ctx, p) {
- log.Debug().Msgf("path:%s points to share name", p)
-
- sRes, err := s.ListReceivedShares(ctx, &collaboration.ListReceivedSharesRequest{})
- if err != nil {
- return nil, err
- }
-
- statRes, err := s.Stat(ctx, &provider.StatRequest{
- Ref: &provider.Reference{
- Path: p,
- },
- })
- if err != nil {
- return nil, err
- }
-
- // the following will check that:
- // - the resource to delete is a share the current user received
- // - signal the storage the delete must not land in the trashbin
- // - delete the resource and update the share status to "rejected"
- for _, share := range sRes.Shares {
- if statRes != nil && (share.Share.ResourceId.OpaqueId == statRes.Info.Id.OpaqueId) && (share.Share.ResourceId.StorageId == statRes.Info.Id.StorageId) {
- // this opaque needs explanation. It signals the storage the resource we're about to delete does not
- // belong to the current user because it was share to her, thus delete the "node" and don't send it to
- // the trash bin, since the share can be mounted as many times as desired.
- req.Opaque = &types.Opaque{
- Map: map[string]*types.OpaqueEntry{
- "deleting_shared_resource": {
- Value: []byte("true"),
- Decoder: "plain",
- },
- },
- }
-
- // the following block takes care of updating the state of the share to "rejected". This will ensure the user
- // can "Accept" the share once again.
- // TODO should this be pending? If so, update the two comments above as well. If not, get rid of this comment.
- share.State = collaboration.ShareState_SHARE_STATE_REJECTED
- r := &collaboration.UpdateReceivedShareRequest{
- Share: share,
- UpdateMask: &fieldmaskpb.FieldMask{Paths: []string{"state"}},
- }
-
- _, err := s.UpdateReceivedShare(ctx, r)
- if err != nil {
- return nil, err
- }
-
- return &provider.DeleteResponse{
- Status: status.NewOK(ctx),
- }, nil
- }
- }
-
- return &provider.DeleteResponse{
- Status: status.NewNotFound(ctx, "could not find share"),
- }, nil
- }
-
- if s.isShareChild(ctx, p) {
- shareName, shareChild := s.splitShare(ctx, p)
- log.Debug().Msgf("path:%s sharename:%s sharechild: %s", p, shareName, shareChild)
-
- ref := &provider.Reference{Path: shareName}
-
- statReq := &provider.StatRequest{Ref: ref}
- statRes, err := s.stat(ctx, statReq)
- if err != nil {
- return &provider.DeleteResponse{
- Status: status.NewInternal(ctx, err, "gateway: error stating ref:"+statReq.Ref.String()),
- }, nil
- }
-
- if statRes.Status.Code != rpc.Code_CODE_OK {
- return &provider.DeleteResponse{
- Status: statRes.Status,
- }, nil
- }
-
- ri, protocol, err := s.checkRef(ctx, statRes.Info)
- if err != nil {
- return &provider.DeleteResponse{
- Status: status.NewStatusFromErrType(ctx, "error resolving reference "+statRes.Info.Target, err),
- }, nil
- }
-
- if protocol == "webdav" {
- err = s.webdavRefDelete(ctx, statRes.Info.Target, shareChild)
- if err != nil {
- return &provider.DeleteResponse{
- Status: status.NewInternal(ctx, err, "gateway: error deleting resource on webdav host: "+p),
- }, nil
- }
- return &provider.DeleteResponse{
- Status: status.NewOK(ctx),
- }, nil
- }
-
- // append child to target
- req.Ref.Path = path.Join(ri.Path, shareChild)
- return s.delete(ctx, req)
- }
-
- panic("gateway: delete called on unknown path:" + p)
+ return s.delete(ctx, req)
}
func (s *svc) delete(ctx context.Context, req *provider.DeleteRequest) (*provider.DeleteResponse, error) {
@@ -1027,118 +353,7 @@ func (s *svc) delete(ctx context.Context, req *provider.DeleteRequest) (*provide
}
func (s *svc) Move(ctx context.Context, req *provider.MoveRequest) (*provider.MoveResponse, error) {
- log := appctx.GetLogger(ctx)
- p, st := s.getPath(ctx, req.Source)
- if st.Code != rpc.Code_CODE_OK {
- return &provider.MoveResponse{
- Status: st,
- }, nil
- }
-
- dp, st := s.getPath(ctx, req.Destination)
- if st.Code != rpc.Code_CODE_OK && st.Code != rpc.Code_CODE_NOT_FOUND {
- return &provider.MoveResponse{
- Status: st,
- }, nil
- }
-
- if !s.inSharedFolder(ctx, p) && !s.inSharedFolder(ctx, dp) {
- return s.move(ctx, req)
- }
-
- // allow renaming the share folder, the mount point, not the target.
- if s.isShareName(ctx, p) && s.isShareName(ctx, dp) {
- log.Info().Msgf("gateway: move: renaming share mountpoint: from:%s to:%s", p, dp)
- return s.move(ctx, req)
- }
-
- // resolve references and check the ref points to the same base path, paranoia check.
- if s.isShareChild(ctx, p) && s.isShareChild(ctx, dp) {
- shareName, shareChild := s.splitShare(ctx, p)
- dshareName, dshareChild := s.splitShare(ctx, dp)
- log.Debug().Msgf("srcpath:%s dstpath:%s srcsharename:%s srcsharechild: %s dstsharename:%s dstsharechild:%s ", p, dp, shareName, shareChild, dshareName, dshareChild)
-
- srcStatReq := &provider.StatRequest{Ref: &provider.Reference{Path: shareName}}
- srcStatRes, err := s.stat(ctx, srcStatReq)
- if err != nil {
- return &provider.MoveResponse{
- Status: status.NewInternal(ctx, err, "gateway: error stating ref:"+srcStatReq.Ref.String()),
- }, nil
- }
-
- if srcStatRes.Status.Code != rpc.Code_CODE_OK {
- return &provider.MoveResponse{
- Status: srcStatRes.Status,
- }, nil
- }
-
- dstStatReq := &provider.StatRequest{Ref: &provider.Reference{Path: dshareName}}
- dstStatRes, err := s.stat(ctx, dstStatReq)
- if err != nil {
- return &provider.MoveResponse{
- Status: status.NewInternal(ctx, err, "gateway: error stating ref:"+srcStatReq.Ref.String()),
- }, nil
- }
-
- if dstStatRes.Status.Code != rpc.Code_CODE_OK {
- return &provider.MoveResponse{
- Status: srcStatRes.Status,
- }, nil
- }
-
- srcRi, srcProtocol, err := s.checkRef(ctx, srcStatRes.Info)
- if err != nil {
- return &provider.MoveResponse{
- Status: status.NewStatusFromErrType(ctx, "error resolving reference "+srcStatRes.Info.Target, err),
- }, nil
- }
-
- if srcProtocol == "webdav" {
- err = s.webdavRefMove(ctx, dstStatRes.Info.Target, shareChild, dshareChild)
- if err != nil {
- return &provider.MoveResponse{
- Status: status.NewInternal(ctx, err, "gateway: error moving resource on webdav host: "+p),
- }, nil
- }
- return &provider.MoveResponse{
- Status: status.NewOK(ctx),
- }, nil
- }
- dstRi, dstProtocol, err := s.checkRef(ctx, dstStatRes.Info)
- if err != nil {
- return &provider.MoveResponse{
- Status: status.NewStatusFromErrType(ctx, "error resolving reference "+srcStatRes.Info.Target, err),
- }, nil
- }
-
- if dstProtocol == "webdav" {
- err = s.webdavRefMove(ctx, dstStatRes.Info.Target, shareChild, dshareChild)
- if err != nil {
- return &provider.MoveResponse{
- Status: status.NewInternal(ctx, err, "gateway: error moving resource on webdav host: "+p),
- }, nil
- }
- return &provider.MoveResponse{
- Status: status.NewOK(ctx),
- }, nil
- }
-
- src := &provider.Reference{
- Path: path.Join(srcRi.Path, shareChild),
- }
- dst := &provider.Reference{
- Path: path.Join(dstRi.Path, dshareChild),
- }
-
- req.Source = src
- req.Destination = dst
-
- return s.move(ctx, req)
- }
-
- return &provider.MoveResponse{
- Status: status.NewStatusFromErrType(ctx, "move", errtypes.BadRequest("gateway: move called on unknown path: "+p)),
- }, nil
+ return s.move(ctx, req)
}
func (s *svc) move(ctx context.Context, req *provider.MoveRequest) (*provider.MoveResponse, error) {
@@ -1248,151 +463,60 @@ func (s *svc) SetLock(ctx context.Context, req *provider.SetLockRequest) (*provi
func (s *svc) GetLock(ctx context.Context, req *provider.GetLockRequest) (*provider.GetLockResponse, error) {
c, err := s.find(ctx, req.Ref)
if err != nil {
- return &provider.GetLockResponse{
- Status: status.NewStatusFromErrType(ctx, "GetLock ref="+req.Ref.String(), err),
- }, nil
- }
-
- res, err := c.GetLock(ctx, req)
- if err != nil {
- if gstatus.Code(err) == codes.PermissionDenied {
- return &provider.GetLockResponse{Status: &rpc.Status{Code: rpc.Code_CODE_PERMISSION_DENIED}}, nil
- }
- return nil, errors.Wrap(err, "gateway: error calling GetLock")
- }
-
- return res, nil
-}
-
-// RefreshLock refreshes an existing lock on the given reference.
-func (s *svc) RefreshLock(ctx context.Context, req *provider.RefreshLockRequest) (*provider.RefreshLockResponse, error) {
- c, err := s.find(ctx, req.Ref)
- if err != nil {
- return &provider.RefreshLockResponse{
- Status: status.NewStatusFromErrType(ctx, "RefreshLock ref="+req.Ref.String(), err),
- }, nil
- }
-
- res, err := c.RefreshLock(ctx, req)
- if err != nil {
- if gstatus.Code(err) == codes.PermissionDenied {
- return &provider.RefreshLockResponse{Status: &rpc.Status{Code: rpc.Code_CODE_PERMISSION_DENIED}}, nil
- }
- return nil, errors.Wrap(err, "gateway: error calling RefreshLock")
- }
-
- return res, nil
-}
-
-// Unlock removes an existing lock from the given reference.
-func (s *svc) Unlock(ctx context.Context, req *provider.UnlockRequest) (*provider.UnlockResponse, error) {
- c, err := s.find(ctx, req.Ref)
- if err != nil {
- return &provider.UnlockResponse{
- Status: status.NewStatusFromErrType(ctx, "Unlock ref="+req.Ref.String(), err),
- }, nil
- }
-
- res, err := c.Unlock(ctx, req)
- if err != nil {
- if gstatus.Code(err) == codes.PermissionDenied {
- return &provider.UnlockResponse{Status: &rpc.Status{Code: rpc.Code_CODE_PERMISSION_DENIED}}, nil
- }
- return nil, errors.Wrap(err, "gateway: error calling Unlock")
- }
-
- return res, nil
-}
-
-func (s *svc) statHome(ctx context.Context) (*provider.StatResponse, error) {
- statRes, err := s.stat(ctx, &provider.StatRequest{Ref: &provider.Reference{Path: s.getHome(ctx)}})
- if err != nil {
- return &provider.StatResponse{
- Status: status.NewInternal(ctx, err, "gateway: error stating home"),
- }, nil
- }
-
- if statRes.Status.Code != rpc.Code_CODE_OK {
- return &provider.StatResponse{
- Status: statRes.Status,
- }, nil
- }
-
- statSharedFolder, err := s.statSharesFolder(ctx)
- if err != nil {
- return &provider.StatResponse{
- Status: status.NewInternal(ctx, err, "gateway: error stating shares folder"),
- }, nil
- }
- if statSharedFolder.Status.Code != rpc.Code_CODE_OK {
- // If shares folder is not found, skip updating the etag
- if statSharedFolder.Status.Code == rpc.Code_CODE_NOT_FOUND {
- return statRes, nil
- }
- // otherwise return stat of share folder
- return &provider.StatResponse{
- Status: statSharedFolder.Status,
+ return &provider.GetLockResponse{
+ Status: status.NewStatusFromErrType(ctx, "GetLock ref="+req.Ref.String(), err),
}, nil
}
- if etagIface, err := s.etagCache.Get(statRes.Info.Owner.OpaqueId + ":" + statRes.Info.Path); err == nil {
- resMtime := utils.TSToTime(statRes.Info.Mtime)
- resEtag := etagIface.(etagWithTS)
- // Use the updated etag if the home folder has been modified
- if resMtime.Before(resEtag.Timestamp) {
- statRes.Info.Etag = resEtag.Etag
- }
- } else {
- statRes.Info.Etag = etag.GenerateEtagFromResources(statRes.Info, []*provider.ResourceInfo{statSharedFolder.Info})
- if s.c.EtagCacheTTL > 0 {
- _ = s.etagCache.Set(statRes.Info.Owner.OpaqueId+":"+statRes.Info.Path, etagWithTS{statRes.Info.Etag, time.Now()})
+ res, err := c.GetLock(ctx, req)
+ if err != nil {
+ if gstatus.Code(err) == codes.PermissionDenied {
+ return &provider.GetLockResponse{Status: &rpc.Status{Code: rpc.Code_CODE_PERMISSION_DENIED}}, nil
}
+ return nil, errors.Wrap(err, "gateway: error calling GetLock")
}
- return statRes, nil
+ return res, nil
}
-func (s *svc) statSharesFolder(ctx context.Context) (*provider.StatResponse, error) {
- statRes, err := s.stat(ctx, &provider.StatRequest{Ref: &provider.Reference{Path: s.getSharedFolder(ctx)}})
+// RefreshLock refreshes an existing lock on the given reference.
+func (s *svc) RefreshLock(ctx context.Context, req *provider.RefreshLockRequest) (*provider.RefreshLockResponse, error) {
+ c, err := s.find(ctx, req.Ref)
if err != nil {
- return &provider.StatResponse{
- Status: status.NewInternal(ctx, err, "gateway: error stating shares folder"),
+ return &provider.RefreshLockResponse{
+ Status: status.NewStatusFromErrType(ctx, "RefreshLock ref="+req.Ref.String(), err),
}, nil
}
- if statRes.Status.Code != rpc.Code_CODE_OK {
- return &provider.StatResponse{
- Status: statRes.Status,
- }, nil
+ res, err := c.RefreshLock(ctx, req)
+ if err != nil {
+ if gstatus.Code(err) == codes.PermissionDenied {
+ return &provider.RefreshLockResponse{Status: &rpc.Status{Code: rpc.Code_CODE_PERMISSION_DENIED}}, nil
+ }
+ return nil, errors.Wrap(err, "gateway: error calling RefreshLock")
}
- lsRes, err := s.listSharesFolder(ctx)
+ return res, nil
+}
+
+// Unlock removes an existing lock from the given reference.
+func (s *svc) Unlock(ctx context.Context, req *provider.UnlockRequest) (*provider.UnlockResponse, error) {
+ c, err := s.find(ctx, req.Ref)
if err != nil {
- return &provider.StatResponse{
- Status: status.NewInternal(ctx, err, "gateway: error listing shares folder"),
- }, nil
- }
- if lsRes.Status.Code != rpc.Code_CODE_OK {
- return &provider.StatResponse{
- Status: lsRes.Status,
+ return &provider.UnlockResponse{
+ Status: status.NewStatusFromErrType(ctx, "Unlock ref="+req.Ref.String(), err),
}, nil
}
- if etagIface, err := s.etagCache.Get(statRes.Info.Owner.OpaqueId + ":" + statRes.Info.Path); err == nil {
- resMtime := utils.TSToTime(statRes.Info.Mtime)
- resEtag := etagIface.(etagWithTS)
- // Use the updated etag if the shares folder has been modified, i.e., a new
- // reference has been created.
- if resMtime.Before(resEtag.Timestamp) {
- statRes.Info.Etag = resEtag.Etag
- }
- } else {
- statRes.Info.Etag = etag.GenerateEtagFromResources(statRes.Info, lsRes.Infos)
- if s.c.EtagCacheTTL > 0 {
- _ = s.etagCache.Set(statRes.Info.Owner.OpaqueId+":"+statRes.Info.Path, etagWithTS{statRes.Info.Etag, time.Now()})
+ res, err := c.Unlock(ctx, req)
+ if err != nil {
+ if gstatus.Code(err) == codes.PermissionDenied {
+ return &provider.UnlockResponse{Status: &rpc.Status{Code: rpc.Code_CODE_PERMISSION_DENIED}}, nil
}
+ return nil, errors.Wrap(err, "gateway: error calling Unlock")
}
- return statRes, nil
+
+ return res, nil
}
func (s *svc) stat(ctx context.Context, req *provider.StatRequest) (*provider.StatResponse, error) {
@@ -1443,147 +567,7 @@ func (s *svc) Stat(ctx context.Context, req *provider.StatRequest) (*provider.St
if utils.IsRelativeReference(req.Ref) {
return s.stat(ctx, req)
}
-
- p := ""
- var res *provider.StatResponse
- var err error
- if utils.IsAbsolutePathReference(req.Ref) {
- p = req.Ref.Path
- } else {
- // Reference by just resource ID
- // Stat it and store for future use
- res, err = s.stat(ctx, req)
- if err != nil {
- return &provider.StatResponse{
- Status: status.NewInternal(ctx, err, "gateway: error stating ref:"+req.Ref.String()),
- }, nil
- }
- if res != nil && res.Status.Code != rpc.Code_CODE_OK {
- return res, nil
- }
- p = res.Info.Path
- }
-
- if path.Clean(p) == s.getHome(ctx) {
- return s.statHome(ctx)
- }
-
- if s.isSharedFolder(ctx, p) {
- return s.statSharesFolder(ctx)
- }
-
- if !s.inSharedFolder(ctx, p) {
- if res != nil {
- return res, nil
- }
- return s.stat(ctx, req)
- }
-
- // we need to provide the info of the target, not the reference.
- if s.isShareName(ctx, p) {
- // If we haven't returned an error by now and res is nil, it means that
- // req is an absolute path based ref, so we didn't stat it previously.
- // So stat it now
- if res == nil {
- res, err = s.stat(ctx, req)
- if err != nil {
- return &provider.StatResponse{
- Status: status.NewInternal(ctx, err, "gateway: error stating ref:"+req.Ref.String()),
- }, nil
- }
-
- if res.Status.Code != rpc.Code_CODE_OK {
- return &provider.StatResponse{
- Status: res.Status,
- }, nil
- }
- }
-
- ri, protocol, err := s.checkRef(ctx, res.Info)
- if err != nil {
- return &provider.StatResponse{
- Status: status.NewStatusFromErrType(ctx, "error resolving reference "+res.Info.Target, err),
- }, nil
- }
-
- if protocol == "webdav" {
- ri, err = s.webdavRefStat(ctx, res.Info.Target)
- if err != nil {
- return &provider.StatResponse{
- Status: status.NewInternal(ctx, err, "gateway: error resolving webdav reference: "+p),
- }, nil
- }
- }
-
- // we need to make sure we don't expose the reference target in the resource
- // information. For example, if requests comes to: /home/MyShares/photos and photos
- // is reference to /user/peter/Holidays/photos, we need to still return to the user
- // /home/MyShares/photos
- orgPath := res.Info.Path
- res.Info = ri
- res.Info.Path = orgPath
- return res, nil
- }
-
- if s.isShareChild(ctx, p) {
- shareName, shareChild := s.splitShare(ctx, p)
-
- statReq := &provider.StatRequest{Ref: &provider.Reference{Path: shareName}}
- statRes, err := s.stat(ctx, statReq)
- if err != nil {
- return &provider.StatResponse{
- Status: status.NewInternal(ctx, err, "gateway: error stating ref:"+statReq.Ref.String()),
- }, nil
- }
-
- if statRes.Status.Code != rpc.Code_CODE_OK {
- return &provider.StatResponse{
- Status: statRes.Status,
- }, nil
- }
-
- ri, protocol, err := s.checkRef(ctx, statRes.Info)
- if err != nil {
- return &provider.StatResponse{
- Status: status.NewStatusFromErrType(ctx, "error resolving reference "+statRes.Info.Target, err),
- }, nil
- }
-
- if protocol == "webdav" {
- ri, err = s.webdavRefStat(ctx, statRes.Info.Target, shareChild)
- if err != nil {
- return &provider.StatResponse{
- Status: status.NewInternal(ctx, err, "gateway: error resolving webdav reference: "+p),
- }, nil
- }
- ri.Path = p
- return &provider.StatResponse{
- Status: status.NewOK(ctx),
- Info: ri,
- }, nil
- }
-
- // append child to target
- req.Ref.Path = path.Join(ri.Path, shareChild)
- res, err := s.stat(ctx, req)
- if err != nil {
- return &provider.StatResponse{
- Status: status.NewInternal(ctx, err, "gateway: error stating ref:"+req.Ref.String()),
- }, nil
- }
- if res.Status.Code != rpc.Code_CODE_OK {
- return &provider.StatResponse{
- Status: res.Status,
- }, nil
- }
-
- // we need to make sure we don't expose the reference target in the resource
- // information.
- res.Info.Path = p
- return res, nil
- }
-
- panic("gateway: stating an unknown path:" + p)
+ return s.stat(ctx, req)
}
func (s *svc) checkRef(ctx context.Context, ri *provider.ResourceInfo) (*provider.ResourceInfo, string, error) {
@@ -1665,83 +649,6 @@ func (s *svc) ListContainerStream(_ *provider.ListContainerStreamRequest, _ gate
return errtypes.NotSupported("Unimplemented")
}
-func (s *svc) listHome(ctx context.Context, req *provider.ListContainerRequest) (*provider.ListContainerResponse, error) {
- lcr, err := s.listContainer(ctx, &provider.ListContainerRequest{
- Ref: &provider.Reference{Path: s.getHome(ctx)},
- ArbitraryMetadataKeys: req.ArbitraryMetadataKeys,
- })
- if err != nil {
- return &provider.ListContainerResponse{
- Status: status.NewInternal(ctx, err, "gateway: error listing home"),
- }, nil
- }
- if lcr.Status.Code != rpc.Code_CODE_OK {
- return &provider.ListContainerResponse{
- Status: lcr.Status,
- }, nil
- }
-
- for i := range lcr.Infos {
- if s.isSharedFolder(ctx, lcr.Infos[i].GetPath()) {
- statSharedFolder, err := s.statSharesFolder(ctx)
- if err != nil {
- return &provider.ListContainerResponse{
- Status: status.NewInternal(ctx, err, "gateway: error stating shares folder"),
- }, nil
- }
- if statSharedFolder.Status.Code != rpc.Code_CODE_OK {
- return &provider.ListContainerResponse{
- Status: statSharedFolder.Status,
- }, nil
- }
- lcr.Infos[i] = statSharedFolder.Info
- break
- }
- }
-
- return lcr, nil
-}
-
-func (s *svc) listSharesFolder(ctx context.Context) (*provider.ListContainerResponse, error) {
- lcr, err := s.listContainer(ctx, &provider.ListContainerRequest{Ref: &provider.Reference{Path: s.getSharedFolder(ctx)}})
- if err != nil {
- return &provider.ListContainerResponse{
- Status: status.NewInternal(ctx, err, "gateway: error listing shared folder"),
- }, nil
- }
- if lcr.Status.Code != rpc.Code_CODE_OK {
- return &provider.ListContainerResponse{
- Status: lcr.Status,
- }, nil
- }
- checkedInfos := make([]*provider.ResourceInfo, 0)
- for i := range lcr.Infos {
- info, protocol, err := s.checkRef(ctx, lcr.Infos[i])
- if err != nil {
- // create status to log the proper messages
- // this might arise when the shared resource has been moved to the recycle bin
- // this might arise when the resource was unshared, but the share reference was not removed
- status.NewStatusFromErrType(ctx, "error resolving reference "+lcr.Infos[i].Target, err)
- // continue on errors so the user can see a list of the working shares
- continue
- }
-
- if protocol == "webdav" {
- info, err = s.webdavRefStat(ctx, lcr.Infos[i].Target)
- if err != nil {
- // Might be the case that the webdav token has expired
- continue
- }
- }
-
- info.Path = lcr.Infos[i].Path
- checkedInfos = append(checkedInfos, info)
- }
- lcr.Infos = checkedInfos
-
- return lcr, nil
-}
-
func (s *svc) filterProvidersByUserAgent(ctx context.Context, providers []*registry.ProviderInfo) []*registry.ProviderInfo {
cat, ok := appctx.ContextGetUserAgentCategory(ctx)
if !ok {
@@ -1858,183 +765,7 @@ func (s *svc) listContainerAcrossProviders(ctx context.Context, req *provider.Li
}
func (s *svc) ListContainer(ctx context.Context, req *provider.ListContainerRequest) (*provider.ListContainerResponse, error) {
- log := appctx.GetLogger(ctx)
-
- if utils.IsRelativeReference(req.Ref) {
- return s.listContainer(ctx, req)
- }
-
- p, st := s.getPath(ctx, req.Ref, req.ArbitraryMetadataKeys...)
- if st.Code != rpc.Code_CODE_OK {
- return &provider.ListContainerResponse{
- Status: st,
- }, nil
- }
-
- if path.Clean(p) == s.getHome(ctx) {
- return s.listHome(ctx, req)
- }
-
- if s.isSharedFolder(ctx, p) {
- return s.listSharesFolder(ctx)
- }
-
- if !s.inSharedFolder(ctx, p) {
- return s.listContainer(ctx, req)
- }
-
- // we need to provide the info of the target, not the reference.
- if s.isShareName(ctx, p) {
- statReq := &provider.StatRequest{Ref: &provider.Reference{Path: p}}
- statRes, err := s.stat(ctx, statReq)
- if err != nil {
- return &provider.ListContainerResponse{
- Status: status.NewInternal(ctx, err, "gateway: error stating share:"+statReq.Ref.String()),
- }, nil
- }
-
- if statRes.Status.Code != rpc.Code_CODE_OK {
- return &provider.ListContainerResponse{
- Status: statRes.Status,
- }, nil
- }
-
- ri, protocol, err := s.checkRef(ctx, statRes.Info)
- if err != nil {
- return &provider.ListContainerResponse{
- Status: status.NewStatusFromErrType(ctx, "error resolving reference "+statRes.Info.Target, err),
- }, nil
- }
-
- if protocol == "webdav" {
- infos, err := s.webdavRefLs(ctx, statRes.Info.Target)
- if err != nil {
- return &provider.ListContainerResponse{
- Status: status.NewInternal(ctx, err, "gateway: error listing webdav reference: "+p),
- }, nil
- }
-
- for _, info := range infos {
- base := path.Base(info.Path)
- info.Path = path.Join(p, base)
- }
- return &provider.ListContainerResponse{
- Status: status.NewOK(ctx),
- Infos: infos,
- }, nil
- }
-
- if ri.Type != provider.ResourceType_RESOURCE_TYPE_CONTAINER {
- err := errtypes.NotSupported("gateway: list container: cannot list non-container type:" + ri.Path)
- log.Err(err).Msg("gateway: error listing")
- return &provider.ListContainerResponse{
- Status: status.NewInvalidArg(ctx, "resource is not a container"),
- }, nil
- }
-
- newReq := &provider.ListContainerRequest{
- Ref: &provider.Reference{Path: ri.Path},
- ArbitraryMetadataKeys: req.ArbitraryMetadataKeys,
- }
- newRes, err := s.listContainer(ctx, newReq)
- if err != nil {
- return &provider.ListContainerResponse{
- Status: status.NewInternal(ctx, err, "gateway: error listing "+newReq.Ref.String()),
- }, nil
- }
-
- if newRes.Status.Code != rpc.Code_CODE_OK {
- return &provider.ListContainerResponse{
- Status: newRes.Status,
- }, nil
- }
-
- // paths needs to be converted
- for _, info := range newRes.Infos {
- base := path.Base(info.Path)
- info.Path = path.Join(p, base)
- }
-
- return newRes, nil
- }
-
- if s.isShareChild(ctx, p) {
- shareName, shareChild := s.splitShare(ctx, p)
-
- statReq := &provider.StatRequest{Ref: &provider.Reference{Path: shareName}}
- statRes, err := s.stat(ctx, statReq)
- if err != nil {
- return &provider.ListContainerResponse{
- Status: status.NewInternal(ctx, err, "gateway: error stating share child "+statReq.Ref.String()),
- }, nil
- }
-
- if statRes.Status.Code != rpc.Code_CODE_OK {
- return &provider.ListContainerResponse{
- Status: statRes.Status,
- }, nil
- }
-
- ri, protocol, err := s.checkRef(ctx, statRes.Info)
- if err != nil {
- return &provider.ListContainerResponse{
- Status: status.NewStatusFromErrType(ctx, "error resolving reference "+statRes.Info.Target, err),
- }, nil
- }
-
- if protocol == "webdav" {
- infos, err := s.webdavRefLs(ctx, statRes.Info.Target, shareChild)
- if err != nil {
- return &provider.ListContainerResponse{
- Status: status.NewInternal(ctx, err, "gateway: error listing webdav reference: "+p),
- }, nil
- }
-
- for _, info := range infos {
- base := path.Base(info.Path)
- info.Path = path.Join(shareName, shareChild, base)
- }
- return &provider.ListContainerResponse{
- Status: status.NewOK(ctx),
- Infos: infos,
- }, nil
- }
-
- if ri.Type != provider.ResourceType_RESOURCE_TYPE_CONTAINER {
- err := errtypes.NotSupported("gateway: list container: cannot list non-container type:" + ri.Path)
- log.Err(err).Msg("gateway: error listing")
- return &provider.ListContainerResponse{
- Status: status.NewInvalidArg(ctx, "resource is not a container"),
- }, nil
- }
-
- newReq := &provider.ListContainerRequest{
- Ref: &provider.Reference{Path: path.Join(ri.Path, shareChild)},
- ArbitraryMetadataKeys: req.ArbitraryMetadataKeys,
- }
- newRes, err := s.listContainer(ctx, newReq)
- if err != nil {
- return &provider.ListContainerResponse{
- Status: status.NewInternal(ctx, err, "gateway: error listing "+newReq.Ref.String()),
- }, nil
- }
-
- if newRes.Status.Code != rpc.Code_CODE_OK {
- return &provider.ListContainerResponse{
- Status: newRes.Status,
- }, nil
- }
-
- // paths needs to be converted
- for _, info := range newRes.Infos {
- base := path.Base(info.Path)
- info.Path = path.Join(shareName, shareChild, base)
- }
-
- return newRes, nil
- }
-
- panic("gateway: stating an unknown path:" + p)
+ return s.listContainer(ctx, req)
}
func (s *svc) getPath(ctx context.Context, ref *provider.Reference, keys ...string) (string, *rpc.Status) {
@@ -2121,12 +852,6 @@ func (s *svc) splitPath(_ context.Context, p string) []string {
return strings.SplitN(p, "/", 4) // ["home", "MyShares", "photos", "Ibiza/beach.png"]
}
-func (s *svc) getSharedFolder(ctx context.Context) string {
- home := s.getHome(ctx)
- shareFolder := path.Join(home, s.c.ShareFolder)
- return shareFolder
-}
-
func (s *svc) CreateSymlink(ctx context.Context, req *provider.CreateSymlinkRequest) (*provider.CreateSymlinkResponse, error) {
return &provider.CreateSymlinkResponse{
Status: status.NewUnimplemented(ctx, errtypes.NotSupported("CreateSymlink not implemented"), "CreateSymlink not implemented"),
diff --git a/internal/grpc/services/storageprovider/storageprovider.go b/internal/grpc/services/storageprovider/storageprovider.go
index bad19304f1..a4bd157ea6 100644
--- a/internal/grpc/services/storageprovider/storageprovider.go
+++ b/internal/grpc/services/storageprovider/storageprovider.go
@@ -175,6 +175,10 @@ func New(ctx context.Context, m map[string]interface{}) (rgrpc.Service, error) {
return nil, err
}
+ if fs == nil {
+ return nil, errors.New("error creating fs driver")
+ }
+
// parse data server url
u, err := url.Parse(c.DataServerURL)
if err != nil {
@@ -284,10 +288,10 @@ func (s *service) SetLock(ctx context.Context, req *provider.SetLockRequest) (*p
var st *rpc.Status
switch err.(type) {
case errtypes.IsNotFound:
- st = status.NewNotFound(ctx, "path not found when setting lock")
+ st = status.NewNotFound(ctx, "resource not found when setting lock")
case errtypes.PermissionDenied:
st = status.NewPermissionDenied(ctx, err, "permission denied")
- case errtypes.BadRequest:
+ case errtypes.Conflict:
st = status.NewFailedPrecondition(ctx, err, "reference already locked")
default:
st = status.NewInternal(ctx, err, "error setting lock: "+req.Ref.String())
@@ -924,17 +928,7 @@ func (s *service) ListContainerStream(req *provider.ListContainerStreamRequest,
func (s *service) ListContainer(ctx context.Context, req *provider.ListContainerRequest) (*provider.ListContainerResponse, error) {
newRef, err := s.unwrap(ctx, req.Ref)
- if err != nil {
- // The path might be a virtual view; handle that case
- if utils.IsAbsolutePathReference(req.Ref) && strings.HasPrefix(s.mountPath, req.Ref.Path) {
- return s.listVirtualView(ctx, req.Ref)
- }
-
- return &provider.ListContainerResponse{
- Status: status.NewInternal(ctx, err, "error unwrapping path"),
- }, nil
- }
-
+ fmt.Println("debugging: storageprovider: ", req, newRef)
mds, err := s.storage.ListFolder(ctx, newRef, req.ArbitraryMetadataKeys)
if err != nil {
var st *rpc.Status
@@ -1544,14 +1538,18 @@ func (s *service) unwrap(ctx context.Context, ref *provider.Reference) (*provide
// TODO move mount path trimming to the gateway
fn, err := s.trimMountPrefix(ref.GetPath())
if err != nil {
+ fmt.Println("debugging: problem found", fn, err)
return nil, err
}
return &provider.Reference{Path: fn}, nil
}
func (s *service) trimMountPrefix(fn string) (string, error) {
+ fmt.Println("debugging trimMountPrefix", fn, s.mountPath, len(fn), len(s.mountPath))
if strings.HasPrefix(fn, s.mountPath) {
- return path.Join("/", strings.TrimPrefix(fn, s.mountPath)), nil
+ p := path.Join("/", strings.TrimPrefix(fn, s.mountPath))
+ fmt.Println("debugging we are here", p)
+ return p, nil
}
return "", errtypes.BadRequest(fmt.Sprintf("path=%q does not belong to this storage provider mount path=%q", fn, s.mountPath))
}
diff --git a/internal/http/services/datagateway/datagateway.go b/internal/http/services/datagateway/datagateway.go
index 605cd5cc88..3c30677849 100644
--- a/internal/http/services/datagateway/datagateway.go
+++ b/internal/http/services/datagateway/datagateway.go
@@ -21,6 +21,7 @@ package datagateway
import (
"context"
"crypto/tls"
+ "fmt"
"io"
"net/http"
"net/url"
@@ -322,7 +323,7 @@ func (s *svc) doPut(w http.ResponseWriter, r *http.Request) {
return
}
httpReq.Header = r.Header
-
+ fmt.Println("debugging PUT", httpReq, claims, target)
httpRes, err := httpClient.Do(httpReq)
if err != nil {
log.Err(err).Msg("error doing PUT request to data service")
diff --git a/internal/http/services/owncloud/ocdav/ocdav.go b/internal/http/services/owncloud/ocdav/ocdav.go
index 4e996c1ee4..0b14453dfb 100644
--- a/internal/http/services/owncloud/ocdav/ocdav.go
+++ b/internal/http/services/owncloud/ocdav/ocdav.go
@@ -30,7 +30,6 @@ import (
"time"
gateway "github.com/cs3org/go-cs3apis/cs3/gateway/v1beta1"
- userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
"github.com/cs3org/reva/pkg/appctx"
"github.com/cs3org/reva/pkg/errtypes"
@@ -42,7 +41,6 @@ import (
"github.com/cs3org/reva/pkg/sharedconf"
"github.com/cs3org/reva/pkg/storage/favorite"
"github.com/cs3org/reva/pkg/storage/favorite/registry"
- "github.com/cs3org/reva/pkg/storage/utils/templates"
"github.com/cs3org/reva/pkg/utils/cfg"
"github.com/pkg/errors"
)
@@ -291,19 +289,22 @@ func (s *svc) getClient() (gateway.GatewayAPIClient, error) {
}
func applyLayout(ctx context.Context, ns string, useLoggedInUserNS bool, requestPath string) string {
+ return ns
// If useLoggedInUserNS is false, that implies that the request is coming from
// the FilesHandler method invoked by a /dav/files/fileOwner where fileOwner
// is not the same as the logged in user. In that case, we'll treat fileOwner
// as the username whose files are to be accessed and use that in the
// namespace template.
- u, ok := appctx.ContextGetUser(ctx)
- if !ok || !useLoggedInUserNS {
- requestUserID, _ := router.ShiftPath(requestPath)
- u = &userpb.User{
- Username: requestUserID,
+ /*
+ u, ok := appctx.ContextGetUser(ctx)
+ if !ok || !useLoggedInUserNS {
+ requestUserID, _ := router.ShiftPath(requestPath)
+ u = &userpb.User{
+ Username: requestUserID,
+ }
}
- }
- return templates.WithUser(u, ns)
+ return templates.WithUser(u, ns)
+ */
}
func addAccessHeaders(w http.ResponseWriter, r *http.Request) {
diff --git a/internal/http/services/owncloud/ocdav/propfind.go b/internal/http/services/owncloud/ocdav/propfind.go
index d762f63edf..8fb457cb3f 100644
--- a/internal/http/services/owncloud/ocdav/propfind.go
+++ b/internal/http/services/owncloud/ocdav/propfind.go
@@ -70,6 +70,7 @@ const (
func (s *svc) handlePathPropfind(w http.ResponseWriter, r *http.Request, ns string) {
ctx := r.Context()
fn := path.Join(ns, r.URL.Path)
+ fmt.Println("debugging fn", fn)
sublog := appctx.GetLogger(ctx).With().Str("path", fn).Logger()
@@ -81,6 +82,7 @@ func (s *svc) handlePathPropfind(w http.ResponseWriter, r *http.Request, ns stri
}
ref := &provider.Reference{Path: fn}
+ fmt.Println("debugging reference inside webdav", fn)
parentInfo, resourceInfos, ok := s.getResourceInfos(ctx, w, r, pf, ref, false, sublog)
if !ok {
@@ -260,6 +262,8 @@ func (s *svc) getResourceInfos(ctx context.Context, w http.ResponseWriter, r *ht
Ref: ref,
ArbitraryMetadataKeys: metadataKeys,
}
+
+ fmt.Println("debugging request for", req)
res, err := client.Stat(ctx, req)
if err != nil {
log.Error().Err(err).Interface("req", req).Msg("error sending a grpc stat request")
@@ -279,6 +283,7 @@ func (s *svc) getResourceInfos(ctx context.Context, w http.ResponseWriter, r *ht
HandleErrorStatus(&log, w, res.Status)
return nil, nil, false
}
+ fmt.Println("debugging after client.stat", res)
if spacesPropfind {
res.Info.Path = ref.Path
@@ -326,6 +331,7 @@ func (s *svc) getResourceInfos(ctx context.Context, w http.ResponseWriter, r *ht
Ref: ref,
ArbitraryMetadataKeys: metadataKeys,
}
+ fmt.Println("debugging: ListContainer: ", req)
res, err := client.ListContainer(ctx, req)
if err != nil {
log.Error().Err(err).Msg("error sending list container grpc request")
@@ -337,6 +343,7 @@ func (s *svc) getResourceInfos(ctx context.Context, w http.ResponseWriter, r *ht
HandleErrorStatus(&log, w, res.Status)
return nil, nil, false
}
+ fmt.Println("debugging: ListContainer: ", res)
resourceInfos = append(resourceInfos, res.Infos...)
case depth == "infinity":
diff --git a/internal/http/services/owncloud/ocdav/put.go b/internal/http/services/owncloud/ocdav/put.go
index b813244fb0..e9a000b1bf 100644
--- a/internal/http/services/owncloud/ocdav/put.go
+++ b/internal/http/services/owncloud/ocdav/put.go
@@ -271,6 +271,12 @@ func (s *svc) handlePut(ctx context.Context, w http.ResponseWriter, r *http.Requ
return
}
httpReq.Header.Set(datagateway.TokenTransportHeader, token)
+ if lockid := r.Header.Get(HeaderLockID); lockid != "" {
+ httpReq.Header.Set(HeaderLockID, lockid)
+ }
+ if lockholder := r.Header.Get(HeaderLockHolder); lockholder != "" {
+ httpReq.Header.Set(HeaderLockHolder, lockholder)
+ }
httpRes, err := s.client.Do(httpReq)
if err != nil {
diff --git a/internal/http/services/owncloud/ocdav/webdav.go b/internal/http/services/owncloud/ocdav/webdav.go
index 60ad87fdbf..1a5f0f89d1 100644
--- a/internal/http/services/owncloud/ocdav/webdav.go
+++ b/internal/http/services/owncloud/ocdav/webdav.go
@@ -19,6 +19,7 @@
package ocdav
import (
+ "fmt"
"net/http"
"path"
)
@@ -76,6 +77,8 @@ const (
HeaderOCMtime = "X-OC-Mtime"
HeaderExpectedEntityLength = "X-Expected-Entity-Length"
HeaderTransferAuth = "TransferHeaderAuthorization"
+ HeaderLockID = "X-Lock-Id"
+ HeaderLockHolder = "X-Lock-Holder"
)
// WebDavHandler implements a dav endpoint.
@@ -94,6 +97,7 @@ func (h *WebDavHandler) init(ns string, useLoggedInUserNS bool) error {
func (h *WebDavHandler) Handler(s *svc) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ns := applyLayout(r.Context(), h.namespace, h.useLoggedInUserNS, r.URL.Path)
+ fmt.Println("debugging webdav layout: ", ns, r.Context(), h.namespace, h.useLoggedInUserNS, r.URL.Path)
switch r.Method {
case MethodPropfind:
s.handlePathPropfind(w, r, ns)
diff --git a/internal/http/services/owncloud/ocs/data/capabilities.go b/internal/http/services/owncloud/ocs/data/capabilities.go
index 7fc6dcaedf..18a93c8676 100644
--- a/internal/http/services/owncloud/ocs/data/capabilities.go
+++ b/internal/http/services/owncloud/ocs/data/capabilities.go
@@ -53,7 +53,7 @@ type Capabilities struct {
Core *CapabilitiesCore `json:"core" xml:"core"`
Checksums *CapabilitiesChecksums `json:"checksums" xml:"checksums"`
Files *CapabilitiesFiles `json:"files" mapstructure:"files" xml:"files"`
- Dav *CapabilitiesDav `json:"dav" xml:"dav"`
+ Dav *CapabilitiesDav `json:"dav" mapstructure:"dav" xml:"dav"`
FilesSharing *CapabilitiesFilesSharing `json:"files_sharing" mapstructure:"files_sharing" xml:"files_sharing"`
Spaces *Spaces `json:"spaces,omitempty" mapstructure:"spaces" xml:"spaces,omitempty"`
diff --git a/internal/http/services/owncloud/ocs/handlers/cloud/capabilities/uploads.go b/internal/http/services/owncloud/ocs/handlers/cloud/capabilities/uploads.go
index 26d3ddfb6c..014575a92d 100644
--- a/internal/http/services/owncloud/ocs/handlers/cloud/capabilities/uploads.go
+++ b/internal/http/services/owncloud/ocs/handlers/cloud/capabilities/uploads.go
@@ -49,32 +49,41 @@ func (h *Handler) getCapabilitiesForUserAgent(_ context.Context, userAgent strin
}
func setCapabilitiesForChunkProtocol(cp chunkProtocol, c *data.Capabilities) {
- switch cp {
- case chunkV1:
- // 2.7+ will use Chunking V1 if "capabilities > files > bigfilechunking" is "true" AND "capabilities > dav > chunking" is not there
- c.Files.BigFileChunking = true
- c.Dav = nil
- c.Files.TusSupport = nil
+ // 2.7+ will use Chunking V1 if "capabilities > files > bigfilechunking" is "true" AND "capabilities > dav > chunking" is not there
+ c.Files.BigFileChunking = true
+ c.Dav = nil
+ c.Files.TusSupport = nil
+ /*
+ switch cp {
+ case chunkV1:
- case chunkNG:
- // 2.7+ will use Chunking NG if "capabilities > files > bigfilechunking" is "true" AND "capabilities > dav > chunking" = 1.0
- c.Files.BigFileChunking = true
- c.Dav.Chunking = "1.0"
- c.Files.TusSupport = nil
+ // 2.7+ will use Chunking V1 if "capabilities > files > bigfilechunking" is "true" AND "capabilities > dav > chunking" is not there
+ c.Files.BigFileChunking = true
+ c.Dav = nil
+ c.Files.TusSupport = nil
- case chunkTUS:
- // 2.7+ will use TUS if "capabilities > files > bigfilechunking" is "false" AND "capabilities > dav > chunking" = "" AND "capabilities > files > tus_support" has proper entries.
- c.Files.BigFileChunking = false
- c.Dav.Chunking = ""
+ case chunkNG:
- // TODO: infer from various TUS handlers from all known storages
- // until now we take the manually configured tus options
- // c.Capabilities.Files.TusSupport = &data.CapabilitiesFilesTusSupport{
- // Version: "1.0.0",
- // Resumable: "1.0.0",
- // Extension: "creation,creation-with-upload",
- // MaxChunkSize: 0,
- // HTTPMethodOverride: "",
- // }
- }
+ // 2.7+ will use Chunking NG if "capabilities > files > bigfilechunking" is "true" AND "capabilities > dav > chunking" = 1.0
+ c.Files.BigFileChunking = true
+ c.Dav.Chunking = "1.0"
+ c.Files.TusSupport = nil
+
+ case chunkTUS:
+
+ // 2.7+ will use TUS if "capabilities > files > bigfilechunking" is "false" AND "capabilities > dav > chunking" = "" AND "capabilities > files > tus_support" has proper entries.
+ c.Files.BigFileChunking = false
+ c.Dav.Chunking = ""
+
+ // TODO: infer from various TUS handlers from all known storages
+ // until now we take the manually configured tus options
+ // c.Capabilities.Files.TusSupport = &data.CapabilitiesFilesTusSupport{
+ // Version: "1.0.0",
+ // Resumable: "1.0.0",
+ // Extension: "creation,creation-with-upload",
+ // MaxChunkSize: 0,
+ // HTTPMethodOverride: "",
+ // }
+ }
+ */
}
diff --git a/internal/http/services/pingpong/pingpong.go b/internal/http/services/pingpong/pingpong.go
index cb896e37dc..22b85cd726 100644
--- a/internal/http/services/pingpong/pingpong.go
+++ b/internal/http/services/pingpong/pingpong.go
@@ -97,7 +97,7 @@ func (s *svc) Handler() http.Handler {
}
func (s *svc) getClient() (proto.PingPongServiceClient, error) {
- conn, err := grpc.Dial(
+ conn, err := grpc.NewClient(
s.conf.Endpoint,
grpc.WithTransportCredentials(insecure.NewCredentials()),
)
diff --git a/pkg/appauth/manager/json/json_test.go b/pkg/appauth/manager/json/json_test.go.disabled
similarity index 100%
rename from pkg/appauth/manager/json/json_test.go
rename to pkg/appauth/manager/json/json_test.go.disabled
diff --git a/pkg/auth/manager/ldap/ldap.go b/pkg/auth/manager/ldap/ldap.go
index 16374226e0..7bfe436564 100644
--- a/pkg/auth/manager/ldap/ldap.go
+++ b/pkg/auth/manager/ldap/ldap.go
@@ -124,7 +124,7 @@ func (am *mgr) Authenticate(ctx context.Context, clientID, clientSecret string)
log := appctx.GetLogger(ctx)
l, err := utils.GetLDAPConnection(&am.c.LDAPConn)
if err != nil {
- return nil, nil, err
+ return nil, nil, errors.Wrap(err, "error creating ldap connection")
}
defer l.Close()
@@ -139,10 +139,10 @@ func (am *mgr) Authenticate(ctx context.Context, clientID, clientSecret string)
sr, err := l.Search(searchRequest)
if err != nil {
- return nil, nil, err
+ return nil, nil, errors.Wrapf(err, "error searching. seachrequest = %+v", searchRequest)
}
- log.Trace().Interface("entries", sr.Entries).Send()
+ log.Debug().Interface("entries", sr.Entries).Send()
if len(sr.Entries) != 1 {
return nil, nil, errtypes.NotFound(clientID)
}
@@ -153,7 +153,7 @@ func (am *mgr) Authenticate(ctx context.Context, clientID, clientSecret string)
err = l.Bind(userdn, clientSecret)
if err != nil {
log.Debug().Err(err).Interface("userdn", userdn).Msg("bind with user credentials failed")
- return nil, nil, err
+ return nil, nil, errors.Wrapf(err, "error binding with user credentials for user %s", userdn)
}
userID := &user.UserId{
@@ -193,7 +193,7 @@ func (am *mgr) Authenticate(ctx context.Context, clientID, clientSecret string)
u := &user.User{
Id: userID,
// TODO add more claims from the StandardClaims, eg EmailVerified
- Username: sr.Entries[0].GetEqualFoldAttributeValue(am.c.Schema.CN),
+ Username: sr.Entries[0].GetEqualFoldAttributeValue(am.c.Schema.UID),
// TODO groups
Groups: getGroupsResp.Groups,
Mail: sr.Entries[0].GetEqualFoldAttributeValue(am.c.Schema.Mail),
diff --git a/pkg/auth/manager/nextcloud/nextcloud.go b/pkg/auth/manager/nextcloud/nextcloud.go
index 29ecb77c0f..65c408fec3 100644
--- a/pkg/auth/manager/nextcloud/nextcloud.go
+++ b/pkg/auth/manager/nextcloud/nextcloud.go
@@ -132,7 +132,7 @@ func (am *Manager) do(ctx context.Context, a Action) (int, []byte, error) {
log.Info().Msgf("am.do response %d %s", resp.StatusCode, body)
if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
- return 0, nil, fmt.Errorf("Unexpected response code from EFSS API: " + strconv.Itoa(resp.StatusCode))
+ return 0, nil, fmt.Errorf("Unexpected response code from EFSS API: %s", strconv.Itoa(resp.StatusCode))
}
return resp.StatusCode, body, nil
}
diff --git a/pkg/datatx/manager/rclone/rclone.go b/pkg/datatx/manager/rclone/rclone.go
index de14886f5c..f5a313ccb4 100644
--- a/pkg/datatx/manager/rclone/rclone.go
+++ b/pkg/datatx/manager/rclone/rclone.go
@@ -631,7 +631,7 @@ func (driver *rclone) CancelTransfer(ctx context.Context, transferID string) (*d
_, endStatusFound := txEndStatuses[job.TransferStatus.String()]
if endStatusFound {
- err := errors.Wrapf(errors.New("rclone driver: job already in end state"), transferRemovedMessage)
+ err := errors.Wrap(errors.New("rclone driver: job already in end state"), transferRemovedMessage)
return &datatx.TxInfo{
Id: &datatx.TxId{OpaqueId: transferID},
Status: datatx.Status_STATUS_INVALID,
@@ -649,7 +649,7 @@ func (driver *rclone) CancelTransfer(ctx context.Context, transferID string) (*d
data, err := json.Marshal(rcloneCancelTransferReq)
if err != nil {
- err := errors.Wrapf(errors.New("rclone driver: error marshalling rclone job/stop req data"), transferRemovedMessage)
+ err := errors.Wrap(errors.New("rclone driver: error marshalling rclone job/stop req data"), transferRemovedMessage)
return &datatx.TxInfo{
Id: &datatx.TxId{OpaqueId: transferID},
Status: datatx.Status_STATUS_INVALID,
@@ -661,7 +661,7 @@ func (driver *rclone) CancelTransfer(ctx context.Context, transferID string) (*d
u, err := url.Parse(driver.config.Endpoint)
if err != nil {
- err := errors.Wrapf(errors.New("rclone driver: error parsing driver endpoint"), transferRemovedMessage)
+ err := errors.Wrap(errors.New("rclone driver: error parsing driver endpoint"), transferRemovedMessage)
return &datatx.TxInfo{
Id: &datatx.TxId{OpaqueId: transferID},
Status: datatx.Status_STATUS_INVALID,
@@ -673,7 +673,7 @@ func (driver *rclone) CancelTransfer(ctx context.Context, transferID string) (*d
req, err := http.NewRequest(http.MethodPost, requestURL, bytes.NewReader(data))
if err != nil {
- err := errors.Wrapf(errors.New("rclone driver: error framing post request"), transferRemovedMessage)
+ err := errors.Wrap(errors.New("rclone driver: error framing post request"), transferRemovedMessage)
return &datatx.TxInfo{
Id: &datatx.TxId{OpaqueId: transferID},
Status: datatx.Status_STATUS_INVALID,
@@ -686,7 +686,7 @@ func (driver *rclone) CancelTransfer(ctx context.Context, transferID string) (*d
res, err := driver.client.Do(req)
if err != nil {
- err := errors.Wrapf(errors.New("rclone driver: error sending post request"), transferRemovedMessage)
+ err := errors.Wrap(errors.New("rclone driver: error sending post request"), transferRemovedMessage)
return &datatx.TxInfo{
Id: &datatx.TxId{OpaqueId: transferID},
Status: datatx.Status_STATUS_INVALID,
@@ -699,7 +699,7 @@ func (driver *rclone) CancelTransfer(ctx context.Context, transferID string) (*d
if res.StatusCode != http.StatusOK {
var errorResData rcloneHTTPErrorRes
if err = json.NewDecoder(res.Body).Decode(&errorResData); err != nil {
- err := errors.Wrapf(errors.New("rclone driver: error decoding response data"), transferRemovedMessage)
+ err := errors.Wrap(errors.New("rclone driver: error decoding response data"), transferRemovedMessage)
return &datatx.TxInfo{
Id: &datatx.TxId{OpaqueId: transferID},
Status: datatx.Status_STATUS_INVALID,
@@ -728,7 +728,7 @@ func (driver *rclone) CancelTransfer(ctx context.Context, transferID string) (*d
}
var resData rcloneCancelTransferResJSON
if err = json.NewDecoder(res.Body).Decode(&resData); err != nil {
- err := errors.Wrapf(errors.New("rclone driver: error decoding response data"), transferRemovedMessage)
+ err := errors.Wrap(errors.New("rclone driver: error decoding response data"), transferRemovedMessage)
return &datatx.TxInfo{
Id: &datatx.TxId{OpaqueId: transferID},
Status: datatx.Status_STATUS_INVALID,
diff --git a/pkg/eosclient/eosbinary/eosbinary.go b/pkg/eosclient/eosbinary/eosbinary.go
index ecdf8f4f51..10189b7daf 100644
--- a/pkg/eosclient/eosbinary/eosbinary.go
+++ b/pkg/eosclient/eosbinary/eosbinary.go
@@ -203,6 +203,11 @@ func (c *Client) executeXRDCopy(ctx context.Context, cmdArgs []string) (string,
err = errtypes.InvalidCredentials("eosclient: no sufficient permissions for the operation")
}
+ // check for lock mismatch error
+ if strings.Contains(errBuf.String(), "file has a valid extended attribute lock") {
+ err = errtypes.Conflict("eosclient: lock mismatch")
+ }
+
args := fmt.Sprintf("%s", cmd.Args)
env := fmt.Sprintf("%s", cmd.Env)
log.Info().Str("args", args).Str("env", env).Int("exit", exitStatus).Msg("eos cmd")
@@ -455,7 +460,7 @@ func (c *Client) mergeACLsAndAttrsForFiles(ctx context.Context, auth eosclient.A
}
// SetAttr sets an extended attributes on a path.
-func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, errorIfExists, recursive bool, path string) error {
+func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, errorIfExists, recursive bool, path, app string) error {
if !isValidAttribute(attr) {
return errors.New("eos: attr is invalid: " + serializeAttribute(attr))
}
@@ -468,11 +473,15 @@ func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr
}
return c.handleFavAttr(ctx, auth, attr, recursive, path, info, true)
}
- return c.setEOSAttr(ctx, auth, attr, errorIfExists, recursive, path)
+ return c.setEOSAttr(ctx, auth, attr, errorIfExists, recursive, path, app)
}
-func (c *Client) setEOSAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, errorIfExists, recursive bool, path string) error {
- args := []string{"attr"}
+func (c *Client) setEOSAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, errorIfExists, recursive bool, path, app string) error {
+ args := []string{}
+ if app != "" {
+ args = append(args, "-a", app)
+ }
+ args = append(args, "attr")
if recursive {
args = append(args, "-r")
}
@@ -485,9 +494,12 @@ func (c *Client) setEOSAttr(ctx context.Context, auth eosclient.Authorization, a
_, _, err := c.executeEOS(ctx, args, auth)
if err != nil {
var exErr *exec.ExitError
- if errors.As(err, &exErr) && exErr.ExitCode() == 17 {
+ if errors.As(err, &exErr) && exErr.ExitCode() == 17 { // EEXIST
return eosclient.AttrAlreadyExistsError
}
+ if errors.As(err, &exErr) && exErr.ExitCode() == 16 { // EBUSY -> Locked
+ return eosclient.FileIsLockedError
+ }
return err
}
return nil
@@ -516,11 +528,11 @@ func (c *Client) handleFavAttr(ctx context.Context, auth eosclient.Authorization
favs.DeleteEntry(acl.TypeUser, u.Id.OpaqueId)
}
attr.Val = favs.Serialize()
- return c.setEOSAttr(ctx, auth, attr, false, recursive, path)
+ return c.setEOSAttr(ctx, auth, attr, false, recursive, path, "")
}
// UnsetAttr unsets an extended attribute on a path.
-func (c *Client) UnsetAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, recursive bool, path string) error {
+func (c *Client) UnsetAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, recursive bool, path, app string) error {
if !isValidAttribute(attr) {
return errors.New("eos: attr is invalid: " + serializeAttribute(attr))
}
@@ -536,11 +548,15 @@ func (c *Client) UnsetAttr(ctx context.Context, auth eosclient.Authorization, at
}
var args []string
+ if app != "" {
+ args = append(args, "-a", app)
+ }
+ args = append(args, "attr")
if recursive {
- args = []string{"attr", "-r", "rm", fmt.Sprintf("%s.%s", attrTypeToString(attr.Type), attr.Key), path}
- } else {
- args = []string{"attr", "rm", fmt.Sprintf("%s.%s", attrTypeToString(attr.Type), attr.Key), path}
+ args = append(args, "-r")
}
+ args = append(args, "rm", fmt.Sprintf("%s.%s", attrTypeToString(attr.Type), attr.Key), path)
+
_, _, err = c.executeEOS(ctx, args, auth)
if err != nil {
var exErr *exec.ExitError
@@ -707,7 +723,7 @@ func (c *Client) Read(ctx context.Context, auth eosclient.Authorization, path st
}
// Write writes a stream to the mgm.
-func (c *Client) Write(ctx context.Context, auth eosclient.Authorization, path string, stream io.ReadCloser) error {
+func (c *Client) Write(ctx context.Context, auth eosclient.Authorization, path string, stream io.ReadCloser, app string) error {
fd, err := os.CreateTemp(c.opt.CacheDirectory, "eoswrite-")
if err != nil {
return err
@@ -720,19 +736,18 @@ func (c *Client) Write(ctx context.Context, auth eosclient.Authorization, path s
if err != nil {
return err
}
-
- return c.WriteFile(ctx, auth, path, fd.Name())
+ return c.writeFile(ctx, auth, path, fd.Name(), app)
}
// WriteFile writes an existing file to the mgm.
-func (c *Client) WriteFile(ctx context.Context, auth eosclient.Authorization, path, source string) error {
+func (c *Client) writeFile(ctx context.Context, auth eosclient.Authorization, path, source, app string) error {
xrdPath := fmt.Sprintf("%s//%s", c.opt.URL, path)
args := []string{"--nopbar", "--silent", "-f", source, xrdPath}
if auth.Token != "" {
args[4] += "?authz=" + auth.Token
} else if auth.Role.UID != "" && auth.Role.GID != "" {
- args = append(args, fmt.Sprintf("-ODeos.ruid=%s&eos.rgid=%s&eos.app=reva_eosclient::write", auth.Role.UID, auth.Role.GID))
+ args = append(args, fmt.Sprintf("-ODeos.ruid=%s&eos.rgid=%s&eos.app=%s", auth.Role.UID, auth.Role.GID, app))
}
_, _, err := c.executeXRDCopy(ctx, args)
diff --git a/pkg/eosclient/eosclient.go b/pkg/eosclient/eosclient.go
index 0cc28d5705..bbbf31a428 100644
--- a/pkg/eosclient/eosclient.go
+++ b/pkg/eosclient/eosclient.go
@@ -37,8 +37,8 @@ type EOSClient interface {
GetFileInfoByInode(ctx context.Context, auth Authorization, inode uint64) (*FileInfo, error)
GetFileInfoByFXID(ctx context.Context, auth Authorization, fxid string) (*FileInfo, error)
GetFileInfoByPath(ctx context.Context, auth Authorization, path string) (*FileInfo, error)
- SetAttr(ctx context.Context, auth Authorization, attr *Attribute, errorIfExists, recursive bool, path string) error
- UnsetAttr(ctx context.Context, auth Authorization, attr *Attribute, recursive bool, path string) error
+ SetAttr(ctx context.Context, auth Authorization, attr *Attribute, errorIfExists, recursive bool, path, app string) error
+ UnsetAttr(ctx context.Context, auth Authorization, attr *Attribute, recursive bool, path, app string) error
GetAttr(ctx context.Context, auth Authorization, key, path string) (*Attribute, error)
GetAttrs(ctx context.Context, auth Authorization, path string) ([]*Attribute, error)
GetQuota(ctx context.Context, username string, rootAuth Authorization, path string) (*QuotaInfo, error)
@@ -51,8 +51,7 @@ type EOSClient interface {
Rename(ctx context.Context, auth Authorization, oldPath, newPath string) error
List(ctx context.Context, auth Authorization, path string) ([]*FileInfo, error)
Read(ctx context.Context, auth Authorization, path string) (io.ReadCloser, error)
- Write(ctx context.Context, auth Authorization, path string, stream io.ReadCloser) error
- WriteFile(ctx context.Context, auth Authorization, path, source string) error
+ Write(ctx context.Context, auth Authorization, path string, stream io.ReadCloser, app string) error
ListDeletedEntries(ctx context.Context, auth Authorization, maxentries int, from, to time.Time) ([]*DeletedEntry, error)
RestoreDeletedEntry(ctx context.Context, auth Authorization, key string) error
PurgeDeletedEntries(ctx context.Context, auth Authorization) error
@@ -154,3 +153,7 @@ const AttrAlreadyExistsError = errtypes.BadRequest("attr already exists")
// AttrNotExistsError is the error raised when removing
// an attribute that does not exist.
const AttrNotExistsError = errtypes.BadRequest("attr not exists")
+
+// FileIsLockedError is the error raised when attempting to set a lock
+// attribute to an already locked file with a mismatched lock.
+const FileIsLockedError = errtypes.BadRequest("file is locked")
diff --git a/pkg/eosclient/eosgrpc/eos_grpc/README.protoc b/pkg/eosclient/eosgrpc/eos_grpc/README.protoc
deleted file mode 100644
index daaaa67ef7..0000000000
--- a/pkg/eosclient/eosgrpc/eos_grpc/README.protoc
+++ /dev/null
@@ -1,10 +0,0 @@
-To compile the eos binding into go code:
-
-protoc --go_out=. ./Rpc.proto
-protoc ./Rpc.proto --go_out=plugins=grpc:.
-
-
-NOTE: we have to do this here in order to be sure that a compatible protoc compiler is used.
-Having a CI somewhere compiling this does NOT guarantee that the same golang and protoc will be used,
-and this has created lots of problems in the past
-
diff --git a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go b/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go
deleted file mode 100644
index d57d0b2bbd..0000000000
--- a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go
+++ /dev/null
@@ -1,5281 +0,0 @@
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// source: Rpc.proto
-
-package eos_grpc
-
-import (
- context "context"
- fmt "fmt"
- proto "github.com/golang/protobuf/proto"
- grpc "google.golang.org/grpc"
- codes "google.golang.org/grpc/codes"
- status "google.golang.org/grpc/status"
- math "math"
-)
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the proto package it is being compiled against.
-// A compilation error at this line likely means your copy of the
-// proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
-
-type TYPE int32
-
-const (
- TYPE_FILE TYPE = 0
- TYPE_CONTAINER TYPE = 1
- TYPE_LISTING TYPE = 2
- TYPE_STAT TYPE = 3
-)
-
-var TYPE_name = map[int32]string{
- 0: "FILE",
- 1: "CONTAINER",
- 2: "LISTING",
- 3: "STAT",
-}
-
-var TYPE_value = map[string]int32{
- "FILE": 0,
- "CONTAINER": 1,
- "LISTING": 2,
- "STAT": 3,
-}
-
-func (x TYPE) String() string {
- return proto.EnumName(TYPE_name, int32(x))
-}
-
-func (TYPE) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{0}
-}
-
-type QUOTATYPE int32
-
-const (
- QUOTATYPE_USER QUOTATYPE = 0
- QUOTATYPE_GROUP QUOTATYPE = 2
- QUOTATYPE_PROJECT QUOTATYPE = 3
-)
-
-var QUOTATYPE_name = map[int32]string{
- 0: "USER",
- 2: "GROUP",
- 3: "PROJECT",
-}
-
-var QUOTATYPE_value = map[string]int32{
- "USER": 0,
- "GROUP": 2,
- "PROJECT": 3,
-}
-
-func (x QUOTATYPE) String() string {
- return proto.EnumName(QUOTATYPE_name, int32(x))
-}
-
-func (QUOTATYPE) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{1}
-}
-
-type QUOTAOP int32
-
-const (
- QUOTAOP_GET QUOTAOP = 0
- QUOTAOP_SET QUOTAOP = 1
- QUOTAOP_RM QUOTAOP = 2
- QUOTAOP_RMNODE QUOTAOP = 3
-)
-
-var QUOTAOP_name = map[int32]string{
- 0: "GET",
- 1: "SET",
- 2: "RM",
- 3: "RMNODE",
-}
-
-var QUOTAOP_value = map[string]int32{
- "GET": 0,
- "SET": 1,
- "RM": 2,
- "RMNODE": 3,
-}
-
-func (x QUOTAOP) String() string {
- return proto.EnumName(QUOTAOP_name, int32(x))
-}
-
-func (QUOTAOP) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{2}
-}
-
-type QUOTAENTRY int32
-
-const (
- QUOTAENTRY_NONE QUOTAENTRY = 0
- QUOTAENTRY_VOLUME QUOTAENTRY = 1
- QUOTAENTRY_INODE QUOTAENTRY = 2
-)
-
-var QUOTAENTRY_name = map[int32]string{
- 0: "NONE",
- 1: "VOLUME",
- 2: "INODE",
-}
-
-var QUOTAENTRY_value = map[string]int32{
- "NONE": 0,
- "VOLUME": 1,
- "INODE": 2,
-}
-
-func (x QUOTAENTRY) String() string {
- return proto.EnumName(QUOTAENTRY_name, int32(x))
-}
-
-func (QUOTAENTRY) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{3}
-}
-
-type MANILA_REQUEST_TYPE int32
-
-const (
- MANILA_REQUEST_TYPE_CREATE_SHARE MANILA_REQUEST_TYPE = 0
- MANILA_REQUEST_TYPE_DELETE_SHARE MANILA_REQUEST_TYPE = 1
- MANILA_REQUEST_TYPE_EXTEND_SHARE MANILA_REQUEST_TYPE = 2
- MANILA_REQUEST_TYPE_SHRINK_SHARE MANILA_REQUEST_TYPE = 3
- MANILA_REQUEST_TYPE_MANAGE_EXISTING MANILA_REQUEST_TYPE = 4
- MANILA_REQUEST_TYPE_UNMANAGE MANILA_REQUEST_TYPE = 5
- MANILA_REQUEST_TYPE_GET_CAPACITIES MANILA_REQUEST_TYPE = 6
-)
-
-var MANILA_REQUEST_TYPE_name = map[int32]string{
- 0: "CREATE_SHARE",
- 1: "DELETE_SHARE",
- 2: "EXTEND_SHARE",
- 3: "SHRINK_SHARE",
- 4: "MANAGE_EXISTING",
- 5: "UNMANAGE",
- 6: "GET_CAPACITIES",
-}
-
-var MANILA_REQUEST_TYPE_value = map[string]int32{
- "CREATE_SHARE": 0,
- "DELETE_SHARE": 1,
- "EXTEND_SHARE": 2,
- "SHRINK_SHARE": 3,
- "MANAGE_EXISTING": 4,
- "UNMANAGE": 5,
- "GET_CAPACITIES": 6,
-}
-
-func (x MANILA_REQUEST_TYPE) String() string {
- return proto.EnumName(MANILA_REQUEST_TYPE_name, int32(x))
-}
-
-func (MANILA_REQUEST_TYPE) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{4}
-}
-
-type NSRequest_VersionRequest_VERSION_CMD int32
-
-const (
- NSRequest_VersionRequest_CREATE NSRequest_VersionRequest_VERSION_CMD = 0
- NSRequest_VersionRequest_PURGE NSRequest_VersionRequest_VERSION_CMD = 1
- NSRequest_VersionRequest_LIST NSRequest_VersionRequest_VERSION_CMD = 2
- NSRequest_VersionRequest_GRAB NSRequest_VersionRequest_VERSION_CMD = 3
-)
-
-var NSRequest_VersionRequest_VERSION_CMD_name = map[int32]string{
- 0: "CREATE",
- 1: "PURGE",
- 2: "LIST",
- 3: "GRAB",
-}
-
-var NSRequest_VersionRequest_VERSION_CMD_value = map[string]int32{
- "CREATE": 0,
- "PURGE": 1,
- "LIST": 2,
- "GRAB": 3,
-}
-
-func (x NSRequest_VersionRequest_VERSION_CMD) String() string {
- return proto.EnumName(NSRequest_VersionRequest_VERSION_CMD_name, int32(x))
-}
-
-func (NSRequest_VersionRequest_VERSION_CMD) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 7, 0}
-}
-
-type NSRequest_RecycleRequest_RECYCLE_CMD int32
-
-const (
- NSRequest_RecycleRequest_RESTORE NSRequest_RecycleRequest_RECYCLE_CMD = 0
- NSRequest_RecycleRequest_PURGE NSRequest_RecycleRequest_RECYCLE_CMD = 1
- NSRequest_RecycleRequest_LIST NSRequest_RecycleRequest_RECYCLE_CMD = 2
-)
-
-var NSRequest_RecycleRequest_RECYCLE_CMD_name = map[int32]string{
- 0: "RESTORE",
- 1: "PURGE",
- 2: "LIST",
-}
-
-var NSRequest_RecycleRequest_RECYCLE_CMD_value = map[string]int32{
- "RESTORE": 0,
- "PURGE": 1,
- "LIST": 2,
-}
-
-func (x NSRequest_RecycleRequest_RECYCLE_CMD) String() string {
- return proto.EnumName(NSRequest_RecycleRequest_RECYCLE_CMD_name, int32(x))
-}
-
-func (NSRequest_RecycleRequest_RECYCLE_CMD) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 8, 0}
-}
-
-type NSRequest_AclRequest_ACL_COMMAND int32
-
-const (
- NSRequest_AclRequest_NONE NSRequest_AclRequest_ACL_COMMAND = 0
- NSRequest_AclRequest_MODIFY NSRequest_AclRequest_ACL_COMMAND = 1
- NSRequest_AclRequest_LIST NSRequest_AclRequest_ACL_COMMAND = 2
-)
-
-var NSRequest_AclRequest_ACL_COMMAND_name = map[int32]string{
- 0: "NONE",
- 1: "MODIFY",
- 2: "LIST",
-}
-
-var NSRequest_AclRequest_ACL_COMMAND_value = map[string]int32{
- "NONE": 0,
- "MODIFY": 1,
- "LIST": 2,
-}
-
-func (x NSRequest_AclRequest_ACL_COMMAND) String() string {
- return proto.EnumName(NSRequest_AclRequest_ACL_COMMAND_name, int32(x))
-}
-
-func (NSRequest_AclRequest_ACL_COMMAND) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 12, 0}
-}
-
-type NSRequest_AclRequest_ACL_TYPE int32
-
-const (
- NSRequest_AclRequest_USER_ACL NSRequest_AclRequest_ACL_TYPE = 0
- NSRequest_AclRequest_SYS_ACL NSRequest_AclRequest_ACL_TYPE = 1
-)
-
-var NSRequest_AclRequest_ACL_TYPE_name = map[int32]string{
- 0: "USER_ACL",
- 1: "SYS_ACL",
-}
-
-var NSRequest_AclRequest_ACL_TYPE_value = map[string]int32{
- "USER_ACL": 0,
- "SYS_ACL": 1,
-}
-
-func (x NSRequest_AclRequest_ACL_TYPE) String() string {
- return proto.EnumName(NSRequest_AclRequest_ACL_TYPE_name, int32(x))
-}
-
-func (NSRequest_AclRequest_ACL_TYPE) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 12, 1}
-}
-
-type NSRequest_ShareRequest_LsShare_OutFormat int32
-
-const (
- NSRequest_ShareRequest_LsShare_NONE NSRequest_ShareRequest_LsShare_OutFormat = 0
- NSRequest_ShareRequest_LsShare_MONITORING NSRequest_ShareRequest_LsShare_OutFormat = 1
- NSRequest_ShareRequest_LsShare_LISTING NSRequest_ShareRequest_LsShare_OutFormat = 2
- NSRequest_ShareRequest_LsShare_JSON NSRequest_ShareRequest_LsShare_OutFormat = 3
-)
-
-var NSRequest_ShareRequest_LsShare_OutFormat_name = map[int32]string{
- 0: "NONE",
- 1: "MONITORING",
- 2: "LISTING",
- 3: "JSON",
-}
-
-var NSRequest_ShareRequest_LsShare_OutFormat_value = map[string]int32{
- "NONE": 0,
- "MONITORING": 1,
- "LISTING": 2,
- "JSON": 3,
-}
-
-func (x NSRequest_ShareRequest_LsShare_OutFormat) String() string {
- return proto.EnumName(NSRequest_ShareRequest_LsShare_OutFormat_name, int32(x))
-}
-
-func (NSRequest_ShareRequest_LsShare_OutFormat) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 15, 0, 0}
-}
-
-type NSRequest_ShareRequest_OperateShare_Op int32
-
-const (
- NSRequest_ShareRequest_OperateShare_CREATE NSRequest_ShareRequest_OperateShare_Op = 0
- NSRequest_ShareRequest_OperateShare_REMOVE NSRequest_ShareRequest_OperateShare_Op = 1
- NSRequest_ShareRequest_OperateShare_SHARE NSRequest_ShareRequest_OperateShare_Op = 2
- NSRequest_ShareRequest_OperateShare_UNSHARE NSRequest_ShareRequest_OperateShare_Op = 3
- NSRequest_ShareRequest_OperateShare_ACCESS NSRequest_ShareRequest_OperateShare_Op = 4
- NSRequest_ShareRequest_OperateShare_MODIFY NSRequest_ShareRequest_OperateShare_Op = 5
-)
-
-var NSRequest_ShareRequest_OperateShare_Op_name = map[int32]string{
- 0: "CREATE",
- 1: "REMOVE",
- 2: "SHARE",
- 3: "UNSHARE",
- 4: "ACCESS",
- 5: "MODIFY",
-}
-
-var NSRequest_ShareRequest_OperateShare_Op_value = map[string]int32{
- "CREATE": 0,
- "REMOVE": 1,
- "SHARE": 2,
- "UNSHARE": 3,
- "ACCESS": 4,
- "MODIFY": 5,
-}
-
-func (x NSRequest_ShareRequest_OperateShare_Op) String() string {
- return proto.EnumName(NSRequest_ShareRequest_OperateShare_Op_name, int32(x))
-}
-
-func (NSRequest_ShareRequest_OperateShare_Op) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 15, 1, 0}
-}
-
-type NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE int32
-
-const (
- NSResponse_RecycleResponse_RecycleInfo_FILE NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE = 0
- NSResponse_RecycleResponse_RecycleInfo_TREE NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE = 1
-)
-
-var NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE_name = map[int32]string{
- 0: "FILE",
- 1: "TREE",
-}
-
-var NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE_value = map[string]int32{
- "FILE": 0,
- "TREE": 1,
-}
-
-func (x NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE) String() string {
- return proto.EnumName(NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE_name, int32(x))
-}
-
-func (NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{21, 2, 0, 0}
-}
-
-type PingRequest struct {
- Authkey string `protobuf:"bytes,1,opt,name=authkey,proto3" json:"authkey,omitempty"`
- Message []byte `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *PingRequest) Reset() { *m = PingRequest{} }
-func (m *PingRequest) String() string { return proto.CompactTextString(m) }
-func (*PingRequest) ProtoMessage() {}
-func (*PingRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{0}
-}
-
-func (m *PingRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_PingRequest.Unmarshal(m, b)
-}
-func (m *PingRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_PingRequest.Marshal(b, m, deterministic)
-}
-func (m *PingRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_PingRequest.Merge(m, src)
-}
-func (m *PingRequest) XXX_Size() int {
- return xxx_messageInfo_PingRequest.Size(m)
-}
-func (m *PingRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_PingRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_PingRequest proto.InternalMessageInfo
-
-func (m *PingRequest) GetAuthkey() string {
- if m != nil {
- return m.Authkey
- }
- return ""
-}
-
-func (m *PingRequest) GetMessage() []byte {
- if m != nil {
- return m.Message
- }
- return nil
-}
-
-type PingReply struct {
- Message []byte `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *PingReply) Reset() { *m = PingReply{} }
-func (m *PingReply) String() string { return proto.CompactTextString(m) }
-func (*PingReply) ProtoMessage() {}
-func (*PingReply) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{1}
-}
-
-func (m *PingReply) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_PingReply.Unmarshal(m, b)
-}
-func (m *PingReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_PingReply.Marshal(b, m, deterministic)
-}
-func (m *PingReply) XXX_Merge(src proto.Message) {
- xxx_messageInfo_PingReply.Merge(m, src)
-}
-func (m *PingReply) XXX_Size() int {
- return xxx_messageInfo_PingReply.Size(m)
-}
-func (m *PingReply) XXX_DiscardUnknown() {
- xxx_messageInfo_PingReply.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_PingReply proto.InternalMessageInfo
-
-func (m *PingReply) GetMessage() []byte {
- if m != nil {
- return m.Message
- }
- return nil
-}
-
-type ContainerInsertRequest struct {
- Container []*ContainerMdProto `protobuf:"bytes,1,rep,name=container,proto3" json:"container,omitempty"`
- Authkey string `protobuf:"bytes,2,opt,name=authkey,proto3" json:"authkey,omitempty"`
- InheritMd bool `protobuf:"varint,3,opt,name=inherit_md,json=inheritMd,proto3" json:"inherit_md,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *ContainerInsertRequest) Reset() { *m = ContainerInsertRequest{} }
-func (m *ContainerInsertRequest) String() string { return proto.CompactTextString(m) }
-func (*ContainerInsertRequest) ProtoMessage() {}
-func (*ContainerInsertRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{2}
-}
-
-func (m *ContainerInsertRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_ContainerInsertRequest.Unmarshal(m, b)
-}
-func (m *ContainerInsertRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_ContainerInsertRequest.Marshal(b, m, deterministic)
-}
-func (m *ContainerInsertRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_ContainerInsertRequest.Merge(m, src)
-}
-func (m *ContainerInsertRequest) XXX_Size() int {
- return xxx_messageInfo_ContainerInsertRequest.Size(m)
-}
-func (m *ContainerInsertRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_ContainerInsertRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ContainerInsertRequest proto.InternalMessageInfo
-
-func (m *ContainerInsertRequest) GetContainer() []*ContainerMdProto {
- if m != nil {
- return m.Container
- }
- return nil
-}
-
-func (m *ContainerInsertRequest) GetAuthkey() string {
- if m != nil {
- return m.Authkey
- }
- return ""
-}
-
-func (m *ContainerInsertRequest) GetInheritMd() bool {
- if m != nil {
- return m.InheritMd
- }
- return false
-}
-
-type FileInsertRequest struct {
- Files []*FileMdProto `protobuf:"bytes,1,rep,name=files,proto3" json:"files,omitempty"`
- Authkey string `protobuf:"bytes,2,opt,name=authkey,proto3" json:"authkey,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *FileInsertRequest) Reset() { *m = FileInsertRequest{} }
-func (m *FileInsertRequest) String() string { return proto.CompactTextString(m) }
-func (*FileInsertRequest) ProtoMessage() {}
-func (*FileInsertRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{3}
-}
-
-func (m *FileInsertRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_FileInsertRequest.Unmarshal(m, b)
-}
-func (m *FileInsertRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_FileInsertRequest.Marshal(b, m, deterministic)
-}
-func (m *FileInsertRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_FileInsertRequest.Merge(m, src)
-}
-func (m *FileInsertRequest) XXX_Size() int {
- return xxx_messageInfo_FileInsertRequest.Size(m)
-}
-func (m *FileInsertRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_FileInsertRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_FileInsertRequest proto.InternalMessageInfo
-
-func (m *FileInsertRequest) GetFiles() []*FileMdProto {
- if m != nil {
- return m.Files
- }
- return nil
-}
-
-func (m *FileInsertRequest) GetAuthkey() string {
- if m != nil {
- return m.Authkey
- }
- return ""
-}
-
-type InsertReply struct {
- Message []string `protobuf:"bytes,1,rep,name=message,proto3" json:"message,omitempty"`
- Retc []uint32 `protobuf:"varint,2,rep,packed,name=retc,proto3" json:"retc,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *InsertReply) Reset() { *m = InsertReply{} }
-func (m *InsertReply) String() string { return proto.CompactTextString(m) }
-func (*InsertReply) ProtoMessage() {}
-func (*InsertReply) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{4}
-}
-
-func (m *InsertReply) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_InsertReply.Unmarshal(m, b)
-}
-func (m *InsertReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_InsertReply.Marshal(b, m, deterministic)
-}
-func (m *InsertReply) XXX_Merge(src proto.Message) {
- xxx_messageInfo_InsertReply.Merge(m, src)
-}
-func (m *InsertReply) XXX_Size() int {
- return xxx_messageInfo_InsertReply.Size(m)
-}
-func (m *InsertReply) XXX_DiscardUnknown() {
- xxx_messageInfo_InsertReply.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_InsertReply proto.InternalMessageInfo
-
-func (m *InsertReply) GetMessage() []string {
- if m != nil {
- return m.Message
- }
- return nil
-}
-
-func (m *InsertReply) GetRetc() []uint32 {
- if m != nil {
- return m.Retc
- }
- return nil
-}
-
-type Time struct {
- Sec uint64 `protobuf:"varint,1,opt,name=sec,proto3" json:"sec,omitempty"`
- NSec uint64 `protobuf:"varint,2,opt,name=n_sec,json=nSec,proto3" json:"n_sec,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *Time) Reset() { *m = Time{} }
-func (m *Time) String() string { return proto.CompactTextString(m) }
-func (*Time) ProtoMessage() {}
-func (*Time) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{5}
-}
-
-func (m *Time) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_Time.Unmarshal(m, b)
-}
-func (m *Time) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_Time.Marshal(b, m, deterministic)
-}
-func (m *Time) XXX_Merge(src proto.Message) {
- xxx_messageInfo_Time.Merge(m, src)
-}
-func (m *Time) XXX_Size() int {
- return xxx_messageInfo_Time.Size(m)
-}
-func (m *Time) XXX_DiscardUnknown() {
- xxx_messageInfo_Time.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Time proto.InternalMessageInfo
-
-func (m *Time) GetSec() uint64 {
- if m != nil {
- return m.Sec
- }
- return 0
-}
-
-func (m *Time) GetNSec() uint64 {
- if m != nil {
- return m.NSec
- }
- return 0
-}
-
-type Checksum struct {
- Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
- Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *Checksum) Reset() { *m = Checksum{} }
-func (m *Checksum) String() string { return proto.CompactTextString(m) }
-func (*Checksum) ProtoMessage() {}
-func (*Checksum) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{6}
-}
-
-func (m *Checksum) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_Checksum.Unmarshal(m, b)
-}
-func (m *Checksum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_Checksum.Marshal(b, m, deterministic)
-}
-func (m *Checksum) XXX_Merge(src proto.Message) {
- xxx_messageInfo_Checksum.Merge(m, src)
-}
-func (m *Checksum) XXX_Size() int {
- return xxx_messageInfo_Checksum.Size(m)
-}
-func (m *Checksum) XXX_DiscardUnknown() {
- xxx_messageInfo_Checksum.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Checksum proto.InternalMessageInfo
-
-func (m *Checksum) GetValue() []byte {
- if m != nil {
- return m.Value
- }
- return nil
-}
-
-func (m *Checksum) GetType() string {
- if m != nil {
- return m.Type
- }
- return ""
-}
-
-type FileMdProto struct {
- Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
- ContId uint64 `protobuf:"varint,2,opt,name=cont_id,json=contId,proto3" json:"cont_id,omitempty"`
- Uid uint64 `protobuf:"varint,3,opt,name=uid,proto3" json:"uid,omitempty"`
- Gid uint64 `protobuf:"varint,4,opt,name=gid,proto3" json:"gid,omitempty"`
- Size uint64 `protobuf:"varint,5,opt,name=size,proto3" json:"size,omitempty"`
- LayoutId uint32 `protobuf:"varint,6,opt,name=layout_id,json=layoutId,proto3" json:"layout_id,omitempty"`
- Flags uint32 `protobuf:"varint,7,opt,name=flags,proto3" json:"flags,omitempty"`
- Name []byte `protobuf:"bytes,8,opt,name=name,proto3" json:"name,omitempty"`
- LinkName []byte `protobuf:"bytes,9,opt,name=link_name,json=linkName,proto3" json:"link_name,omitempty"`
- Ctime *Time `protobuf:"bytes,10,opt,name=ctime,proto3" json:"ctime,omitempty"`
- Mtime *Time `protobuf:"bytes,11,opt,name=mtime,proto3" json:"mtime,omitempty"`
- Checksum *Checksum `protobuf:"bytes,12,opt,name=checksum,proto3" json:"checksum,omitempty"`
- Locations []uint32 `protobuf:"varint,13,rep,packed,name=locations,proto3" json:"locations,omitempty"`
- UnlinkLocations []uint32 `protobuf:"varint,14,rep,packed,name=unlink_locations,json=unlinkLocations,proto3" json:"unlink_locations,omitempty"`
- Xattrs map[string][]byte `protobuf:"bytes,15,rep,name=xattrs,proto3" json:"xattrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
- Path []byte `protobuf:"bytes,16,opt,name=path,proto3" json:"path,omitempty"`
- Etag string `protobuf:"bytes,17,opt,name=etag,proto3" json:"etag,omitempty"`
- Inode uint64 `protobuf:"varint,18,opt,name=inode,proto3" json:"inode,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *FileMdProto) Reset() { *m = FileMdProto{} }
-func (m *FileMdProto) String() string { return proto.CompactTextString(m) }
-func (*FileMdProto) ProtoMessage() {}
-func (*FileMdProto) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{7}
-}
-
-func (m *FileMdProto) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_FileMdProto.Unmarshal(m, b)
-}
-func (m *FileMdProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_FileMdProto.Marshal(b, m, deterministic)
-}
-func (m *FileMdProto) XXX_Merge(src proto.Message) {
- xxx_messageInfo_FileMdProto.Merge(m, src)
-}
-func (m *FileMdProto) XXX_Size() int {
- return xxx_messageInfo_FileMdProto.Size(m)
-}
-func (m *FileMdProto) XXX_DiscardUnknown() {
- xxx_messageInfo_FileMdProto.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_FileMdProto proto.InternalMessageInfo
-
-func (m *FileMdProto) GetId() uint64 {
- if m != nil {
- return m.Id
- }
- return 0
-}
-
-func (m *FileMdProto) GetContId() uint64 {
- if m != nil {
- return m.ContId
- }
- return 0
-}
-
-func (m *FileMdProto) GetUid() uint64 {
- if m != nil {
- return m.Uid
- }
- return 0
-}
-
-func (m *FileMdProto) GetGid() uint64 {
- if m != nil {
- return m.Gid
- }
- return 0
-}
-
-func (m *FileMdProto) GetSize() uint64 {
- if m != nil {
- return m.Size
- }
- return 0
-}
-
-func (m *FileMdProto) GetLayoutId() uint32 {
- if m != nil {
- return m.LayoutId
- }
- return 0
-}
-
-func (m *FileMdProto) GetFlags() uint32 {
- if m != nil {
- return m.Flags
- }
- return 0
-}
-
-func (m *FileMdProto) GetName() []byte {
- if m != nil {
- return m.Name
- }
- return nil
-}
-
-func (m *FileMdProto) GetLinkName() []byte {
- if m != nil {
- return m.LinkName
- }
- return nil
-}
-
-func (m *FileMdProto) GetCtime() *Time {
- if m != nil {
- return m.Ctime
- }
- return nil
-}
-
-func (m *FileMdProto) GetMtime() *Time {
- if m != nil {
- return m.Mtime
- }
- return nil
-}
-
-func (m *FileMdProto) GetChecksum() *Checksum {
- if m != nil {
- return m.Checksum
- }
- return nil
-}
-
-func (m *FileMdProto) GetLocations() []uint32 {
- if m != nil {
- return m.Locations
- }
- return nil
-}
-
-func (m *FileMdProto) GetUnlinkLocations() []uint32 {
- if m != nil {
- return m.UnlinkLocations
- }
- return nil
-}
-
-func (m *FileMdProto) GetXattrs() map[string][]byte {
- if m != nil {
- return m.Xattrs
- }
- return nil
-}
-
-func (m *FileMdProto) GetPath() []byte {
- if m != nil {
- return m.Path
- }
- return nil
-}
-
-func (m *FileMdProto) GetEtag() string {
- if m != nil {
- return m.Etag
- }
- return ""
-}
-
-func (m *FileMdProto) GetInode() uint64 {
- if m != nil {
- return m.Inode
- }
- return 0
-}
-
-type ContainerMdProto struct {
- Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
- ParentId uint64 `protobuf:"varint,2,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"`
- Uid uint64 `protobuf:"varint,3,opt,name=uid,proto3" json:"uid,omitempty"`
- Gid uint64 `protobuf:"varint,4,opt,name=gid,proto3" json:"gid,omitempty"`
- TreeSize int64 `protobuf:"varint,6,opt,name=tree_size,json=treeSize,proto3" json:"tree_size,omitempty"`
- Mode uint32 `protobuf:"varint,5,opt,name=mode,proto3" json:"mode,omitempty"`
- Flags uint32 `protobuf:"varint,7,opt,name=flags,proto3" json:"flags,omitempty"`
- Name []byte `protobuf:"bytes,8,opt,name=name,proto3" json:"name,omitempty"`
- Ctime *Time `protobuf:"bytes,9,opt,name=ctime,proto3" json:"ctime,omitempty"`
- Mtime *Time `protobuf:"bytes,10,opt,name=mtime,proto3" json:"mtime,omitempty"`
- Stime *Time `protobuf:"bytes,11,opt,name=stime,proto3" json:"stime,omitempty"`
- Xattrs map[string][]byte `protobuf:"bytes,12,rep,name=xattrs,proto3" json:"xattrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
- Path []byte `protobuf:"bytes,13,opt,name=path,proto3" json:"path,omitempty"`
- Etag string `protobuf:"bytes,14,opt,name=etag,proto3" json:"etag,omitempty"`
- Inode uint64 `protobuf:"varint,15,opt,name=inode,proto3" json:"inode,omitempty"`
- Files uint64 `protobuf:"varint,16,opt,name=files,proto3" json:"files,omitempty"`
- Containers uint64 `protobuf:"varint,17,opt,name=containers,proto3" json:"containers,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *ContainerMdProto) Reset() { *m = ContainerMdProto{} }
-func (m *ContainerMdProto) String() string { return proto.CompactTextString(m) }
-func (*ContainerMdProto) ProtoMessage() {}
-func (*ContainerMdProto) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{8}
-}
-
-func (m *ContainerMdProto) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_ContainerMdProto.Unmarshal(m, b)
-}
-func (m *ContainerMdProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_ContainerMdProto.Marshal(b, m, deterministic)
-}
-func (m *ContainerMdProto) XXX_Merge(src proto.Message) {
- xxx_messageInfo_ContainerMdProto.Merge(m, src)
-}
-func (m *ContainerMdProto) XXX_Size() int {
- return xxx_messageInfo_ContainerMdProto.Size(m)
-}
-func (m *ContainerMdProto) XXX_DiscardUnknown() {
- xxx_messageInfo_ContainerMdProto.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ContainerMdProto proto.InternalMessageInfo
-
-func (m *ContainerMdProto) GetId() uint64 {
- if m != nil {
- return m.Id
- }
- return 0
-}
-
-func (m *ContainerMdProto) GetParentId() uint64 {
- if m != nil {
- return m.ParentId
- }
- return 0
-}
-
-func (m *ContainerMdProto) GetUid() uint64 {
- if m != nil {
- return m.Uid
- }
- return 0
-}
-
-func (m *ContainerMdProto) GetGid() uint64 {
- if m != nil {
- return m.Gid
- }
- return 0
-}
-
-func (m *ContainerMdProto) GetTreeSize() int64 {
- if m != nil {
- return m.TreeSize
- }
- return 0
-}
-
-func (m *ContainerMdProto) GetMode() uint32 {
- if m != nil {
- return m.Mode
- }
- return 0
-}
-
-func (m *ContainerMdProto) GetFlags() uint32 {
- if m != nil {
- return m.Flags
- }
- return 0
-}
-
-func (m *ContainerMdProto) GetName() []byte {
- if m != nil {
- return m.Name
- }
- return nil
-}
-
-func (m *ContainerMdProto) GetCtime() *Time {
- if m != nil {
- return m.Ctime
- }
- return nil
-}
-
-func (m *ContainerMdProto) GetMtime() *Time {
- if m != nil {
- return m.Mtime
- }
- return nil
-}
-
-func (m *ContainerMdProto) GetStime() *Time {
- if m != nil {
- return m.Stime
- }
- return nil
-}
-
-func (m *ContainerMdProto) GetXattrs() map[string][]byte {
- if m != nil {
- return m.Xattrs
- }
- return nil
-}
-
-func (m *ContainerMdProto) GetPath() []byte {
- if m != nil {
- return m.Path
- }
- return nil
-}
-
-func (m *ContainerMdProto) GetEtag() string {
- if m != nil {
- return m.Etag
- }
- return ""
-}
-
-func (m *ContainerMdProto) GetInode() uint64 {
- if m != nil {
- return m.Inode
- }
- return 0
-}
-
-func (m *ContainerMdProto) GetFiles() uint64 {
- if m != nil {
- return m.Files
- }
- return 0
-}
-
-func (m *ContainerMdProto) GetContainers() uint64 {
- if m != nil {
- return m.Containers
- }
- return 0
-}
-
-type QuotaProto struct {
- Path []byte `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
- Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
- Type QUOTATYPE `protobuf:"varint,3,opt,name=type,proto3,enum=eos.rpc.QUOTATYPE" json:"type,omitempty"`
- Usedbytes uint64 `protobuf:"varint,4,opt,name=usedbytes,proto3" json:"usedbytes,omitempty"`
- Usedlogicalbytes uint64 `protobuf:"varint,5,opt,name=usedlogicalbytes,proto3" json:"usedlogicalbytes,omitempty"`
- Usedfiles uint64 `protobuf:"varint,6,opt,name=usedfiles,proto3" json:"usedfiles,omitempty"`
- Maxbytes uint64 `protobuf:"varint,7,opt,name=maxbytes,proto3" json:"maxbytes,omitempty"`
- Maxlogicalbytes uint64 `protobuf:"varint,8,opt,name=maxlogicalbytes,proto3" json:"maxlogicalbytes,omitempty"`
- Maxfiles uint64 `protobuf:"varint,9,opt,name=maxfiles,proto3" json:"maxfiles,omitempty"`
- Percentageusedbytes float32 `protobuf:"fixed32,10,opt,name=percentageusedbytes,proto3" json:"percentageusedbytes,omitempty"`
- Percentageusedfiles float32 `protobuf:"fixed32,11,opt,name=percentageusedfiles,proto3" json:"percentageusedfiles,omitempty"`
- Statusbytes string `protobuf:"bytes,12,opt,name=statusbytes,proto3" json:"statusbytes,omitempty"`
- Statusfiles string `protobuf:"bytes,13,opt,name=statusfiles,proto3" json:"statusfiles,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *QuotaProto) Reset() { *m = QuotaProto{} }
-func (m *QuotaProto) String() string { return proto.CompactTextString(m) }
-func (*QuotaProto) ProtoMessage() {}
-func (*QuotaProto) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{9}
-}
-
-func (m *QuotaProto) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_QuotaProto.Unmarshal(m, b)
-}
-func (m *QuotaProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_QuotaProto.Marshal(b, m, deterministic)
-}
-func (m *QuotaProto) XXX_Merge(src proto.Message) {
- xxx_messageInfo_QuotaProto.Merge(m, src)
-}
-func (m *QuotaProto) XXX_Size() int {
- return xxx_messageInfo_QuotaProto.Size(m)
-}
-func (m *QuotaProto) XXX_DiscardUnknown() {
- xxx_messageInfo_QuotaProto.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_QuotaProto proto.InternalMessageInfo
-
-func (m *QuotaProto) GetPath() []byte {
- if m != nil {
- return m.Path
- }
- return nil
-}
-
-func (m *QuotaProto) GetName() string {
- if m != nil {
- return m.Name
- }
- return ""
-}
-
-func (m *QuotaProto) GetType() QUOTATYPE {
- if m != nil {
- return m.Type
- }
- return QUOTATYPE_USER
-}
-
-func (m *QuotaProto) GetUsedbytes() uint64 {
- if m != nil {
- return m.Usedbytes
- }
- return 0
-}
-
-func (m *QuotaProto) GetUsedlogicalbytes() uint64 {
- if m != nil {
- return m.Usedlogicalbytes
- }
- return 0
-}
-
-func (m *QuotaProto) GetUsedfiles() uint64 {
- if m != nil {
- return m.Usedfiles
- }
- return 0
-}
-
-func (m *QuotaProto) GetMaxbytes() uint64 {
- if m != nil {
- return m.Maxbytes
- }
- return 0
-}
-
-func (m *QuotaProto) GetMaxlogicalbytes() uint64 {
- if m != nil {
- return m.Maxlogicalbytes
- }
- return 0
-}
-
-func (m *QuotaProto) GetMaxfiles() uint64 {
- if m != nil {
- return m.Maxfiles
- }
- return 0
-}
-
-func (m *QuotaProto) GetPercentageusedbytes() float32 {
- if m != nil {
- return m.Percentageusedbytes
- }
- return 0
-}
-
-func (m *QuotaProto) GetPercentageusedfiles() float32 {
- if m != nil {
- return m.Percentageusedfiles
- }
- return 0
-}
-
-func (m *QuotaProto) GetStatusbytes() string {
- if m != nil {
- return m.Statusbytes
- }
- return ""
-}
-
-func (m *QuotaProto) GetStatusfiles() string {
- if m != nil {
- return m.Statusfiles
- }
- return ""
-}
-
-type RoleId struct {
- Uid uint64 `protobuf:"varint,1,opt,name=uid,proto3" json:"uid,omitempty"`
- Gid uint64 `protobuf:"varint,2,opt,name=gid,proto3" json:"gid,omitempty"`
- Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"`
- Groupname string `protobuf:"bytes,4,opt,name=groupname,proto3" json:"groupname,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *RoleId) Reset() { *m = RoleId{} }
-func (m *RoleId) String() string { return proto.CompactTextString(m) }
-func (*RoleId) ProtoMessage() {}
-func (*RoleId) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{10}
-}
-
-func (m *RoleId) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_RoleId.Unmarshal(m, b)
-}
-func (m *RoleId) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_RoleId.Marshal(b, m, deterministic)
-}
-func (m *RoleId) XXX_Merge(src proto.Message) {
- xxx_messageInfo_RoleId.Merge(m, src)
-}
-func (m *RoleId) XXX_Size() int {
- return xxx_messageInfo_RoleId.Size(m)
-}
-func (m *RoleId) XXX_DiscardUnknown() {
- xxx_messageInfo_RoleId.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_RoleId proto.InternalMessageInfo
-
-func (m *RoleId) GetUid() uint64 {
- if m != nil {
- return m.Uid
- }
- return 0
-}
-
-func (m *RoleId) GetGid() uint64 {
- if m != nil {
- return m.Gid
- }
- return 0
-}
-
-func (m *RoleId) GetUsername() string {
- if m != nil {
- return m.Username
- }
- return ""
-}
-
-func (m *RoleId) GetGroupname() string {
- if m != nil {
- return m.Groupname
- }
- return ""
-}
-
-type MDId struct {
- Path []byte `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
- Id uint64 `protobuf:"fixed64,2,opt,name=id,proto3" json:"id,omitempty"`
- Ino uint64 `protobuf:"fixed64,3,opt,name=ino,proto3" json:"ino,omitempty"`
- Type TYPE `protobuf:"varint,4,opt,name=type,proto3,enum=eos.rpc.TYPE" json:"type,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *MDId) Reset() { *m = MDId{} }
-func (m *MDId) String() string { return proto.CompactTextString(m) }
-func (*MDId) ProtoMessage() {}
-func (*MDId) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{11}
-}
-
-func (m *MDId) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_MDId.Unmarshal(m, b)
-}
-func (m *MDId) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_MDId.Marshal(b, m, deterministic)
-}
-func (m *MDId) XXX_Merge(src proto.Message) {
- xxx_messageInfo_MDId.Merge(m, src)
-}
-func (m *MDId) XXX_Size() int {
- return xxx_messageInfo_MDId.Size(m)
-}
-func (m *MDId) XXX_DiscardUnknown() {
- xxx_messageInfo_MDId.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_MDId proto.InternalMessageInfo
-
-func (m *MDId) GetPath() []byte {
- if m != nil {
- return m.Path
- }
- return nil
-}
-
-func (m *MDId) GetId() uint64 {
- if m != nil {
- return m.Id
- }
- return 0
-}
-
-func (m *MDId) GetIno() uint64 {
- if m != nil {
- return m.Ino
- }
- return 0
-}
-
-func (m *MDId) GetType() TYPE {
- if m != nil {
- return m.Type
- }
- return TYPE_FILE
-}
-
-type Limit struct {
- Zero bool `protobuf:"varint,1,opt,name=zero,proto3" json:"zero,omitempty"`
- Min uint64 `protobuf:"varint,2,opt,name=min,proto3" json:"min,omitempty"`
- Max uint64 `protobuf:"varint,3,opt,name=max,proto3" json:"max,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *Limit) Reset() { *m = Limit{} }
-func (m *Limit) String() string { return proto.CompactTextString(m) }
-func (*Limit) ProtoMessage() {}
-func (*Limit) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{12}
-}
-
-func (m *Limit) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_Limit.Unmarshal(m, b)
-}
-func (m *Limit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_Limit.Marshal(b, m, deterministic)
-}
-func (m *Limit) XXX_Merge(src proto.Message) {
- xxx_messageInfo_Limit.Merge(m, src)
-}
-func (m *Limit) XXX_Size() int {
- return xxx_messageInfo_Limit.Size(m)
-}
-func (m *Limit) XXX_DiscardUnknown() {
- xxx_messageInfo_Limit.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Limit proto.InternalMessageInfo
-
-func (m *Limit) GetZero() bool {
- if m != nil {
- return m.Zero
- }
- return false
-}
-
-func (m *Limit) GetMin() uint64 {
- if m != nil {
- return m.Min
- }
- return 0
-}
-
-func (m *Limit) GetMax() uint64 {
- if m != nil {
- return m.Max
- }
- return 0
-}
-
-type MDSelection struct {
- Select bool `protobuf:"varint,1,opt,name=select,proto3" json:"select,omitempty"`
- Ctime *Limit `protobuf:"bytes,2,opt,name=ctime,proto3" json:"ctime,omitempty"`
- Mtime *Limit `protobuf:"bytes,3,opt,name=mtime,proto3" json:"mtime,omitempty"`
- Stime *Limit `protobuf:"bytes,4,opt,name=stime,proto3" json:"stime,omitempty"`
- Size *Limit `protobuf:"bytes,5,opt,name=size,proto3" json:"size,omitempty"`
- Treesize *Limit `protobuf:"bytes,6,opt,name=treesize,proto3" json:"treesize,omitempty"`
- Children *Limit `protobuf:"bytes,7,opt,name=children,proto3" json:"children,omitempty"`
- Locations *Limit `protobuf:"bytes,8,opt,name=locations,proto3" json:"locations,omitempty"`
- UnlinkedLocations *Limit `protobuf:"bytes,9,opt,name=unlinked_locations,json=unlinkedLocations,proto3" json:"unlinked_locations,omitempty"`
- Layoutid uint64 `protobuf:"varint,10,opt,name=layoutid,proto3" json:"layoutid,omitempty"`
- Flags uint64 `protobuf:"varint,11,opt,name=flags,proto3" json:"flags,omitempty"`
- Symlink bool `protobuf:"varint,12,opt,name=symlink,proto3" json:"symlink,omitempty"`
- Checksum *Checksum `protobuf:"bytes,13,opt,name=checksum,proto3" json:"checksum,omitempty"`
- Owner uint32 `protobuf:"varint,14,opt,name=owner,proto3" json:"owner,omitempty"`
- Group uint32 `protobuf:"varint,15,opt,name=group,proto3" json:"group,omitempty"`
- OwnerRoot bool `protobuf:"varint,16,opt,name=owner_root,json=ownerRoot,proto3" json:"owner_root,omitempty"`
- GroupRoot bool `protobuf:"varint,17,opt,name=group_root,json=groupRoot,proto3" json:"group_root,omitempty"`
- RegexpFilename []byte `protobuf:"bytes,18,opt,name=regexp_filename,json=regexpFilename,proto3" json:"regexp_filename,omitempty"`
- RegexpDirname []byte `protobuf:"bytes,19,opt,name=regexp_dirname,json=regexpDirname,proto3" json:"regexp_dirname,omitempty"`
- Xattr map[string][]byte `protobuf:"bytes,20,rep,name=xattr,proto3" json:"xattr,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *MDSelection) Reset() { *m = MDSelection{} }
-func (m *MDSelection) String() string { return proto.CompactTextString(m) }
-func (*MDSelection) ProtoMessage() {}
-func (*MDSelection) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{13}
-}
-
-func (m *MDSelection) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_MDSelection.Unmarshal(m, b)
-}
-func (m *MDSelection) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_MDSelection.Marshal(b, m, deterministic)
-}
-func (m *MDSelection) XXX_Merge(src proto.Message) {
- xxx_messageInfo_MDSelection.Merge(m, src)
-}
-func (m *MDSelection) XXX_Size() int {
- return xxx_messageInfo_MDSelection.Size(m)
-}
-func (m *MDSelection) XXX_DiscardUnknown() {
- xxx_messageInfo_MDSelection.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_MDSelection proto.InternalMessageInfo
-
-func (m *MDSelection) GetSelect() bool {
- if m != nil {
- return m.Select
- }
- return false
-}
-
-func (m *MDSelection) GetCtime() *Limit {
- if m != nil {
- return m.Ctime
- }
- return nil
-}
-
-func (m *MDSelection) GetMtime() *Limit {
- if m != nil {
- return m.Mtime
- }
- return nil
-}
-
-func (m *MDSelection) GetStime() *Limit {
- if m != nil {
- return m.Stime
- }
- return nil
-}
-
-func (m *MDSelection) GetSize() *Limit {
- if m != nil {
- return m.Size
- }
- return nil
-}
-
-func (m *MDSelection) GetTreesize() *Limit {
- if m != nil {
- return m.Treesize
- }
- return nil
-}
-
-func (m *MDSelection) GetChildren() *Limit {
- if m != nil {
- return m.Children
- }
- return nil
-}
-
-func (m *MDSelection) GetLocations() *Limit {
- if m != nil {
- return m.Locations
- }
- return nil
-}
-
-func (m *MDSelection) GetUnlinkedLocations() *Limit {
- if m != nil {
- return m.UnlinkedLocations
- }
- return nil
-}
-
-func (m *MDSelection) GetLayoutid() uint64 {
- if m != nil {
- return m.Layoutid
- }
- return 0
-}
-
-func (m *MDSelection) GetFlags() uint64 {
- if m != nil {
- return m.Flags
- }
- return 0
-}
-
-func (m *MDSelection) GetSymlink() bool {
- if m != nil {
- return m.Symlink
- }
- return false
-}
-
-func (m *MDSelection) GetChecksum() *Checksum {
- if m != nil {
- return m.Checksum
- }
- return nil
-}
-
-func (m *MDSelection) GetOwner() uint32 {
- if m != nil {
- return m.Owner
- }
- return 0
-}
-
-func (m *MDSelection) GetGroup() uint32 {
- if m != nil {
- return m.Group
- }
- return 0
-}
-
-func (m *MDSelection) GetOwnerRoot() bool {
- if m != nil {
- return m.OwnerRoot
- }
- return false
-}
-
-func (m *MDSelection) GetGroupRoot() bool {
- if m != nil {
- return m.GroupRoot
- }
- return false
-}
-
-func (m *MDSelection) GetRegexpFilename() []byte {
- if m != nil {
- return m.RegexpFilename
- }
- return nil
-}
-
-func (m *MDSelection) GetRegexpDirname() []byte {
- if m != nil {
- return m.RegexpDirname
- }
- return nil
-}
-
-func (m *MDSelection) GetXattr() map[string][]byte {
- if m != nil {
- return m.Xattr
- }
- return nil
-}
-
-type MDRequest struct {
- Type TYPE `protobuf:"varint,1,opt,name=type,proto3,enum=eos.rpc.TYPE" json:"type,omitempty"`
- Id *MDId `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
- Authkey string `protobuf:"bytes,3,opt,name=authkey,proto3" json:"authkey,omitempty"`
- Role *RoleId `protobuf:"bytes,4,opt,name=role,proto3" json:"role,omitempty"`
- Selection *MDSelection `protobuf:"bytes,5,opt,name=selection,proto3" json:"selection,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *MDRequest) Reset() { *m = MDRequest{} }
-func (m *MDRequest) String() string { return proto.CompactTextString(m) }
-func (*MDRequest) ProtoMessage() {}
-func (*MDRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{14}
-}
-
-func (m *MDRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_MDRequest.Unmarshal(m, b)
-}
-func (m *MDRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_MDRequest.Marshal(b, m, deterministic)
-}
-func (m *MDRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_MDRequest.Merge(m, src)
-}
-func (m *MDRequest) XXX_Size() int {
- return xxx_messageInfo_MDRequest.Size(m)
-}
-func (m *MDRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_MDRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_MDRequest proto.InternalMessageInfo
-
-func (m *MDRequest) GetType() TYPE {
- if m != nil {
- return m.Type
- }
- return TYPE_FILE
-}
-
-func (m *MDRequest) GetId() *MDId {
- if m != nil {
- return m.Id
- }
- return nil
-}
-
-func (m *MDRequest) GetAuthkey() string {
- if m != nil {
- return m.Authkey
- }
- return ""
-}
-
-func (m *MDRequest) GetRole() *RoleId {
- if m != nil {
- return m.Role
- }
- return nil
-}
-
-func (m *MDRequest) GetSelection() *MDSelection {
- if m != nil {
- return m.Selection
- }
- return nil
-}
-
-type MDResponse struct {
- Type TYPE `protobuf:"varint,1,opt,name=type,proto3,enum=eos.rpc.TYPE" json:"type,omitempty"`
- Fmd *FileMdProto `protobuf:"bytes,2,opt,name=fmd,proto3" json:"fmd,omitempty"`
- Cmd *ContainerMdProto `protobuf:"bytes,3,opt,name=cmd,proto3" json:"cmd,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *MDResponse) Reset() { *m = MDResponse{} }
-func (m *MDResponse) String() string { return proto.CompactTextString(m) }
-func (*MDResponse) ProtoMessage() {}
-func (*MDResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{15}
-}
-
-func (m *MDResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_MDResponse.Unmarshal(m, b)
-}
-func (m *MDResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_MDResponse.Marshal(b, m, deterministic)
-}
-func (m *MDResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_MDResponse.Merge(m, src)
-}
-func (m *MDResponse) XXX_Size() int {
- return xxx_messageInfo_MDResponse.Size(m)
-}
-func (m *MDResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_MDResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_MDResponse proto.InternalMessageInfo
-
-func (m *MDResponse) GetType() TYPE {
- if m != nil {
- return m.Type
- }
- return TYPE_FILE
-}
-
-func (m *MDResponse) GetFmd() *FileMdProto {
- if m != nil {
- return m.Fmd
- }
- return nil
-}
-
-func (m *MDResponse) GetCmd() *ContainerMdProto {
- if m != nil {
- return m.Cmd
- }
- return nil
-}
-
-type FindRequest struct {
- Type TYPE `protobuf:"varint,1,opt,name=type,proto3,enum=eos.rpc.TYPE" json:"type,omitempty"`
- Id *MDId `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
- Role *RoleId `protobuf:"bytes,3,opt,name=role,proto3" json:"role,omitempty"`
- Authkey string `protobuf:"bytes,4,opt,name=authkey,proto3" json:"authkey,omitempty"`
- Maxdepth uint64 `protobuf:"varint,5,opt,name=maxdepth,proto3" json:"maxdepth,omitempty"`
- Selection *MDSelection `protobuf:"bytes,6,opt,name=selection,proto3" json:"selection,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *FindRequest) Reset() { *m = FindRequest{} }
-func (m *FindRequest) String() string { return proto.CompactTextString(m) }
-func (*FindRequest) ProtoMessage() {}
-func (*FindRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{16}
-}
-
-func (m *FindRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_FindRequest.Unmarshal(m, b)
-}
-func (m *FindRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_FindRequest.Marshal(b, m, deterministic)
-}
-func (m *FindRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_FindRequest.Merge(m, src)
-}
-func (m *FindRequest) XXX_Size() int {
- return xxx_messageInfo_FindRequest.Size(m)
-}
-func (m *FindRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_FindRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_FindRequest proto.InternalMessageInfo
-
-func (m *FindRequest) GetType() TYPE {
- if m != nil {
- return m.Type
- }
- return TYPE_FILE
-}
-
-func (m *FindRequest) GetId() *MDId {
- if m != nil {
- return m.Id
- }
- return nil
-}
-
-func (m *FindRequest) GetRole() *RoleId {
- if m != nil {
- return m.Role
- }
- return nil
-}
-
-func (m *FindRequest) GetAuthkey() string {
- if m != nil {
- return m.Authkey
- }
- return ""
-}
-
-func (m *FindRequest) GetMaxdepth() uint64 {
- if m != nil {
- return m.Maxdepth
- }
- return 0
-}
-
-func (m *FindRequest) GetSelection() *MDSelection {
- if m != nil {
- return m.Selection
- }
- return nil
-}
-
-type ShareAuth struct {
- Prot string `protobuf:"bytes,1,opt,name=prot,proto3" json:"prot,omitempty"`
- Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
- Host string `protobuf:"bytes,3,opt,name=host,proto3" json:"host,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *ShareAuth) Reset() { *m = ShareAuth{} }
-func (m *ShareAuth) String() string { return proto.CompactTextString(m) }
-func (*ShareAuth) ProtoMessage() {}
-func (*ShareAuth) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{17}
-}
-
-func (m *ShareAuth) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_ShareAuth.Unmarshal(m, b)
-}
-func (m *ShareAuth) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_ShareAuth.Marshal(b, m, deterministic)
-}
-func (m *ShareAuth) XXX_Merge(src proto.Message) {
- xxx_messageInfo_ShareAuth.Merge(m, src)
-}
-func (m *ShareAuth) XXX_Size() int {
- return xxx_messageInfo_ShareAuth.Size(m)
-}
-func (m *ShareAuth) XXX_DiscardUnknown() {
- xxx_messageInfo_ShareAuth.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ShareAuth proto.InternalMessageInfo
-
-func (m *ShareAuth) GetProt() string {
- if m != nil {
- return m.Prot
- }
- return ""
-}
-
-func (m *ShareAuth) GetName() string {
- if m != nil {
- return m.Name
- }
- return ""
-}
-
-func (m *ShareAuth) GetHost() string {
- if m != nil {
- return m.Host
- }
- return ""
-}
-
-type ShareProto struct {
- Permission string `protobuf:"bytes,1,opt,name=permission,proto3" json:"permission,omitempty"`
- Expires uint64 `protobuf:"varint,2,opt,name=expires,proto3" json:"expires,omitempty"`
- Owner string `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"`
- Group string `protobuf:"bytes,4,opt,name=group,proto3" json:"group,omitempty"`
- Generation uint64 `protobuf:"varint,5,opt,name=generation,proto3" json:"generation,omitempty"`
- Path string `protobuf:"bytes,6,opt,name=path,proto3" json:"path,omitempty"`
- Allowtree bool `protobuf:"varint,7,opt,name=allowtree,proto3" json:"allowtree,omitempty"`
- Vtoken string `protobuf:"bytes,8,opt,name=vtoken,proto3" json:"vtoken,omitempty"`
- Origins []*ShareAuth `protobuf:"bytes,9,rep,name=origins,proto3" json:"origins,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *ShareProto) Reset() { *m = ShareProto{} }
-func (m *ShareProto) String() string { return proto.CompactTextString(m) }
-func (*ShareProto) ProtoMessage() {}
-func (*ShareProto) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{18}
-}
-
-func (m *ShareProto) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_ShareProto.Unmarshal(m, b)
-}
-func (m *ShareProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_ShareProto.Marshal(b, m, deterministic)
-}
-func (m *ShareProto) XXX_Merge(src proto.Message) {
- xxx_messageInfo_ShareProto.Merge(m, src)
-}
-func (m *ShareProto) XXX_Size() int {
- return xxx_messageInfo_ShareProto.Size(m)
-}
-func (m *ShareProto) XXX_DiscardUnknown() {
- xxx_messageInfo_ShareProto.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ShareProto proto.InternalMessageInfo
-
-func (m *ShareProto) GetPermission() string {
- if m != nil {
- return m.Permission
- }
- return ""
-}
-
-func (m *ShareProto) GetExpires() uint64 {
- if m != nil {
- return m.Expires
- }
- return 0
-}
-
-func (m *ShareProto) GetOwner() string {
- if m != nil {
- return m.Owner
- }
- return ""
-}
-
-func (m *ShareProto) GetGroup() string {
- if m != nil {
- return m.Group
- }
- return ""
-}
-
-func (m *ShareProto) GetGeneration() uint64 {
- if m != nil {
- return m.Generation
- }
- return 0
-}
-
-func (m *ShareProto) GetPath() string {
- if m != nil {
- return m.Path
- }
- return ""
-}
-
-func (m *ShareProto) GetAllowtree() bool {
- if m != nil {
- return m.Allowtree
- }
- return false
-}
-
-func (m *ShareProto) GetVtoken() string {
- if m != nil {
- return m.Vtoken
- }
- return ""
-}
-
-func (m *ShareProto) GetOrigins() []*ShareAuth {
- if m != nil {
- return m.Origins
- }
- return nil
-}
-
-type ShareToken struct {
- Token *ShareProto `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"`
- Signature []byte `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"`
- Serialized []byte `protobuf:"bytes,3,opt,name=serialized,proto3" json:"serialized,omitempty"`
- Seed int32 `protobuf:"varint,4,opt,name=seed,proto3" json:"seed,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *ShareToken) Reset() { *m = ShareToken{} }
-func (m *ShareToken) String() string { return proto.CompactTextString(m) }
-func (*ShareToken) ProtoMessage() {}
-func (*ShareToken) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{19}
-}
-
-func (m *ShareToken) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_ShareToken.Unmarshal(m, b)
-}
-func (m *ShareToken) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_ShareToken.Marshal(b, m, deterministic)
-}
-func (m *ShareToken) XXX_Merge(src proto.Message) {
- xxx_messageInfo_ShareToken.Merge(m, src)
-}
-func (m *ShareToken) XXX_Size() int {
- return xxx_messageInfo_ShareToken.Size(m)
-}
-func (m *ShareToken) XXX_DiscardUnknown() {
- xxx_messageInfo_ShareToken.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ShareToken proto.InternalMessageInfo
-
-func (m *ShareToken) GetToken() *ShareProto {
- if m != nil {
- return m.Token
- }
- return nil
-}
-
-func (m *ShareToken) GetSignature() []byte {
- if m != nil {
- return m.Signature
- }
- return nil
-}
-
-func (m *ShareToken) GetSerialized() []byte {
- if m != nil {
- return m.Serialized
- }
- return nil
-}
-
-func (m *ShareToken) GetSeed() int32 {
- if m != nil {
- return m.Seed
- }
- return 0
-}
-
-type NSRequest struct {
- Authkey string `protobuf:"bytes,1,opt,name=authkey,proto3" json:"authkey,omitempty"`
- Role *RoleId `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"`
- // Actual request data object
- //
- // Types that are valid to be assigned to Command:
- //
- // *NSRequest_Mkdir
- // *NSRequest_Rmdir
- // *NSRequest_Touch
- // *NSRequest_Unlink
- // *NSRequest_Rm
- // *NSRequest_Rename
- // *NSRequest_Symlink
- // *NSRequest_Version
- // *NSRequest_Recycle
- // *NSRequest_Xattr
- // *NSRequest_Chown
- // *NSRequest_Chmod
- // *NSRequest_Acl
- // *NSRequest_Token
- // *NSRequest_Quota
- // *NSRequest_Share
- Command isNSRequest_Command `protobuf_oneof:"command"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSRequest) Reset() { *m = NSRequest{} }
-func (m *NSRequest) String() string { return proto.CompactTextString(m) }
-func (*NSRequest) ProtoMessage() {}
-func (*NSRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20}
-}
-
-func (m *NSRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSRequest.Unmarshal(m, b)
-}
-func (m *NSRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSRequest.Marshal(b, m, deterministic)
-}
-func (m *NSRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSRequest.Merge(m, src)
-}
-func (m *NSRequest) XXX_Size() int {
- return xxx_messageInfo_NSRequest.Size(m)
-}
-func (m *NSRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_NSRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSRequest proto.InternalMessageInfo
-
-func (m *NSRequest) GetAuthkey() string {
- if m != nil {
- return m.Authkey
- }
- return ""
-}
-
-func (m *NSRequest) GetRole() *RoleId {
- if m != nil {
- return m.Role
- }
- return nil
-}
-
-type isNSRequest_Command interface {
- isNSRequest_Command()
-}
-
-type NSRequest_Mkdir struct {
- Mkdir *NSRequest_MkdirRequest `protobuf:"bytes,21,opt,name=mkdir,proto3,oneof"`
-}
-
-type NSRequest_Rmdir struct {
- Rmdir *NSRequest_RmdirRequest `protobuf:"bytes,22,opt,name=rmdir,proto3,oneof"`
-}
-
-type NSRequest_Touch struct {
- Touch *NSRequest_TouchRequest `protobuf:"bytes,23,opt,name=touch,proto3,oneof"`
-}
-
-type NSRequest_Unlink struct {
- Unlink *NSRequest_UnlinkRequest `protobuf:"bytes,24,opt,name=unlink,proto3,oneof"`
-}
-
-type NSRequest_Rm struct {
- Rm *NSRequest_RmRequest `protobuf:"bytes,25,opt,name=rm,proto3,oneof"`
-}
-
-type NSRequest_Rename struct {
- Rename *NSRequest_RenameRequest `protobuf:"bytes,26,opt,name=rename,proto3,oneof"`
-}
-
-type NSRequest_Symlink struct {
- Symlink *NSRequest_SymlinkRequest `protobuf:"bytes,27,opt,name=symlink,proto3,oneof"`
-}
-
-type NSRequest_Version struct {
- Version *NSRequest_VersionRequest `protobuf:"bytes,28,opt,name=version,proto3,oneof"`
-}
-
-type NSRequest_Recycle struct {
- Recycle *NSRequest_RecycleRequest `protobuf:"bytes,29,opt,name=recycle,proto3,oneof"`
-}
-
-type NSRequest_Xattr struct {
- Xattr *NSRequest_SetXAttrRequest `protobuf:"bytes,30,opt,name=xattr,proto3,oneof"`
-}
-
-type NSRequest_Chown struct {
- Chown *NSRequest_ChownRequest `protobuf:"bytes,31,opt,name=chown,proto3,oneof"`
-}
-
-type NSRequest_Chmod struct {
- Chmod *NSRequest_ChmodRequest `protobuf:"bytes,32,opt,name=chmod,proto3,oneof"`
-}
-
-type NSRequest_Acl struct {
- Acl *NSRequest_AclRequest `protobuf:"bytes,33,opt,name=acl,proto3,oneof"`
-}
-
-type NSRequest_Token struct {
- Token *NSRequest_TokenRequest `protobuf:"bytes,34,opt,name=token,proto3,oneof"`
-}
-
-type NSRequest_Quota struct {
- Quota *NSRequest_QuotaRequest `protobuf:"bytes,35,opt,name=quota,proto3,oneof"`
-}
-
-type NSRequest_Share struct {
- Share *NSRequest_ShareRequest `protobuf:"bytes,36,opt,name=share,proto3,oneof"`
-}
-
-func (*NSRequest_Mkdir) isNSRequest_Command() {}
-
-func (*NSRequest_Rmdir) isNSRequest_Command() {}
-
-func (*NSRequest_Touch) isNSRequest_Command() {}
-
-func (*NSRequest_Unlink) isNSRequest_Command() {}
-
-func (*NSRequest_Rm) isNSRequest_Command() {}
-
-func (*NSRequest_Rename) isNSRequest_Command() {}
-
-func (*NSRequest_Symlink) isNSRequest_Command() {}
-
-func (*NSRequest_Version) isNSRequest_Command() {}
-
-func (*NSRequest_Recycle) isNSRequest_Command() {}
-
-func (*NSRequest_Xattr) isNSRequest_Command() {}
-
-func (*NSRequest_Chown) isNSRequest_Command() {}
-
-func (*NSRequest_Chmod) isNSRequest_Command() {}
-
-func (*NSRequest_Acl) isNSRequest_Command() {}
-
-func (*NSRequest_Token) isNSRequest_Command() {}
-
-func (*NSRequest_Quota) isNSRequest_Command() {}
-
-func (*NSRequest_Share) isNSRequest_Command() {}
-
-func (m *NSRequest) GetCommand() isNSRequest_Command {
- if m != nil {
- return m.Command
- }
- return nil
-}
-
-func (m *NSRequest) GetMkdir() *NSRequest_MkdirRequest {
- if x, ok := m.GetCommand().(*NSRequest_Mkdir); ok {
- return x.Mkdir
- }
- return nil
-}
-
-func (m *NSRequest) GetRmdir() *NSRequest_RmdirRequest {
- if x, ok := m.GetCommand().(*NSRequest_Rmdir); ok {
- return x.Rmdir
- }
- return nil
-}
-
-func (m *NSRequest) GetTouch() *NSRequest_TouchRequest {
- if x, ok := m.GetCommand().(*NSRequest_Touch); ok {
- return x.Touch
- }
- return nil
-}
-
-func (m *NSRequest) GetUnlink() *NSRequest_UnlinkRequest {
- if x, ok := m.GetCommand().(*NSRequest_Unlink); ok {
- return x.Unlink
- }
- return nil
-}
-
-func (m *NSRequest) GetRm() *NSRequest_RmRequest {
- if x, ok := m.GetCommand().(*NSRequest_Rm); ok {
- return x.Rm
- }
- return nil
-}
-
-func (m *NSRequest) GetRename() *NSRequest_RenameRequest {
- if x, ok := m.GetCommand().(*NSRequest_Rename); ok {
- return x.Rename
- }
- return nil
-}
-
-func (m *NSRequest) GetSymlink() *NSRequest_SymlinkRequest {
- if x, ok := m.GetCommand().(*NSRequest_Symlink); ok {
- return x.Symlink
- }
- return nil
-}
-
-func (m *NSRequest) GetVersion() *NSRequest_VersionRequest {
- if x, ok := m.GetCommand().(*NSRequest_Version); ok {
- return x.Version
- }
- return nil
-}
-
-func (m *NSRequest) GetRecycle() *NSRequest_RecycleRequest {
- if x, ok := m.GetCommand().(*NSRequest_Recycle); ok {
- return x.Recycle
- }
- return nil
-}
-
-func (m *NSRequest) GetXattr() *NSRequest_SetXAttrRequest {
- if x, ok := m.GetCommand().(*NSRequest_Xattr); ok {
- return x.Xattr
- }
- return nil
-}
-
-func (m *NSRequest) GetChown() *NSRequest_ChownRequest {
- if x, ok := m.GetCommand().(*NSRequest_Chown); ok {
- return x.Chown
- }
- return nil
-}
-
-func (m *NSRequest) GetChmod() *NSRequest_ChmodRequest {
- if x, ok := m.GetCommand().(*NSRequest_Chmod); ok {
- return x.Chmod
- }
- return nil
-}
-
-func (m *NSRequest) GetAcl() *NSRequest_AclRequest {
- if x, ok := m.GetCommand().(*NSRequest_Acl); ok {
- return x.Acl
- }
- return nil
-}
-
-func (m *NSRequest) GetToken() *NSRequest_TokenRequest {
- if x, ok := m.GetCommand().(*NSRequest_Token); ok {
- return x.Token
- }
- return nil
-}
-
-func (m *NSRequest) GetQuota() *NSRequest_QuotaRequest {
- if x, ok := m.GetCommand().(*NSRequest_Quota); ok {
- return x.Quota
- }
- return nil
-}
-
-func (m *NSRequest) GetShare() *NSRequest_ShareRequest {
- if x, ok := m.GetCommand().(*NSRequest_Share); ok {
- return x.Share
- }
- return nil
-}
-
-// XXX_OneofWrappers is for the internal use of the proto package.
-func (*NSRequest) XXX_OneofWrappers() []interface{} {
- return []interface{}{
- (*NSRequest_Mkdir)(nil),
- (*NSRequest_Rmdir)(nil),
- (*NSRequest_Touch)(nil),
- (*NSRequest_Unlink)(nil),
- (*NSRequest_Rm)(nil),
- (*NSRequest_Rename)(nil),
- (*NSRequest_Symlink)(nil),
- (*NSRequest_Version)(nil),
- (*NSRequest_Recycle)(nil),
- (*NSRequest_Xattr)(nil),
- (*NSRequest_Chown)(nil),
- (*NSRequest_Chmod)(nil),
- (*NSRequest_Acl)(nil),
- (*NSRequest_Token)(nil),
- (*NSRequest_Quota)(nil),
- (*NSRequest_Share)(nil),
- }
-}
-
-type NSRequest_MkdirRequest struct {
- Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- Recursive bool `protobuf:"varint,2,opt,name=recursive,proto3" json:"recursive,omitempty"`
- Mode int64 `protobuf:"varint,3,opt,name=mode,proto3" json:"mode,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSRequest_MkdirRequest) Reset() { *m = NSRequest_MkdirRequest{} }
-func (m *NSRequest_MkdirRequest) String() string { return proto.CompactTextString(m) }
-func (*NSRequest_MkdirRequest) ProtoMessage() {}
-func (*NSRequest_MkdirRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 0}
-}
-
-func (m *NSRequest_MkdirRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSRequest_MkdirRequest.Unmarshal(m, b)
-}
-func (m *NSRequest_MkdirRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSRequest_MkdirRequest.Marshal(b, m, deterministic)
-}
-func (m *NSRequest_MkdirRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSRequest_MkdirRequest.Merge(m, src)
-}
-func (m *NSRequest_MkdirRequest) XXX_Size() int {
- return xxx_messageInfo_NSRequest_MkdirRequest.Size(m)
-}
-func (m *NSRequest_MkdirRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_NSRequest_MkdirRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSRequest_MkdirRequest proto.InternalMessageInfo
-
-func (m *NSRequest_MkdirRequest) GetId() *MDId {
- if m != nil {
- return m.Id
- }
- return nil
-}
-
-func (m *NSRequest_MkdirRequest) GetRecursive() bool {
- if m != nil {
- return m.Recursive
- }
- return false
-}
-
-func (m *NSRequest_MkdirRequest) GetMode() int64 {
- if m != nil {
- return m.Mode
- }
- return 0
-}
-
-type NSRequest_RmdirRequest struct {
- Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSRequest_RmdirRequest) Reset() { *m = NSRequest_RmdirRequest{} }
-func (m *NSRequest_RmdirRequest) String() string { return proto.CompactTextString(m) }
-func (*NSRequest_RmdirRequest) ProtoMessage() {}
-func (*NSRequest_RmdirRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 1}
-}
-
-func (m *NSRequest_RmdirRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSRequest_RmdirRequest.Unmarshal(m, b)
-}
-func (m *NSRequest_RmdirRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSRequest_RmdirRequest.Marshal(b, m, deterministic)
-}
-func (m *NSRequest_RmdirRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSRequest_RmdirRequest.Merge(m, src)
-}
-func (m *NSRequest_RmdirRequest) XXX_Size() int {
- return xxx_messageInfo_NSRequest_RmdirRequest.Size(m)
-}
-func (m *NSRequest_RmdirRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_NSRequest_RmdirRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSRequest_RmdirRequest proto.InternalMessageInfo
-
-func (m *NSRequest_RmdirRequest) GetId() *MDId {
- if m != nil {
- return m.Id
- }
- return nil
-}
-
-type NSRequest_TouchRequest struct {
- Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSRequest_TouchRequest) Reset() { *m = NSRequest_TouchRequest{} }
-func (m *NSRequest_TouchRequest) String() string { return proto.CompactTextString(m) }
-func (*NSRequest_TouchRequest) ProtoMessage() {}
-func (*NSRequest_TouchRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 2}
-}
-
-func (m *NSRequest_TouchRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSRequest_TouchRequest.Unmarshal(m, b)
-}
-func (m *NSRequest_TouchRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSRequest_TouchRequest.Marshal(b, m, deterministic)
-}
-func (m *NSRequest_TouchRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSRequest_TouchRequest.Merge(m, src)
-}
-func (m *NSRequest_TouchRequest) XXX_Size() int {
- return xxx_messageInfo_NSRequest_TouchRequest.Size(m)
-}
-func (m *NSRequest_TouchRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_NSRequest_TouchRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSRequest_TouchRequest proto.InternalMessageInfo
-
-func (m *NSRequest_TouchRequest) GetId() *MDId {
- if m != nil {
- return m.Id
- }
- return nil
-}
-
-type NSRequest_UnlinkRequest struct {
- Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- Norecycle bool `protobuf:"varint,3,opt,name=norecycle,proto3" json:"norecycle,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSRequest_UnlinkRequest) Reset() { *m = NSRequest_UnlinkRequest{} }
-func (m *NSRequest_UnlinkRequest) String() string { return proto.CompactTextString(m) }
-func (*NSRequest_UnlinkRequest) ProtoMessage() {}
-func (*NSRequest_UnlinkRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 3}
-}
-
-func (m *NSRequest_UnlinkRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSRequest_UnlinkRequest.Unmarshal(m, b)
-}
-func (m *NSRequest_UnlinkRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSRequest_UnlinkRequest.Marshal(b, m, deterministic)
-}
-func (m *NSRequest_UnlinkRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSRequest_UnlinkRequest.Merge(m, src)
-}
-func (m *NSRequest_UnlinkRequest) XXX_Size() int {
- return xxx_messageInfo_NSRequest_UnlinkRequest.Size(m)
-}
-func (m *NSRequest_UnlinkRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_NSRequest_UnlinkRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSRequest_UnlinkRequest proto.InternalMessageInfo
-
-func (m *NSRequest_UnlinkRequest) GetId() *MDId {
- if m != nil {
- return m.Id
- }
- return nil
-}
-
-func (m *NSRequest_UnlinkRequest) GetNorecycle() bool {
- if m != nil {
- return m.Norecycle
- }
- return false
-}
-
-type NSRequest_RmRequest struct {
- Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- Recursive bool `protobuf:"varint,2,opt,name=recursive,proto3" json:"recursive,omitempty"`
- Norecycle bool `protobuf:"varint,3,opt,name=norecycle,proto3" json:"norecycle,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSRequest_RmRequest) Reset() { *m = NSRequest_RmRequest{} }
-func (m *NSRequest_RmRequest) String() string { return proto.CompactTextString(m) }
-func (*NSRequest_RmRequest) ProtoMessage() {}
-func (*NSRequest_RmRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 4}
-}
-
-func (m *NSRequest_RmRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSRequest_RmRequest.Unmarshal(m, b)
-}
-func (m *NSRequest_RmRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSRequest_RmRequest.Marshal(b, m, deterministic)
-}
-func (m *NSRequest_RmRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSRequest_RmRequest.Merge(m, src)
-}
-func (m *NSRequest_RmRequest) XXX_Size() int {
- return xxx_messageInfo_NSRequest_RmRequest.Size(m)
-}
-func (m *NSRequest_RmRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_NSRequest_RmRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSRequest_RmRequest proto.InternalMessageInfo
-
-func (m *NSRequest_RmRequest) GetId() *MDId {
- if m != nil {
- return m.Id
- }
- return nil
-}
-
-func (m *NSRequest_RmRequest) GetRecursive() bool {
- if m != nil {
- return m.Recursive
- }
- return false
-}
-
-func (m *NSRequest_RmRequest) GetNorecycle() bool {
- if m != nil {
- return m.Norecycle
- }
- return false
-}
-
-type NSRequest_RenameRequest struct {
- Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- Target []byte `protobuf:"bytes,2,opt,name=target,proto3" json:"target,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSRequest_RenameRequest) Reset() { *m = NSRequest_RenameRequest{} }
-func (m *NSRequest_RenameRequest) String() string { return proto.CompactTextString(m) }
-func (*NSRequest_RenameRequest) ProtoMessage() {}
-func (*NSRequest_RenameRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 5}
-}
-
-func (m *NSRequest_RenameRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSRequest_RenameRequest.Unmarshal(m, b)
-}
-func (m *NSRequest_RenameRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSRequest_RenameRequest.Marshal(b, m, deterministic)
-}
-func (m *NSRequest_RenameRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSRequest_RenameRequest.Merge(m, src)
-}
-func (m *NSRequest_RenameRequest) XXX_Size() int {
- return xxx_messageInfo_NSRequest_RenameRequest.Size(m)
-}
-func (m *NSRequest_RenameRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_NSRequest_RenameRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSRequest_RenameRequest proto.InternalMessageInfo
-
-func (m *NSRequest_RenameRequest) GetId() *MDId {
- if m != nil {
- return m.Id
- }
- return nil
-}
-
-func (m *NSRequest_RenameRequest) GetTarget() []byte {
- if m != nil {
- return m.Target
- }
- return nil
-}
-
-type NSRequest_SymlinkRequest struct {
- Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- Target []byte `protobuf:"bytes,2,opt,name=target,proto3" json:"target,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSRequest_SymlinkRequest) Reset() { *m = NSRequest_SymlinkRequest{} }
-func (m *NSRequest_SymlinkRequest) String() string { return proto.CompactTextString(m) }
-func (*NSRequest_SymlinkRequest) ProtoMessage() {}
-func (*NSRequest_SymlinkRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 6}
-}
-
-func (m *NSRequest_SymlinkRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSRequest_SymlinkRequest.Unmarshal(m, b)
-}
-func (m *NSRequest_SymlinkRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSRequest_SymlinkRequest.Marshal(b, m, deterministic)
-}
-func (m *NSRequest_SymlinkRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSRequest_SymlinkRequest.Merge(m, src)
-}
-func (m *NSRequest_SymlinkRequest) XXX_Size() int {
- return xxx_messageInfo_NSRequest_SymlinkRequest.Size(m)
-}
-func (m *NSRequest_SymlinkRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_NSRequest_SymlinkRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSRequest_SymlinkRequest proto.InternalMessageInfo
-
-func (m *NSRequest_SymlinkRequest) GetId() *MDId {
- if m != nil {
- return m.Id
- }
- return nil
-}
-
-func (m *NSRequest_SymlinkRequest) GetTarget() []byte {
- if m != nil {
- return m.Target
- }
- return nil
-}
-
-type NSRequest_VersionRequest struct {
- Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- Cmd NSRequest_VersionRequest_VERSION_CMD `protobuf:"varint,2,opt,name=cmd,proto3,enum=eos.rpc.NSRequest_VersionRequest_VERSION_CMD" json:"cmd,omitempty"`
- Maxversion int32 `protobuf:"varint,3,opt,name=maxversion,proto3" json:"maxversion,omitempty"`
- Grabversion string `protobuf:"bytes,4,opt,name=grabversion,proto3" json:"grabversion,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSRequest_VersionRequest) Reset() { *m = NSRequest_VersionRequest{} }
-func (m *NSRequest_VersionRequest) String() string { return proto.CompactTextString(m) }
-func (*NSRequest_VersionRequest) ProtoMessage() {}
-func (*NSRequest_VersionRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 7}
-}
-
-func (m *NSRequest_VersionRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSRequest_VersionRequest.Unmarshal(m, b)
-}
-func (m *NSRequest_VersionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSRequest_VersionRequest.Marshal(b, m, deterministic)
-}
-func (m *NSRequest_VersionRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSRequest_VersionRequest.Merge(m, src)
-}
-func (m *NSRequest_VersionRequest) XXX_Size() int {
- return xxx_messageInfo_NSRequest_VersionRequest.Size(m)
-}
-func (m *NSRequest_VersionRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_NSRequest_VersionRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSRequest_VersionRequest proto.InternalMessageInfo
-
-func (m *NSRequest_VersionRequest) GetId() *MDId {
- if m != nil {
- return m.Id
- }
- return nil
-}
-
-func (m *NSRequest_VersionRequest) GetCmd() NSRequest_VersionRequest_VERSION_CMD {
- if m != nil {
- return m.Cmd
- }
- return NSRequest_VersionRequest_CREATE
-}
-
-func (m *NSRequest_VersionRequest) GetMaxversion() int32 {
- if m != nil {
- return m.Maxversion
- }
- return 0
-}
-
-func (m *NSRequest_VersionRequest) GetGrabversion() string {
- if m != nil {
- return m.Grabversion
- }
- return ""
-}
-
-type NSRequest_RecycleRequest struct {
- Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
- Cmd NSRequest_RecycleRequest_RECYCLE_CMD `protobuf:"varint,2,opt,name=cmd,proto3,enum=eos.rpc.NSRequest_RecycleRequest_RECYCLE_CMD" json:"cmd,omitempty"`
- Restoreflag *NSRequest_RecycleRequest_RestoreFlags `protobuf:"bytes,3,opt,name=restoreflag,proto3" json:"restoreflag,omitempty"`
- Purgedate *NSRequest_RecycleRequest_PurgeDate `protobuf:"bytes,4,opt,name=purgedate,proto3" json:"purgedate,omitempty"`
- Listflag *NSRequest_RecycleRequest_ListFlags `protobuf:"bytes,5,opt,name=listflag,proto3" json:"listflag,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSRequest_RecycleRequest) Reset() { *m = NSRequest_RecycleRequest{} }
-func (m *NSRequest_RecycleRequest) String() string { return proto.CompactTextString(m) }
-func (*NSRequest_RecycleRequest) ProtoMessage() {}
-func (*NSRequest_RecycleRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 8}
-}
-
-func (m *NSRequest_RecycleRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSRequest_RecycleRequest.Unmarshal(m, b)
-}
-func (m *NSRequest_RecycleRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSRequest_RecycleRequest.Marshal(b, m, deterministic)
-}
-func (m *NSRequest_RecycleRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSRequest_RecycleRequest.Merge(m, src)
-}
-func (m *NSRequest_RecycleRequest) XXX_Size() int {
- return xxx_messageInfo_NSRequest_RecycleRequest.Size(m)
-}
-func (m *NSRequest_RecycleRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_NSRequest_RecycleRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSRequest_RecycleRequest proto.InternalMessageInfo
-
-func (m *NSRequest_RecycleRequest) GetKey() string {
- if m != nil {
- return m.Key
- }
- return ""
-}
-
-func (m *NSRequest_RecycleRequest) GetCmd() NSRequest_RecycleRequest_RECYCLE_CMD {
- if m != nil {
- return m.Cmd
- }
- return NSRequest_RecycleRequest_RESTORE
-}
-
-func (m *NSRequest_RecycleRequest) GetRestoreflag() *NSRequest_RecycleRequest_RestoreFlags {
- if m != nil {
- return m.Restoreflag
- }
- return nil
-}
-
-func (m *NSRequest_RecycleRequest) GetPurgedate() *NSRequest_RecycleRequest_PurgeDate {
- if m != nil {
- return m.Purgedate
- }
- return nil
-}
-
-func (m *NSRequest_RecycleRequest) GetListflag() *NSRequest_RecycleRequest_ListFlags {
- if m != nil {
- return m.Listflag
- }
- return nil
-}
-
-type NSRequest_RecycleRequest_RestoreFlags struct {
- Force bool `protobuf:"varint,1,opt,name=force,proto3" json:"force,omitempty"`
- Mkpath bool `protobuf:"varint,2,opt,name=mkpath,proto3" json:"mkpath,omitempty"`
- Versions bool `protobuf:"varint,3,opt,name=versions,proto3" json:"versions,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSRequest_RecycleRequest_RestoreFlags) Reset() { *m = NSRequest_RecycleRequest_RestoreFlags{} }
-func (m *NSRequest_RecycleRequest_RestoreFlags) String() string { return proto.CompactTextString(m) }
-func (*NSRequest_RecycleRequest_RestoreFlags) ProtoMessage() {}
-func (*NSRequest_RecycleRequest_RestoreFlags) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 8, 0}
-}
-
-func (m *NSRequest_RecycleRequest_RestoreFlags) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSRequest_RecycleRequest_RestoreFlags.Unmarshal(m, b)
-}
-func (m *NSRequest_RecycleRequest_RestoreFlags) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSRequest_RecycleRequest_RestoreFlags.Marshal(b, m, deterministic)
-}
-func (m *NSRequest_RecycleRequest_RestoreFlags) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSRequest_RecycleRequest_RestoreFlags.Merge(m, src)
-}
-func (m *NSRequest_RecycleRequest_RestoreFlags) XXX_Size() int {
- return xxx_messageInfo_NSRequest_RecycleRequest_RestoreFlags.Size(m)
-}
-func (m *NSRequest_RecycleRequest_RestoreFlags) XXX_DiscardUnknown() {
- xxx_messageInfo_NSRequest_RecycleRequest_RestoreFlags.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSRequest_RecycleRequest_RestoreFlags proto.InternalMessageInfo
-
-func (m *NSRequest_RecycleRequest_RestoreFlags) GetForce() bool {
- if m != nil {
- return m.Force
- }
- return false
-}
-
-func (m *NSRequest_RecycleRequest_RestoreFlags) GetMkpath() bool {
- if m != nil {
- return m.Mkpath
- }
- return false
-}
-
-func (m *NSRequest_RecycleRequest_RestoreFlags) GetVersions() bool {
- if m != nil {
- return m.Versions
- }
- return false
-}
-
-type NSRequest_RecycleRequest_PurgeDate struct {
- Year int32 `protobuf:"varint,1,opt,name=year,proto3" json:"year,omitempty"`
- Month int32 `protobuf:"varint,2,opt,name=month,proto3" json:"month,omitempty"`
- Day int32 `protobuf:"varint,3,opt,name=day,proto3" json:"day,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSRequest_RecycleRequest_PurgeDate) Reset() { *m = NSRequest_RecycleRequest_PurgeDate{} }
-func (m *NSRequest_RecycleRequest_PurgeDate) String() string { return proto.CompactTextString(m) }
-func (*NSRequest_RecycleRequest_PurgeDate) ProtoMessage() {}
-func (*NSRequest_RecycleRequest_PurgeDate) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 8, 1}
-}
-
-func (m *NSRequest_RecycleRequest_PurgeDate) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSRequest_RecycleRequest_PurgeDate.Unmarshal(m, b)
-}
-func (m *NSRequest_RecycleRequest_PurgeDate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSRequest_RecycleRequest_PurgeDate.Marshal(b, m, deterministic)
-}
-func (m *NSRequest_RecycleRequest_PurgeDate) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSRequest_RecycleRequest_PurgeDate.Merge(m, src)
-}
-func (m *NSRequest_RecycleRequest_PurgeDate) XXX_Size() int {
- return xxx_messageInfo_NSRequest_RecycleRequest_PurgeDate.Size(m)
-}
-func (m *NSRequest_RecycleRequest_PurgeDate) XXX_DiscardUnknown() {
- xxx_messageInfo_NSRequest_RecycleRequest_PurgeDate.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSRequest_RecycleRequest_PurgeDate proto.InternalMessageInfo
-
-func (m *NSRequest_RecycleRequest_PurgeDate) GetYear() int32 {
- if m != nil {
- return m.Year
- }
- return 0
-}
-
-func (m *NSRequest_RecycleRequest_PurgeDate) GetMonth() int32 {
- if m != nil {
- return m.Month
- }
- return 0
-}
-
-func (m *NSRequest_RecycleRequest_PurgeDate) GetDay() int32 {
- if m != nil {
- return m.Day
- }
- return 0
-}
-
-type NSRequest_RecycleRequest_ListFlags struct {
- Maxentries int32 `protobuf:"varint,1,opt,name=maxentries,proto3" json:"maxentries,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSRequest_RecycleRequest_ListFlags) Reset() { *m = NSRequest_RecycleRequest_ListFlags{} }
-func (m *NSRequest_RecycleRequest_ListFlags) String() string { return proto.CompactTextString(m) }
-func (*NSRequest_RecycleRequest_ListFlags) ProtoMessage() {}
-func (*NSRequest_RecycleRequest_ListFlags) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 8, 2}
-}
-
-func (m *NSRequest_RecycleRequest_ListFlags) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSRequest_RecycleRequest_ListFlags.Unmarshal(m, b)
-}
-func (m *NSRequest_RecycleRequest_ListFlags) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSRequest_RecycleRequest_ListFlags.Marshal(b, m, deterministic)
-}
-func (m *NSRequest_RecycleRequest_ListFlags) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSRequest_RecycleRequest_ListFlags.Merge(m, src)
-}
-func (m *NSRequest_RecycleRequest_ListFlags) XXX_Size() int {
- return xxx_messageInfo_NSRequest_RecycleRequest_ListFlags.Size(m)
-}
-func (m *NSRequest_RecycleRequest_ListFlags) XXX_DiscardUnknown() {
- xxx_messageInfo_NSRequest_RecycleRequest_ListFlags.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSRequest_RecycleRequest_ListFlags proto.InternalMessageInfo
-
-func (m *NSRequest_RecycleRequest_ListFlags) GetMaxentries() int32 {
- if m != nil {
- return m.Maxentries
- }
- return 0
-}
-
-type NSRequest_SetXAttrRequest struct {
- Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- Xattrs map[string][]byte `protobuf:"bytes,2,rep,name=xattrs,proto3" json:"xattrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
- Recursive bool `protobuf:"varint,3,opt,name=recursive,proto3" json:"recursive,omitempty"`
- Keystodelete []string `protobuf:"bytes,4,rep,name=keystodelete,proto3" json:"keystodelete,omitempty"`
- Create bool `protobuf:"varint,5,opt,name=create,proto3" json:"create,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSRequest_SetXAttrRequest) Reset() { *m = NSRequest_SetXAttrRequest{} }
-func (m *NSRequest_SetXAttrRequest) String() string { return proto.CompactTextString(m) }
-func (*NSRequest_SetXAttrRequest) ProtoMessage() {}
-func (*NSRequest_SetXAttrRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 9}
-}
-
-func (m *NSRequest_SetXAttrRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSRequest_SetXAttrRequest.Unmarshal(m, b)
-}
-func (m *NSRequest_SetXAttrRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSRequest_SetXAttrRequest.Marshal(b, m, deterministic)
-}
-func (m *NSRequest_SetXAttrRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSRequest_SetXAttrRequest.Merge(m, src)
-}
-func (m *NSRequest_SetXAttrRequest) XXX_Size() int {
- return xxx_messageInfo_NSRequest_SetXAttrRequest.Size(m)
-}
-func (m *NSRequest_SetXAttrRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_NSRequest_SetXAttrRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSRequest_SetXAttrRequest proto.InternalMessageInfo
-
-func (m *NSRequest_SetXAttrRequest) GetId() *MDId {
- if m != nil {
- return m.Id
- }
- return nil
-}
-
-func (m *NSRequest_SetXAttrRequest) GetXattrs() map[string][]byte {
- if m != nil {
- return m.Xattrs
- }
- return nil
-}
-
-func (m *NSRequest_SetXAttrRequest) GetRecursive() bool {
- if m != nil {
- return m.Recursive
- }
- return false
-}
-
-func (m *NSRequest_SetXAttrRequest) GetKeystodelete() []string {
- if m != nil {
- return m.Keystodelete
- }
- return nil
-}
-
-func (m *NSRequest_SetXAttrRequest) GetCreate() bool {
- if m != nil {
- return m.Create
- }
- return false
-}
-
-type NSRequest_ChownRequest struct {
- Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- Owner *RoleId `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSRequest_ChownRequest) Reset() { *m = NSRequest_ChownRequest{} }
-func (m *NSRequest_ChownRequest) String() string { return proto.CompactTextString(m) }
-func (*NSRequest_ChownRequest) ProtoMessage() {}
-func (*NSRequest_ChownRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 10}
-}
-
-func (m *NSRequest_ChownRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSRequest_ChownRequest.Unmarshal(m, b)
-}
-func (m *NSRequest_ChownRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSRequest_ChownRequest.Marshal(b, m, deterministic)
-}
-func (m *NSRequest_ChownRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSRequest_ChownRequest.Merge(m, src)
-}
-func (m *NSRequest_ChownRequest) XXX_Size() int {
- return xxx_messageInfo_NSRequest_ChownRequest.Size(m)
-}
-func (m *NSRequest_ChownRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_NSRequest_ChownRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSRequest_ChownRequest proto.InternalMessageInfo
-
-func (m *NSRequest_ChownRequest) GetId() *MDId {
- if m != nil {
- return m.Id
- }
- return nil
-}
-
-func (m *NSRequest_ChownRequest) GetOwner() *RoleId {
- if m != nil {
- return m.Owner
- }
- return nil
-}
-
-type NSRequest_ChmodRequest struct {
- Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- Mode int64 `protobuf:"varint,2,opt,name=mode,proto3" json:"mode,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSRequest_ChmodRequest) Reset() { *m = NSRequest_ChmodRequest{} }
-func (m *NSRequest_ChmodRequest) String() string { return proto.CompactTextString(m) }
-func (*NSRequest_ChmodRequest) ProtoMessage() {}
-func (*NSRequest_ChmodRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 11}
-}
-
-func (m *NSRequest_ChmodRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSRequest_ChmodRequest.Unmarshal(m, b)
-}
-func (m *NSRequest_ChmodRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSRequest_ChmodRequest.Marshal(b, m, deterministic)
-}
-func (m *NSRequest_ChmodRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSRequest_ChmodRequest.Merge(m, src)
-}
-func (m *NSRequest_ChmodRequest) XXX_Size() int {
- return xxx_messageInfo_NSRequest_ChmodRequest.Size(m)
-}
-func (m *NSRequest_ChmodRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_NSRequest_ChmodRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSRequest_ChmodRequest proto.InternalMessageInfo
-
-func (m *NSRequest_ChmodRequest) GetId() *MDId {
- if m != nil {
- return m.Id
- }
- return nil
-}
-
-func (m *NSRequest_ChmodRequest) GetMode() int64 {
- if m != nil {
- return m.Mode
- }
- return 0
-}
-
-type NSRequest_AclRequest struct {
- Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- Cmd NSRequest_AclRequest_ACL_COMMAND `protobuf:"varint,2,opt,name=cmd,proto3,enum=eos.rpc.NSRequest_AclRequest_ACL_COMMAND" json:"cmd,omitempty"`
- Recursive bool `protobuf:"varint,3,opt,name=recursive,proto3" json:"recursive,omitempty"`
- Type NSRequest_AclRequest_ACL_TYPE `protobuf:"varint,4,opt,name=type,proto3,enum=eos.rpc.NSRequest_AclRequest_ACL_TYPE" json:"type,omitempty"`
- Rule string `protobuf:"bytes,5,opt,name=rule,proto3" json:"rule,omitempty"`
- Position uint32 `protobuf:"varint,6,opt,name=position,proto3" json:"position,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSRequest_AclRequest) Reset() { *m = NSRequest_AclRequest{} }
-func (m *NSRequest_AclRequest) String() string { return proto.CompactTextString(m) }
-func (*NSRequest_AclRequest) ProtoMessage() {}
-func (*NSRequest_AclRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 12}
-}
-
-func (m *NSRequest_AclRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSRequest_AclRequest.Unmarshal(m, b)
-}
-func (m *NSRequest_AclRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSRequest_AclRequest.Marshal(b, m, deterministic)
-}
-func (m *NSRequest_AclRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSRequest_AclRequest.Merge(m, src)
-}
-func (m *NSRequest_AclRequest) XXX_Size() int {
- return xxx_messageInfo_NSRequest_AclRequest.Size(m)
-}
-func (m *NSRequest_AclRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_NSRequest_AclRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSRequest_AclRequest proto.InternalMessageInfo
-
-func (m *NSRequest_AclRequest) GetId() *MDId {
- if m != nil {
- return m.Id
- }
- return nil
-}
-
-func (m *NSRequest_AclRequest) GetCmd() NSRequest_AclRequest_ACL_COMMAND {
- if m != nil {
- return m.Cmd
- }
- return NSRequest_AclRequest_NONE
-}
-
-func (m *NSRequest_AclRequest) GetRecursive() bool {
- if m != nil {
- return m.Recursive
- }
- return false
-}
-
-func (m *NSRequest_AclRequest) GetType() NSRequest_AclRequest_ACL_TYPE {
- if m != nil {
- return m.Type
- }
- return NSRequest_AclRequest_USER_ACL
-}
-
-func (m *NSRequest_AclRequest) GetRule() string {
- if m != nil {
- return m.Rule
- }
- return ""
-}
-
-func (m *NSRequest_AclRequest) GetPosition() uint32 {
- if m != nil {
- return m.Position
- }
- return 0
-}
-
-type NSRequest_TokenRequest struct {
- Token *ShareToken `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSRequest_TokenRequest) Reset() { *m = NSRequest_TokenRequest{} }
-func (m *NSRequest_TokenRequest) String() string { return proto.CompactTextString(m) }
-func (*NSRequest_TokenRequest) ProtoMessage() {}
-func (*NSRequest_TokenRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 13}
-}
-
-func (m *NSRequest_TokenRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSRequest_TokenRequest.Unmarshal(m, b)
-}
-func (m *NSRequest_TokenRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSRequest_TokenRequest.Marshal(b, m, deterministic)
-}
-func (m *NSRequest_TokenRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSRequest_TokenRequest.Merge(m, src)
-}
-func (m *NSRequest_TokenRequest) XXX_Size() int {
- return xxx_messageInfo_NSRequest_TokenRequest.Size(m)
-}
-func (m *NSRequest_TokenRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_NSRequest_TokenRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSRequest_TokenRequest proto.InternalMessageInfo
-
-func (m *NSRequest_TokenRequest) GetToken() *ShareToken {
- if m != nil {
- return m.Token
- }
- return nil
-}
-
-type NSRequest_QuotaRequest struct {
- Path []byte `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
- Id *RoleId `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
- Op QUOTAOP `protobuf:"varint,3,opt,name=op,proto3,enum=eos.rpc.QUOTAOP" json:"op,omitempty"`
- Maxfiles uint64 `protobuf:"varint,4,opt,name=maxfiles,proto3" json:"maxfiles,omitempty"`
- Maxbytes uint64 `protobuf:"varint,5,opt,name=maxbytes,proto3" json:"maxbytes,omitempty"`
- Entry QUOTAENTRY `protobuf:"varint,6,opt,name=entry,proto3,enum=eos.rpc.QUOTAENTRY" json:"entry,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSRequest_QuotaRequest) Reset() { *m = NSRequest_QuotaRequest{} }
-func (m *NSRequest_QuotaRequest) String() string { return proto.CompactTextString(m) }
-func (*NSRequest_QuotaRequest) ProtoMessage() {}
-func (*NSRequest_QuotaRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 14}
-}
-
-func (m *NSRequest_QuotaRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSRequest_QuotaRequest.Unmarshal(m, b)
-}
-func (m *NSRequest_QuotaRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSRequest_QuotaRequest.Marshal(b, m, deterministic)
-}
-func (m *NSRequest_QuotaRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSRequest_QuotaRequest.Merge(m, src)
-}
-func (m *NSRequest_QuotaRequest) XXX_Size() int {
- return xxx_messageInfo_NSRequest_QuotaRequest.Size(m)
-}
-func (m *NSRequest_QuotaRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_NSRequest_QuotaRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSRequest_QuotaRequest proto.InternalMessageInfo
-
-func (m *NSRequest_QuotaRequest) GetPath() []byte {
- if m != nil {
- return m.Path
- }
- return nil
-}
-
-func (m *NSRequest_QuotaRequest) GetId() *RoleId {
- if m != nil {
- return m.Id
- }
- return nil
-}
-
-func (m *NSRequest_QuotaRequest) GetOp() QUOTAOP {
- if m != nil {
- return m.Op
- }
- return QUOTAOP_GET
-}
-
-func (m *NSRequest_QuotaRequest) GetMaxfiles() uint64 {
- if m != nil {
- return m.Maxfiles
- }
- return 0
-}
-
-func (m *NSRequest_QuotaRequest) GetMaxbytes() uint64 {
- if m != nil {
- return m.Maxbytes
- }
- return 0
-}
-
-func (m *NSRequest_QuotaRequest) GetEntry() QUOTAENTRY {
- if m != nil {
- return m.Entry
- }
- return QUOTAENTRY_NONE
-}
-
-type NSRequest_ShareRequest struct {
- // Types that are valid to be assigned to Subcmd:
- //
- // *NSRequest_ShareRequest_Ls
- // *NSRequest_ShareRequest_Op
- Subcmd isNSRequest_ShareRequest_Subcmd `protobuf_oneof:"subcmd"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSRequest_ShareRequest) Reset() { *m = NSRequest_ShareRequest{} }
-func (m *NSRequest_ShareRequest) String() string { return proto.CompactTextString(m) }
-func (*NSRequest_ShareRequest) ProtoMessage() {}
-func (*NSRequest_ShareRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 15}
-}
-
-func (m *NSRequest_ShareRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSRequest_ShareRequest.Unmarshal(m, b)
-}
-func (m *NSRequest_ShareRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSRequest_ShareRequest.Marshal(b, m, deterministic)
-}
-func (m *NSRequest_ShareRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSRequest_ShareRequest.Merge(m, src)
-}
-func (m *NSRequest_ShareRequest) XXX_Size() int {
- return xxx_messageInfo_NSRequest_ShareRequest.Size(m)
-}
-func (m *NSRequest_ShareRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_NSRequest_ShareRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSRequest_ShareRequest proto.InternalMessageInfo
-
-type isNSRequest_ShareRequest_Subcmd interface {
- isNSRequest_ShareRequest_Subcmd()
-}
-
-type NSRequest_ShareRequest_Ls struct {
- Ls *NSRequest_ShareRequest_LsShare `protobuf:"bytes,1,opt,name=ls,proto3,oneof"`
-}
-
-type NSRequest_ShareRequest_Op struct {
- Op *NSRequest_ShareRequest_OperateShare `protobuf:"bytes,2,opt,name=op,proto3,oneof"`
-}
-
-func (*NSRequest_ShareRequest_Ls) isNSRequest_ShareRequest_Subcmd() {}
-
-func (*NSRequest_ShareRequest_Op) isNSRequest_ShareRequest_Subcmd() {}
-
-func (m *NSRequest_ShareRequest) GetSubcmd() isNSRequest_ShareRequest_Subcmd {
- if m != nil {
- return m.Subcmd
- }
- return nil
-}
-
-func (m *NSRequest_ShareRequest) GetLs() *NSRequest_ShareRequest_LsShare {
- if x, ok := m.GetSubcmd().(*NSRequest_ShareRequest_Ls); ok {
- return x.Ls
- }
- return nil
-}
-
-func (m *NSRequest_ShareRequest) GetOp() *NSRequest_ShareRequest_OperateShare {
- if x, ok := m.GetSubcmd().(*NSRequest_ShareRequest_Op); ok {
- return x.Op
- }
- return nil
-}
-
-// XXX_OneofWrappers is for the internal use of the proto package.
-func (*NSRequest_ShareRequest) XXX_OneofWrappers() []interface{} {
- return []interface{}{
- (*NSRequest_ShareRequest_Ls)(nil),
- (*NSRequest_ShareRequest_Op)(nil),
- }
-}
-
-type NSRequest_ShareRequest_LsShare struct {
- Outformat NSRequest_ShareRequest_LsShare_OutFormat `protobuf:"varint,1,opt,name=outformat,proto3,enum=eos.rpc.NSRequest_ShareRequest_LsShare_OutFormat" json:"outformat,omitempty"`
- Selection string `protobuf:"bytes,2,opt,name=selection,proto3" json:"selection,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSRequest_ShareRequest_LsShare) Reset() { *m = NSRequest_ShareRequest_LsShare{} }
-func (m *NSRequest_ShareRequest_LsShare) String() string { return proto.CompactTextString(m) }
-func (*NSRequest_ShareRequest_LsShare) ProtoMessage() {}
-func (*NSRequest_ShareRequest_LsShare) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 15, 0}
-}
-
-func (m *NSRequest_ShareRequest_LsShare) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSRequest_ShareRequest_LsShare.Unmarshal(m, b)
-}
-func (m *NSRequest_ShareRequest_LsShare) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSRequest_ShareRequest_LsShare.Marshal(b, m, deterministic)
-}
-func (m *NSRequest_ShareRequest_LsShare) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSRequest_ShareRequest_LsShare.Merge(m, src)
-}
-func (m *NSRequest_ShareRequest_LsShare) XXX_Size() int {
- return xxx_messageInfo_NSRequest_ShareRequest_LsShare.Size(m)
-}
-func (m *NSRequest_ShareRequest_LsShare) XXX_DiscardUnknown() {
- xxx_messageInfo_NSRequest_ShareRequest_LsShare.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSRequest_ShareRequest_LsShare proto.InternalMessageInfo
-
-func (m *NSRequest_ShareRequest_LsShare) GetOutformat() NSRequest_ShareRequest_LsShare_OutFormat {
- if m != nil {
- return m.Outformat
- }
- return NSRequest_ShareRequest_LsShare_NONE
-}
-
-func (m *NSRequest_ShareRequest_LsShare) GetSelection() string {
- if m != nil {
- return m.Selection
- }
- return ""
-}
-
-type NSRequest_ShareRequest_OperateShare struct {
- Op NSRequest_ShareRequest_OperateShare_Op `protobuf:"varint,1,opt,name=op,proto3,enum=eos.rpc.NSRequest_ShareRequest_OperateShare_Op" json:"op,omitempty"`
- Share string `protobuf:"bytes,2,opt,name=share,proto3" json:"share,omitempty"`
- Acl string `protobuf:"bytes,3,opt,name=acl,proto3" json:"acl,omitempty"`
- Path string `protobuf:"bytes,4,opt,name=path,proto3" json:"path,omitempty"`
- User string `protobuf:"bytes,5,opt,name=user,proto3" json:"user,omitempty"`
- Group string `protobuf:"bytes,6,opt,name=group,proto3" json:"group,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSRequest_ShareRequest_OperateShare) Reset() { *m = NSRequest_ShareRequest_OperateShare{} }
-func (m *NSRequest_ShareRequest_OperateShare) String() string { return proto.CompactTextString(m) }
-func (*NSRequest_ShareRequest_OperateShare) ProtoMessage() {}
-func (*NSRequest_ShareRequest_OperateShare) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{20, 15, 1}
-}
-
-func (m *NSRequest_ShareRequest_OperateShare) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSRequest_ShareRequest_OperateShare.Unmarshal(m, b)
-}
-func (m *NSRequest_ShareRequest_OperateShare) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSRequest_ShareRequest_OperateShare.Marshal(b, m, deterministic)
-}
-func (m *NSRequest_ShareRequest_OperateShare) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSRequest_ShareRequest_OperateShare.Merge(m, src)
-}
-func (m *NSRequest_ShareRequest_OperateShare) XXX_Size() int {
- return xxx_messageInfo_NSRequest_ShareRequest_OperateShare.Size(m)
-}
-func (m *NSRequest_ShareRequest_OperateShare) XXX_DiscardUnknown() {
- xxx_messageInfo_NSRequest_ShareRequest_OperateShare.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSRequest_ShareRequest_OperateShare proto.InternalMessageInfo
-
-func (m *NSRequest_ShareRequest_OperateShare) GetOp() NSRequest_ShareRequest_OperateShare_Op {
- if m != nil {
- return m.Op
- }
- return NSRequest_ShareRequest_OperateShare_CREATE
-}
-
-func (m *NSRequest_ShareRequest_OperateShare) GetShare() string {
- if m != nil {
- return m.Share
- }
- return ""
-}
-
-func (m *NSRequest_ShareRequest_OperateShare) GetAcl() string {
- if m != nil {
- return m.Acl
- }
- return ""
-}
-
-func (m *NSRequest_ShareRequest_OperateShare) GetPath() string {
- if m != nil {
- return m.Path
- }
- return ""
-}
-
-func (m *NSRequest_ShareRequest_OperateShare) GetUser() string {
- if m != nil {
- return m.User
- }
- return ""
-}
-
-func (m *NSRequest_ShareRequest_OperateShare) GetGroup() string {
- if m != nil {
- return m.Group
- }
- return ""
-}
-
-type NSResponse struct {
- Error *NSResponse_ErrorResponse `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"`
- Version *NSResponse_VersionResponse `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
- Recycle *NSResponse_RecycleResponse `protobuf:"bytes,3,opt,name=recycle,proto3" json:"recycle,omitempty"`
- Acl *NSResponse_AclResponse `protobuf:"bytes,4,opt,name=acl,proto3" json:"acl,omitempty"`
- Quota *NSResponse_QuotaResponse `protobuf:"bytes,5,opt,name=quota,proto3" json:"quota,omitempty"`
- Share *NSResponse_ShareResponse `protobuf:"bytes,6,opt,name=share,proto3" json:"share,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSResponse) Reset() { *m = NSResponse{} }
-func (m *NSResponse) String() string { return proto.CompactTextString(m) }
-func (*NSResponse) ProtoMessage() {}
-func (*NSResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{21}
-}
-
-func (m *NSResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSResponse.Unmarshal(m, b)
-}
-func (m *NSResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSResponse.Marshal(b, m, deterministic)
-}
-func (m *NSResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSResponse.Merge(m, src)
-}
-func (m *NSResponse) XXX_Size() int {
- return xxx_messageInfo_NSResponse.Size(m)
-}
-func (m *NSResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_NSResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSResponse proto.InternalMessageInfo
-
-func (m *NSResponse) GetError() *NSResponse_ErrorResponse {
- if m != nil {
- return m.Error
- }
- return nil
-}
-
-func (m *NSResponse) GetVersion() *NSResponse_VersionResponse {
- if m != nil {
- return m.Version
- }
- return nil
-}
-
-func (m *NSResponse) GetRecycle() *NSResponse_RecycleResponse {
- if m != nil {
- return m.Recycle
- }
- return nil
-}
-
-func (m *NSResponse) GetAcl() *NSResponse_AclResponse {
- if m != nil {
- return m.Acl
- }
- return nil
-}
-
-func (m *NSResponse) GetQuota() *NSResponse_QuotaResponse {
- if m != nil {
- return m.Quota
- }
- return nil
-}
-
-func (m *NSResponse) GetShare() *NSResponse_ShareResponse {
- if m != nil {
- return m.Share
- }
- return nil
-}
-
-type NSResponse_ErrorResponse struct {
- Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"`
- Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSResponse_ErrorResponse) Reset() { *m = NSResponse_ErrorResponse{} }
-func (m *NSResponse_ErrorResponse) String() string { return proto.CompactTextString(m) }
-func (*NSResponse_ErrorResponse) ProtoMessage() {}
-func (*NSResponse_ErrorResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{21, 0}
-}
-
-func (m *NSResponse_ErrorResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSResponse_ErrorResponse.Unmarshal(m, b)
-}
-func (m *NSResponse_ErrorResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSResponse_ErrorResponse.Marshal(b, m, deterministic)
-}
-func (m *NSResponse_ErrorResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSResponse_ErrorResponse.Merge(m, src)
-}
-func (m *NSResponse_ErrorResponse) XXX_Size() int {
- return xxx_messageInfo_NSResponse_ErrorResponse.Size(m)
-}
-func (m *NSResponse_ErrorResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_NSResponse_ErrorResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSResponse_ErrorResponse proto.InternalMessageInfo
-
-func (m *NSResponse_ErrorResponse) GetCode() int64 {
- if m != nil {
- return m.Code
- }
- return 0
-}
-
-func (m *NSResponse_ErrorResponse) GetMsg() string {
- if m != nil {
- return m.Msg
- }
- return ""
-}
-
-type NSResponse_VersionResponse struct {
- Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"`
- Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"`
- Versions []*NSResponse_VersionResponse_VersionInfo `protobuf:"bytes,3,rep,name=versions,proto3" json:"versions,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSResponse_VersionResponse) Reset() { *m = NSResponse_VersionResponse{} }
-func (m *NSResponse_VersionResponse) String() string { return proto.CompactTextString(m) }
-func (*NSResponse_VersionResponse) ProtoMessage() {}
-func (*NSResponse_VersionResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{21, 1}
-}
-
-func (m *NSResponse_VersionResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSResponse_VersionResponse.Unmarshal(m, b)
-}
-func (m *NSResponse_VersionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSResponse_VersionResponse.Marshal(b, m, deterministic)
-}
-func (m *NSResponse_VersionResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSResponse_VersionResponse.Merge(m, src)
-}
-func (m *NSResponse_VersionResponse) XXX_Size() int {
- return xxx_messageInfo_NSResponse_VersionResponse.Size(m)
-}
-func (m *NSResponse_VersionResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_NSResponse_VersionResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSResponse_VersionResponse proto.InternalMessageInfo
-
-func (m *NSResponse_VersionResponse) GetCode() int64 {
- if m != nil {
- return m.Code
- }
- return 0
-}
-
-func (m *NSResponse_VersionResponse) GetMsg() string {
- if m != nil {
- return m.Msg
- }
- return ""
-}
-
-func (m *NSResponse_VersionResponse) GetVersions() []*NSResponse_VersionResponse_VersionInfo {
- if m != nil {
- return m.Versions
- }
- return nil
-}
-
-type NSResponse_VersionResponse_VersionInfo struct {
- Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- Mtime *Time `protobuf:"bytes,2,opt,name=mtime,proto3" json:"mtime,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSResponse_VersionResponse_VersionInfo) Reset() {
- *m = NSResponse_VersionResponse_VersionInfo{}
-}
-func (m *NSResponse_VersionResponse_VersionInfo) String() string { return proto.CompactTextString(m) }
-func (*NSResponse_VersionResponse_VersionInfo) ProtoMessage() {}
-func (*NSResponse_VersionResponse_VersionInfo) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{21, 1, 0}
-}
-
-func (m *NSResponse_VersionResponse_VersionInfo) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSResponse_VersionResponse_VersionInfo.Unmarshal(m, b)
-}
-func (m *NSResponse_VersionResponse_VersionInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSResponse_VersionResponse_VersionInfo.Marshal(b, m, deterministic)
-}
-func (m *NSResponse_VersionResponse_VersionInfo) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSResponse_VersionResponse_VersionInfo.Merge(m, src)
-}
-func (m *NSResponse_VersionResponse_VersionInfo) XXX_Size() int {
- return xxx_messageInfo_NSResponse_VersionResponse_VersionInfo.Size(m)
-}
-func (m *NSResponse_VersionResponse_VersionInfo) XXX_DiscardUnknown() {
- xxx_messageInfo_NSResponse_VersionResponse_VersionInfo.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSResponse_VersionResponse_VersionInfo proto.InternalMessageInfo
-
-func (m *NSResponse_VersionResponse_VersionInfo) GetId() *MDId {
- if m != nil {
- return m.Id
- }
- return nil
-}
-
-func (m *NSResponse_VersionResponse_VersionInfo) GetMtime() *Time {
- if m != nil {
- return m.Mtime
- }
- return nil
-}
-
-type NSResponse_RecycleResponse struct {
- Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"`
- Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"`
- Recycles []*NSResponse_RecycleResponse_RecycleInfo `protobuf:"bytes,3,rep,name=recycles,proto3" json:"recycles,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSResponse_RecycleResponse) Reset() { *m = NSResponse_RecycleResponse{} }
-func (m *NSResponse_RecycleResponse) String() string { return proto.CompactTextString(m) }
-func (*NSResponse_RecycleResponse) ProtoMessage() {}
-func (*NSResponse_RecycleResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{21, 2}
-}
-
-func (m *NSResponse_RecycleResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSResponse_RecycleResponse.Unmarshal(m, b)
-}
-func (m *NSResponse_RecycleResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSResponse_RecycleResponse.Marshal(b, m, deterministic)
-}
-func (m *NSResponse_RecycleResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSResponse_RecycleResponse.Merge(m, src)
-}
-func (m *NSResponse_RecycleResponse) XXX_Size() int {
- return xxx_messageInfo_NSResponse_RecycleResponse.Size(m)
-}
-func (m *NSResponse_RecycleResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_NSResponse_RecycleResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSResponse_RecycleResponse proto.InternalMessageInfo
-
-func (m *NSResponse_RecycleResponse) GetCode() int64 {
- if m != nil {
- return m.Code
- }
- return 0
-}
-
-func (m *NSResponse_RecycleResponse) GetMsg() string {
- if m != nil {
- return m.Msg
- }
- return ""
-}
-
-func (m *NSResponse_RecycleResponse) GetRecycles() []*NSResponse_RecycleResponse_RecycleInfo {
- if m != nil {
- return m.Recycles
- }
- return nil
-}
-
-type NSResponse_RecycleResponse_RecycleInfo struct {
- Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- Owner *RoleId `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"`
- Dtime *Time `protobuf:"bytes,3,opt,name=dtime,proto3" json:"dtime,omitempty"`
- Size uint64 `protobuf:"varint,4,opt,name=size,proto3" json:"size,omitempty"`
- Type NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE `protobuf:"varint,5,opt,name=type,proto3,enum=eos.rpc.NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE" json:"type,omitempty"`
- Key string `protobuf:"bytes,6,opt,name=key,proto3" json:"key,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSResponse_RecycleResponse_RecycleInfo) Reset() {
- *m = NSResponse_RecycleResponse_RecycleInfo{}
-}
-func (m *NSResponse_RecycleResponse_RecycleInfo) String() string { return proto.CompactTextString(m) }
-func (*NSResponse_RecycleResponse_RecycleInfo) ProtoMessage() {}
-func (*NSResponse_RecycleResponse_RecycleInfo) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{21, 2, 0}
-}
-
-func (m *NSResponse_RecycleResponse_RecycleInfo) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSResponse_RecycleResponse_RecycleInfo.Unmarshal(m, b)
-}
-func (m *NSResponse_RecycleResponse_RecycleInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSResponse_RecycleResponse_RecycleInfo.Marshal(b, m, deterministic)
-}
-func (m *NSResponse_RecycleResponse_RecycleInfo) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSResponse_RecycleResponse_RecycleInfo.Merge(m, src)
-}
-func (m *NSResponse_RecycleResponse_RecycleInfo) XXX_Size() int {
- return xxx_messageInfo_NSResponse_RecycleResponse_RecycleInfo.Size(m)
-}
-func (m *NSResponse_RecycleResponse_RecycleInfo) XXX_DiscardUnknown() {
- xxx_messageInfo_NSResponse_RecycleResponse_RecycleInfo.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSResponse_RecycleResponse_RecycleInfo proto.InternalMessageInfo
-
-func (m *NSResponse_RecycleResponse_RecycleInfo) GetId() *MDId {
- if m != nil {
- return m.Id
- }
- return nil
-}
-
-func (m *NSResponse_RecycleResponse_RecycleInfo) GetOwner() *RoleId {
- if m != nil {
- return m.Owner
- }
- return nil
-}
-
-func (m *NSResponse_RecycleResponse_RecycleInfo) GetDtime() *Time {
- if m != nil {
- return m.Dtime
- }
- return nil
-}
-
-func (m *NSResponse_RecycleResponse_RecycleInfo) GetSize() uint64 {
- if m != nil {
- return m.Size
- }
- return 0
-}
-
-func (m *NSResponse_RecycleResponse_RecycleInfo) GetType() NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE {
- if m != nil {
- return m.Type
- }
- return NSResponse_RecycleResponse_RecycleInfo_FILE
-}
-
-func (m *NSResponse_RecycleResponse_RecycleInfo) GetKey() string {
- if m != nil {
- return m.Key
- }
- return ""
-}
-
-type NSResponse_AclResponse struct {
- Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"`
- Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"`
- Rule string `protobuf:"bytes,3,opt,name=rule,proto3" json:"rule,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSResponse_AclResponse) Reset() { *m = NSResponse_AclResponse{} }
-func (m *NSResponse_AclResponse) String() string { return proto.CompactTextString(m) }
-func (*NSResponse_AclResponse) ProtoMessage() {}
-func (*NSResponse_AclResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{21, 3}
-}
-
-func (m *NSResponse_AclResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSResponse_AclResponse.Unmarshal(m, b)
-}
-func (m *NSResponse_AclResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSResponse_AclResponse.Marshal(b, m, deterministic)
-}
-func (m *NSResponse_AclResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSResponse_AclResponse.Merge(m, src)
-}
-func (m *NSResponse_AclResponse) XXX_Size() int {
- return xxx_messageInfo_NSResponse_AclResponse.Size(m)
-}
-func (m *NSResponse_AclResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_NSResponse_AclResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSResponse_AclResponse proto.InternalMessageInfo
-
-func (m *NSResponse_AclResponse) GetCode() int64 {
- if m != nil {
- return m.Code
- }
- return 0
-}
-
-func (m *NSResponse_AclResponse) GetMsg() string {
- if m != nil {
- return m.Msg
- }
- return ""
-}
-
-func (m *NSResponse_AclResponse) GetRule() string {
- if m != nil {
- return m.Rule
- }
- return ""
-}
-
-type NSResponse_QuotaResponse struct {
- Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"`
- Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"`
- Quotanode []*QuotaProto `protobuf:"bytes,3,rep,name=quotanode,proto3" json:"quotanode,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSResponse_QuotaResponse) Reset() { *m = NSResponse_QuotaResponse{} }
-func (m *NSResponse_QuotaResponse) String() string { return proto.CompactTextString(m) }
-func (*NSResponse_QuotaResponse) ProtoMessage() {}
-func (*NSResponse_QuotaResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{21, 4}
-}
-
-func (m *NSResponse_QuotaResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSResponse_QuotaResponse.Unmarshal(m, b)
-}
-func (m *NSResponse_QuotaResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSResponse_QuotaResponse.Marshal(b, m, deterministic)
-}
-func (m *NSResponse_QuotaResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSResponse_QuotaResponse.Merge(m, src)
-}
-func (m *NSResponse_QuotaResponse) XXX_Size() int {
- return xxx_messageInfo_NSResponse_QuotaResponse.Size(m)
-}
-func (m *NSResponse_QuotaResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_NSResponse_QuotaResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSResponse_QuotaResponse proto.InternalMessageInfo
-
-func (m *NSResponse_QuotaResponse) GetCode() int64 {
- if m != nil {
- return m.Code
- }
- return 0
-}
-
-func (m *NSResponse_QuotaResponse) GetMsg() string {
- if m != nil {
- return m.Msg
- }
- return ""
-}
-
-func (m *NSResponse_QuotaResponse) GetQuotanode() []*QuotaProto {
- if m != nil {
- return m.Quotanode
- }
- return nil
-}
-
-type NSResponse_ShareInfo struct {
- Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
- Root string `protobuf:"bytes,2,opt,name=root,proto3" json:"root,omitempty"`
- Rule string `protobuf:"bytes,3,opt,name=rule,proto3" json:"rule,omitempty"`
- Uid uint64 `protobuf:"varint,4,opt,name=uid,proto3" json:"uid,omitempty"`
- Nshared uint64 `protobuf:"varint,5,opt,name=nshared,proto3" json:"nshared,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSResponse_ShareInfo) Reset() { *m = NSResponse_ShareInfo{} }
-func (m *NSResponse_ShareInfo) String() string { return proto.CompactTextString(m) }
-func (*NSResponse_ShareInfo) ProtoMessage() {}
-func (*NSResponse_ShareInfo) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{21, 5}
-}
-
-func (m *NSResponse_ShareInfo) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSResponse_ShareInfo.Unmarshal(m, b)
-}
-func (m *NSResponse_ShareInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSResponse_ShareInfo.Marshal(b, m, deterministic)
-}
-func (m *NSResponse_ShareInfo) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSResponse_ShareInfo.Merge(m, src)
-}
-func (m *NSResponse_ShareInfo) XXX_Size() int {
- return xxx_messageInfo_NSResponse_ShareInfo.Size(m)
-}
-func (m *NSResponse_ShareInfo) XXX_DiscardUnknown() {
- xxx_messageInfo_NSResponse_ShareInfo.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSResponse_ShareInfo proto.InternalMessageInfo
-
-func (m *NSResponse_ShareInfo) GetName() string {
- if m != nil {
- return m.Name
- }
- return ""
-}
-
-func (m *NSResponse_ShareInfo) GetRoot() string {
- if m != nil {
- return m.Root
- }
- return ""
-}
-
-func (m *NSResponse_ShareInfo) GetRule() string {
- if m != nil {
- return m.Rule
- }
- return ""
-}
-
-func (m *NSResponse_ShareInfo) GetUid() uint64 {
- if m != nil {
- return m.Uid
- }
- return 0
-}
-
-func (m *NSResponse_ShareInfo) GetNshared() uint64 {
- if m != nil {
- return m.Nshared
- }
- return 0
-}
-
-type NSResponse_ShareAccess struct {
- Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
- Granted bool `protobuf:"varint,2,opt,name=granted,proto3" json:"granted,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSResponse_ShareAccess) Reset() { *m = NSResponse_ShareAccess{} }
-func (m *NSResponse_ShareAccess) String() string { return proto.CompactTextString(m) }
-func (*NSResponse_ShareAccess) ProtoMessage() {}
-func (*NSResponse_ShareAccess) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{21, 6}
-}
-
-func (m *NSResponse_ShareAccess) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSResponse_ShareAccess.Unmarshal(m, b)
-}
-func (m *NSResponse_ShareAccess) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSResponse_ShareAccess.Marshal(b, m, deterministic)
-}
-func (m *NSResponse_ShareAccess) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSResponse_ShareAccess.Merge(m, src)
-}
-func (m *NSResponse_ShareAccess) XXX_Size() int {
- return xxx_messageInfo_NSResponse_ShareAccess.Size(m)
-}
-func (m *NSResponse_ShareAccess) XXX_DiscardUnknown() {
- xxx_messageInfo_NSResponse_ShareAccess.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSResponse_ShareAccess proto.InternalMessageInfo
-
-func (m *NSResponse_ShareAccess) GetName() string {
- if m != nil {
- return m.Name
- }
- return ""
-}
-
-func (m *NSResponse_ShareAccess) GetGranted() bool {
- if m != nil {
- return m.Granted
- }
- return false
-}
-
-type NSResponse_ShareResponse struct {
- Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"`
- Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"`
- Shares []*NSResponse_ShareInfo `protobuf:"bytes,3,rep,name=shares,proto3" json:"shares,omitempty"`
- Access []*NSResponse_ShareAccess `protobuf:"bytes,4,rep,name=access,proto3" json:"access,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NSResponse_ShareResponse) Reset() { *m = NSResponse_ShareResponse{} }
-func (m *NSResponse_ShareResponse) String() string { return proto.CompactTextString(m) }
-func (*NSResponse_ShareResponse) ProtoMessage() {}
-func (*NSResponse_ShareResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{21, 7}
-}
-
-func (m *NSResponse_ShareResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NSResponse_ShareResponse.Unmarshal(m, b)
-}
-func (m *NSResponse_ShareResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NSResponse_ShareResponse.Marshal(b, m, deterministic)
-}
-func (m *NSResponse_ShareResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NSResponse_ShareResponse.Merge(m, src)
-}
-func (m *NSResponse_ShareResponse) XXX_Size() int {
- return xxx_messageInfo_NSResponse_ShareResponse.Size(m)
-}
-func (m *NSResponse_ShareResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_NSResponse_ShareResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NSResponse_ShareResponse proto.InternalMessageInfo
-
-func (m *NSResponse_ShareResponse) GetCode() int64 {
- if m != nil {
- return m.Code
- }
- return 0
-}
-
-func (m *NSResponse_ShareResponse) GetMsg() string {
- if m != nil {
- return m.Msg
- }
- return ""
-}
-
-func (m *NSResponse_ShareResponse) GetShares() []*NSResponse_ShareInfo {
- if m != nil {
- return m.Shares
- }
- return nil
-}
-
-func (m *NSResponse_ShareResponse) GetAccess() []*NSResponse_ShareAccess {
- if m != nil {
- return m.Access
- }
- return nil
-}
-
-type NsStatRequest struct {
- Authkey string `protobuf:"bytes,1,opt,name=authkey,proto3" json:"authkey,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NsStatRequest) Reset() { *m = NsStatRequest{} }
-func (m *NsStatRequest) String() string { return proto.CompactTextString(m) }
-func (*NsStatRequest) ProtoMessage() {}
-func (*NsStatRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{22}
-}
-
-func (m *NsStatRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NsStatRequest.Unmarshal(m, b)
-}
-func (m *NsStatRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NsStatRequest.Marshal(b, m, deterministic)
-}
-func (m *NsStatRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NsStatRequest.Merge(m, src)
-}
-func (m *NsStatRequest) XXX_Size() int {
- return xxx_messageInfo_NsStatRequest.Size(m)
-}
-func (m *NsStatRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_NsStatRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NsStatRequest proto.InternalMessageInfo
-
-func (m *NsStatRequest) GetAuthkey() string {
- if m != nil {
- return m.Authkey
- }
- return ""
-}
-
-type NsStatResponse struct {
- Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"`
- Emsg string `protobuf:"bytes,2,opt,name=emsg,proto3" json:"emsg,omitempty"`
- State string `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"`
- Nfiles uint64 `protobuf:"varint,4,opt,name=nfiles,proto3" json:"nfiles,omitempty"`
- Ncontainers uint64 `protobuf:"varint,5,opt,name=ncontainers,proto3" json:"ncontainers,omitempty"`
- BootTime uint64 `protobuf:"varint,6,opt,name=boot_time,json=bootTime,proto3" json:"boot_time,omitempty"`
- CurrentFid uint64 `protobuf:"varint,7,opt,name=current_fid,json=currentFid,proto3" json:"current_fid,omitempty"`
- CurrentCid uint64 `protobuf:"varint,8,opt,name=current_cid,json=currentCid,proto3" json:"current_cid,omitempty"`
- MemVirtual uint64 `protobuf:"varint,9,opt,name=mem_virtual,json=memVirtual,proto3" json:"mem_virtual,omitempty"`
- MemResident uint64 `protobuf:"varint,10,opt,name=mem_resident,json=memResident,proto3" json:"mem_resident,omitempty"`
- MemShare uint64 `protobuf:"varint,11,opt,name=mem_share,json=memShare,proto3" json:"mem_share,omitempty"`
- MemGrowth uint64 `protobuf:"varint,12,opt,name=mem_growth,json=memGrowth,proto3" json:"mem_growth,omitempty"`
- Threads uint64 `protobuf:"varint,13,opt,name=threads,proto3" json:"threads,omitempty"`
- Fds uint64 `protobuf:"varint,14,opt,name=fds,proto3" json:"fds,omitempty"`
- Uptime uint64 `protobuf:"varint,15,opt,name=uptime,proto3" json:"uptime,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NsStatResponse) Reset() { *m = NsStatResponse{} }
-func (m *NsStatResponse) String() string { return proto.CompactTextString(m) }
-func (*NsStatResponse) ProtoMessage() {}
-func (*NsStatResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{23}
-}
-
-func (m *NsStatResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NsStatResponse.Unmarshal(m, b)
-}
-func (m *NsStatResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NsStatResponse.Marshal(b, m, deterministic)
-}
-func (m *NsStatResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NsStatResponse.Merge(m, src)
-}
-func (m *NsStatResponse) XXX_Size() int {
- return xxx_messageInfo_NsStatResponse.Size(m)
-}
-func (m *NsStatResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_NsStatResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NsStatResponse proto.InternalMessageInfo
-
-func (m *NsStatResponse) GetCode() int64 {
- if m != nil {
- return m.Code
- }
- return 0
-}
-
-func (m *NsStatResponse) GetEmsg() string {
- if m != nil {
- return m.Emsg
- }
- return ""
-}
-
-func (m *NsStatResponse) GetState() string {
- if m != nil {
- return m.State
- }
- return ""
-}
-
-func (m *NsStatResponse) GetNfiles() uint64 {
- if m != nil {
- return m.Nfiles
- }
- return 0
-}
-
-func (m *NsStatResponse) GetNcontainers() uint64 {
- if m != nil {
- return m.Ncontainers
- }
- return 0
-}
-
-func (m *NsStatResponse) GetBootTime() uint64 {
- if m != nil {
- return m.BootTime
- }
- return 0
-}
-
-func (m *NsStatResponse) GetCurrentFid() uint64 {
- if m != nil {
- return m.CurrentFid
- }
- return 0
-}
-
-func (m *NsStatResponse) GetCurrentCid() uint64 {
- if m != nil {
- return m.CurrentCid
- }
- return 0
-}
-
-func (m *NsStatResponse) GetMemVirtual() uint64 {
- if m != nil {
- return m.MemVirtual
- }
- return 0
-}
-
-func (m *NsStatResponse) GetMemResident() uint64 {
- if m != nil {
- return m.MemResident
- }
- return 0
-}
-
-func (m *NsStatResponse) GetMemShare() uint64 {
- if m != nil {
- return m.MemShare
- }
- return 0
-}
-
-func (m *NsStatResponse) GetMemGrowth() uint64 {
- if m != nil {
- return m.MemGrowth
- }
- return 0
-}
-
-func (m *NsStatResponse) GetThreads() uint64 {
- if m != nil {
- return m.Threads
- }
- return 0
-}
-
-func (m *NsStatResponse) GetFds() uint64 {
- if m != nil {
- return m.Fds
- }
- return 0
-}
-
-func (m *NsStatResponse) GetUptime() uint64 {
- if m != nil {
- return m.Uptime
- }
- return 0
-}
-
-type ManilaRequest struct {
- RequestType MANILA_REQUEST_TYPE `protobuf:"varint,1,opt,name=request_type,json=requestType,proto3,enum=eos.rpc.MANILA_REQUEST_TYPE" json:"request_type,omitempty"`
- AuthKey string `protobuf:"bytes,2,opt,name=auth_key,json=authKey,proto3" json:"auth_key,omitempty"`
- Protocol string `protobuf:"bytes,3,opt,name=protocol,proto3" json:"protocol,omitempty"`
- ShareName string `protobuf:"bytes,4,opt,name=share_name,json=shareName,proto3" json:"share_name,omitempty"`
- Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"`
- ShareId string `protobuf:"bytes,6,opt,name=share_id,json=shareId,proto3" json:"share_id,omitempty"`
- ShareGroupId string `protobuf:"bytes,7,opt,name=share_group_id,json=shareGroupId,proto3" json:"share_group_id,omitempty"`
- Quota int32 `protobuf:"varint,8,opt,name=quota,proto3" json:"quota,omitempty"`
- Creator string `protobuf:"bytes,9,opt,name=creator,proto3" json:"creator,omitempty"`
- Egroup string `protobuf:"bytes,10,opt,name=egroup,proto3" json:"egroup,omitempty"`
- AdminEgroup string `protobuf:"bytes,11,opt,name=admin_egroup,json=adminEgroup,proto3" json:"admin_egroup,omitempty"`
- ShareHost string `protobuf:"bytes,12,opt,name=share_host,json=shareHost,proto3" json:"share_host,omitempty"`
- ShareLocation string `protobuf:"bytes,13,opt,name=share_location,json=shareLocation,proto3" json:"share_location,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *ManilaRequest) Reset() { *m = ManilaRequest{} }
-func (m *ManilaRequest) String() string { return proto.CompactTextString(m) }
-func (*ManilaRequest) ProtoMessage() {}
-func (*ManilaRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{24}
-}
-
-func (m *ManilaRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_ManilaRequest.Unmarshal(m, b)
-}
-func (m *ManilaRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_ManilaRequest.Marshal(b, m, deterministic)
-}
-func (m *ManilaRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_ManilaRequest.Merge(m, src)
-}
-func (m *ManilaRequest) XXX_Size() int {
- return xxx_messageInfo_ManilaRequest.Size(m)
-}
-func (m *ManilaRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_ManilaRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ManilaRequest proto.InternalMessageInfo
-
-func (m *ManilaRequest) GetRequestType() MANILA_REQUEST_TYPE {
- if m != nil {
- return m.RequestType
- }
- return MANILA_REQUEST_TYPE_CREATE_SHARE
-}
-
-func (m *ManilaRequest) GetAuthKey() string {
- if m != nil {
- return m.AuthKey
- }
- return ""
-}
-
-func (m *ManilaRequest) GetProtocol() string {
- if m != nil {
- return m.Protocol
- }
- return ""
-}
-
-func (m *ManilaRequest) GetShareName() string {
- if m != nil {
- return m.ShareName
- }
- return ""
-}
-
-func (m *ManilaRequest) GetDescription() string {
- if m != nil {
- return m.Description
- }
- return ""
-}
-
-func (m *ManilaRequest) GetShareId() string {
- if m != nil {
- return m.ShareId
- }
- return ""
-}
-
-func (m *ManilaRequest) GetShareGroupId() string {
- if m != nil {
- return m.ShareGroupId
- }
- return ""
-}
-
-func (m *ManilaRequest) GetQuota() int32 {
- if m != nil {
- return m.Quota
- }
- return 0
-}
-
-func (m *ManilaRequest) GetCreator() string {
- if m != nil {
- return m.Creator
- }
- return ""
-}
-
-func (m *ManilaRequest) GetEgroup() string {
- if m != nil {
- return m.Egroup
- }
- return ""
-}
-
-func (m *ManilaRequest) GetAdminEgroup() string {
- if m != nil {
- return m.AdminEgroup
- }
- return ""
-}
-
-func (m *ManilaRequest) GetShareHost() string {
- if m != nil {
- return m.ShareHost
- }
- return ""
-}
-
-func (m *ManilaRequest) GetShareLocation() string {
- if m != nil {
- return m.ShareLocation
- }
- return ""
-}
-
-type ManilaResponse struct {
- Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"`
- Code int32 `protobuf:"varint,2,opt,name=code,proto3" json:"code,omitempty"`
- TotalUsed int64 `protobuf:"varint,3,opt,name=total_used,json=totalUsed,proto3" json:"total_used,omitempty"`
- TotalCapacity int64 `protobuf:"varint,4,opt,name=total_capacity,json=totalCapacity,proto3" json:"total_capacity,omitempty"`
- NewShareQuota int64 `protobuf:"varint,5,opt,name=new_share_quota,json=newShareQuota,proto3" json:"new_share_quota,omitempty"`
- NewSharePath string `protobuf:"bytes,6,opt,name=new_share_path,json=newSharePath,proto3" json:"new_share_path,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *ManilaResponse) Reset() { *m = ManilaResponse{} }
-func (m *ManilaResponse) String() string { return proto.CompactTextString(m) }
-func (*ManilaResponse) ProtoMessage() {}
-func (*ManilaResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_979aee4989bceb08, []int{25}
-}
-
-func (m *ManilaResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_ManilaResponse.Unmarshal(m, b)
-}
-func (m *ManilaResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_ManilaResponse.Marshal(b, m, deterministic)
-}
-func (m *ManilaResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_ManilaResponse.Merge(m, src)
-}
-func (m *ManilaResponse) XXX_Size() int {
- return xxx_messageInfo_ManilaResponse.Size(m)
-}
-func (m *ManilaResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_ManilaResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ManilaResponse proto.InternalMessageInfo
-
-func (m *ManilaResponse) GetMsg() string {
- if m != nil {
- return m.Msg
- }
- return ""
-}
-
-func (m *ManilaResponse) GetCode() int32 {
- if m != nil {
- return m.Code
- }
- return 0
-}
-
-func (m *ManilaResponse) GetTotalUsed() int64 {
- if m != nil {
- return m.TotalUsed
- }
- return 0
-}
-
-func (m *ManilaResponse) GetTotalCapacity() int64 {
- if m != nil {
- return m.TotalCapacity
- }
- return 0
-}
-
-func (m *ManilaResponse) GetNewShareQuota() int64 {
- if m != nil {
- return m.NewShareQuota
- }
- return 0
-}
-
-func (m *ManilaResponse) GetNewSharePath() string {
- if m != nil {
- return m.NewSharePath
- }
- return ""
-}
-
-func init() {
- proto.RegisterEnum("eos.rpc.TYPE", TYPE_name, TYPE_value)
- proto.RegisterEnum("eos.rpc.QUOTATYPE", QUOTATYPE_name, QUOTATYPE_value)
- proto.RegisterEnum("eos.rpc.QUOTAOP", QUOTAOP_name, QUOTAOP_value)
- proto.RegisterEnum("eos.rpc.QUOTAENTRY", QUOTAENTRY_name, QUOTAENTRY_value)
- proto.RegisterEnum("eos.rpc.MANILA_REQUEST_TYPE", MANILA_REQUEST_TYPE_name, MANILA_REQUEST_TYPE_value)
- proto.RegisterEnum("eos.rpc.NSRequest_VersionRequest_VERSION_CMD", NSRequest_VersionRequest_VERSION_CMD_name, NSRequest_VersionRequest_VERSION_CMD_value)
- proto.RegisterEnum("eos.rpc.NSRequest_RecycleRequest_RECYCLE_CMD", NSRequest_RecycleRequest_RECYCLE_CMD_name, NSRequest_RecycleRequest_RECYCLE_CMD_value)
- proto.RegisterEnum("eos.rpc.NSRequest_AclRequest_ACL_COMMAND", NSRequest_AclRequest_ACL_COMMAND_name, NSRequest_AclRequest_ACL_COMMAND_value)
- proto.RegisterEnum("eos.rpc.NSRequest_AclRequest_ACL_TYPE", NSRequest_AclRequest_ACL_TYPE_name, NSRequest_AclRequest_ACL_TYPE_value)
- proto.RegisterEnum("eos.rpc.NSRequest_ShareRequest_LsShare_OutFormat", NSRequest_ShareRequest_LsShare_OutFormat_name, NSRequest_ShareRequest_LsShare_OutFormat_value)
- proto.RegisterEnum("eos.rpc.NSRequest_ShareRequest_OperateShare_Op", NSRequest_ShareRequest_OperateShare_Op_name, NSRequest_ShareRequest_OperateShare_Op_value)
- proto.RegisterEnum("eos.rpc.NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE", NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE_name, NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE_value)
- proto.RegisterType((*PingRequest)(nil), "eos.rpc.PingRequest")
- proto.RegisterType((*PingReply)(nil), "eos.rpc.PingReply")
- proto.RegisterType((*ContainerInsertRequest)(nil), "eos.rpc.ContainerInsertRequest")
- proto.RegisterType((*FileInsertRequest)(nil), "eos.rpc.FileInsertRequest")
- proto.RegisterType((*InsertReply)(nil), "eos.rpc.InsertReply")
- proto.RegisterType((*Time)(nil), "eos.rpc.Time")
- proto.RegisterType((*Checksum)(nil), "eos.rpc.Checksum")
- proto.RegisterType((*FileMdProto)(nil), "eos.rpc.FileMdProto")
- proto.RegisterMapType((map[string][]byte)(nil), "eos.rpc.FileMdProto.XattrsEntry")
- proto.RegisterType((*ContainerMdProto)(nil), "eos.rpc.ContainerMdProto")
- proto.RegisterMapType((map[string][]byte)(nil), "eos.rpc.ContainerMdProto.XattrsEntry")
- proto.RegisterType((*QuotaProto)(nil), "eos.rpc.QuotaProto")
- proto.RegisterType((*RoleId)(nil), "eos.rpc.RoleId")
- proto.RegisterType((*MDId)(nil), "eos.rpc.MDId")
- proto.RegisterType((*Limit)(nil), "eos.rpc.Limit")
- proto.RegisterType((*MDSelection)(nil), "eos.rpc.MDSelection")
- proto.RegisterMapType((map[string][]byte)(nil), "eos.rpc.MDSelection.XattrEntry")
- proto.RegisterType((*MDRequest)(nil), "eos.rpc.MDRequest")
- proto.RegisterType((*MDResponse)(nil), "eos.rpc.MDResponse")
- proto.RegisterType((*FindRequest)(nil), "eos.rpc.FindRequest")
- proto.RegisterType((*ShareAuth)(nil), "eos.rpc.ShareAuth")
- proto.RegisterType((*ShareProto)(nil), "eos.rpc.ShareProto")
- proto.RegisterType((*ShareToken)(nil), "eos.rpc.ShareToken")
- proto.RegisterType((*NSRequest)(nil), "eos.rpc.NSRequest")
- proto.RegisterType((*NSRequest_MkdirRequest)(nil), "eos.rpc.NSRequest.MkdirRequest")
- proto.RegisterType((*NSRequest_RmdirRequest)(nil), "eos.rpc.NSRequest.RmdirRequest")
- proto.RegisterType((*NSRequest_TouchRequest)(nil), "eos.rpc.NSRequest.TouchRequest")
- proto.RegisterType((*NSRequest_UnlinkRequest)(nil), "eos.rpc.NSRequest.UnlinkRequest")
- proto.RegisterType((*NSRequest_RmRequest)(nil), "eos.rpc.NSRequest.RmRequest")
- proto.RegisterType((*NSRequest_RenameRequest)(nil), "eos.rpc.NSRequest.RenameRequest")
- proto.RegisterType((*NSRequest_SymlinkRequest)(nil), "eos.rpc.NSRequest.SymlinkRequest")
- proto.RegisterType((*NSRequest_VersionRequest)(nil), "eos.rpc.NSRequest.VersionRequest")
- proto.RegisterType((*NSRequest_RecycleRequest)(nil), "eos.rpc.NSRequest.RecycleRequest")
- proto.RegisterType((*NSRequest_RecycleRequest_RestoreFlags)(nil), "eos.rpc.NSRequest.RecycleRequest.RestoreFlags")
- proto.RegisterType((*NSRequest_RecycleRequest_PurgeDate)(nil), "eos.rpc.NSRequest.RecycleRequest.PurgeDate")
- proto.RegisterType((*NSRequest_RecycleRequest_ListFlags)(nil), "eos.rpc.NSRequest.RecycleRequest.ListFlags")
- proto.RegisterType((*NSRequest_SetXAttrRequest)(nil), "eos.rpc.NSRequest.SetXAttrRequest")
- proto.RegisterMapType((map[string][]byte)(nil), "eos.rpc.NSRequest.SetXAttrRequest.XattrsEntry")
- proto.RegisterType((*NSRequest_ChownRequest)(nil), "eos.rpc.NSRequest.ChownRequest")
- proto.RegisterType((*NSRequest_ChmodRequest)(nil), "eos.rpc.NSRequest.ChmodRequest")
- proto.RegisterType((*NSRequest_AclRequest)(nil), "eos.rpc.NSRequest.AclRequest")
- proto.RegisterType((*NSRequest_TokenRequest)(nil), "eos.rpc.NSRequest.TokenRequest")
- proto.RegisterType((*NSRequest_QuotaRequest)(nil), "eos.rpc.NSRequest.QuotaRequest")
- proto.RegisterType((*NSRequest_ShareRequest)(nil), "eos.rpc.NSRequest.ShareRequest")
- proto.RegisterType((*NSRequest_ShareRequest_LsShare)(nil), "eos.rpc.NSRequest.ShareRequest.LsShare")
- proto.RegisterType((*NSRequest_ShareRequest_OperateShare)(nil), "eos.rpc.NSRequest.ShareRequest.OperateShare")
- proto.RegisterType((*NSResponse)(nil), "eos.rpc.NSResponse")
- proto.RegisterType((*NSResponse_ErrorResponse)(nil), "eos.rpc.NSResponse.ErrorResponse")
- proto.RegisterType((*NSResponse_VersionResponse)(nil), "eos.rpc.NSResponse.VersionResponse")
- proto.RegisterType((*NSResponse_VersionResponse_VersionInfo)(nil), "eos.rpc.NSResponse.VersionResponse.VersionInfo")
- proto.RegisterType((*NSResponse_RecycleResponse)(nil), "eos.rpc.NSResponse.RecycleResponse")
- proto.RegisterType((*NSResponse_RecycleResponse_RecycleInfo)(nil), "eos.rpc.NSResponse.RecycleResponse.RecycleInfo")
- proto.RegisterType((*NSResponse_AclResponse)(nil), "eos.rpc.NSResponse.AclResponse")
- proto.RegisterType((*NSResponse_QuotaResponse)(nil), "eos.rpc.NSResponse.QuotaResponse")
- proto.RegisterType((*NSResponse_ShareInfo)(nil), "eos.rpc.NSResponse.ShareInfo")
- proto.RegisterType((*NSResponse_ShareAccess)(nil), "eos.rpc.NSResponse.ShareAccess")
- proto.RegisterType((*NSResponse_ShareResponse)(nil), "eos.rpc.NSResponse.ShareResponse")
- proto.RegisterType((*NsStatRequest)(nil), "eos.rpc.NsStatRequest")
- proto.RegisterType((*NsStatResponse)(nil), "eos.rpc.NsStatResponse")
- proto.RegisterType((*ManilaRequest)(nil), "eos.rpc.ManilaRequest")
- proto.RegisterType((*ManilaResponse)(nil), "eos.rpc.ManilaResponse")
-}
-
-func init() {
- proto.RegisterFile("Rpc.proto", fileDescriptor_979aee4989bceb08)
-}
-
-var fileDescriptor_979aee4989bceb08 = []byte{
- // 4040 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x3a, 0x4d, 0x77, 0xdb, 0xc6,
- 0x76, 0x22, 0x09, 0x52, 0xc4, 0x25, 0x29, 0x31, 0xb0, 0x9b, 0x30, 0x8c, 0x1d, 0x2b, 0x74, 0x9c,
- 0x67, 0x3b, 0xb1, 0x1c, 0xbb, 0x4d, 0x9d, 0xc4, 0x2f, 0x4d, 0x69, 0x89, 0x92, 0x99, 0x88, 0xa4,
- 0x32, 0xa4, 0x7c, 0xec, 0x6e, 0x78, 0x60, 0x60, 0x44, 0xe1, 0x98, 0x00, 0xf8, 0x00, 0xd0, 0xb6,
- 0xb2, 0x6c, 0xbb, 0xe9, 0x3b, 0xa7, 0xbb, 0xb7, 0x7b, 0xbb, 0x9e, 0xb6, 0x9b, 0xee, 0xbb, 0xe8,
- 0xaa, 0xbb, 0xbe, 0xf3, 0x16, 0x5d, 0x74, 0xd3, 0x5d, 0xff, 0x40, 0xfb, 0x23, 0x7a, 0xee, 0x9d,
- 0x01, 0x30, 0x90, 0x48, 0x51, 0x79, 0x79, 0x1b, 0x9c, 0x99, 0x3b, 0xf7, 0xde, 0x99, 0xb9, 0x73,
- 0x3f, 0x67, 0x00, 0x3a, 0x9b, 0x59, 0xdb, 0xb3, 0xc0, 0x8f, 0x7c, 0x63, 0x9d, 0xfb, 0xe1, 0x76,
- 0x30, 0xb3, 0x5a, 0x6d, 0xa8, 0x1c, 0x3a, 0xde, 0x84, 0xf1, 0x5f, 0xcd, 0x79, 0x18, 0x19, 0x0d,
- 0x58, 0x37, 0xe7, 0xd1, 0xc9, 0x2b, 0x7e, 0xda, 0xc8, 0x6d, 0xe5, 0x6e, 0xeb, 0x2c, 0xee, 0xe2,
- 0x88, 0xcb, 0xc3, 0xd0, 0x9c, 0xf0, 0x46, 0x7e, 0x2b, 0x77, 0xbb, 0xca, 0xe2, 0x6e, 0xeb, 0x16,
- 0xe8, 0x82, 0xc5, 0x6c, 0x9a, 0x41, 0xcb, 0x65, 0xd1, 0x7e, 0x9d, 0x83, 0x77, 0x77, 0x7c, 0x2f,
- 0x32, 0x1d, 0x8f, 0x07, 0x5d, 0x2f, 0xe4, 0x41, 0x14, 0xcf, 0xfa, 0x08, 0x74, 0x2b, 0x1e, 0x69,
- 0xe4, 0xb6, 0x0a, 0xb7, 0x2b, 0x0f, 0xdf, 0xdf, 0x96, 0x2b, 0xdc, 0x4e, 0x68, 0x7a, 0xf6, 0x21,
- 0xae, 0x9d, 0xa5, 0xb8, 0xea, 0x72, 0xf3, 0xd9, 0xe5, 0x5e, 0x07, 0x70, 0xbc, 0x13, 0x1e, 0x38,
- 0xd1, 0xd8, 0xb5, 0x1b, 0x85, 0xad, 0xdc, 0xed, 0x32, 0xd3, 0x25, 0xa4, 0x67, 0xb7, 0x5e, 0xc0,
- 0x3b, 0x7b, 0xce, 0x94, 0x67, 0x97, 0x71, 0x17, 0x8a, 0xc7, 0xce, 0x94, 0x87, 0x72, 0x09, 0x57,
- 0x93, 0x25, 0x20, 0x6a, 0x3c, 0xbb, 0x40, 0x59, 0x3e, 0x73, 0xeb, 0x31, 0x54, 0x62, 0xb6, 0xe7,
- 0x04, 0x52, 0x40, 0x44, 0xd9, 0x35, 0x0c, 0xd0, 0x02, 0x1e, 0x59, 0x8d, 0xfc, 0x56, 0xe1, 0x76,
- 0x8d, 0x51, 0xbb, 0x75, 0x0f, 0xb4, 0x91, 0xe3, 0x72, 0xa3, 0x0e, 0x85, 0x90, 0x5b, 0x24, 0x42,
- 0x8d, 0x61, 0xd3, 0xb8, 0x02, 0x45, 0x6f, 0x8c, 0xb0, 0x3c, 0xc1, 0x34, 0x6f, 0xc8, 0xad, 0xd6,
- 0x9f, 0x41, 0x79, 0xe7, 0x84, 0x5b, 0xaf, 0xc2, 0xb9, 0x6b, 0x5c, 0x85, 0xe2, 0x6b, 0x73, 0x3a,
- 0x8f, 0xe5, 0x2e, 0x3a, 0x38, 0x49, 0x74, 0x3a, 0xe3, 0x72, 0x91, 0xd4, 0x6e, 0xfd, 0x87, 0x06,
- 0x15, 0x65, 0x4b, 0xc6, 0x06, 0xe4, 0x1d, 0x5b, 0xce, 0x95, 0x77, 0x6c, 0xe3, 0x3d, 0x58, 0x47,
- 0x11, 0x8f, 0x1d, 0x5b, 0x4e, 0x56, 0xc2, 0x6e, 0xd7, 0xc6, 0x55, 0xcd, 0x1d, 0x21, 0x4d, 0x8d,
- 0x61, 0x13, 0x21, 0x13, 0xc7, 0x6e, 0x68, 0x02, 0x32, 0x71, 0x6c, 0x9c, 0x30, 0x74, 0x7e, 0xe4,
- 0x8d, 0xa2, 0x58, 0x26, 0xb6, 0x8d, 0x0f, 0x40, 0x9f, 0x9a, 0xa7, 0xfe, 0x9c, 0x58, 0x96, 0xb6,
- 0x72, 0xb7, 0x6b, 0xac, 0x2c, 0x00, 0x5d, 0x1b, 0xd7, 0x7d, 0x3c, 0x35, 0x27, 0x61, 0x63, 0x9d,
- 0x06, 0x44, 0x07, 0xd9, 0x78, 0xa6, 0xcb, 0x1b, 0x65, 0xda, 0x0c, 0xb5, 0x89, 0x8d, 0xe3, 0xbd,
- 0x1a, 0xd3, 0x80, 0x4e, 0x03, 0x65, 0x04, 0xf4, 0x71, 0xf0, 0x26, 0x14, 0xad, 0xc8, 0x71, 0x79,
- 0x03, 0xb6, 0x72, 0xb7, 0x2b, 0x0f, 0x6b, 0xc9, 0xe1, 0xa1, 0x3c, 0x99, 0x18, 0x43, 0x24, 0x97,
- 0x90, 0x2a, 0x0b, 0x91, 0x68, 0xcc, 0xb8, 0x07, 0x65, 0x4b, 0x0a, 0xb5, 0x51, 0x25, 0xbc, 0x77,
- 0x52, 0x65, 0x94, 0x03, 0x2c, 0x41, 0x31, 0xae, 0x81, 0x3e, 0xf5, 0x2d, 0x33, 0x72, 0x7c, 0x2f,
- 0x6c, 0xd4, 0xe8, 0x2c, 0x53, 0x80, 0x71, 0x07, 0xea, 0x73, 0x8f, 0x56, 0x9d, 0x22, 0x6d, 0x10,
- 0xd2, 0xa6, 0x80, 0x1f, 0x24, 0xa8, 0x5f, 0x42, 0xe9, 0xad, 0x19, 0x45, 0x41, 0xd8, 0xd8, 0x24,
- 0xfd, 0xdb, 0x5a, 0xa4, 0x7f, 0xdb, 0xcf, 0x09, 0xa5, 0xe3, 0x45, 0xc1, 0x29, 0x93, 0xf8, 0x28,
- 0xac, 0x99, 0x19, 0x9d, 0x34, 0xea, 0x42, 0x58, 0xd8, 0x46, 0x18, 0x8f, 0xcc, 0x49, 0xe3, 0x1d,
- 0x71, 0xf0, 0xd8, 0x46, 0x51, 0x3b, 0x9e, 0x6f, 0xf3, 0x86, 0x41, 0x87, 0x23, 0x3a, 0xcd, 0xaf,
- 0xa0, 0xa2, 0x30, 0xc5, 0x23, 0x4d, 0xcd, 0x1f, 0x9b, 0xa9, 0x66, 0xe5, 0x15, 0xcd, 0xfa, 0x3a,
- 0xff, 0x65, 0xae, 0xf5, 0x5b, 0x0d, 0xea, 0x67, 0xed, 0xf3, 0x9c, 0x3a, 0x7d, 0x00, 0xfa, 0xcc,
- 0x0c, 0xb8, 0xaa, 0x50, 0x65, 0x01, 0xb8, 0xa4, 0x4a, 0x7d, 0x00, 0x7a, 0x14, 0x70, 0x3e, 0x26,
- 0xbd, 0x42, 0xf5, 0x29, 0xb0, 0x32, 0x02, 0x86, 0xa8, 0x5b, 0x06, 0x68, 0x2e, 0x6e, 0xa9, 0x48,
- 0xda, 0x43, 0xed, 0x9f, 0xa0, 0x52, 0x89, 0xd6, 0xe8, 0x97, 0xd1, 0x1a, 0xb8, 0x40, 0x6b, 0x6e,
- 0x42, 0x31, 0xbc, 0x40, 0xb5, 0x68, 0xcc, 0xf8, 0x26, 0x39, 0xe2, 0x2a, 0x1d, 0xf1, 0xad, 0xa5,
- 0x5e, 0xee, 0xc2, 0x73, 0xae, 0x2d, 0x38, 0xe7, 0x8d, 0x45, 0xe7, 0xbc, 0xa9, 0x9c, 0x33, 0x49,
- 0x85, 0xdc, 0x5b, 0x5d, 0x40, 0x85, 0x23, 0xfb, 0x10, 0x20, 0xf1, 0xa7, 0x21, 0x69, 0x8b, 0xc6,
- 0x14, 0xc8, 0xcf, 0xd1, 0x8e, 0xff, 0x2c, 0x00, 0xfc, 0x30, 0xf7, 0x23, 0x53, 0xe8, 0x45, 0xbc,
- 0xfa, 0x5c, 0x76, 0xf5, 0x74, 0x26, 0xd2, 0x3d, 0xd1, 0x99, 0x7c, 0x22, 0x5d, 0x16, 0xea, 0xc4,
- 0xc6, 0x43, 0x23, 0x11, 0xd1, 0x0f, 0x47, 0x83, 0x51, 0x7b, 0xf4, 0xe2, 0xb0, 0x23, 0xdc, 0x18,
- 0x1a, 0xde, 0x3c, 0xe4, 0xf6, 0xcb, 0xd3, 0x88, 0x87, 0x52, 0x5d, 0x52, 0x80, 0x71, 0x17, 0xea,
- 0xd8, 0x99, 0xfa, 0x13, 0xc7, 0x32, 0xa7, 0x02, 0x49, 0xf8, 0xa4, 0x73, 0xf0, 0x98, 0x93, 0x90,
- 0x4e, 0x29, 0xe5, 0x24, 0x24, 0xd4, 0x84, 0xb2, 0x6b, 0xbe, 0x15, 0x1c, 0xd6, 0x85, 0xfa, 0xc6,
- 0x7d, 0xe3, 0x36, 0x6c, 0xba, 0xe6, 0xdb, 0xcc, 0x24, 0x65, 0x42, 0x39, 0x0b, 0x96, 0x5c, 0xc4,
- 0x14, 0x7a, 0xc2, 0x45, 0xcc, 0xf0, 0x39, 0x5c, 0x99, 0xf1, 0xc0, 0xe2, 0x5e, 0x64, 0x4e, 0x78,
- 0xba, 0x27, 0x54, 0xb7, 0x3c, 0x5b, 0x34, 0x74, 0x9e, 0x42, 0x30, 0xae, 0x2c, 0xa2, 0x10, 0x73,
- 0x6c, 0x41, 0x25, 0x8c, 0xcc, 0x68, 0x1e, 0x0a, 0xde, 0x55, 0x12, 0xb8, 0x0a, 0x4a, 0x31, 0x04,
- 0xaf, 0x9a, 0x8a, 0x41, 0xa0, 0xd6, 0x31, 0x94, 0x98, 0x3f, 0xe5, 0xa9, 0xd9, 0xe6, 0xce, 0x99,
- 0x6d, 0x3e, 0x35, 0xdb, 0x26, 0x94, 0xe7, 0x21, 0x0f, 0xe8, 0x7c, 0x0b, 0xc4, 0x2c, 0xe9, 0xa3,
- 0xc4, 0x27, 0x81, 0x3f, 0x9f, 0xd1, 0xa0, 0x46, 0x83, 0x29, 0xa0, 0x35, 0x06, 0xad, 0xb7, 0xdb,
- 0xb5, 0x17, 0x6a, 0x8c, 0xf0, 0x2e, 0x38, 0x4d, 0x89, 0xbc, 0x4b, 0x1d, 0x0a, 0x8e, 0xe7, 0xd3,
- 0x04, 0x25, 0x86, 0x4d, 0xe3, 0x23, 0xa9, 0x3f, 0x1a, 0xe9, 0x8f, 0x62, 0x88, 0x89, 0xea, 0xb4,
- 0xbe, 0x85, 0xe2, 0x81, 0xe3, 0x3a, 0x11, 0xce, 0xf0, 0x23, 0x0f, 0x7c, 0x9a, 0xa1, 0xcc, 0xa8,
- 0x8d, 0x1c, 0x5d, 0xc7, 0x8b, 0x77, 0xe2, 0x3a, 0x1e, 0x41, 0xcc, 0xb7, 0xb1, 0x93, 0x72, 0xcd,
- 0xb7, 0xad, 0x7f, 0x2e, 0x41, 0xa5, 0xb7, 0x3b, 0xe4, 0x53, 0x6e, 0xa1, 0xf3, 0x36, 0xde, 0x85,
- 0x52, 0x48, 0x1d, 0xc9, 0x49, 0xf6, 0x8c, 0x8f, 0x63, 0xff, 0x92, 0x27, 0xaf, 0xb0, 0x91, 0x2c,
- 0x86, 0xa6, 0x8f, 0x1d, 0xcc, 0xc7, 0xb1, 0x83, 0x29, 0x2c, 0xc6, 0x72, 0x63, 0x2c, 0xe1, 0x61,
- 0xb4, 0xc5, 0x58, 0xc2, 0xc5, 0xb4, 0x94, 0xf8, 0x7b, 0x1e, 0x49, 0xc4, 0xe3, 0xbb, 0x40, 0xfe,
- 0x33, 0xf1, 0xa7, 0xe7, 0xf1, 0x92, 0x71, 0xc4, 0xb5, 0x4e, 0x9c, 0xa9, 0x1d, 0x70, 0x8f, 0xb4,
- 0x7f, 0x01, 0x6e, 0x3c, 0x6e, 0x7c, 0xa6, 0x86, 0xc2, 0xf2, 0x42, 0x64, 0x25, 0x34, 0x7e, 0x03,
- 0x86, 0x08, 0x81, 0xdc, 0x56, 0x82, 0xa3, 0xbe, 0x90, 0xec, 0x9d, 0x18, 0x33, 0x0d, 0x97, 0x4d,
- 0x90, 0x39, 0x84, 0x63, 0x93, 0xa5, 0x68, 0x2c, 0xe9, 0xa7, 0x01, 0xa0, 0x22, 0x5d, 0x1d, 0x05,
- 0x80, 0x06, 0xac, 0x87, 0xa7, 0x2e, 0xf2, 0x21, 0xf5, 0x2f, 0xb3, 0xb8, 0x9b, 0x09, 0xf9, 0xb5,
- 0xd5, 0x21, 0xff, 0x2a, 0x14, 0xfd, 0x37, 0x98, 0xab, 0x6e, 0x88, 0xf8, 0x42, 0x1d, 0x84, 0x92,
- 0x0a, 0x93, 0xd7, 0xad, 0x31, 0xd1, 0xc1, 0x44, 0x94, 0x86, 0xc7, 0x81, 0xef, 0x47, 0xe4, 0x7a,
- 0xcb, 0x4c, 0x27, 0x08, 0xf3, 0xfd, 0x08, 0x87, 0x09, 0x4f, 0x0c, 0xbf, 0x23, 0x86, 0x09, 0x42,
- 0xc3, 0xbf, 0x80, 0xcd, 0x80, 0x4f, 0xf8, 0xdb, 0xd9, 0x18, 0x2d, 0x90, 0xac, 0xc5, 0x20, 0x63,
- 0xd8, 0x10, 0xe0, 0x3d, 0x09, 0x35, 0x6e, 0x81, 0x84, 0x8c, 0x6d, 0x47, 0x98, 0xdc, 0x15, 0xc2,
- 0xab, 0x09, 0xe8, 0xae, 0x00, 0x1a, 0x5f, 0x40, 0x91, 0x62, 0x49, 0xe3, 0x2a, 0xc5, 0x9f, 0x1b,
- 0xc9, 0x2e, 0x15, 0x65, 0x16, 0xa1, 0x47, 0x44, 0x1e, 0x81, 0xdd, 0xfc, 0x12, 0x20, 0x05, 0xfe,
- 0xa4, 0x18, 0xf0, 0xef, 0x39, 0xd0, 0x7b, 0xbb, 0x71, 0x86, 0x1d, 0x9b, 0x66, 0x6e, 0xa9, 0x69,
- 0x1a, 0xd7, 0x13, 0xfb, 0x56, 0x83, 0x28, 0xba, 0x03, 0x32, 0x77, 0x25, 0xef, 0x2e, 0x64, 0x33,
- 0xfe, 0x9b, 0xa0, 0x05, 0xfe, 0x34, 0xb6, 0x8e, 0xcd, 0x84, 0x54, 0x78, 0x2c, 0x46, 0x83, 0xc6,
- 0x43, 0xd0, 0xc3, 0x78, 0x9f, 0xd2, 0x44, 0xae, 0x2e, 0x92, 0x01, 0x4b, 0xd1, 0x5a, 0x7f, 0x9b,
- 0x03, 0xc0, 0x2d, 0x84, 0x33, 0xdf, 0x0b, 0xf9, 0x65, 0xf6, 0xf0, 0x09, 0x14, 0x8e, 0xdd, 0x78,
- 0x13, 0x8b, 0xcb, 0x08, 0x44, 0x30, 0x3e, 0x85, 0x82, 0x25, 0xab, 0x93, 0x0b, 0x2b, 0x1e, 0xc4,
- 0x6a, 0xfd, 0x4f, 0x0e, 0xb3, 0x76, 0xcf, 0xfe, 0xe3, 0xc9, 0x32, 0x96, 0x58, 0xe1, 0x22, 0x89,
- 0x29, 0x02, 0xd7, 0xb2, 0x02, 0x17, 0x11, 0xcd, 0xe6, 0xb3, 0xe8, 0x44, 0x46, 0xd6, 0xa4, 0x9f,
- 0x95, 0x73, 0xe9, 0x72, 0x72, 0xde, 0x07, 0x7d, 0x78, 0x62, 0x06, 0xbc, 0x3d, 0x17, 0x89, 0x01,
- 0x56, 0xaa, 0x52, 0xc9, 0xa8, 0xbd, 0x30, 0x59, 0x30, 0x40, 0x3b, 0xf1, 0xc3, 0x48, 0x2a, 0x03,
- 0xb5, 0x5b, 0xbf, 0xce, 0x03, 0x10, 0x27, 0x91, 0x77, 0x7c, 0x08, 0x30, 0xe3, 0x81, 0xeb, 0x84,
- 0x21, 0x2e, 0x46, 0x30, 0x54, 0x20, 0xb8, 0x43, 0xfe, 0x76, 0xe6, 0x04, 0x3c, 0x94, 0x3e, 0x3f,
- 0xee, 0xa6, 0x76, 0x2e, 0xb8, 0x9f, 0xb5, 0x73, 0x21, 0x0f, 0x69, 0xe7, 0x1f, 0x02, 0x4c, 0xb8,
- 0xc7, 0x03, 0x33, 0x51, 0x2d, 0x8d, 0x29, 0x90, 0x24, 0x96, 0x95, 0xe4, 0x86, 0x30, 0x96, 0x5d,
- 0x03, 0xdd, 0x9c, 0x4e, 0xfd, 0x37, 0xe8, 0x6c, 0xc9, 0xb9, 0x96, 0x59, 0x0a, 0xc0, 0x98, 0xf2,
- 0x3a, 0xf2, 0x5f, 0x71, 0x8f, 0x5c, 0xa9, 0xce, 0x64, 0xcf, 0xf8, 0x0c, 0xd6, 0xfd, 0xc0, 0x99,
- 0x38, 0xe4, 0x2c, 0xd1, 0x8a, 0xd3, 0x14, 0x29, 0x91, 0x1f, 0x8b, 0x51, 0x5a, 0x7f, 0x97, 0x93,
- 0xc2, 0x18, 0x11, 0xf1, 0x1d, 0x28, 0x0a, 0x9e, 0x39, 0x3a, 0x94, 0x2b, 0x59, 0x52, 0x59, 0xe2,
- 0x8a, 0x79, 0xae, 0x81, 0x1e, 0x3a, 0x13, 0xcf, 0x8c, 0xe6, 0x41, 0x6c, 0xd8, 0x29, 0x00, 0xf7,
- 0x1b, 0xf2, 0xc0, 0x31, 0xa7, 0xce, 0x8f, 0x5c, 0xa8, 0x70, 0x95, 0x29, 0x10, 0xaa, 0x03, 0x39,
- 0x17, 0x79, 0x7c, 0x91, 0x51, 0xbb, 0xf5, 0xd7, 0x37, 0x40, 0xef, 0x0f, 0x57, 0xdf, 0x35, 0xc4,
- 0x8a, 0x99, 0xbf, 0x48, 0x31, 0x1f, 0x41, 0xd1, 0x7d, 0x65, 0x3b, 0x41, 0xe3, 0x4f, 0x08, 0x2b,
- 0x75, 0x65, 0xc9, 0x0c, 0xdb, 0x3d, 0x1c, 0x97, 0x9d, 0xa7, 0x6b, 0x4c, 0xe0, 0x23, 0x61, 0xe0,
- 0x22, 0xe1, 0xbb, 0x4b, 0x09, 0x99, 0x9b, 0x25, 0x24, 0x7c, 0x24, 0x8c, 0xfc, 0xb9, 0x75, 0xd2,
- 0x78, 0x6f, 0x29, 0xe1, 0x08, 0xc7, 0x15, 0x42, 0xc2, 0x37, 0xbe, 0x86, 0x92, 0x88, 0x5f, 0x8d,
- 0x06, 0x51, 0x6e, 0x2d, 0xa0, 0x3c, 0x22, 0x84, 0x94, 0x54, 0x52, 0x18, 0xdb, 0x90, 0x0f, 0xdc,
- 0xc6, 0xfb, 0x44, 0x77, 0x6d, 0xe1, 0x52, 0x53, 0x9a, 0x7c, 0xe0, 0xe2, 0x5c, 0x81, 0x08, 0x14,
- 0xcd, 0xa5, 0x73, 0x31, 0x42, 0x50, 0xe6, 0x12, 0x14, 0xc6, 0x37, 0x69, 0x80, 0xfc, 0x80, 0x88,
- 0x3f, 0x5a, 0x40, 0x3c, 0x14, 0x18, 0x29, 0x75, 0x12, 0x45, 0xbf, 0x81, 0xf5, 0xd7, 0x3c, 0x20,
- 0x2b, 0xbb, 0xb6, 0x94, 0xfc, 0x99, 0xc0, 0x50, 0xc8, 0x25, 0x0d, 0x92, 0x07, 0xdc, 0x3a, 0xb5,
- 0xa6, 0xbc, 0x71, 0x7d, 0x29, 0x39, 0x13, 0x18, 0x0a, 0xb9, 0xa4, 0x31, 0xbe, 0x8e, 0x43, 0xdb,
- 0x87, 0x44, 0xdc, 0x5a, 0xb4, 0x74, 0x1e, 0x3d, 0x6f, 0x47, 0x91, 0x7a, 0xb2, 0x44, 0x82, 0x27,
- 0x6b, 0x9d, 0xf8, 0x6f, 0xbc, 0xc6, 0x8d, 0xa5, 0x27, 0xbb, 0x83, 0xe3, 0x0a, 0x21, 0xe1, 0x0b,
- 0x42, 0xd7, 0xb7, 0x1b, 0x5b, 0x17, 0x10, 0xba, 0xbe, 0x9d, 0x21, 0x74, 0x7d, 0xdb, 0x78, 0x00,
- 0x05, 0xd3, 0x9a, 0x36, 0x3e, 0x22, 0xb2, 0xeb, 0x0b, 0xc8, 0xda, 0xd6, 0x34, 0x25, 0x42, 0x5c,
- 0xa1, 0x7e, 0x68, 0xba, 0xad, 0x0b, 0xd4, 0xef, 0x15, 0xf7, 0x32, 0xea, 0x87, 0x86, 0xfc, 0x08,
- 0x8a, 0xbf, 0xc2, 0x32, 0xac, 0x71, 0x73, 0x29, 0x21, 0x95, 0x69, 0x0a, 0x21, 0xe1, 0x23, 0x61,
- 0x88, 0x6e, 0xa1, 0xf1, 0xf1, 0x52, 0x42, 0x72, 0x1b, 0x0a, 0x21, 0xe1, 0x37, 0xc7, 0x50, 0x55,
- 0x6d, 0x4f, 0x06, 0xa2, 0xdc, 0xb2, 0x40, 0x74, 0x0d, 0xf4, 0x80, 0x5b, 0xf3, 0x20, 0x74, 0x5e,
- 0x0b, 0xa3, 0x2f, 0xb3, 0x14, 0x90, 0x54, 0xf8, 0x05, 0xaa, 0xfc, 0xa9, 0xdd, 0xbc, 0x07, 0x55,
- 0xd5, 0x46, 0x57, 0x4c, 0x80, 0xe8, 0xaa, 0x65, 0xae, 0x42, 0x3f, 0x80, 0x5a, 0xc6, 0x1c, 0x2f,
- 0xb1, 0x7e, 0xcf, 0x8f, 0x75, 0x57, 0xde, 0x35, 0x26, 0x80, 0xe6, 0x31, 0xe8, 0x89, 0x91, 0xfe,
- 0x3c, 0x49, 0x5c, 0x3c, 0xcf, 0x1e, 0xd4, 0x32, 0x86, 0xbd, 0x6a, 0xae, 0x77, 0xa1, 0x14, 0x99,
- 0xc1, 0x84, 0x47, 0xd2, 0xb9, 0xcb, 0x5e, 0x73, 0x1f, 0x36, 0xb2, 0x36, 0xfe, 0x87, 0x32, 0xfa,
- 0xbf, 0x1c, 0x6c, 0x64, 0xcd, 0x7d, 0x15, 0xa7, 0x6f, 0x45, 0x42, 0x94, 0xa7, 0x94, 0xe6, 0xde,
- 0x4a, 0xef, 0xb1, 0xfd, 0xac, 0xc3, 0x86, 0xdd, 0x41, 0x7f, 0xbc, 0xd3, 0xdb, 0xa5, 0x24, 0x09,
- 0xa3, 0x92, 0x6b, 0xbe, 0x8d, 0xbd, 0x50, 0x81, 0x62, 0x8f, 0x02, 0xc1, 0x1a, 0x77, 0x12, 0x98,
- 0x2f, 0x63, 0x04, 0x11, 0xc1, 0x55, 0x50, 0xeb, 0x4b, 0xa8, 0x28, 0x5c, 0x0d, 0x80, 0xd2, 0x0e,
- 0xeb, 0xb4, 0x47, 0x9d, 0xfa, 0x9a, 0xa1, 0x43, 0xf1, 0xf0, 0x88, 0xed, 0x77, 0xea, 0x39, 0xa3,
- 0x0c, 0xda, 0x41, 0x77, 0x38, 0xaa, 0xe7, 0xb1, 0xb5, 0xcf, 0xda, 0x4f, 0xea, 0x85, 0xe6, 0xef,
- 0x35, 0xd8, 0xc8, 0xba, 0xa7, 0x05, 0x99, 0xf2, 0xca, 0x1d, 0x66, 0x39, 0x6c, 0xb3, 0xce, 0xce,
- 0x8b, 0x9d, 0x83, 0x4e, 0xba, 0xc3, 0x43, 0xa8, 0x04, 0x3c, 0x8c, 0xfc, 0x80, 0x63, 0x51, 0x23,
- 0x73, 0xb7, 0xed, 0x4b, 0x30, 0x12, 0x44, 0x7b, 0x58, 0x09, 0x31, 0x95, 0x85, 0xd1, 0x05, 0x7d,
- 0x36, 0x0f, 0x26, 0xdc, 0x36, 0xa3, 0x38, 0x7b, 0xfe, 0x74, 0x35, 0xbf, 0x43, 0x24, 0xd9, 0x35,
- 0x23, 0xce, 0x52, 0x6a, 0x63, 0x1f, 0xca, 0x53, 0x27, 0x8c, 0x68, 0x65, 0xc5, 0xcb, 0x72, 0x3a,
- 0x70, 0xc2, 0x48, 0x2c, 0x2b, 0x21, 0x6e, 0x3e, 0x87, 0xaa, 0xba, 0x60, 0x2a, 0xe8, 0xfc, 0xc0,
- 0xe2, 0xb2, 0xbc, 0x16, 0x1d, 0x54, 0x3c, 0xf7, 0x15, 0x65, 0x55, 0xc2, 0x54, 0x64, 0x0f, 0x33,
- 0x53, 0x79, 0x9c, 0xa1, 0x34, 0x93, 0xa4, 0xdf, 0xdc, 0x07, 0x3d, 0x59, 0x3a, 0xba, 0x96, 0x53,
- 0x6e, 0x06, 0xc4, 0xb5, 0xc8, 0xa8, 0x8d, 0x53, 0xb9, 0xbe, 0x27, 0x79, 0x16, 0x99, 0xe8, 0xe0,
- 0x49, 0xda, 0xe6, 0xa9, 0xd4, 0x28, 0x6c, 0x36, 0x3f, 0x05, 0x3d, 0x59, 0xb9, 0xd4, 0x3b, 0xee,
- 0x45, 0x81, 0x43, 0xef, 0x07, 0xb1, 0xde, 0x49, 0x48, 0xeb, 0x3e, 0x54, 0x94, 0x93, 0x34, 0x2a,
- 0xb0, 0xce, 0x3a, 0xc3, 0xd1, 0x80, 0x2d, 0x53, 0xab, 0xe6, 0xdf, 0xe7, 0x61, 0xf3, 0x4c, 0xb8,
- 0x5a, 0x65, 0x3c, 0x7b, 0xc9, 0xe5, 0x62, 0x9e, 0xd2, 0xc2, 0xed, 0xd5, 0x11, 0x70, 0xe1, 0x2d,
- 0x63, 0xc6, 0x07, 0x15, 0xce, 0xfa, 0xa0, 0x16, 0x54, 0x5f, 0xf1, 0xd3, 0x30, 0xf2, 0x6d, 0x3e,
- 0xe5, 0xa4, 0x30, 0x85, 0xdb, 0x3a, 0xcb, 0xc0, 0xf0, 0x5c, 0xac, 0x80, 0xa3, 0x3a, 0x15, 0xc5,
- 0xb9, 0x88, 0xde, 0xcf, 0xb8, 0x4b, 0x6c, 0x8e, 0xa0, 0xaa, 0x46, 0xe0, 0x55, 0xb2, 0xb8, 0x15,
- 0x67, 0xee, 0x4b, 0x52, 0x48, 0x31, 0xda, 0x6c, 0x23, 0xd7, 0x34, 0x3c, 0xaf, 0xe2, 0x1a, 0x47,
- 0xa2, 0xbc, 0x12, 0x89, 0x7e, 0x97, 0x07, 0x48, 0x63, 0xf5, 0x2a, 0x0e, 0x8f, 0x55, 0xf3, 0xbf,
- 0x73, 0x61, 0xd8, 0xdf, 0x6e, 0xef, 0x1c, 0x8c, 0x77, 0x06, 0xbd, 0x5e, 0xbb, 0x2f, 0x4d, 0xff,
- 0xe2, 0x83, 0xf9, 0x3a, 0x73, 0xed, 0xf5, 0xc9, 0x6a, 0xde, 0x4a, 0xa1, 0x68, 0x80, 0x16, 0xcc,
- 0xa7, 0xe2, 0xb8, 0x74, 0x46, 0x6d, 0x34, 0xa2, 0x99, 0x1f, 0x3a, 0x49, 0x05, 0x57, 0x63, 0x49,
- 0xbf, 0x75, 0x0f, 0x2a, 0xca, 0xea, 0x50, 0x6d, 0xfb, 0x83, 0x3e, 0xea, 0x32, 0x40, 0xa9, 0x37,
- 0xd8, 0xed, 0xee, 0xbd, 0x50, 0x95, 0xb9, 0x75, 0x0b, 0xca, 0xf1, 0x84, 0x46, 0x15, 0xca, 0x47,
- 0xc3, 0x0e, 0x1b, 0xb7, 0x77, 0x0e, 0xea, 0x6b, 0x68, 0x08, 0xc3, 0x17, 0x43, 0xea, 0xe4, 0x9a,
- 0x5f, 0x61, 0x94, 0x4e, 0x13, 0x98, 0x15, 0xb5, 0x8a, 0x40, 0x15, 0x18, 0xcd, 0xdf, 0xe5, 0xa0,
- 0xaa, 0xe6, 0x30, 0x0b, 0xaf, 0x0e, 0x6f, 0x28, 0xe5, 0xf0, 0x39, 0x8d, 0xc0, 0xd3, 0xd9, 0x82,
- 0xbc, 0x3f, 0x93, 0xf7, 0xce, 0xf5, 0xec, 0xbd, 0xf3, 0xe0, 0x90, 0xe5, 0xfd, 0x59, 0xe6, 0x16,
- 0x57, 0x3b, 0x73, 0x8b, 0xab, 0xde, 0x13, 0x17, 0xcf, 0xdc, 0x13, 0xdf, 0x81, 0x22, 0xba, 0x82,
- 0x53, 0x92, 0xe4, 0x86, 0xb2, 0x15, 0x62, 0xde, 0xe9, 0x8f, 0xd8, 0x0b, 0x26, 0x30, 0x9a, 0xff,
- 0xa5, 0x41, 0x55, 0xcd, 0xaa, 0x8c, 0xaf, 0x20, 0x3f, 0x0d, 0xa5, 0x0c, 0x7e, 0xb1, 0x22, 0x05,
- 0xdb, 0x3e, 0x08, 0xa9, 0x8b, 0xc5, 0xc0, 0x34, 0x34, 0xfe, 0x82, 0x36, 0x24, 0x76, 0xfc, 0xd9,
- 0x2a, 0xd2, 0xc1, 0x0c, 0x6b, 0x55, 0x9e, 0xd0, 0xfb, 0xb3, 0xe6, 0xbf, 0xe6, 0x60, 0x5d, 0x72,
- 0x34, 0x06, 0xa0, 0xfb, 0xf3, 0xe8, 0xd8, 0x0f, 0x5c, 0x33, 0x92, 0x97, 0x0e, 0x0f, 0x2e, 0xb9,
- 0x9a, 0xed, 0xc1, 0x3c, 0xda, 0x23, 0x42, 0x96, 0xf2, 0xa0, 0xfa, 0x32, 0xb9, 0x23, 0x10, 0x35,
- 0xbd, 0x72, 0x1b, 0xf0, 0x4b, 0xd0, 0x13, 0x2a, 0x45, 0xc1, 0x36, 0x00, 0x7a, 0x83, 0x7e, 0x77,
- 0x34, 0x60, 0xdd, 0xfe, 0x7e, 0x3d, 0x87, 0x0a, 0x84, 0x4a, 0x86, 0x1d, 0x8a, 0xc5, 0xdf, 0x0d,
- 0x07, 0xfd, 0x7a, 0xa1, 0xf9, 0x37, 0x79, 0xa8, 0xaa, 0xfb, 0x31, 0xbe, 0x25, 0x49, 0x88, 0x65,
- 0xdf, 0xff, 0x29, 0x92, 0xd8, 0x1e, 0xcc, 0xe8, 0xe4, 0xaf, 0xc6, 0xb9, 0xb0, 0x58, 0xa9, 0xe8,
- 0xa0, 0x0b, 0xc3, 0x34, 0x5e, 0xdc, 0x0f, 0x50, 0x96, 0x1e, 0x2b, 0x9e, 0xa6, 0xd4, 0xf9, 0x06,
- 0x68, 0xf3, 0x90, 0x07, 0xb1, 0x79, 0x61, 0x3b, 0xbd, 0x45, 0x28, 0x29, 0xb7, 0x08, 0xad, 0x03,
- 0xc8, 0x0f, 0x66, 0x99, 0xa4, 0x03, 0xa0, 0xc4, 0x3a, 0xbd, 0xc1, 0x33, 0x0c, 0x0f, 0x3a, 0x14,
- 0x87, 0x4f, 0xdb, 0xac, 0x53, 0xcf, 0xe3, 0xbe, 0x8f, 0xfa, 0xa2, 0x53, 0x40, 0x9c, 0xf6, 0xce,
- 0x4e, 0x67, 0x38, 0xac, 0x6b, 0x8a, 0x05, 0x16, 0x9f, 0x94, 0xa1, 0x14, 0xce, 0x5f, 0x5a, 0xae,
- 0xfd, 0x44, 0x87, 0x75, 0xcb, 0x77, 0x5d, 0xd3, 0xb3, 0x5b, 0xff, 0x58, 0x05, 0xc0, 0x7d, 0xcb,
- 0xeb, 0xac, 0x47, 0x50, 0xe4, 0x41, 0xe0, 0x07, 0x52, 0xc1, 0xb2, 0x35, 0x97, 0xc0, 0xd9, 0xee,
- 0x20, 0x42, 0xdc, 0x63, 0x02, 0x5f, 0xad, 0xf6, 0x84, 0x82, 0xdd, 0x5c, 0x44, 0x9a, 0x24, 0x6c,
- 0x92, 0x78, 0x51, 0xb5, 0x57, 0x58, 0x4e, 0x9e, 0xa4, 0x0a, 0x31, 0x79, 0x5c, 0xed, 0xc9, 0xfa,
- 0x49, 0x5b, 0x50, 0x98, 0x48, 0x52, 0xf2, 0x76, 0x92, 0x2c, 0xae, 0x9f, 0x44, 0x19, 0x54, 0x5c,
- 0xbe, 0x53, 0xe9, 0x43, 0xe2, 0x9d, 0x9e, 0x29, 0x83, 0x4a, 0xcb, 0x09, 0xa5, 0xfe, 0xc4, 0x84,
- 0xa2, 0x0c, 0xfa, 0x02, 0x6a, 0x19, 0xd1, 0xa1, 0x22, 0x58, 0x18, 0x40, 0x72, 0x22, 0x80, 0x60,
- 0x9b, 0x1e, 0x17, 0xc2, 0x89, 0x54, 0x2b, 0x6c, 0x36, 0xff, 0x3b, 0x07, 0x9b, 0x67, 0xe4, 0x76,
- 0x39, 0x4a, 0xe3, 0xfb, 0x4c, 0xe2, 0x83, 0x49, 0xc0, 0xfd, 0x4b, 0x1c, 0x4a, 0xdc, 0xef, 0x7a,
- 0xc7, 0xbe, 0x92, 0x29, 0xfd, 0x00, 0x15, 0x65, 0x60, 0x55, 0x64, 0x4b, 0x1e, 0x49, 0xf3, 0xcb,
- 0x1f, 0x49, 0x9b, 0xbf, 0x2d, 0xc0, 0xe6, 0x99, 0x23, 0xbd, 0xfc, 0xce, 0xe4, 0xd1, 0x5f, 0xb8,
- 0xb3, 0x33, 0xcc, 0xe3, 0xbe, 0xd8, 0x59, 0xcc, 0xa0, 0xf9, 0x9b, 0x3c, 0x54, 0x94, 0x91, 0x3f,
- 0x4e, 0x32, 0x81, 0x12, 0xb0, 0x95, 0x57, 0x9c, 0xb3, 0x12, 0xa0, 0xb1, 0xe4, 0xf7, 0x08, 0x4d,
- 0xf9, 0x3d, 0xe2, 0x50, 0x46, 0xee, 0x22, 0x79, 0xa7, 0x5f, 0xfe, 0xc4, 0x7d, 0x6d, 0xef, 0x76,
- 0x0e, 0x3a, 0xa3, 0xee, 0xa0, 0xaf, 0xc4, 0x73, 0x99, 0x59, 0x95, 0x92, 0xcc, 0xaa, 0xd5, 0x82,
- 0xaa, 0x8a, 0x87, 0xae, 0x72, 0xaf, 0x7b, 0x80, 0x0e, 0xa6, 0x0c, 0xda, 0x88, 0x75, 0x3a, 0xf5,
- 0x5c, 0x73, 0x1f, 0x2a, 0x8a, 0xd1, 0x5c, 0xf2, 0x60, 0xe2, 0xd4, 0xa1, 0x90, 0xa6, 0x0e, 0xcd,
- 0x13, 0xa8, 0x65, 0x0c, 0xe9, 0x92, 0xac, 0x1e, 0x80, 0x4e, 0x06, 0xe7, 0x89, 0x6a, 0xbf, 0x90,
- 0x89, 0xf9, 0xe9, 0x43, 0x32, 0x4b, 0xb1, 0x9a, 0xa1, 0xbc, 0x33, 0xa6, 0x63, 0x8c, 0xef, 0x87,
- 0x73, 0xd9, 0xfb, 0x61, 0x7a, 0x59, 0x91, 0x77, 0xc6, 0xd8, 0x5e, 0xb4, 0xe4, 0xf8, 0x41, 0x53,
- 0x4b, 0x1f, 0x34, 0x1b, 0xb0, 0xee, 0x91, 0x19, 0xdb, 0x32, 0x9a, 0xc7, 0xdd, 0xe6, 0x63, 0xa8,
- 0x88, 0x8b, 0x56, 0xcb, 0xe2, 0x61, 0xb8, 0x70, 0xda, 0x06, 0xac, 0x4f, 0x02, 0xd3, 0x8b, 0xb8,
- 0x2d, 0x4b, 0x93, 0xb8, 0xdb, 0xfc, 0xa7, 0x1c, 0xd4, 0x32, 0xce, 0xe2, 0x92, 0xc2, 0xf9, 0x02,
- 0x4a, 0x34, 0x7d, 0xac, 0xfe, 0xd7, 0x97, 0x7a, 0x21, 0x52, 0x76, 0x89, 0x6c, 0x3c, 0x82, 0x92,
- 0x49, 0xcb, 0xa4, 0x44, 0x7d, 0x89, 0xab, 0x54, 0x76, 0xc3, 0x24, 0x7a, 0xeb, 0x0e, 0xd4, 0xfa,
- 0xe1, 0x30, 0x32, 0xa3, 0x95, 0xd7, 0xb5, 0xad, 0x7f, 0x29, 0xc0, 0x46, 0x8c, 0x7b, 0xc1, 0x9e,
- 0x0c, 0xd0, 0x78, 0xba, 0x29, 0x6a, 0x53, 0x54, 0x8d, 0xb0, 0x50, 0x90, 0x37, 0xec, 0xd4, 0xc1,
- 0xfa, 0xc1, 0x53, 0x73, 0x2c, 0xd9, 0xc3, 0xea, 0xdd, 0x53, 0x7e, 0x56, 0x10, 0xc7, 0xa2, 0x82,
- 0x8c, 0x0f, 0x40, 0x7f, 0xe9, 0xfb, 0xd1, 0x98, 0xec, 0x50, 0xbc, 0xe4, 0x97, 0x11, 0x40, 0x3f,
- 0x55, 0xdd, 0x80, 0x8a, 0x35, 0x0f, 0xe8, 0x4f, 0x94, 0x63, 0xc7, 0x96, 0x6f, 0xf9, 0x20, 0x41,
- 0x7b, 0x8e, 0xad, 0x22, 0x58, 0x8e, 0x2d, 0x5f, 0xf2, 0x63, 0x84, 0x1d, 0x81, 0xe0, 0x72, 0x77,
- 0xfc, 0xda, 0x09, 0xa2, 0xb9, 0x39, 0x95, 0xef, 0xf8, 0xe0, 0x72, 0xf7, 0x99, 0x80, 0x18, 0x1f,
- 0x41, 0x15, 0x11, 0x02, 0x1e, 0x3a, 0x36, 0xf7, 0x22, 0xf9, 0x30, 0x89, 0x44, 0x4c, 0x82, 0x70,
- 0x89, 0x88, 0x22, 0x22, 0x4a, 0x45, 0xe6, 0x89, 0xdc, 0x15, 0x69, 0xca, 0x75, 0x40, 0x6e, 0xe3,
- 0x49, 0xe0, 0xbf, 0x89, 0x4e, 0xe8, 0x95, 0x52, 0x63, 0x88, 0xbe, 0x4f, 0x00, 0x3c, 0x83, 0xe8,
- 0x24, 0xe0, 0xa6, 0x2d, 0x9e, 0xe7, 0x35, 0x16, 0x77, 0x51, 0x61, 0x8e, 0xed, 0x90, 0x1e, 0x24,
- 0x35, 0x86, 0x4d, 0x14, 0xe2, 0x7c, 0x46, 0x72, 0x10, 0x7f, 0x81, 0xc8, 0x5e, 0xeb, 0xdf, 0x0a,
- 0x50, 0xeb, 0x99, 0x9e, 0x33, 0x4d, 0x72, 0xe5, 0x6f, 0xa1, 0x1a, 0x88, 0xe6, 0x58, 0x79, 0x51,
- 0x4a, 0x2f, 0x9b, 0x7b, 0xed, 0x7e, 0xf7, 0xa0, 0x3d, 0x66, 0x9d, 0x1f, 0x8e, 0x3a, 0xc3, 0x91,
- 0xa8, 0x1b, 0x2a, 0x92, 0x62, 0x84, 0xee, 0xe6, 0x7d, 0x28, 0xa3, 0x2e, 0x8c, 0xcf, 0xfc, 0x0d,
- 0xf7, 0xbd, 0x78, 0x24, 0xa2, 0x3f, 0x0e, 0x2d, 0x3f, 0xce, 0x92, 0x92, 0x3e, 0x6e, 0x96, 0xa4,
- 0x30, 0x56, 0xff, 0x02, 0x20, 0x08, 0xfd, 0xd1, 0xb5, 0x05, 0x15, 0x9b, 0x87, 0x56, 0xe0, 0xcc,
- 0x92, 0x27, 0x15, 0x9d, 0xa9, 0x20, 0x9c, 0x57, 0x30, 0x90, 0xbf, 0x95, 0xe9, 0x6c, 0x9d, 0xfa,
- 0x5d, 0xdb, 0xf8, 0x18, 0x36, 0xc4, 0x90, 0x78, 0x5d, 0x95, 0xc7, 0xad, 0xb3, 0x2a, 0x41, 0xf7,
- 0x11, 0x28, 0xfe, 0x3d, 0x13, 0x29, 0x41, 0x59, 0xd4, 0xfa, 0x22, 0xde, 0x37, 0x60, 0x9d, 0x0a,
- 0x56, 0x3f, 0xa0, 0x13, 0xd6, 0x59, 0xdc, 0x45, 0x99, 0x72, 0x91, 0xb5, 0x81, 0x78, 0x92, 0x11,
- 0x3d, 0x3c, 0x76, 0xd3, 0x76, 0x1d, 0x6f, 0x2c, 0x47, 0x2b, 0x62, 0xad, 0x04, 0xeb, 0x24, 0xef,
- 0xc0, 0x62, 0x41, 0xf4, 0x5c, 0x55, 0x55, 0x36, 0xfb, 0xd4, 0x0f, 0x23, 0xe3, 0x56, 0xbc, 0xde,
- 0xf8, 0x25, 0x5c, 0xfe, 0x7f, 0x51, 0x23, 0x68, 0xfc, 0xea, 0xdd, 0xfa, 0x7d, 0x0e, 0x36, 0xe2,
- 0xc3, 0x93, 0xa6, 0x26, 0x5d, 0x45, 0x2e, 0xe3, 0x92, 0xad, 0xb8, 0x4c, 0x2d, 0x4a, 0xe3, 0xbb,
- 0x0e, 0x10, 0xf9, 0x91, 0x39, 0x1d, 0xcf, 0x43, 0xf9, 0x5c, 0x53, 0x60, 0x3a, 0x41, 0x8e, 0x42,
- 0x8e, 0x21, 0x6e, 0x43, 0x0c, 0x5b, 0xe6, 0xcc, 0xb4, 0x9c, 0x48, 0x3c, 0xf6, 0x15, 0x58, 0x8d,
- 0xa0, 0x3b, 0x12, 0x68, 0x7c, 0x02, 0x9b, 0x1e, 0x7f, 0x23, 0x74, 0x77, 0x9c, 0x26, 0x53, 0x05,
- 0x56, 0xf3, 0xf8, 0x1b, 0xd2, 0x60, 0x72, 0xd3, 0x28, 0xfd, 0x14, 0x4f, 0x79, 0xf6, 0xaa, 0xc6,
- 0x68, 0x87, 0x66, 0x74, 0x72, 0xf7, 0xcf, 0x41, 0x3b, 0x13, 0x8b, 0x6a, 0xa0, 0xef, 0x0c, 0xfa,
- 0xa3, 0x76, 0xb7, 0xdf, 0x61, 0x0b, 0x92, 0xfb, 0xe1, 0xa8, 0x3d, 0xaa, 0x17, 0xee, 0xde, 0x03,
- 0x3d, 0xf9, 0x17, 0x08, 0xc1, 0x58, 0x4f, 0x8a, 0x7b, 0x94, 0x7d, 0x36, 0x38, 0x3a, 0x14, 0xd9,
- 0xf1, 0x21, 0x1b, 0x7c, 0xd7, 0xd9, 0x41, 0xf4, 0xfb, 0xb0, 0x2e, 0x4b, 0x38, 0x63, 0x1d, 0x0a,
- 0xfb, 0x9d, 0x51, 0x7d, 0x0d, 0x1b, 0xc3, 0xce, 0xa8, 0x9e, 0x33, 0x4a, 0x90, 0x67, 0xbd, 0x7a,
- 0x9e, 0xd2, 0xec, 0x5e, 0x7f, 0xb0, 0xdb, 0x21, 0xfe, 0x90, 0x96, 0x65, 0xd9, 0xe2, 0xf6, 0xd9,
- 0xe0, 0xe0, 0xa8, 0x27, 0x53, 0xf1, 0x2e, 0xa1, 0xe7, 0xef, 0xfe, 0x26, 0x07, 0x57, 0x16, 0x98,
- 0x88, 0x51, 0x87, 0xaa, 0xc8, 0xe2, 0xc7, 0x22, 0x4f, 0x5f, 0x43, 0x08, 0x05, 0xe1, 0x18, 0x92,
- 0x43, 0x48, 0xe7, 0xf9, 0xa8, 0xd3, 0xdf, 0x1d, 0xc7, 0x89, 0x7d, 0x1d, 0xaa, 0xc3, 0xa7, 0xac,
- 0xdb, 0xff, 0x7e, 0x1c, 0x67, 0xf7, 0x57, 0x60, 0xb3, 0xd7, 0xee, 0xb7, 0xf7, 0x3b, 0xe3, 0xce,
- 0x73, 0x29, 0x0d, 0x8d, 0xca, 0xe8, 0xbe, 0x00, 0xd7, 0x8b, 0x86, 0x01, 0x1b, 0xfb, 0x9d, 0xd1,
- 0x78, 0xa7, 0x7d, 0xd8, 0xde, 0xe9, 0x8e, 0xba, 0x9d, 0x61, 0xbd, 0xf4, 0xf0, 0x7f, 0x0b, 0x50,
- 0xe8, 0xf8, 0xa1, 0xf1, 0x10, 0xb4, 0x43, 0xc7, 0x9b, 0x18, 0xe9, 0xfb, 0xab, 0xf2, 0xc3, 0x6f,
- 0xd3, 0x38, 0x03, 0x9d, 0x4d, 0x4f, 0x5b, 0x6b, 0xc6, 0x03, 0xc8, 0xf7, 0x76, 0x0d, 0x43, 0x49,
- 0x85, 0x62, 0xfc, 0x2b, 0x19, 0x98, 0x50, 0xc1, 0xd6, 0xda, 0xe7, 0x39, 0xe3, 0x0b, 0xd0, 0xf6,
- 0x1c, 0xcf, 0x36, 0xd4, 0xe7, 0xee, 0xe4, 0xb1, 0x7a, 0x39, 0xd9, 0x63, 0x28, 0x89, 0xd0, 0x61,
- 0xbc, 0x9b, 0x46, 0x26, 0x35, 0xee, 0x34, 0xdf, 0x3b, 0x07, 0x8f, 0xc9, 0x8d, 0xef, 0x60, 0xf3,
- 0xcc, 0x1f, 0xc5, 0xc6, 0x8d, 0xf3, 0xaf, 0xe8, 0x99, 0x9f, 0x7c, 0x9b, 0xe9, 0xfa, 0x94, 0xbf,
- 0x74, 0x5b, 0x6b, 0xc6, 0x5f, 0x02, 0xa4, 0x7f, 0x04, 0x1b, 0xcd, 0xcc, 0xa3, 0xfd, 0xe5, 0x38,
- 0x3c, 0x00, 0xad, 0xf3, 0x96, 0x5b, 0x8a, 0xd8, 0x92, 0xf2, 0x52, 0xd9, 0x7f, 0x1a, 0x76, 0x5b,
- 0x6b, 0xc6, 0x53, 0xb8, 0x22, 0xac, 0x79, 0xc8, 0x83, 0xd7, 0x3c, 0xb9, 0xe8, 0x4b, 0x45, 0x91,
- 0x71, 0xd4, 0x8a, 0x28, 0xb2, 0x3e, 0xa0, 0xb5, 0xf6, 0xe4, 0x08, 0x36, 0x1d, 0x7f, 0x7b, 0x82,
- 0x63, 0x12, 0xe7, 0x49, 0xb9, 0xe3, 0x87, 0x94, 0x30, 0x1d, 0xe6, 0xfe, 0xea, 0xf3, 0x89, 0x13,
- 0x9d, 0xcc, 0x5f, 0x6e, 0x5b, 0xbe, 0x7b, 0xdf, 0xe2, 0x81, 0x77, 0x8f, 0xfb, 0xe1, 0x7d, 0xc4,
- 0xbe, 0x47, 0xde, 0xf8, 0x3e, 0x7d, 0x5f, 0xce, 0x8f, 0x1f, 0x73, 0x3f, 0x1c, 0x23, 0xfc, 0x1f,
- 0xf2, 0x85, 0xce, 0x60, 0xf8, 0xb2, 0x44, 0x03, 0x7f, 0xfa, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff,
- 0x8f, 0xfd, 0x31, 0xde, 0x3b, 0x2e, 0x00, 0x00,
-}
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ context.Context
-var _ grpc.ClientConnInterface
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the grpc package it is being compiled against.
-const _ = grpc.SupportPackageIsVersion6
-
-// EosClient is the client API for Eos service.
-//
-// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
-type EosClient interface {
- // Replies to a ping
- Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingReply, error)
- // Replies to MD requests with a stream
- MD(ctx context.Context, in *MDRequest, opts ...grpc.CallOption) (Eos_MDClient, error)
- // Replies to Find requests with a stream
- Find(ctx context.Context, in *FindRequest, opts ...grpc.CallOption) (Eos_FindClient, error)
- // Replies to a NsStat operation
- NsStat(ctx context.Context, in *NsStatRequest, opts ...grpc.CallOption) (*NsStatResponse, error)
- // Replies to an insert
- ContainerInsert(ctx context.Context, in *ContainerInsertRequest, opts ...grpc.CallOption) (*InsertReply, error)
- FileInsert(ctx context.Context, in *FileInsertRequest, opts ...grpc.CallOption) (*InsertReply, error)
- // Replies to a NsRequest operation
- Exec(ctx context.Context, in *NSRequest, opts ...grpc.CallOption) (*NSResponse, error)
- // Manila Driver
- ManilaServerRequest(ctx context.Context, in *ManilaRequest, opts ...grpc.CallOption) (*ManilaResponse, error)
-}
-
-type eosClient struct {
- cc grpc.ClientConnInterface
-}
-
-func NewEosClient(cc grpc.ClientConnInterface) EosClient {
- return &eosClient{cc}
-}
-
-func (c *eosClient) Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingReply, error) {
- out := new(PingReply)
- err := c.cc.Invoke(ctx, "/eos.rpc.Eos/Ping", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *eosClient) MD(ctx context.Context, in *MDRequest, opts ...grpc.CallOption) (Eos_MDClient, error) {
- stream, err := c.cc.NewStream(ctx, &_Eos_serviceDesc.Streams[0], "/eos.rpc.Eos/MD", opts...)
- if err != nil {
- return nil, err
- }
- x := &eosMDClient{stream}
- if err := x.ClientStream.SendMsg(in); err != nil {
- return nil, err
- }
- if err := x.ClientStream.CloseSend(); err != nil {
- return nil, err
- }
- return x, nil
-}
-
-type Eos_MDClient interface {
- Recv() (*MDResponse, error)
- grpc.ClientStream
-}
-
-type eosMDClient struct {
- grpc.ClientStream
-}
-
-func (x *eosMDClient) Recv() (*MDResponse, error) {
- m := new(MDResponse)
- if err := x.ClientStream.RecvMsg(m); err != nil {
- return nil, err
- }
- return m, nil
-}
-
-func (c *eosClient) Find(ctx context.Context, in *FindRequest, opts ...grpc.CallOption) (Eos_FindClient, error) {
- stream, err := c.cc.NewStream(ctx, &_Eos_serviceDesc.Streams[1], "/eos.rpc.Eos/Find", opts...)
- if err != nil {
- return nil, err
- }
- x := &eosFindClient{stream}
- if err := x.ClientStream.SendMsg(in); err != nil {
- return nil, err
- }
- if err := x.ClientStream.CloseSend(); err != nil {
- return nil, err
- }
- return x, nil
-}
-
-type Eos_FindClient interface {
- Recv() (*MDResponse, error)
- grpc.ClientStream
-}
-
-type eosFindClient struct {
- grpc.ClientStream
-}
-
-func (x *eosFindClient) Recv() (*MDResponse, error) {
- m := new(MDResponse)
- if err := x.ClientStream.RecvMsg(m); err != nil {
- return nil, err
- }
- return m, nil
-}
-
-func (c *eosClient) NsStat(ctx context.Context, in *NsStatRequest, opts ...grpc.CallOption) (*NsStatResponse, error) {
- out := new(NsStatResponse)
- err := c.cc.Invoke(ctx, "/eos.rpc.Eos/NsStat", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *eosClient) ContainerInsert(ctx context.Context, in *ContainerInsertRequest, opts ...grpc.CallOption) (*InsertReply, error) {
- out := new(InsertReply)
- err := c.cc.Invoke(ctx, "/eos.rpc.Eos/ContainerInsert", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *eosClient) FileInsert(ctx context.Context, in *FileInsertRequest, opts ...grpc.CallOption) (*InsertReply, error) {
- out := new(InsertReply)
- err := c.cc.Invoke(ctx, "/eos.rpc.Eos/FileInsert", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *eosClient) Exec(ctx context.Context, in *NSRequest, opts ...grpc.CallOption) (*NSResponse, error) {
- out := new(NSResponse)
- err := c.cc.Invoke(ctx, "/eos.rpc.Eos/Exec", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *eosClient) ManilaServerRequest(ctx context.Context, in *ManilaRequest, opts ...grpc.CallOption) (*ManilaResponse, error) {
- out := new(ManilaResponse)
- err := c.cc.Invoke(ctx, "/eos.rpc.Eos/ManilaServerRequest", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-// EosServer is the server API for Eos service.
-type EosServer interface {
- // Replies to a ping
- Ping(context.Context, *PingRequest) (*PingReply, error)
- // Replies to MD requests with a stream
- MD(*MDRequest, Eos_MDServer) error
- // Replies to Find requests with a stream
- Find(*FindRequest, Eos_FindServer) error
- // Replies to a NsStat operation
- NsStat(context.Context, *NsStatRequest) (*NsStatResponse, error)
- // Replies to an insert
- ContainerInsert(context.Context, *ContainerInsertRequest) (*InsertReply, error)
- FileInsert(context.Context, *FileInsertRequest) (*InsertReply, error)
- // Replies to a NsRequest operation
- Exec(context.Context, *NSRequest) (*NSResponse, error)
- // Manila Driver
- ManilaServerRequest(context.Context, *ManilaRequest) (*ManilaResponse, error)
-}
-
-// UnimplementedEosServer can be embedded to have forward compatible implementations.
-type UnimplementedEosServer struct {
-}
-
-func (*UnimplementedEosServer) Ping(ctx context.Context, req *PingRequest) (*PingReply, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Ping not implemented")
-}
-func (*UnimplementedEosServer) MD(req *MDRequest, srv Eos_MDServer) error {
- return status.Errorf(codes.Unimplemented, "method MD not implemented")
-}
-func (*UnimplementedEosServer) Find(req *FindRequest, srv Eos_FindServer) error {
- return status.Errorf(codes.Unimplemented, "method Find not implemented")
-}
-func (*UnimplementedEosServer) NsStat(ctx context.Context, req *NsStatRequest) (*NsStatResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method NsStat not implemented")
-}
-func (*UnimplementedEosServer) ContainerInsert(ctx context.Context, req *ContainerInsertRequest) (*InsertReply, error) {
- return nil, status.Errorf(codes.Unimplemented, "method ContainerInsert not implemented")
-}
-func (*UnimplementedEosServer) FileInsert(ctx context.Context, req *FileInsertRequest) (*InsertReply, error) {
- return nil, status.Errorf(codes.Unimplemented, "method FileInsert not implemented")
-}
-func (*UnimplementedEosServer) Exec(ctx context.Context, req *NSRequest) (*NSResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Exec not implemented")
-}
-func (*UnimplementedEosServer) ManilaServerRequest(ctx context.Context, req *ManilaRequest) (*ManilaResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method ManilaServerRequest not implemented")
-}
-
-func RegisterEosServer(s *grpc.Server, srv EosServer) {
- s.RegisterService(&_Eos_serviceDesc, srv)
-}
-
-func _Eos_Ping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(PingRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(EosServer).Ping(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/eos.rpc.Eos/Ping",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(EosServer).Ping(ctx, req.(*PingRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Eos_MD_Handler(srv interface{}, stream grpc.ServerStream) error {
- m := new(MDRequest)
- if err := stream.RecvMsg(m); err != nil {
- return err
- }
- return srv.(EosServer).MD(m, &eosMDServer{stream})
-}
-
-type Eos_MDServer interface {
- Send(*MDResponse) error
- grpc.ServerStream
-}
-
-type eosMDServer struct {
- grpc.ServerStream
-}
-
-func (x *eosMDServer) Send(m *MDResponse) error {
- return x.ServerStream.SendMsg(m)
-}
-
-func _Eos_Find_Handler(srv interface{}, stream grpc.ServerStream) error {
- m := new(FindRequest)
- if err := stream.RecvMsg(m); err != nil {
- return err
- }
- return srv.(EosServer).Find(m, &eosFindServer{stream})
-}
-
-type Eos_FindServer interface {
- Send(*MDResponse) error
- grpc.ServerStream
-}
-
-type eosFindServer struct {
- grpc.ServerStream
-}
-
-func (x *eosFindServer) Send(m *MDResponse) error {
- return x.ServerStream.SendMsg(m)
-}
-
-func _Eos_NsStat_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(NsStatRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(EosServer).NsStat(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/eos.rpc.Eos/NsStat",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(EosServer).NsStat(ctx, req.(*NsStatRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Eos_ContainerInsert_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(ContainerInsertRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(EosServer).ContainerInsert(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/eos.rpc.Eos/ContainerInsert",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(EosServer).ContainerInsert(ctx, req.(*ContainerInsertRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Eos_FileInsert_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(FileInsertRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(EosServer).FileInsert(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/eos.rpc.Eos/FileInsert",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(EosServer).FileInsert(ctx, req.(*FileInsertRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Eos_Exec_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(NSRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(EosServer).Exec(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/eos.rpc.Eos/Exec",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(EosServer).Exec(ctx, req.(*NSRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Eos_ManilaServerRequest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(ManilaRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(EosServer).ManilaServerRequest(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/eos.rpc.Eos/ManilaServerRequest",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(EosServer).ManilaServerRequest(ctx, req.(*ManilaRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-var _Eos_serviceDesc = grpc.ServiceDesc{
- ServiceName: "eos.rpc.Eos",
- HandlerType: (*EosServer)(nil),
- Methods: []grpc.MethodDesc{
- {
- MethodName: "Ping",
- Handler: _Eos_Ping_Handler,
- },
- {
- MethodName: "NsStat",
- Handler: _Eos_NsStat_Handler,
- },
- {
- MethodName: "ContainerInsert",
- Handler: _Eos_ContainerInsert_Handler,
- },
- {
- MethodName: "FileInsert",
- Handler: _Eos_FileInsert_Handler,
- },
- {
- MethodName: "Exec",
- Handler: _Eos_Exec_Handler,
- },
- {
- MethodName: "ManilaServerRequest",
- Handler: _Eos_ManilaServerRequest_Handler,
- },
- },
- Streams: []grpc.StreamDesc{
- {
- StreamName: "MD",
- Handler: _Eos_MD_Handler,
- ServerStreams: true,
- },
- {
- StreamName: "Find",
- Handler: _Eos_Find_Handler,
- ServerStreams: true,
- },
- },
- Metadata: "Rpc.proto",
-}
diff --git a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto b/pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto
deleted file mode 100644
index 97c68bdaa5..0000000000
--- a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto
+++ /dev/null
@@ -1,604 +0,0 @@
-// @project The CERN Tape Archive (CTA)
-// @brief CTA-EOS gRPC API for CASTOR-EOS migration
-// @copyright Copyright 2019 CERN
-// @license This program is free software: you can redistribute it and/or
-// modify
-// it under the terms of the GNU General Public License as
-// published by the Free Software Foundation, either version 3
-// of the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be
-// useful, but WITHOUT ANY WARRANTY; without even the implied
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-// PURPOSE. See the GNU General Public License for more
-// details.
-//
-// You should have received a copy of the GNU General Public
-// License along with this program. If not, see
-// .
-
-// NOTE: Compile for Go with:
-// protoc ./eos_grpc.proto --go_out=plugins=grpc:.
-
-syntax = "proto3";
-
-package eos.rpc;
-
-option java_multiple_files = true;
-option java_package = "io.grpc.eos.rpc";
-option java_outer_classname = "EosProto";
-option objc_class_prefix = "EOS";
-option go_package = "github.com/cern-eos/grpc-proto/protobuf;eos_grpc";
-
-service Eos {
- // Replies to a ping
- rpc Ping(PingRequest) returns (PingReply) {}
-
- // ---------------------------------------------------------------------
- // NAMESPACE
- // ---------------------------------------------------------------------
-
- // Replies to MD requests with a stream
- rpc MD(MDRequest) returns (stream MDResponse) {}
-
- // Replies to Find requests with a stream
- rpc Find(FindRequest) returns (stream MDResponse) {}
-
- // Replies to a NsStat operation
- rpc NsStat(NsStatRequest) returns (NsStatResponse) {}
-
- // Replies to an insert
- rpc ContainerInsert(ContainerInsertRequest) returns (InsertReply) {}
- rpc FileInsert(FileInsertRequest) returns (InsertReply) {}
-
- // Replies to a NsRequest operation
- rpc Exec(NSRequest) returns (NSResponse) {}
-
- // ---------------------------------------------------------------------
- // OPENSTACK
- // ---------------------------------------------------------------------
-
- // Manila Driver
- rpc ManilaServerRequest(ManilaRequest) returns (ManilaResponse) {}
-}
-
-message PingRequest {
- string authkey = 1;
- bytes message = 2;
-}
-
-message PingReply { bytes message = 1; }
-
-// ---------------------------------------------------------------------
-// NAMESPACE
-// ---------------------------------------------------------------------
-
-message ContainerInsertRequest {
- repeated ContainerMdProto container = 1;
- string authkey = 2;
- bool inherit_md = 3;
-}
-
-message FileInsertRequest {
- repeated FileMdProto files = 1;
- string authkey = 2;
-}
-
-message InsertReply {
- repeated string message = 1;
- repeated uint32 retc = 2;
-}
-
-message Time {
- uint64 sec = 1;
- uint64 n_sec = 2;
-}
-
-message Checksum {
- bytes value = 1;
- string type = 2;
-}
-
-message FileMdProto {
- uint64 id = 1;
- uint64 cont_id = 2;
- uint64 uid = 3;
- uint64 gid = 4;
- uint64 size = 5;
- uint32 layout_id = 6;
- uint32 flags = 7;
- bytes name = 8;
- bytes link_name = 9;
- Time ctime = 10; // change time
- Time mtime = 11; // modification time
- Checksum checksum = 12;
- repeated uint32 locations = 13;
- repeated uint32 unlink_locations = 14;
- map xattrs = 15;
- bytes path = 16;
- string etag = 17;
- uint64 inode = 18;
-}
-
-message ContainerMdProto {
- uint64 id = 1;
- uint64 parent_id = 2;
- uint64 uid = 3;
- uint64 gid = 4;
- int64 tree_size = 6;
- uint32 mode = 5;
- uint32 flags = 7;
- bytes name = 8;
- Time ctime = 9; // change time
- Time mtime = 10; // modification time
- Time stime = 11; // sync time
- map xattrs = 12;
- bytes path = 13;
- string etag = 14;
- uint64 inode = 15;
-}
-
-enum TYPE {
- FILE = 0;
- CONTAINER = 1;
- LISTING = 2;
- STAT = 3;
-}
-
-enum QUOTATYPE {
- USER = 0;
- GROUP = 2;
- PROJECT = 3;
-}
-
-enum QUOTAOP {
- GET = 0;
- SET = 1;
- RM = 2;
- RMNODE = 3;
-}
-
-enum QUOTAENTRY {
- NONE = 0;
- VOLUME = 1;
- INODE = 2;
-}
-
-message QuotaProto {
- bytes path = 1; // quota node path
- string name = 2; // associated name for the given type
- QUOTATYPE type = 3; // user,group,project or all quota
- uint64 usedbytes = 4; // bytes used physical
- uint64 usedlogicalbytes = 5; // bytes used logical
- uint64 usedfiles = 6; // number of files used
- uint64 maxbytes = 7; // maximum number of bytes (volume quota)
- uint64 maxlogicalbytes =
- 8; // maximum number of logical bytes (logical volume quota)
- uint64 maxfiles = 9; // maximum number of files (inode quota)
- float percentageusedbytes =
- 10; // percentage of volume quota used from 0 to 100
- float percentageusedfiles = 11; // percentag of inode quota used from 0 to 100
- string statusbytes = 12; // status string for volume quota ok,warning,exceeded
- string statusfiles = 13; // status string for inode quota ok,warning,exceeded
-}
-
-message RoleId {
- uint64 uid = 1;
- uint64 gid = 2;
- string username = 3;
- string groupname = 4;
-}
-
-message MDId {
- bytes path = 1;
- fixed64 id = 2;
- fixed64 ino = 3;
- TYPE type = 4;
-}
-
-message Limit {
- bool zero = 1;
- uint64 min = 2;
- uint64 max = 3;
-}
-
-message MDSelection {
- bool select = 1;
- Limit ctime = 2;
- Limit mtime = 3;
- Limit stime = 4;
- Limit size = 5;
- Limit treesize = 6;
- Limit children = 7;
- Limit locations = 8;
- Limit unlinked_locations = 9;
- uint64 layoutid = 10;
- uint64 flags = 11;
- bool symlink = 12;
- Checksum checksum = 13;
- uint32 owner = 14;
- uint32 group = 15;
- bool owner_root = 16;
- bool group_root = 17;
- bytes regexp_filename = 18;
- bytes regexp_dirname = 19;
- map xattr = 20;
-}
-
-message MDRequest {
- TYPE type = 1;
- MDId id = 2;
- string authkey = 3;
- RoleId role = 4;
- MDSelection selection = 5;
-}
-
-message MDResponse {
- TYPE type = 1;
- FileMdProto fmd = 2;
- ContainerMdProto cmd = 3;
-}
-
-message FindRequest {
- TYPE type = 1;
- MDId id = 2;
- RoleId role = 3;
- string authkey = 4;
- uint64 maxdepth = 5;
- MDSelection selection = 6;
-}
-
-message ShareAuth {
- string prot = 1;
- string name = 2;
- string host = 3;
-}
-
-message ShareProto {
- string permission = 1;
- uint64 expires = 2;
- string owner = 3;
- string group = 4;
- uint64 generation = 5;
- string path = 6;
- bool allowtree = 7;
- string vtoken = 8;
- repeated ShareAuth origins = 9;
-}
-
-message ShareToken {
- ShareProto token = 1;
- bytes signature = 2;
- bytes serialized = 3;
- int32 seed = 4;
-}
-
-message NSRequest {
- message MkdirRequest {
- MDId id = 1;
- bool recursive = 2;
- int64 mode = 3;
- }
-
- message RmdirRequest { MDId id = 1; }
-
- message TouchRequest { MDId id = 1; }
-
- message UnlinkRequest {
- MDId id = 1;
- bool norecycle = 3;
- }
-
- message RmRequest {
- MDId id = 1;
- bool recursive = 2;
- bool norecycle = 3;
- }
-
- message RenameRequest {
- MDId id = 1;
- bytes target = 2;
- }
-
- message SymlinkRequest {
- MDId id = 1;
- bytes target = 2;
- }
-
- message VersionRequest {
- enum VERSION_CMD {
- CREATE = 0;
- PURGE = 1;
- LIST = 2;
- GRAB = 3;
- }
- MDId id = 1;
- VERSION_CMD cmd = 2;
- int32 maxversion = 3;
- string grabversion = 4;
- }
-
- message RecycleRequest {
- string key = 1;
- enum RECYCLE_CMD {
- RESTORE = 0;
- PURGE = 1;
- LIST = 2;
- }
- RECYCLE_CMD cmd = 2;
-
- message RestoreFlags {
- bool force = 1;
- bool mkpath = 2;
- bool versions = 3;
- }
-
- message PurgeDate {
- int32 year = 1;
- int32 month = 2;
- int32 day = 3;
- }
-
- RestoreFlags restoreflag = 3;
- PurgeDate purgedate = 4;
- }
-
- message SetXAttrRequest {
- MDId id = 1;
- map xattrs = 2;
- bool recursive = 3;
- repeated string keystodelete = 4;
- bool create = 5;
- }
-
- message ChownRequest {
- MDId id = 1;
- RoleId owner = 2;
- }
-
- message ChmodRequest {
- MDId id = 1;
- int64 mode = 2;
- }
-
- message AclRequest {
- enum ACL_COMMAND {
- NONE = 0;
- MODIFY = 1;
- LIST = 2;
- }
-
- enum ACL_TYPE {
- USER_ACL = 0;
- SYS_ACL = 1;
- }
-
- MDId id = 1;
- ACL_COMMAND cmd = 2;
- bool recursive = 3;
- ACL_TYPE type = 4;
- string rule = 5;
- uint32 position = 6;
- }
-
- message TokenRequest { ShareToken token = 1; }
-
- message QuotaRequest {
- bytes path = 1;
- RoleId id = 2;
- QUOTAOP op = 3; // get or set, rm or rmnode
- uint64 maxfiles = 4; // maximum number of bytes (volume quota) for setting
- uint64 maxbytes = 5; // maximum number of bytes (volume quota) for setting
- QUOTAENTRY entry = 6; // select volume or inode entry for deletion
- }
-
- message ShareRequest {
- message LsShare {
- enum OutFormat {
- NONE = 0; //
- MONITORING = 1; // [-m]
- LISTING = 2; // [-l]
- JSON = 3; // [grpc]
- }
- OutFormat outformat = 1; //
- string selection = 2; //
- }
-
- message OperateShare {
- enum Op {
- CREATE = 0;
- REMOVE = 1;
- SHARE = 2;
- UNSHARE = 3;
- ACCESS = 4;
- MODIFY = 5;
- }
- Op op = 1;
- string share = 2;
- string acl = 3;
- string path = 4;
- string user = 5;
- string group = 6;
- }
-
- oneof subcmd {
- LsShare ls = 1;
- OperateShare op = 2;
- }
- }
-
- string authkey = 1;
- RoleId role = 2;
-
- // Actual request data object
- oneof command {
- MkdirRequest mkdir = 21;
- RmdirRequest rmdir = 22;
- TouchRequest touch = 23;
- UnlinkRequest unlink = 24;
- RmRequest rm = 25;
- RenameRequest rename = 26;
- SymlinkRequest symlink = 27;
- VersionRequest version = 28;
- RecycleRequest recycle = 29;
- SetXAttrRequest xattr = 30;
- ChownRequest chown = 31;
- ChmodRequest chmod = 32;
- AclRequest acl = 33;
- TokenRequest token = 34;
- QuotaRequest quota = 35;
- ShareRequest share = 36;
- }
-}
-
-message NSResponse {
- message ErrorResponse {
- int64 code = 1;
- string msg = 2;
- }
-
- message VersionResponse {
- message VersionInfo {
- MDId id = 1;
- Time mtime = 2;
- }
- int64 code = 1;
- string msg = 2;
- repeated VersionInfo versions = 3;
- }
-
- message RecycleResponse {
- int64 code = 1;
- string msg = 2;
-
- message RecycleInfo {
- enum DELETIONTYPE {
- FILE = 0;
- TREE = 1;
- }
- MDId id = 1;
- RoleId owner = 2;
- Time dtime = 3;
- uint64 size = 4;
- DELETIONTYPE type = 5;
- string key = 6;
- }
-
- repeated RecycleInfo recycles = 3;
- }
-
- message AclResponse {
- int64 code = 1;
- string msg = 2;
- string rule = 3;
- }
-
- message QuotaResponse {
- int64 code = 1;
- string msg = 2;
- repeated QuotaProto quotanode = 3;
- }
-
- message ShareInfo {
- string name = 1;
- string root = 2;
- string rule = 3;
- uint64 uid = 4;
- uint64 nshared = 5;
- }
-
- message ShareAccess {
- string name = 1;
- bool granted = 2;
- }
-
- message ShareResponse {
- int64 code = 1;
- string msg = 2;
- repeated ShareInfo shares = 3;
- repeated ShareAccess access = 4;
- }
-
- ErrorResponse error = 1;
- VersionResponse version = 2;
- RecycleResponse recycle = 3;
- AclResponse acl = 4;
- QuotaResponse quota = 5;
- ShareResponse share = 6;
-}
-
-message NsStatRequest { string authkey = 1; }
-
-message NsStatResponse {
- int64 code = 1;
- string emsg = 2;
- string state = 3;
- uint64 nfiles = 4;
- uint64 ncontainers = 5;
- uint64 boot_time = 6;
- uint64 current_fid = 7;
- uint64 current_cid = 8;
- uint64 mem_virtual = 9;
- uint64 mem_resident = 10;
- uint64 mem_share = 11;
- uint64 mem_growth = 12;
- uint64 threads = 13;
- uint64 fds = 14;
- uint64 uptime = 15;
-}
-
-// ---------------------------------------------------------------------
-// OPENSTACK
-// ---------------------------------------------------------------------
-
-enum MANILA_REQUEST_TYPE {
- CREATE_SHARE = 0;
- DELETE_SHARE = 1;
- EXTEND_SHARE = 2;
- SHRINK_SHARE = 3;
- MANAGE_EXISTING = 4;
- UNMANAGE = 5;
- GET_CAPACITIES = 6;
- /* EXTRA FUNCTIONS NOT IMPLEMENTED */
- /*
- CREATE_SNAPSHOT = 7;
- DELETE_SNAPSHOT = 8;
- CREATE_SHARE_FROM_SNAPSHOT = 9;
- ENSURE_SHARE = 10;
- ALLOW_ACCESS = 11;
- DENY_ACCESS = 12;
- GET_SHARE_STATS = 13;
- DO_SETUP = 14;
- SETUP_SERVER = 15;
- TEARDOWN_SERVER = 16;
- GET_NETWORK_ALLOCATIONS_NUMBER = 17;
- VERIFY_SHARE_SERVER_HANDLING = 18;
- CREATE_SHARE_GROUP = 19;
- DELETE_SHARE_GROUP = 20;
- */
-}
-
-message ManilaRequest {
- MANILA_REQUEST_TYPE request_type = 1;
- string auth_key = 2;
- string protocol = 3;
- string share_name = 4;
- string description = 5;
- string share_id = 6;
- string share_group_id = 7;
- int32 quota = 8;
- string creator = 9;
- string egroup = 10;
- string admin_egroup = 11;
- string share_host = 12;
- string share_location = 13;
-}
-
-message ManilaResponse {
- string msg = 1; // for generic messages
- int32 code = 2; // < 1 is an error -- > 1 is OK
- int64 total_used = 3;
- int64 total_capacity = 4;
- int64 new_share_quota = 5;
- string new_share_path = 6;
-}
diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go
index 59cc0c5fbc..8a86c1b5cd 100644
--- a/pkg/eosclient/eosgrpc/eosgrpc.go
+++ b/pkg/eosclient/eosgrpc/eosgrpc.go
@@ -23,23 +23,20 @@
package eosgrpc
import (
- "bytes"
"context"
"encoding/hex"
"fmt"
"io"
"os"
- "os/exec"
"path"
"strconv"
"strings"
- "syscall"
"time"
+ erpc "github.com/cern-eos/go-eosgrpc"
userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
"github.com/cs3org/reva/pkg/appctx"
"github.com/cs3org/reva/pkg/eosclient"
- erpc "github.com/cs3org/reva/pkg/eosclient/eosgrpc/eos_grpc"
"github.com/cs3org/reva/pkg/errtypes"
"github.com/cs3org/reva/pkg/storage/utils/acl"
"github.com/google/uuid"
@@ -141,7 +138,7 @@ type Client struct {
func newgrpc(ctx context.Context, log *zerolog.Logger, opt *Options) (erpc.EosClient, error) {
log.Debug().Msgf("Setting up GRPC towards '%s'", opt.GrpcURI)
- conn, err := grpc.Dial(opt.GrpcURI, grpc.WithTransportCredentials(insecure.NewCredentials()))
+ conn, err := grpc.NewClient(opt.GrpcURI, grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
log.Warn().Err(err).Msgf("Error connecting to '%s'", opt.GrpcURI)
}
@@ -204,7 +201,7 @@ func (c *Client) getRespError(rsp *erpc.NSResponse, err error) error {
}
// Common code to create and initialize a NSRequest.
-func (c *Client) initNSRequest(ctx context.Context, auth eosclient.Authorization) (*erpc.NSRequest, error) {
+func (c *Client) initNSRequest(ctx context.Context, auth eosclient.Authorization, app string) (*erpc.NSRequest, error) {
// Stuff filename, uid, gid into the MDRequest type
log := appctx.GetLogger(ctx)
@@ -223,12 +220,15 @@ func (c *Client) initNSRequest(ctx context.Context, auth eosclient.Authorization
}
rq.Role.Uid = uidInt
rq.Role.Gid = gidInt
+ if app != "" {
+ rq.Role.App = app
+ }
rq.Authkey = c.opt.Authkey
return rq, nil
}
-// Common code to create and initialize a NSRequest.
+// Common code to create and initialize a MDRequest.
func (c *Client) initMDRequest(ctx context.Context, auth eosclient.Authorization) (*erpc.MDRequest, error) {
// Stuff filename, uid, gid into the MDRequest type
@@ -260,7 +260,7 @@ func (c *Client) AddACL(ctx context.Context, auth, rootAuth eosclient.Authorizat
log.Info().Str("func", "AddACL").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Msg("")
// Init a new NSRequest
- rq, err := c.initNSRequest(ctx, rootAuth)
+ rq, err := c.initNSRequest(ctx, rootAuth, "")
if err != nil {
return err
}
@@ -311,7 +311,7 @@ func (c *Client) RemoveACL(ctx context.Context, auth, rootAuth eosclient.Authori
sysACL := acls.Serialize()
// Init a new NSRequest
- rq, err := c.initNSRequest(ctx, auth)
+ rq, err := c.initNSRequest(ctx, auth, "")
if err != nil {
return err
}
@@ -388,7 +388,7 @@ func (c *Client) getACLForPath(ctx context.Context, auth eosclient.Authorization
log.Info().Str("func", "GetACLForPath").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Msg("")
// Initialize the common fields of the NSReq
- rq, err := c.initNSRequest(ctx, auth)
+ rq, err := c.initNSRequest(ctx, auth, "")
if err != nil {
return nil, err
}
@@ -507,12 +507,12 @@ func (c *Client) fixupACLs(ctx context.Context, auth eosclient.Authorization, in
}
// SetAttr sets an extended attributes on a path.
-func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, errorIfExists, recursive bool, path string) error {
+func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, errorIfExists, recursive bool, path, app string) error {
log := appctx.GetLogger(ctx)
log.Info().Str("func", "SetAttr").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Msg("")
// Initialize the common fields of the NSReq
- rq, err := c.initNSRequest(ctx, auth)
+ rq, err := c.initNSRequest(ctx, auth, app)
if err != nil {
return err
}
@@ -557,12 +557,12 @@ func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr
}
// UnsetAttr unsets an extended attribute on a path.
-func (c *Client) UnsetAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, recursive bool, path string) error {
+func (c *Client) UnsetAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, recursive bool, path, app string) error {
log := appctx.GetLogger(ctx)
log.Info().Str("func", "UnsetAttr").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Msg("")
// Initialize the common fields of the NSReq
- rq, err := c.initNSRequest(ctx, auth)
+ rq, err := c.initNSRequest(ctx, auth, app)
if err != nil {
return err
}
@@ -572,7 +572,6 @@ func (c *Client) UnsetAttr(ctx context.Context, auth eosclient.Authorization, at
var ktd = []string{attr.GetKey()}
msg.Keystodelete = ktd
msg.Recursive = recursive
-
msg.Id = new(erpc.MDId)
msg.Id.Path = []byte(path)
@@ -725,7 +724,7 @@ func (c *Client) GetQuota(ctx context.Context, username string, rootAuth eosclie
log.Info().Str("func", "GetQuota").Str("rootuid,rootgid", rootAuth.Role.UID+","+rootAuth.Role.GID).Str("username", username).Str("path", path).Msg("")
// Initialize the common fields of the NSReq
- rq, err := c.initNSRequest(ctx, rootAuth)
+ rq, err := c.initNSRequest(ctx, rootAuth, "")
if err != nil {
return nil, err
}
@@ -801,7 +800,7 @@ func (c *Client) SetQuota(ctx context.Context, rootAuth eosclient.Authorization,
// return errtypes.NotSupported("eosgrpc: SetQuota not implemented")
// Initialize the common fields of the NSReq
- rq, err := c.initNSRequest(ctx, rootAuth)
+ rq, err := c.initNSRequest(ctx, rootAuth, "")
if err != nil {
return err
}
@@ -859,7 +858,7 @@ func (c *Client) Touch(ctx context.Context, auth eosclient.Authorization, path s
log.Info().Str("func", "Touch").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Msg("")
// Initialize the common fields of the NSReq
- rq, err := c.initNSRequest(ctx, auth)
+ rq, err := c.initNSRequest(ctx, auth, "")
if err != nil {
return err
}
@@ -894,7 +893,7 @@ func (c *Client) Chown(ctx context.Context, auth, chownAuth eosclient.Authorizat
log.Info().Str("func", "Chown").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("chownuid,chowngid", chownAuth.Role.UID+","+chownAuth.Role.GID).Str("path", path).Msg("")
// Initialize the common fields of the NSReq
- rq, err := c.initNSRequest(ctx, auth)
+ rq, err := c.initNSRequest(ctx, auth, "")
if err != nil {
return err
}
@@ -938,7 +937,7 @@ func (c *Client) Chmod(ctx context.Context, auth eosclient.Authorization, mode,
log.Info().Str("func", "Chmod").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("mode", mode).Str("path", path).Msg("")
// Initialize the common fields of the NSReq
- rq, err := c.initNSRequest(ctx, auth)
+ rq, err := c.initNSRequest(ctx, auth, "")
if err != nil {
return err
}
@@ -979,7 +978,7 @@ func (c *Client) CreateDir(ctx context.Context, auth eosclient.Authorization, pa
log.Info().Str("func", "Createdir").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Msg("")
// Initialize the common fields of the NSReq
- rq, err := c.initNSRequest(ctx, auth)
+ rq, err := c.initNSRequest(ctx, auth, "")
if err != nil {
return err
}
@@ -1020,7 +1019,7 @@ func (c *Client) rm(ctx context.Context, auth eosclient.Authorization, path stri
log.Info().Str("func", "rm").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Msg("")
// Initialize the common fields of the NSReq
- rq, err := c.initNSRequest(ctx, auth)
+ rq, err := c.initNSRequest(ctx, auth, "")
if err != nil {
return err
}
@@ -1055,7 +1054,7 @@ func (c *Client) rmdir(ctx context.Context, auth eosclient.Authorization, path s
log.Info().Str("func", "rmdir").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Msg("")
// Initialize the common fields of the NSReq
- rq, err := c.initNSRequest(ctx, auth)
+ rq, err := c.initNSRequest(ctx, auth, "")
if err != nil {
return err
}
@@ -1110,7 +1109,7 @@ func (c *Client) Rename(ctx context.Context, auth eosclient.Authorization, oldPa
log.Info().Str("func", "Rename").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("oldPath", oldPath).Str("newPath", newPath).Msg("")
// Initialize the common fields of the NSReq
- rq, err := c.initNSRequest(ctx, auth)
+ rq, err := c.initNSRequest(ctx, auth, "")
if err != nil {
return err
}
@@ -1322,7 +1321,7 @@ func (c *Client) Read(ctx context.Context, auth eosclient.Authorization, path st
// Write writes a file to the mgm
// Somehow the same considerations as Read apply.
-func (c *Client) Write(ctx context.Context, auth eosclient.Authorization, path string, stream io.ReadCloser) error {
+func (c *Client) Write(ctx context.Context, auth eosclient.Authorization, path string, stream io.ReadCloser, app string) error {
log := appctx.GetLogger(ctx)
log.Info().Str("func", "Write").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Msg("")
var length int64
@@ -1355,24 +1354,10 @@ func (c *Client) Write(ctx context.Context, auth eosclient.Authorization, path s
defer wfd.Close()
defer os.RemoveAll(fd.Name())
- return c.httpcl.PUTFile(ctx, u.Username, auth, path, wfd, length)
+ return c.httpcl.PUTFile(ctx, u.Username, auth, path, wfd, length, app)
}
- return c.httpcl.PUTFile(ctx, u.Username, auth, path, stream, length)
-
- // return c.httpcl.PUTFile(ctx, remoteuser, auth, urlpathng, stream)
- // return c.WriteFile(ctx, uid, gid, path, fd.Name())
-}
-
-// WriteFile writes an existing file to the mgm. Old xrdcp utility.
-func (c *Client) WriteFile(ctx context.Context, auth eosclient.Authorization, path, source string) error {
- log := appctx.GetLogger(ctx)
- log.Info().Str("func", "WriteFile").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Str("source", source).Msg("")
-
- xrdPath := fmt.Sprintf("%s//%s", c.opt.URL, path)
- cmd := exec.CommandContext(ctx, c.opt.XrdcopyBinary, "--nopbar", "--silent", "-f", source, xrdPath, fmt.Sprintf("-ODeos.ruid=%s&eos.rgid=%s", auth.Role.UID, auth.Role.GID))
- _, _, err := c.execute(ctx, cmd)
- return err
+ return c.httpcl.PUTFile(ctx, u.Username, auth, path, stream, length, app)
}
// ListDeletedEntries returns a list of the deleted entries.
@@ -1381,7 +1366,7 @@ func (c *Client) ListDeletedEntries(ctx context.Context, auth eosclient.Authoriz
log.Info().Str("func", "ListDeletedEntries").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Msg("")
// Initialize the common fields of the NSReq
- rq, err := c.initNSRequest(ctx, auth)
+ rq, err := c.initNSRequest(ctx, auth, "")
if err != nil {
return nil, err
}
@@ -1449,7 +1434,7 @@ func (c *Client) RestoreDeletedEntry(ctx context.Context, auth eosclient.Authori
log.Info().Str("func", "RestoreDeletedEntries").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("key", key).Msg("")
// Initialize the common fields of the NSReq
- rq, err := c.initNSRequest(ctx, auth)
+ rq, err := c.initNSRequest(ctx, auth, "")
if err != nil {
return err
}
@@ -1487,7 +1472,7 @@ func (c *Client) PurgeDeletedEntries(ctx context.Context, auth eosclient.Authori
log.Info().Str("func", "PurgeDeletedEntries").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Msg("")
// Initialize the common fields of the NSReq
- rq, err := c.initNSRequest(ctx, auth)
+ rq, err := c.initNSRequest(ctx, auth, "")
if err != nil {
return err
}
@@ -1534,7 +1519,7 @@ func (c *Client) RollbackToVersion(ctx context.Context, auth eosclient.Authoriza
log.Info().Str("func", "RollbackToVersion").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Str("version", version).Msg("")
// Initialize the common fields of the NSReq
- rq, err := c.initNSRequest(ctx, auth)
+ rq, err := c.initNSRequest(ctx, auth, "")
if err != nil {
return err
}
@@ -1677,51 +1662,3 @@ func (c *Client) grpcMDResponseToFileInfo(ctx context.Context, st *erpc.MDRespon
}
return fi, nil
}
-
-// exec executes the command and returns the stdout, stderr and return code.
-func (c *Client) execute(ctx context.Context, cmd *exec.Cmd) (string, string, error) {
- log := appctx.GetLogger(ctx)
-
- outBuf := &bytes.Buffer{}
- errBuf := &bytes.Buffer{}
- cmd.Stdout = outBuf
- cmd.Stderr = errBuf
- cmd.Env = []string{
- "EOS_MGM_URL=" + c.opt.URL,
- }
-
- if c.opt.UseKeytab {
- cmd.Env = append(cmd.Env, "XrdSecPROTOCOL="+c.opt.SecProtocol)
- cmd.Env = append(cmd.Env, "XrdSecSSSKT="+c.opt.Keytab)
- }
-
- err := cmd.Run()
-
- var exitStatus int
- if exiterr, ok := err.(*exec.ExitError); ok {
- // The program has exited with an exit code != 0
- // This works on both Unix and Windows. Although package
- // syscall is generally platform dependent, WaitStatus is
- // defined for both Unix and Windows and in both cases has
- // an ExitStatus() method with the same signature.
- if status, ok := exiterr.Sys().(syscall.WaitStatus); ok {
- exitStatus = status.ExitStatus()
- switch exitStatus {
- case 0:
- err = nil
- case 2:
- err = errtypes.NotFound(errBuf.String())
- }
- }
- }
-
- args := fmt.Sprintf("%s", cmd.Args)
- env := fmt.Sprintf("%s", cmd.Env)
- log.Info().Str("args", args).Str("env", env).Int("exit", exitStatus).Msg("eos cmd")
-
- if err != nil && exitStatus != 2 { // don't wrap the errtypes.NotFoundError
- err = errors.Wrap(err, "eosclient: error while executing command")
- }
-
- return outBuf.String(), errBuf.String(), err
-}
diff --git a/pkg/eosclient/eosgrpc/eoshttp.go b/pkg/eosclient/eosgrpc/eoshttp.go
index e75fc8c409..ee1aa3aacf 100644
--- a/pkg/eosclient/eosgrpc/eoshttp.go
+++ b/pkg/eosclient/eosgrpc/eoshttp.go
@@ -210,8 +210,8 @@ func (c *EOSHTTPClient) doReq(req *http.Request, remoteuser string) (*http.Respo
return resp, err
}
-// If the error is not nil, take that
-// If there is an error coming from EOS, erturn a descriptive error.
+// If the error is not nil, take that.
+// If there is an error coming from EOS, return a descriptive error.
func (c *EOSHTTPClient) getRespError(rsp *http.Response, err error) error {
if err != nil {
return err
@@ -228,6 +228,8 @@ func (c *EOSHTTPClient) getRespError(rsp *http.Response, err error) error {
return errtypes.PermissionDenied(rspdesc(rsp))
case http.StatusNotFound:
return errtypes.NotFound(rspdesc(rsp))
+ case http.StatusConflict:
+ return errtypes.Conflict(rspdesc(rsp))
}
return errtypes.InternalError("Err from EOS: " + rspdesc(rsp))
@@ -281,6 +283,8 @@ func (c *EOSHTTPClient) GETFile(ctx context.Context, remoteuser string, auth eos
log.Error().Str("func", "GETFile").Str("url", finalurl).Str("err", err.Error()).Msg("can't create request")
return nil, err
}
+ // similar to eosbinary.go::Read()
+ req.Header.Set("app", "reva_eosclient::read")
ntries := 0
nredirs := 0
@@ -360,9 +364,9 @@ func (c *EOSHTTPClient) GETFile(ctx context.Context, remoteuser string, auth eos
}
// PUTFile does an entire PUT to upload a full file, taking the data from a stream.
-func (c *EOSHTTPClient) PUTFile(ctx context.Context, remoteuser string, auth eosclient.Authorization, urlpath string, stream io.ReadCloser, length int64) error {
+func (c *EOSHTTPClient) PUTFile(ctx context.Context, remoteuser string, auth eosclient.Authorization, urlpath string, stream io.ReadCloser, length int64, app string) error {
log := appctx.GetLogger(ctx)
- log.Info().Str("func", "PUTFile").Str("remoteuser", remoteuser).Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", urlpath).Int64("length", length).Msg("")
+ log.Info().Str("func", "PUTFile").Str("remoteuser", remoteuser).Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", urlpath).Int64("length", length).Str("app", app).Msg("")
// Now send the req and see what happens
finalurl, err := c.buildFullURL(urlpath, auth)
@@ -376,6 +380,9 @@ func (c *EOSHTTPClient) PUTFile(ctx context.Context, remoteuser string, auth eos
return err
}
+ if app != "" {
+ req.Header.Set("app", app)
+ }
req.Close = true
ntries := 0
diff --git a/pkg/errtypes/errtypes.go b/pkg/errtypes/errtypes.go
index 119bc7f8a9..f67f7a452e 100644
--- a/pkg/errtypes/errtypes.go
+++ b/pkg/errtypes/errtypes.go
@@ -94,6 +94,14 @@ func (e BadRequest) Error() string { return "error: bad request: " + string(e) }
// IsBadRequest implements the IsBadRequest interface.
func (e BadRequest) IsBadRequest() {}
+// Conflict is the error to use when the server found a conflict when processing the request (e.g. with an existing lock).
+type Conflict string
+
+func (e Conflict) Error() string { return "error: conflict: " + string(e) }
+
+// IsConflict implements the IsConflict interface.
+func (e Conflict) IsConflict() {}
+
// ChecksumMismatch is the error to use when the sent hash does not match the calculated hash.
type ChecksumMismatch string
diff --git a/pkg/ocm/invite/repository/nextcloud/nextcloud.go b/pkg/ocm/invite/repository/nextcloud/nextcloud.go
index eb6519a513..40e7d7c0db 100644
--- a/pkg/ocm/invite/repository/nextcloud/nextcloud.go
+++ b/pkg/ocm/invite/repository/nextcloud/nextcloud.go
@@ -159,7 +159,7 @@ func (c *Client) doPostToken(token string, initiator string, description string,
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
- return false, fmt.Errorf("Unexpected response code from EFSS API: " + strconv.Itoa(resp.StatusCode))
+ return false, fmt.Errorf("Unexpected response code from EFSS API: %s", strconv.Itoa(resp.StatusCode))
}
return true, nil
}
@@ -185,7 +185,7 @@ func (c *Client) doGetToken(token string) (*apiToken, error) {
}
if resp.StatusCode != http.StatusOK {
- return nil, fmt.Errorf("Unexpected response code from API: " + strconv.Itoa(resp.StatusCode))
+ return nil, fmt.Errorf("Unexpected response code from API: %s", strconv.Itoa(resp.StatusCode))
}
result := &apiToken{}
@@ -218,7 +218,7 @@ func (c *Client) doGetAllTokens(initiator string) ([]*apiToken, error) {
}
if resp.StatusCode != http.StatusOK {
- return nil, fmt.Errorf("Unexpected response code from API: " + strconv.Itoa(resp.StatusCode))
+ return nil, fmt.Errorf("Unexpected response code from API: %s", strconv.Itoa(resp.StatusCode))
}
result := []*apiToken{}
@@ -257,7 +257,7 @@ func (c *Client) doPostRemoteUser(initiator string, opaqueUserID string, idp str
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
- return false, fmt.Errorf("Unexpected response code from EFSS API: " + strconv.Itoa(resp.StatusCode))
+ return false, fmt.Errorf("Unexpected response code from EFSS API: %s", strconv.Itoa(resp.StatusCode))
}
return true, nil
}
@@ -282,7 +282,7 @@ func (c *Client) doGetRemoteUser(initiator string, opaqueUserID string, idp stri
}
if resp.StatusCode != http.StatusOK {
- return nil, fmt.Errorf("Unexpected response code from API: " + strconv.Itoa(resp.StatusCode))
+ return nil, fmt.Errorf("Unexpected response code from API: %s", strconv.Itoa(resp.StatusCode))
}
result := &apiOCMUser{}
@@ -315,7 +315,7 @@ func (c *Client) doGetAllRemoteUsers(initiator string, search string) ([]*apiOCM
}
if resp.StatusCode != http.StatusOK {
- return nil, fmt.Errorf("Unexpected response code from API: " + strconv.Itoa(resp.StatusCode))
+ return nil, fmt.Errorf("Unexpected response code from API: %s", strconv.Itoa(resp.StatusCode))
}
result := []*apiOCMUser{}
diff --git a/pkg/ocm/share/repository/nextcloud/nextcloud.go b/pkg/ocm/share/repository/nextcloud/nextcloud.go
index b70f48b529..98d379ca59 100644
--- a/pkg/ocm/share/repository/nextcloud/nextcloud.go
+++ b/pkg/ocm/share/repository/nextcloud/nextcloud.go
@@ -483,7 +483,7 @@ func (sm *Manager) do(ctx context.Context, a Action, username string) (int, []by
log.Info().Int("status", resp.StatusCode).Msgf("sent request to EFSS API, response: %s", body)
if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
- return 0, nil, fmt.Errorf("Unexpected response from EFSS API: " + strconv.Itoa(resp.StatusCode))
+ return 0, nil, fmt.Errorf("Unexpected response from EFSS API: %s", strconv.Itoa(resp.StatusCode))
}
return resp.StatusCode, body, nil
}
diff --git a/pkg/ocm/share/repository/nextcloud/nextcloud_test.go b/pkg/ocm/share/repository/nextcloud/nextcloud_test.go
index 72b5b7a86a..1273dc944f 100644
--- a/pkg/ocm/share/repository/nextcloud/nextcloud_test.go
+++ b/pkg/ocm/share/repository/nextcloud/nextcloud_test.go
@@ -234,16 +234,10 @@ var _ = Describe("Nextcloud", func() {
// Ctime: &types.Timestamp{
// Seconds: 1234567890,
// Nanos: 0,
- // XXX_NoUnkeyedLiteral: struct{}{},
- // XXX_unrecognized: nil,
- // XXX_sizecache: 0,
// },
// Mtime: &types.Timestamp{
// Seconds: 1234567890,
// Nanos: 0,
- // XXX_NoUnkeyedLiteral: struct{}{},
- // XXX_unrecognized: nil,
- // XXX_sizecache: 0,
// },
// }))
// checkCalled(called, `POST /apps/sciencemesh/~tester/api/ocm/addReceivedShare {"md":{"opaque_id":"fileid-/some/path"},"g":{"grantee":{"Id":{"UserId":{"idp":"0.0.0.0:19000","opaque_id":"f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c","type":1}}},"permissions":{"permissions":{"get_path":true}}},"provider_domain":"cern.ch","resource_type":"file","provider_id":2,"owner_opaque_id":"einstein","owner_display_name":"Albert Einstein","protocol":{"name":"webdav","options":{"sharedSecret":"secret","permissions":"webdav-property"}}}`)
@@ -294,18 +288,12 @@ var _ = Describe("Nextcloud", func() {
ocmshare.NewTransferAccessMethod(),
},
Ctime: &types.Timestamp{
- Seconds: 1234567890,
- Nanos: 0,
- XXX_NoUnkeyedLiteral: struct{}{},
- XXX_unrecognized: nil,
- XXX_sizecache: 0,
+ Seconds: 1234567890,
+ Nanos: 0,
},
Mtime: &types.Timestamp{
- Seconds: 1234567890,
- Nanos: 0,
- XXX_NoUnkeyedLiteral: struct{}{},
- XXX_unrecognized: nil,
- XXX_sizecache: 0,
+ Seconds: 1234567890,
+ Nanos: 0,
},
ShareType: ocm.ShareType_SHARE_TYPE_USER,
Token: "some-token",
@@ -370,16 +358,10 @@ var _ = Describe("Nextcloud", func() {
// Ctime: &types.Timestamp{
// Seconds: 1234567890,
// Nanos: 0,
- // XXX_NoUnkeyedLiteral: struct{}{},
- // XXX_unrecognized: nil,
- // XXX_sizecache: 0,
// },
// Mtime: &types.Timestamp{
// Seconds: 1234567890,
// Nanos: 0,
- // XXX_NoUnkeyedLiteral: struct{}{},
- // XXX_unrecognized: nil,
- // XXX_sizecache: 0,
// },
// }))
// checkCalled(called, `POST /apps/sciencemesh/~tester/api/ocm/UpdateShare {"ref":{"Spec":{"Id":{"opaque_id":"some-share-id"}}},"p":{"permissions":{"add_grant":true,"create_container":true,"delete":true,"get_path":true,"get_quota":true,"initiate_file_download":true,"initiate_file_upload":true,"list_grants":true,"list_container":true,"list_file_versions":true,"list_recycle":true,"move":true,"remove_grant":true,"purge_recycle":true,"restore_file_version":true,"restore_recycle_item":true,"stat":true,"update_grant":true,"deny_grant":true}}}`)
@@ -431,18 +413,12 @@ var _ = Describe("Nextcloud", func() {
OpaqueId: "f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c",
},
Ctime: &types.Timestamp{
- Seconds: 1234567890,
- Nanos: 0,
- XXX_NoUnkeyedLiteral: struct{}{},
- XXX_unrecognized: nil,
- XXX_sizecache: 0,
+ Seconds: 1234567890,
+ Nanos: 0,
},
Mtime: &types.Timestamp{
- Seconds: 1234567890,
- Nanos: 0,
- XXX_NoUnkeyedLiteral: struct{}{},
- XXX_unrecognized: nil,
- XXX_sizecache: 0,
+ Seconds: 1234567890,
+ Nanos: 0,
},
ShareType: ocm.ShareType_SHARE_TYPE_USER,
AccessMethods: []*ocm.AccessMethod{
@@ -487,18 +463,12 @@ var _ = Describe("Nextcloud", func() {
OpaqueId: "f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c",
},
Ctime: &types.Timestamp{
- Seconds: 1234567890,
- Nanos: 0,
- XXX_NoUnkeyedLiteral: struct{}{},
- XXX_unrecognized: nil,
- XXX_sizecache: 0,
+ Seconds: 1234567890,
+ Nanos: 0,
},
Mtime: &types.Timestamp{
- Seconds: 1234567890,
- Nanos: 0,
- XXX_NoUnkeyedLiteral: struct{}{},
- XXX_unrecognized: nil,
- XXX_sizecache: 0,
+ Seconds: 1234567890,
+ Nanos: 0,
},
ShareType: ocm.ShareType_SHARE_TYPE_USER,
ResourceType: provider.ResourceType_RESOURCE_TYPE_FILE,
@@ -551,18 +521,12 @@ var _ = Describe("Nextcloud", func() {
OpaqueId: "f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c",
},
Ctime: &types.Timestamp{
- Seconds: 1234567890,
- Nanos: 0,
- XXX_NoUnkeyedLiteral: struct{}{},
- XXX_unrecognized: nil,
- XXX_sizecache: 0,
+ Seconds: 1234567890,
+ Nanos: 0,
},
Mtime: &types.Timestamp{
- Seconds: 1234567890,
- Nanos: 0,
- XXX_NoUnkeyedLiteral: struct{}{},
- XXX_unrecognized: nil,
- XXX_sizecache: 0,
+ Seconds: 1234567890,
+ Nanos: 0,
},
ShareType: ocm.ShareType_SHARE_TYPE_USER,
ResourceType: provider.ResourceType_RESOURCE_TYPE_FILE,
@@ -610,18 +574,12 @@ var _ = Describe("Nextcloud", func() {
Type: userpb.UserType_USER_TYPE_PRIMARY,
},
Ctime: &types.Timestamp{
- Seconds: 1234567890,
- Nanos: 0,
- XXX_NoUnkeyedLiteral: struct{}{},
- XXX_unrecognized: nil,
- XXX_sizecache: 0,
+ Seconds: 1234567890,
+ Nanos: 0,
},
Mtime: &types.Timestamp{
- Seconds: 1234567890,
- Nanos: 0,
- XXX_NoUnkeyedLiteral: struct{}{},
- XXX_unrecognized: nil,
- XXX_sizecache: 0,
+ Seconds: 1234567890,
+ Nanos: 0,
},
ShareType: ocm.ShareType_SHARE_TYPE_USER,
State: ocm.ShareState_SHARE_STATE_ACCEPTED,
@@ -652,18 +610,12 @@ var _ = Describe("Nextcloud", func() {
OpaqueId: "f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c",
},
Ctime: &types.Timestamp{
- Seconds: 1234567890,
- Nanos: 0,
- XXX_NoUnkeyedLiteral: struct{}{},
- XXX_unrecognized: nil,
- XXX_sizecache: 0,
+ Seconds: 1234567890,
+ Nanos: 0,
},
Mtime: &types.Timestamp{
- Seconds: 1234567890,
- Nanos: 0,
- XXX_NoUnkeyedLiteral: struct{}{},
- XXX_unrecognized: nil,
- XXX_sizecache: 0,
+ Seconds: 1234567890,
+ Nanos: 0,
},
ShareType: ocm.ShareType_SHARE_TYPE_USER,
ResourceType: provider.ResourceType_RESOURCE_TYPE_FILE,
diff --git a/pkg/ocm/share/repository/sql/sql_test.go b/pkg/ocm/share/repository/sql/sql_test.go
index fa7683c1d9..029d89d745 100644
--- a/pkg/ocm/share/repository/sql/sql_test.go
+++ b/pkg/ocm/share/repository/sql/sql_test.go
@@ -34,6 +34,7 @@ import (
typesv1beta1 "github.com/cs3org/go-cs3apis/cs3/types/v1beta1"
"github.com/cs3org/reva/internal/http/services/owncloud/ocs/conversions"
"google.golang.org/genproto/protobuf/field_mask"
+ "google.golang.org/protobuf/proto"
"google.golang.org/protobuf/types/known/fieldmaskpb"
"github.com/cs3org/reva/pkg/ocm/share"
@@ -632,7 +633,7 @@ func TestGetShare(t *testing.T) {
}
if tt.err == nil {
- if !reflect.DeepEqual(got, tt.expected) {
+ if !proto.Equal(got, tt.expected) {
t.Fatalf("shares do not match. got=%+v expected=%+v", render.AsCode(got), render.AsCode(tt.expected))
}
}
diff --git a/pkg/ocm/storage/outcoming/ocm.go b/pkg/ocm/storage/outcoming/ocm.go
index ac80120f7c..b771106f2d 100644
--- a/pkg/ocm/storage/outcoming/ocm.go
+++ b/pkg/ocm/storage/outcoming/ocm.go
@@ -32,8 +32,9 @@ import (
rpcv1beta1 "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1"
ocmv1beta1 "github.com/cs3org/go-cs3apis/cs3/sharing/ocm/v1beta1"
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
- typepb "github.com/cs3org/go-cs3apis/cs3/types/v1beta1"
+ typespb "github.com/cs3org/go-cs3apis/cs3/types/v1beta1"
"github.com/cs3org/reva/internal/http/services/datagateway"
+ "github.com/cs3org/reva/internal/http/services/owncloud/ocdav"
"github.com/cs3org/reva/internal/http/services/owncloud/ocs/conversions"
"github.com/cs3org/reva/pkg/appctx"
@@ -396,14 +397,19 @@ func getUploadProtocol(protocols []*gateway.FileUploadProtocol, protocol string)
return "", "", false
}
-func (d *driver) Upload(ctx context.Context, ref *provider.Reference, content io.ReadCloser) error {
+func (d *driver) Upload(ctx context.Context, ref *provider.Reference, content io.ReadCloser, metadata map[string]string) error {
share, rel, err := d.shareAndRelativePathFromRef(ctx, ref)
if err != nil {
return err
}
+ if metadata == nil {
+ metadata = map[string]string{}
+ }
return d.unwrappedOpFromShareCreator(ctx, share, rel, func(ctx context.Context, newRef *provider.Reference) error {
- initRes, err := d.gateway.InitiateFileUpload(ctx, &provider.InitiateFileUploadRequest{Ref: newRef})
+ initRes, err := d.gateway.InitiateFileUpload(ctx, &provider.InitiateFileUploadRequest{
+ Ref: newRef,
+ LockId: metadata["lockid"]})
switch {
case err != nil:
return err
@@ -422,6 +428,12 @@ func (d *driver) Upload(ctx context.Context, ref *provider.Reference, content io
}
httpReq.Header.Set(datagateway.TokenTransportHeader, token)
+ if lockid := metadata["lockid"]; lockid != "" {
+ httpReq.Header.Set(ocdav.HeaderLockID, lockid)
+ }
+ if lockholder := metadata["lockholder"]; lockholder != "" {
+ httpReq.Header.Set(ocdav.HeaderLockHolder, lockholder)
+ }
httpRes, err := httpclient.New().Do(httpReq)
if err != nil {
@@ -673,7 +685,7 @@ func (d *driver) RestoreRevision(ctx context.Context, ref *provider.Reference, k
return errtypes.NotSupported("operation not supported")
}
-func (d *driver) ListRecycle(ctx context.Context, basePath, key, relativePath string, from, to *typepb.Timestamp) ([]*provider.RecycleItem, error) {
+func (d *driver) ListRecycle(ctx context.Context, basePath, key, relativePath string, from, to *typespb.Timestamp) ([]*provider.RecycleItem, error) {
return nil, errtypes.NotSupported("operation not supported")
}
diff --git a/pkg/ocm/storage/received/ocm.go b/pkg/ocm/storage/received/ocm.go
index 89e73ef29b..75a0f38ff6 100644
--- a/pkg/ocm/storage/received/ocm.go
+++ b/pkg/ocm/storage/received/ocm.go
@@ -285,7 +285,7 @@ func (d *driver) InitiateUpload(ctx context.Context, ref *provider.Reference, _
}, nil
}
-func (d *driver) Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser) error {
+func (d *driver) Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser, _ map[string]string) error {
client, _, rel, err := d.webdavClient(ctx, ref)
if err != nil {
return err
diff --git a/pkg/rgrpc/todo/pool/pool.go b/pkg/rgrpc/todo/pool/pool.go
index c78f749ca6..c6bf42c2c9 100644
--- a/pkg/rgrpc/todo/pool/pool.go
+++ b/pkg/rgrpc/todo/pool/pool.go
@@ -83,7 +83,7 @@ var (
// NewConn creates a new connection to a grpc server
// TODO(labkode): make grpc tls configurable.
func NewConn(options Options) (*grpc.ClientConn, error) {
- conn, err := grpc.Dial(
+ conn, err := grpc.NewClient(
options.Endpoint,
grpc.WithTransportCredentials(insecure.NewCredentials()),
grpc.WithDefaultCallOptions(
diff --git a/pkg/rhttp/datatx/manager/simple/simple.go b/pkg/rhttp/datatx/manager/simple/simple.go
index 40bbd3104e..a776ba3f7b 100644
--- a/pkg/rhttp/datatx/manager/simple/simple.go
+++ b/pkg/rhttp/datatx/manager/simple/simple.go
@@ -23,6 +23,7 @@ import (
"net/http"
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
+ "github.com/cs3org/reva/internal/http/services/owncloud/ocdav"
"github.com/cs3org/reva/pkg/appctx"
"github.com/cs3org/reva/pkg/errtypes"
"github.com/cs3org/reva/pkg/rhttp/datatx"
@@ -75,8 +76,15 @@ func (m *manager) Handler(fs storage.FS) (http.Handler, error) {
defer r.Body.Close()
ref := &provider.Reference{Path: fn}
+ metadata := map[string]string{}
+ if lockid := r.Header.Get(ocdav.HeaderLockID); lockid != "" {
+ metadata["lockid"] = lockid
+ }
+ if lockholder := r.Header.Get(ocdav.HeaderLockHolder); lockholder != "" {
+ metadata["lockholder"] = lockholder
+ }
- err := fs.Upload(ctx, ref, r.Body)
+ err := fs.Upload(ctx, ref, r.Body, metadata)
switch v := err.(type) {
case nil:
w.WriteHeader(http.StatusOK)
@@ -92,6 +100,8 @@ func (m *manager) Handler(fs storage.FS) (http.Handler, error) {
w.WriteHeader(http.StatusUnauthorized)
case errtypes.InsufficientStorage:
w.WriteHeader(http.StatusInsufficientStorage)
+ case errtypes.Conflict:
+ w.WriteHeader(http.StatusConflict)
default:
sublog.Error().Err(v).Msg("error uploading file")
w.WriteHeader(http.StatusInternalServerError)
diff --git a/pkg/rhttp/datatx/manager/spaces/spaces.go b/pkg/rhttp/datatx/manager/spaces/spaces.go
index 07a346d32e..ee87211026 100644
--- a/pkg/rhttp/datatx/manager/spaces/spaces.go
+++ b/pkg/rhttp/datatx/manager/spaces/spaces.go
@@ -25,6 +25,7 @@ import (
"strings"
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
+ "github.com/cs3org/reva/internal/http/services/owncloud/ocdav"
"github.com/cs3org/reva/pkg/appctx"
"github.com/cs3org/reva/pkg/errtypes"
"github.com/cs3org/reva/pkg/rhttp/datatx"
@@ -96,7 +97,15 @@ func (m *manager) Handler(fs storage.FS) (http.Handler, error) {
ResourceId: &provider.ResourceId{StorageId: storageid, OpaqueId: opaqeid},
Path: fn,
}
- err = fs.Upload(ctx, ref, r.Body)
+ metadata := map[string]string{}
+ if lockid := r.Header.Get(ocdav.HeaderLockID); lockid != "" {
+ metadata["lockid"] = lockid
+ }
+ if lockholder := r.Header.Get(ocdav.HeaderLockHolder); lockholder != "" {
+ metadata["lockholder"] = lockholder
+ }
+
+ err = fs.Upload(ctx, ref, r.Body, metadata)
switch v := err.(type) {
case nil:
w.WriteHeader(http.StatusOK)
@@ -112,6 +121,8 @@ func (m *manager) Handler(fs storage.FS) (http.Handler, error) {
w.WriteHeader(http.StatusUnauthorized)
case errtypes.InsufficientStorage:
w.WriteHeader(http.StatusInsufficientStorage)
+ case errtypes.Conflict:
+ w.WriteHeader(http.StatusConflict)
default:
sublog.Error().Err(v).Msg("error uploading file")
w.WriteHeader(http.StatusInternalServerError)
diff --git a/pkg/storage/fs/cephfs/cephfs.go b/pkg/storage/fs/cephfs/cephfs.go
index 1f32df6bb2..83b13495dc 100644
--- a/pkg/storage/fs/cephfs/cephfs.go
+++ b/pkg/storage/fs/cephfs/cephfs.go
@@ -48,14 +48,8 @@ import (
)
const (
- xattrTrustedNs = "trusted."
- xattrEID = xattrTrustedNs + "eid"
- xattrMd5 = xattrTrustedNs + "checksum"
- xattrMd5ts = xattrTrustedNs + "checksumTS"
- xattrRef = xattrTrustedNs + "ref"
- xattrUserNs = "user."
- snap = ".snap"
- xattrLock = xattrUserNs + "reva.lockpayload"
+ xattrUserNs = "user."
+ xattrLock = xattrUserNs + "reva.lockpayload"
)
type cephfs struct {
@@ -82,19 +76,9 @@ func New(ctx context.Context, m map[string]interface{}) (fs storage.FS, err erro
return nil, errors.New("cephfs: can't create caches")
}
- adminConn := newAdminConn(&o)
- if adminConn == nil {
- return nil, errors.Wrap(err, "cephfs: Couldn't create admin connections")
- }
-
- for _, dir := range []string{o.ShadowFolder, o.UploadFolder} {
- _, err := adminConn.adminMount.Statx(dir, goceph.StatxMask(goceph.StatxIno), 0)
- if err != nil {
- err = adminConn.adminMount.MakeDir(dir, dirPermFull)
- if err != nil && err.Error() != errFileExists {
- return nil, errors.New("cephfs: can't initialise system dir " + dir + ":" + err.Error())
- }
- }
+ adminConn, err := newAdminConn(&o)
+ if err != nil {
+ return nil, errors.Wrap(err, "cephfs: couldn't create admin connections")
}
return &cephfs{
@@ -105,27 +89,30 @@ func New(ctx context.Context, m map[string]interface{}) (fs storage.FS, err erro
}
func (fs *cephfs) GetHome(ctx context.Context) (string, error) {
- if fs.conf.DisableHome {
- return "", errtypes.NotSupported("cephfs: GetHome() home supported disabled")
- }
-
- user := fs.makeUser(ctx)
-
- return user.home, nil
+ log := appctx.GetLogger(ctx)
+ mount := fs.getMount(ctx)
+ log.Debug().Interface("mount", mount).Msg("GetHome")
+ return mount.GetHome(), nil
}
func (fs *cephfs) CreateHome(ctx context.Context) (err error) {
- if fs.conf.DisableHome {
- return errtypes.NotSupported("cephfs: GetHome() home supported disabled")
- }
+ log := appctx.GetLogger(ctx)
user := fs.makeUser(ctx)
+ log.Debug().Interface("user", user).Msg("CreateHome for user")
- // Stop createhome from running the whole thing because it is called multiple times
- if _, err = fs.adminConn.adminMount.Statx(user.home, goceph.StatxMode, 0); err == nil {
- return
+ // Skip home creation if the directory already exists.
+ // We do not check for all necessary attributes, only for the existence of the directory.
+ stat, err := fs.adminConn.adminMount.Statx(user.home, goceph.StatxMode, 0)
+ if err != nil {
+ return errors.Wrap(err, "error stating user home when trying to create it")
}
+ log.Debug().Interface("stat", stat).Msgf("home is %s")
+
+ // TODO(labkode): for now we always try to create the home directory even if it exists.
+ // One needs to check for "no such of file or directory" error to short-cut.
+
err = walkPath(user.home, func(path string) error {
return fs.adminConn.adminMount.MakeDir(path, fs.conf.DirPerms)
}, false)
@@ -143,75 +130,57 @@ func (fs *cephfs) CreateHome(ctx context.Context) (err error) {
return getRevaError(err)
}
- user.op(func(cv *cacheVal) {
- err = cv.mount.MakeDir(removeLeadingSlash(fs.conf.ShareFolder), fs.conf.DirPerms)
- if err != nil && err.Error() == errFileExists {
- err = nil
- }
- })
-
- return getRevaError(err)
+ return nil
}
func (fs *cephfs) CreateDir(ctx context.Context, ref *provider.Reference) error {
- user := fs.makeUser(ctx)
- path, err := user.resolveRef(ref)
+ mount := fs.getMount(ctx)
+ path, err := fs.resolveRef(ref)
if err != nil {
return getRevaError(err)
}
- user.op(func(cv *cacheVal) {
- if err = cv.mount.MakeDir(path, fs.conf.DirPerms); err != nil {
- return
- }
-
- //TODO(tmourati): Add entry id logic
- })
-
- return getRevaError(err)
+ if err = mount.MakeDir(path, fs.conf.DirPerms); err != nil {
+ return getRevaError(err)
+ }
+ return nil
}
-func (fs *cephfs) Delete(ctx context.Context, ref *provider.Reference) (err error) {
- var path string
- user := fs.makeUser(ctx)
- path, err = user.resolveRef(ref)
+func (fs *cephfs) Delete(ctx context.Context, ref *provider.Reference) error {
+ path, err := fs.resolveRef(ref)
if err != nil {
- return err
+ return getRevaError(err)
}
- user.op(func(cv *cacheVal) {
- if err = cv.mount.Unlink(path); err != nil && err.Error() == errIsADirectory {
- err = cv.mount.RemoveDir(path)
- }
-
- //TODO(tmourati): Add entry id logic
- })
+ mount := fs.getMount(ctx)
+ err = mount.Unlink(path)
+ if err != nil && err.Error() == errIsADirectory {
+ err = mount.RemoveDir(path)
+ }
- //has already been deleted by direct mount
- if err != nil && err.Error() == errNotFound {
+ if err != nil && err.Error() != errNotFound {
return nil
}
- return getRevaError(err)
+ // has already been deleted by direct mount
+ return nil
}
-func (fs *cephfs) Move(ctx context.Context, oldRef, newRef *provider.Reference) (err error) {
- var oldPath, newPath string
- user := fs.makeUser(ctx)
- if oldPath, err = user.resolveRef(oldRef); err != nil {
- return
- }
- if newPath, err = user.resolveRef(newRef); err != nil {
- return
+func (fs *cephfs) Move(ctx context.Context, oldRef, newRef *provider.Reference) error {
+ oldPath, err := fs.resolveRef(oldRef)
+ if err != nil {
+ return getRevaError(err)
}
- user.op(func(cv *cacheVal) {
- if err = cv.mount.Rename(oldPath, newPath); err != nil {
- return
- }
+ newPath, err := fs.resolveRef(newRef)
+ if err != nil {
+ return getRevaError(err)
+ }
- //TODO(tmourati): Add entry id logic, handle already moved file error
- })
+ mount := fs.getMount(ctx)
+ if err := mount.Rename(oldPath, newPath); err != nil {
+ return getRevaError(err)
+ }
// has already been moved by direct mount
if err != nil && err.Error() == errNotFound {
@@ -221,66 +190,60 @@ func (fs *cephfs) Move(ctx context.Context, oldRef, newRef *provider.Reference)
return getRevaError(err)
}
-func (fs *cephfs) GetMD(ctx context.Context, ref *provider.Reference, mdKeys []string) (ri *provider.ResourceInfo, err error) {
- var path string
- user := fs.makeUser(ctx)
+func (fs *cephfs) GetMD(ctx context.Context, ref *provider.Reference, mdKeys []string) (*provider.ResourceInfo, error) {
+ path, err := fs.resolveRef(ref)
+ if err != nil {
+ return nil, getRevaError(err)
+ }
- if path, err = user.resolveRef(ref); err != nil {
- return nil, err
+ mount := fs.getMount(ctx)
+
+ stat, err := mount.Statx(path, goceph.StatxBasicStats, 0)
+ if err != nil {
+ return nil, getRevaError(err)
}
- user.op(func(cv *cacheVal) {
- var stat Statx
- if stat, err = cv.mount.Statx(path, goceph.StatxBasicStats, 0); err != nil {
- return
- }
- ri, err = user.fileAsResourceInfo(cv, path, stat, mdKeys)
- })
+ ri, err := fs.fileAsResourceInfo(mount, path, stat, mdKeys)
+ if err != nil {
+ return nil, err
+ }
return ri, getRevaError(err)
}
-func (fs *cephfs) ListFolder(ctx context.Context, ref *provider.Reference, mdKeys []string) (files []*provider.ResourceInfo, err error) {
- var path string
- user := fs.makeUser(ctx)
- if path, err = user.resolveRef(ref); err != nil {
- return
+func (fs *cephfs) ListFolder(ctx context.Context, ref *provider.Reference, mdKeys []string) ([]*provider.ResourceInfo, error) {
+ path, err := fs.resolveRef(ref)
+ if err != nil {
+ return nil, getRevaError(err)
}
- // The user wants to access their home, create it if it doesn't exist
- if path == fs.conf.Root {
- if err = fs.CreateHome(ctx); err != nil {
- return
- }
+ mount := fs.getMount(ctx)
+ dir, err := mount.OpenDir(path)
+ if err != nil {
+ return nil, getRevaError(err)
}
+ defer closeDir(dir)
- user.op(func(cv *cacheVal) {
- var dir *goceph.Directory
- if dir, err = cv.mount.OpenDir(path); err != nil {
- return
- }
- defer closeDir(dir)
+ var entry *goceph.DirEntryPlus
+ var ri *provider.ResourceInfo
- var entry *goceph.DirEntryPlus
- var ri *provider.ResourceInfo
- for entry, err = dir.ReadDirPlus(goceph.StatxBasicStats, 0); entry != nil && err == nil; entry, err = dir.ReadDirPlus(goceph.StatxBasicStats, 0) {
- if fs.conf.HiddenDirs[entry.Name()] {
- continue
- }
+ for entry, err = dir.ReadDirPlus(goceph.StatxBasicStats, 0); entry != nil && err == nil; entry, err = dir.ReadDirPlus(goceph.StatxBasicStats, 0) {
+ if fs.conf.HiddenDirs[entry.Name()] {
+ continue
+ }
- ri, err = user.fileAsResourceInfo(cv, filepath.Join(path, entry.Name()), entry.Statx(), mdKeys)
- if ri == nil || err != nil {
- if err != nil {
- log := appctx.GetLogger(ctx)
- log.Err(err).Msg("cephfs: error in file as resource info")
- }
- err = nil
- continue
+ ri, err = fs.fileAsResourceInfo(mount, filepath.Join(path, entry.Name()), entry.Statx(), mdKeys)
+ if ri == nil || err != nil {
+ if err != nil {
+ log := appctx.GetLogger(ctx)
+ log.Err(err).Msg("cephfs: error in file as resource info")
}
-
- files = append(files, ri)
+ err = nil
+ continue
}
- })
+
+ files = append(files, ri)
+ }
return files, getRevaError(err)
}
@@ -288,15 +251,11 @@ func (fs *cephfs) ListFolder(ctx context.Context, ref *provider.Reference, mdKey
func (fs *cephfs) Download(ctx context.Context, ref *provider.Reference) (rc io.ReadCloser, err error) {
var path string
user := fs.makeUser(ctx)
- if path, err = user.resolveRef(ref); err != nil {
+ if path, err = fs.resolveRef(ref); err != nil {
return nil, errors.Wrap(err, "cephfs: error resolving ref")
}
user.op(func(cv *cacheVal) {
- if strings.HasPrefix(strings.TrimPrefix(path, user.home), fs.conf.ShareFolder) {
- err = errtypes.PermissionDenied("cephfs: cannot download under the virtual share folder")
- return
- }
rc, err = cv.mount.Open(path, os.O_RDONLY, 0)
})
@@ -304,110 +263,25 @@ func (fs *cephfs) Download(ctx context.Context, ref *provider.Reference) (rc io.
}
func (fs *cephfs) ListRevisions(ctx context.Context, ref *provider.Reference) (fvs []*provider.FileVersion, err error) {
- //TODO(tmourati): Fix entry id logic
- var path string
- user := fs.makeUser(ctx)
- if path, err = user.resolveRef(ref); err != nil {
- return nil, errors.Wrap(err, "cephfs: error resolving ref")
- }
-
- user.op(func(cv *cacheVal) {
- if strings.HasPrefix(path, removeLeadingSlash(fs.conf.ShareFolder)) {
- err = errtypes.PermissionDenied("cephfs: cannot download under the virtual share folder")
- return
- }
- var dir *goceph.Directory
- if dir, err = cv.mount.OpenDir(".snap"); err != nil {
- return
- }
- defer closeDir(dir)
-
- for d, _ := dir.ReadDir(); d != nil; d, _ = dir.ReadDir() {
- var revPath string
- var stat Statx
- var e error
-
- if strings.HasPrefix(d.Name(), ".") {
- continue
- }
-
- revPath, e = resolveRevRef(cv.mount, ref, d.Name())
- if e != nil {
- continue
- }
- stat, e = cv.mount.Statx(revPath, goceph.StatxMtime|goceph.StatxSize, 0)
- if e != nil {
- continue
- }
- fvs = append(fvs, &provider.FileVersion{
- Key: d.Name(),
- Size: stat.Size,
- Mtime: uint64(stat.Mtime.Sec),
- })
- }
- })
-
- return fvs, getRevaError(err)
+ return nil, errtypes.NotSupported("cephfs: RestoreRevision not supported")
}
func (fs *cephfs) DownloadRevision(ctx context.Context, ref *provider.Reference, key string) (file io.ReadCloser, err error) {
- //TODO(tmourati): Fix entry id logic
- user := fs.makeUser(ctx)
-
- user.op(func(cv *cacheVal) {
- var revPath string
- revPath, err = resolveRevRef(cv.mount, ref, key)
- if err != nil {
- return
- }
-
- file, err = cv.mount.Open(revPath, os.O_RDONLY, 0)
- })
-
- return file, getRevaError(err)
+ return nil, errtypes.NotSupported("cephfs: RestoreRevision not supported")
}
func (fs *cephfs) RestoreRevision(ctx context.Context, ref *provider.Reference, key string) (err error) {
- //TODO(tmourati): Fix entry id logic
- var path string
- user := fs.makeUser(ctx)
- if path, err = user.resolveRef(ref); err != nil {
- return errors.Wrap(err, "cephfs: error resolving ref")
- }
-
- user.op(func(cv *cacheVal) {
- var revPath string
- if revPath, err = resolveRevRef(cv.mount, ref, key); err != nil {
- err = errors.Wrap(err, "cephfs: error resolving revision ref "+ref.String())
- return
- }
-
- var src, dst *goceph.File
- if src, err = cv.mount.Open(revPath, os.O_RDONLY, 0); err != nil {
- return
- }
- defer closeFile(src)
-
- if dst, err = cv.mount.Open(path, os.O_WRONLY|os.O_TRUNC, 0); err != nil {
- return
- }
- defer closeFile(dst)
-
- _, err = io.Copy(dst, src)
- })
-
- return getRevaError(err)
+ return errtypes.NotSupported("cephfs: RestoreRevision not supported")
}
func (fs *cephfs) GetPathByID(ctx context.Context, id *provider.ResourceId) (str string, err error) {
- //TODO(tmourati): Add entry id logic
- return "", errtypes.NotSupported("cephfs: entry IDs currently not supported")
+ return "", errtypes.NotSupported("cephfs: ids currently not supported")
}
func (fs *cephfs) AddGrant(ctx context.Context, ref *provider.Reference, g *provider.Grant) (err error) {
var path string
user := fs.makeUser(ctx)
- if path, err = user.resolveRef(ref); err != nil {
+ if path, err = fs.resolveRef(ref); err != nil {
return
}
@@ -421,7 +295,7 @@ func (fs *cephfs) AddGrant(ctx context.Context, ref *provider.Reference, g *prov
func (fs *cephfs) RemoveGrant(ctx context.Context, ref *provider.Reference, g *provider.Grant) (err error) {
var path string
user := fs.makeUser(ctx)
- if path, err = user.resolveRef(ref); err != nil {
+ if path, err = fs.resolveRef(ref); err != nil {
return
}
@@ -435,7 +309,7 @@ func (fs *cephfs) RemoveGrant(ctx context.Context, ref *provider.Reference, g *p
func (fs *cephfs) UpdateGrant(ctx context.Context, ref *provider.Reference, g *provider.Grant) (err error) {
var path string
user := fs.makeUser(ctx)
- if path, err = user.resolveRef(ref); err != nil {
+ if path, err = fs.resolveRef(ref); err != nil {
return
}
@@ -449,7 +323,7 @@ func (fs *cephfs) UpdateGrant(ctx context.Context, ref *provider.Reference, g *p
func (fs *cephfs) DenyGrant(ctx context.Context, ref *provider.Reference, g *provider.Grantee) (err error) {
var path string
user := fs.makeUser(ctx)
- if path, err = user.resolveRef(ref); err != nil {
+ if path, err = fs.resolveRef(ref); err != nil {
return
}
@@ -464,7 +338,7 @@ func (fs *cephfs) DenyGrant(ctx context.Context, ref *provider.Reference, g *pro
func (fs *cephfs) ListGrants(ctx context.Context, ref *provider.Reference) (glist []*provider.Grant, err error) {
var path string
user := fs.makeUser(ctx)
- if path, err = user.resolveRef(ref); err != nil {
+ if path, err = fs.resolveRef(ref); err != nil {
return
}
@@ -503,24 +377,7 @@ func (fs *cephfs) GetQuota(ctx context.Context, ref *provider.Reference) (total
}
func (fs *cephfs) CreateReference(ctx context.Context, path string, targetURI *url.URL) (err error) {
- user := fs.makeUser(ctx)
-
- user.op(func(cv *cacheVal) {
- if !strings.HasPrefix(strings.TrimPrefix(path, user.home), fs.conf.ShareFolder) {
- err = errors.New("cephfs: can't create reference outside a share folder")
- } else {
- err = cv.mount.MakeDir(path, fs.conf.DirPerms)
- }
- })
- if err != nil {
- return getRevaError(err)
- }
-
- user.op(func(cv *cacheVal) {
- err = cv.mount.SetXattr(path, xattrRef, []byte(targetURI.String()), 0)
- })
-
- return getRevaError(err)
+ return errors.New("error: CreateReference not implemented")
}
func (fs *cephfs) Shutdown(ctx context.Context) (err error) {
@@ -536,7 +393,7 @@ func (fs *cephfs) Shutdown(ctx context.Context) (err error) {
func (fs *cephfs) SetArbitraryMetadata(ctx context.Context, ref *provider.Reference, md *provider.ArbitraryMetadata) (err error) {
var path string
user := fs.makeUser(ctx)
- if path, err = user.resolveRef(ref); err != nil {
+ if path, err = fs.resolveRef(ref); err != nil {
return err
}
@@ -558,7 +415,7 @@ func (fs *cephfs) SetArbitraryMetadata(ctx context.Context, ref *provider.Refere
func (fs *cephfs) UnsetArbitraryMetadata(ctx context.Context, ref *provider.Reference, keys []string) (err error) {
var path string
user := fs.makeUser(ctx)
- if path, err = user.resolveRef(ref); err != nil {
+ if path, err = fs.resolveRef(ref); err != nil {
return err
}
@@ -579,7 +436,7 @@ func (fs *cephfs) UnsetArbitraryMetadata(ctx context.Context, ref *provider.Refe
func (fs *cephfs) TouchFile(ctx context.Context, ref *provider.Reference) error {
user := fs.makeUser(ctx)
- path, err := user.resolveRef(ref)
+ path, err := fs.resolveRef(ref)
if err != nil {
return getRevaError(err)
}
@@ -590,8 +447,6 @@ func (fs *cephfs) TouchFile(ctx context.Context, ref *provider.Reference) error
if file, err = cv.mount.Open(path, os.O_CREATE|os.O_WRONLY, fs.conf.FilePerms); err != nil {
return
}
-
- //TODO(tmourati): Add entry id logic
})
return getRevaError(err)
@@ -654,7 +509,7 @@ func decodeLock(content string) (*provider.Lock, error) {
func (fs *cephfs) SetLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error {
user := fs.makeUser(ctx)
- path, err := user.resolveRef(ref)
+ path, err := fs.resolveRef(ref)
if err != nil {
return getRevaError(err)
}
@@ -689,7 +544,7 @@ func (fs *cephfs) SetLock(ctx context.Context, ref *provider.Reference, lock *pr
func (fs *cephfs) GetLock(ctx context.Context, ref *provider.Reference) (*provider.Lock, error) {
user := fs.makeUser(ctx)
- path, err := user.resolveRef(ref)
+ path, err := fs.resolveRef(ref)
if err != nil {
return nil, getRevaError(err)
}
@@ -785,7 +640,7 @@ func (fs *cephfs) RefreshLock(ctx context.Context, ref *provider.Reference, newL
func (fs *cephfs) Unlock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error {
user := fs.makeUser(ctx)
- path, err := user.resolveRef(ref)
+ path, err := fs.resolveRef(ref)
if err != nil {
return getRevaError(err)
}
diff --git a/pkg/storage/fs/cephfs/chunking.go b/pkg/storage/fs/cephfs/chunking.go
index a89fa23824..1b5be2b4b0 100644
--- a/pkg/storage/fs/cephfs/chunking.go
+++ b/pkg/storage/fs/cephfs/chunking.go
@@ -26,6 +26,7 @@ import (
"fmt"
"io"
"os"
+ "path"
"path/filepath"
"regexp"
"strconv"
@@ -43,11 +44,12 @@ func IsChunked(fn string) (bool, error) {
}
// ChunkBLOBInfo stores info about a particular chunk
+// example: given /users/peter/myfile.txt-chunking-1234-10-2
type ChunkBLOBInfo struct {
- Path string
- TransferID string
- TotalChunks int
- CurrentChunk int
+ Path string // example: /users/peter/myfile.txt
+ TransferID string // example: 1234
+ TotalChunks int // example: 10
+ CurrentChunk int // example: 2
}
// Not using the resource path in the chunk folder name allows uploading to
@@ -85,21 +87,22 @@ func GetChunkBLOBInfo(path string) (*ChunkBLOBInfo, error) {
// ChunkHandler manages chunked uploads, storing the chunks in a temporary directory
// until it gets the final chunk which is then returned.
type ChunkHandler struct {
- user *User
- chunkFolder string
+ user *User
+ uploadFolder string // example: /users/peter/.uploads
}
// NewChunkHandler creates a handler for chunked uploads.
func NewChunkHandler(ctx context.Context, fs *cephfs) *ChunkHandler {
- return &ChunkHandler{fs.makeUser(ctx), fs.conf.UploadFolder}
+ u := fs.makeUser(ctx)
+ return &ChunkHandler{u, path.Join(u.home, fs.conf.UploadFolder)}
}
-func (c *ChunkHandler) getChunkTempFileName() string {
+func (c *ChunkHandler) getTempFileName() string {
return fmt.Sprintf("__%d_%s", time.Now().Unix(), uuid.New().String())
}
-func (c *ChunkHandler) getChunkFolderName(i *ChunkBLOBInfo) (path string, err error) {
- path = filepath.Join(c.chunkFolder, i.uploadID())
+func (c *ChunkHandler) getAndCreateTransferFolderName(i *ChunkBLOBInfo) (path string, err error) {
+ path = filepath.Join(c.uploadFolder, i.uploadID())
c.user.op(func(cv *cacheVal) {
err = cv.mount.MakeDir(path, 0777)
})
@@ -107,6 +110,7 @@ func (c *ChunkHandler) getChunkFolderName(i *ChunkBLOBInfo) (path string, err er
return
}
+// TODO(labkode): I don't like how this function looks like, better to refactor
func (c *ChunkHandler) saveChunk(path string, r io.ReadCloser) (finish bool, chunk string, err error) {
chunkInfo, err := GetChunkBLOBInfo(path)
if err != nil {
@@ -114,10 +118,21 @@ func (c *ChunkHandler) saveChunk(path string, r io.ReadCloser) (finish bool, chu
return
}
- chunkTempFilename := c.getChunkTempFileName()
+ transferFolderName, err := c.getAndCreateTransferFolderName(chunkInfo)
+ if err != nil {
+ // TODO(labkode): skip error for now
+ // err = fmt.Errorf("error getting transfer folder anme", err)
+ return
+ }
+
+ // here we write a temporary file that will be renamed to the transfer folder
+ // with the correct sequence number filename.
+ // we do not store this before-rename temporary files inside the transfer folder
+ // to avoid errors when counting the number of chunks for finalizing the transfer.
+ tmpFilename := c.getTempFileName()
c.user.op(func(cv *cacheVal) {
var tmpFile *goceph.File
- target := filepath.Join(c.chunkFolder, chunkTempFilename)
+ target := filepath.Join(c.uploadFolder, tmpFilename)
tmpFile, err = cv.mount.Open(target, os.O_CREATE|os.O_WRONLY, c.user.fs.conf.FilePerms)
defer closeFile(tmpFile)
if err != nil {
@@ -129,15 +144,9 @@ func (c *ChunkHandler) saveChunk(path string, r io.ReadCloser) (finish bool, chu
return
}
- chunksFolderName, err := c.getChunkFolderName(chunkInfo)
- if err != nil {
- return
- }
- // c.logger.Info().Log("chunkfolder", chunksFolderName)
-
- chunkTarget := filepath.Join(chunksFolderName, strconv.Itoa(chunkInfo.CurrentChunk))
+ chunkTarget := filepath.Join(transferFolderName, strconv.Itoa(chunkInfo.CurrentChunk))
c.user.op(func(cv *cacheVal) {
- err = cv.mount.Rename(chunkTempFilename, chunkTarget)
+ err = cv.mount.Rename(tmpFilename, chunkTarget)
})
if err != nil {
return
@@ -154,7 +163,7 @@ func (c *ChunkHandler) saveChunk(path string, r io.ReadCloser) (finish bool, chu
var entry *goceph.DirEntry
var chunkFile, assembledFile *goceph.File
- dir, err = cv.mount.OpenDir(chunksFolderName)
+ dir, err = cv.mount.OpenDir(transferFolderName)
defer closeDir(dir)
for entry, err = dir.ReadDir(); entry != nil && err == nil; entry, err = dir.ReadDir() {
@@ -167,16 +176,20 @@ func (c *ChunkHandler) saveChunk(path string, r io.ReadCloser) (finish bool, chu
return
}
- chunk = filepath.Join(c.chunkFolder, c.getChunkTempFileName())
- assembledFile, err = cv.mount.Open(chunk, os.O_CREATE|os.O_WRONLY, c.user.fs.conf.FilePerms)
+ // from now on we do have all the necessary chunks,
+ // so we create a temporary file where all the chunks will be written
+ // before being renamed to the requested location, from the example: /users/peter/myfile.txt
+
+ assemblyFilename := filepath.Join(c.uploadFolder, c.getTempFileName())
+ assembledFile, err = cv.mount.Open(assemblyFilename, os.O_CREATE|os.O_WRONLY, c.user.fs.conf.FilePerms)
defer closeFile(assembledFile)
- defer deleteFile(cv.mount, chunk)
+ defer deleteFile(cv.mount, assemblyFilename)
if err != nil {
return
}
for i := 0; i < numEntries; i++ {
- target := filepath.Join(chunksFolderName, strconv.Itoa(i))
+ target := filepath.Join(transferFolderName, strconv.Itoa(i))
chunkFile, err = cv.mount.Open(target, os.O_RDONLY, 0)
if err != nil {
@@ -189,22 +202,22 @@ func (c *ChunkHandler) saveChunk(path string, r io.ReadCloser) (finish bool, chu
}
}
- // necessary approach in case assembly fails
+ // clean all the chunks that made the assembly file
for i := 0; i < numEntries; i++ {
- target := filepath.Join(chunksFolderName, strconv.Itoa(i))
+ target := filepath.Join(transferFolderName, strconv.Itoa(i))
err = cv.mount.Unlink(target)
if err != nil {
return
}
}
- _ = cv.mount.Unlink(chunksFolderName)
})
-
- return true, chunk, nil
+ return
}
// WriteChunk saves an intermediate chunk temporarily and assembles all chunks
// once the final one is received.
+// this function will return the original filename (myfile.txt) and the assemblyPath when
+// the upload is completed
func (c *ChunkHandler) WriteChunk(fn string, r io.ReadCloser) (string, string, error) {
finish, chunk, err := c.saveChunk(fn, r)
if err != nil {
diff --git a/pkg/storage/fs/cephfs/connections.go b/pkg/storage/fs/cephfs/connections.go
index 916c6b9a93..13238ce080 100644
--- a/pkg/storage/fs/cephfs/connections.go
+++ b/pkg/storage/fs/cephfs/connections.go
@@ -24,6 +24,7 @@ package cephfs
import (
"context"
"fmt"
+ "path/filepath"
"time"
"github.com/ceph/go-ceph/cephfs/admin"
@@ -31,7 +32,9 @@ import (
grouppb "github.com/cs3org/go-cs3apis/cs3/identity/group/v1beta1"
userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1"
+ "github.com/cs3org/reva/pkg/appctx"
"github.com/cs3org/reva/pkg/rgrpc/todo/pool"
+ "github.com/cs3org/reva/pkg/storage/utils/templates"
"github.com/pkg/errors"
goceph "github.com/ceph/go-ceph/cephfs"
@@ -116,21 +119,21 @@ type adminConn struct {
// radosIO *rados2.IOContext
}
-func newAdminConn(conf *Options) *adminConn {
+func newAdminConn(conf *Options) (*adminConn, error) {
rados, err := rados2.NewConnWithUser(conf.ClientID)
if err != nil {
- return nil
+ return nil, errors.Wrap(err, "error creating connection with user for client id: "+conf.ClientID)
}
if err = rados.ReadConfigFile(conf.Config); err != nil {
- return nil
+ return nil, errors.Wrapf(err, "error reading config file %s", conf.Config)
}
if err = rados.SetConfigOption("keyring", conf.Keyring); err != nil {
- return nil
+ return nil, errors.Wrapf(err, "error setting keyring conf: %s", conf.Keyring)
}
if err = rados.Connect(); err != nil {
- return nil
+ return nil, errors.Wrap(err, "error connecting to rados")
}
// TODO: May use later for file ids
@@ -166,13 +169,13 @@ func newAdminConn(conf *Options) *adminConn {
mount, err := goceph.CreateFromRados(rados)
if err != nil {
rados.Shutdown()
- return nil
+ return nil, errors.Wrap(err, "error calling CreateFromRados")
}
if err = mount.MountWithRoot(conf.Root); err != nil {
rados.Shutdown()
destroyCephConn(mount, nil)
- return nil
+ return nil, errors.Wrapf(err, "error mounting with root %s", conf.Root)
}
return &adminConn{
@@ -181,7 +184,7 @@ func newAdminConn(conf *Options) *adminConn {
mount,
rados,
// radosIO,
- }
+ }, nil
}
func newConn(user *User) *cacheVal {
@@ -213,11 +216,14 @@ func newConn(user *User) *cacheVal {
return destroyCephConn(mount, perm)
}
- if user != nil && !user.fs.conf.DisableHome {
- if err = mount.ChangeDir(user.fs.conf.Root); err != nil {
- return destroyCephConn(mount, perm)
+ // TODO(labkode): we leave the mount on the fs root
+ /*
+ if user != nil && !user.fs.conf.DisableHome {
+ if err = mount.ChangeDir(user.fs.conf.Root); err != nil {
+ return destroyCephConn(mount, perm)
+ }
}
- }
+ */
return &cacheVal{
perm: perm,
@@ -327,3 +333,21 @@ func (fs *cephfs) getGroupByOpaqueID(ctx context.Context, oid string) (*grouppb.
return getGroupResp.Group, nil
}
+
+type mount struct {
+ *goceph.MountInfo
+ userHomePath string
+}
+
+func (m *mount) GetHome() string {
+ return m.userHomePath
+}
+
+func (fs *cephfs) getMount(ctx context.Context) *mount {
+ u := appctx.ContextMustGetUser(ctx)
+ userHomePath := filepath.Join(fs.conf.Root, templates.WithUser(u, fs.conf.UserLayout))
+ m := &mount{
+ userHomePath: userHomePath,
+ }
+ return m
+}
diff --git a/pkg/storage/fs/cephfs/options.go b/pkg/storage/fs/cephfs/options.go
index c33e76eb89..a7b6149462 100644
--- a/pkg/storage/fs/cephfs/options.go
+++ b/pkg/storage/fs/cephfs/options.go
@@ -22,25 +22,19 @@
package cephfs
import (
- "path/filepath"
-
"github.com/cs3org/reva/pkg/sharedconf"
)
// Options for the cephfs module
type Options struct {
- ClientID string `mapstructure:"client_id"`
- Config string `mapstructure:"config"`
- GatewaySvc string `mapstructure:"gatewaysvc"`
- IndexPool string `mapstructure:"index_pool"`
- Keyring string `mapstructure:"keyring"`
- Root string `mapstructure:"root"`
- ShadowFolder string `mapstructure:"shadow_folder"`
- ShareFolder string `mapstructure:"share_folder"`
- UploadFolder string `mapstructure:"uploads"`
- UserLayout string `mapstructure:"user_layout"`
-
- DisableHome bool `mapstructure:"disable_home"`
+ ClientID string `mapstructure:"client_id"`
+ Config string `mapstructure:"config"`
+ GatewaySvc string `mapstructure:"gatewaysvc"`
+ IndexPool string `mapstructure:"index_pool"`
+ Keyring string `mapstructure:"keyring"`
+ Root string `mapstructure:"root"`
+ UploadFolder string `mapstructure:"uploads"`
+ UserLayout string `mapstructure:"user_layout"`
DirPerms uint32 `mapstructure:"dir_perms"`
FilePerms uint32 `mapstructure:"file_perms"`
UserQuotaBytes uint64 `mapstructure:"user_quota_bytes"`
@@ -71,27 +65,14 @@ func (c *Options) ApplyDefaults() {
}
if c.Root == "" {
- c.Root = "/home"
+ c.Root = "/cephfs"
} else {
c.Root = addLeadingSlash(c.Root)
}
- if c.ShadowFolder == "" {
- c.ShadowFolder = "/.reva_hidden"
- } else {
- c.ShadowFolder = addLeadingSlash(c.ShadowFolder)
- }
-
- if c.ShareFolder == "" {
- c.ShareFolder = "/Shares"
- } else {
- c.ShareFolder = addLeadingSlash(c.ShareFolder)
- }
-
if c.UploadFolder == "" {
c.UploadFolder = ".uploads"
}
- c.UploadFolder = filepath.Join(c.ShadowFolder, c.UploadFolder)
if c.UserLayout == "" {
c.UserLayout = "{{.Username}}"
@@ -100,7 +81,7 @@ func (c *Options) ApplyDefaults() {
c.HiddenDirs = map[string]bool{
".": true,
"..": true,
- removeLeadingSlash(c.ShadowFolder): true,
+ removeLeadingSlash(c.UploadFolder): true,
}
if c.DirPerms == 0 {
diff --git a/pkg/storage/fs/cephfs/upload.go b/pkg/storage/fs/cephfs/upload.go
index d5cc71a863..44639881a7 100644
--- a/pkg/storage/fs/cephfs/upload.go
+++ b/pkg/storage/fs/cephfs/upload.go
@@ -31,52 +31,60 @@ import (
"github.com/pkg/errors"
)
-func (fs *cephfs) Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser) error {
+func (fs *cephfs) Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser, metadata map[string]string) error {
user := fs.makeUser(ctx)
p := ref.GetPath()
+ // TODO(lopresti) validate lock metadata if present
+
ok, err := IsChunked(p)
if err != nil {
- return errors.Wrap(err, "cephfs: error checking path")
+ return errors.Wrap(err, "cephfs: error checking if path is chunked")
}
- if ok {
- var assembledFile string
- p, assembledFile, err = NewChunkHandler(ctx, fs).WriteChunk(p, r)
- if err != nil {
- return err
- }
- if p == "" {
- return errtypes.PartialContent(ref.String())
- }
+
+ if !ok {
+ var file io.WriteCloser
user.op(func(cv *cacheVal) {
- r, err = cv.mount.Open(assembledFile, os.O_RDONLY, 0)
- })
- if err != nil {
- return errors.Wrap(err, "cephfs: error opening assembled file")
- }
- defer r.Close()
- defer user.op(func(cv *cacheVal) {
- _ = cv.mount.Unlink(assembledFile)
+ file, err = cv.mount.Open(p, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, fs.conf.FilePerms)
+ if err != nil {
+ err = errors.Wrap(err, "cephfs: error opening binary file")
+ return
+ }
+ defer file.Close()
+
+ _, err = io.Copy(file, r)
+ if err != nil {
+ err = errors.Wrap(err, "cephfs: error writing to binary file")
+ return
+ }
})
+
+ return nil
}
- var file io.WriteCloser
+ // upload is chunked
+
+ var assembledFile string
+
+ // iniate the chunk handler
+ originalFilename, assembledFile, err := NewChunkHandler(ctx, fs).WriteChunk(p, r)
+ if err != nil {
+ return errors.Wrapf(err, "error writing chunk %v %v %v", p, r, assembledFile)
+ }
+ if originalFilename == "" { // means we wrote a chunk only
+ return errtypes.PartialContent(ref.String())
+ }
user.op(func(cv *cacheVal) {
- file, err = cv.mount.Open(p, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, fs.conf.FilePerms)
- if err != nil {
- err = errors.Wrap(err, "cephfs: error opening binary file")
- return
- }
- defer file.Close()
-
- _, err = io.Copy(file, r)
- if err != nil {
- err = errors.Wrap(err, "cephfs: error writing to binary file")
- return
- }
+ err = cv.mount.Rename(assembledFile, originalFilename)
+ })
+ if err != nil {
+ return errors.Wrap(err, "cephfs: error renaming assembled file")
+ }
+ defer user.op(func(cv *cacheVal) {
+ _ = cv.mount.Unlink(assembledFile)
})
+ return nil
- return err
}
func (fs *cephfs) InitiateUpload(ctx context.Context, ref *provider.Reference, uploadLength int64, metadata map[string]string) (map[string]string, error) {
diff --git a/pkg/storage/fs/cephfs/user.go b/pkg/storage/fs/cephfs/user.go
index da15b1ec45..5a7a867ef7 100644
--- a/pkg/storage/fs/cephfs/user.go
+++ b/pkg/storage/fs/cephfs/user.go
@@ -53,11 +53,8 @@ type User struct {
func (fs *cephfs) makeUser(ctx context.Context) *User {
u := appctx.ContextMustGetUser(ctx)
- home := fs.conf.Root
- if !fs.conf.DisableHome {
- home = filepath.Join(fs.conf.Root, templates.WithUser(u, fs.conf.UserLayout))
- }
-
+ // home := fs.conf.Root
+ home := filepath.Join(fs.conf.Root, templates.WithUser(u, fs.conf.UserLayout))
return &User{u, fs, ctx, home}
}
@@ -92,7 +89,7 @@ func (user *User) op(cb callBack) {
cb(val.(*cacheVal))
}
-func (user *User) fileAsResourceInfo(cv *cacheVal, path string, stat *goceph.CephStatx, mdKeys []string) (ri *provider.ResourceInfo, err error) {
+func (fs *cephfs) fileAsResourceInfo(mount *mount, path string, stat *goceph.CephStatx, mdKeys []string) (ri *provider.ResourceInfo, err error) {
var (
_type provider.ResourceType
target string
@@ -103,7 +100,7 @@ func (user *User) fileAsResourceInfo(cv *cacheVal, path string, stat *goceph.Cep
switch int(stat.Mode) & syscall.S_IFMT {
case syscall.S_IFDIR:
_type = provider.ResourceType_RESOURCE_TYPE_CONTAINER
- if buf, err = cv.mount.GetXattr(path, "ceph.dir.rbytes"); err == nil {
+ if buf, err = mount.GetXattr(path, "ceph.dir.rbytes"); err == nil {
size, err = strconv.ParseUint(string(buf), 10, 64)
} else if err.Error() == errPermissionDenied {
// Ignore permission denied errors so ListFolder does not fail because of them.
@@ -111,7 +108,7 @@ func (user *User) fileAsResourceInfo(cv *cacheVal, path string, stat *goceph.Cep
}
case syscall.S_IFLNK:
_type = provider.ResourceType_RESOURCE_TYPE_SYMLINK
- target, err = cv.mount.Readlink(path)
+ target, err = mount.Readlink(path)
case syscall.S_IFREG:
_type = provider.ResourceType_RESOURCE_TYPE_FILE
size = stat.Size
@@ -129,21 +126,19 @@ func (user *User) fileAsResourceInfo(cv *cacheVal, path string, stat *goceph.Cep
keys = map[string]bool{}
}
mx := make(map[string]string)
- if xattrs, err = cv.mount.ListXattr(path); err == nil {
+ if xattrs, err = mount.ListXattr(path); err == nil {
for _, xattr := range xattrs {
if len(mdKeys) == 0 || keys[xattr] {
- if buf, err := cv.mount.GetXattr(path, xattr); err == nil {
+ if buf, err := mount.GetXattr(path, xattr); err == nil {
mx[xattr] = string(buf)
}
}
}
}
- //TODO(tmourati): Add entry id logic here
-
var etag string
if isDir(_type) {
- rctime, _ := cv.mount.GetXattr(path, "ceph.dir.rctime")
+ rctime, _ := mount.GetXattr(path, "ceph.dir.rctime")
etag = fmt.Sprint(stat.Inode) + ":" + string(rctime)
} else {
etag = fmt.Sprint(stat.Inode) + ":" + strconv.FormatInt(stat.Ctime.Sec, 10)
@@ -154,7 +149,7 @@ func (user *User) fileAsResourceInfo(cv *cacheVal, path string, stat *goceph.Cep
Nanos: uint32(stat.Mtime.Nsec),
}
- perms := getPermissionSet(user, stat, cv.mount, path)
+ perms := getPermissionSet(user, stat, mount, path)
for key := range mx {
if !strings.HasPrefix(key, xattrUserNs) {
@@ -162,37 +157,11 @@ func (user *User) fileAsResourceInfo(cv *cacheVal, path string, stat *goceph.Cep
}
}
+ // cephfs does not provide checksums, so we cannot set it
+ // a 3rd party tool can add a checksum attribute and we can read it,
+ // if ever that is implemented.
var checksum provider.ResourceChecksum
- var md5 string
- if _type == provider.ResourceType_RESOURCE_TYPE_FILE {
- md5tsBA, err := cv.mount.GetXattr(path, xattrMd5ts) //local error inside if scope
- if err == nil {
- md5ts, _ := strconv.ParseInt(string(md5tsBA), 10, 64)
- if stat.Mtime.Sec == md5ts {
- md5BA, err := cv.mount.GetXattr(path, xattrMd5)
- if err != nil {
- md5, err = calcChecksum(path, cv.mount, stat)
- } else {
- md5 = string(md5BA)
- }
- } else {
- md5, err = calcChecksum(path, cv.mount, stat)
- }
- } else {
- md5, err = calcChecksum(path, cv.mount, stat)
- }
-
- if err != nil && err.Error() == errPermissionDenied {
- checksum.Type = provider.ResourceChecksumType_RESOURCE_CHECKSUM_TYPE_UNSET
- } else if err != nil {
- return nil, errors.New("cephfs: error calculating checksum of file")
- } else {
- checksum.Type = provider.ResourceChecksumType_RESOURCE_CHECKSUM_TYPE_MD5
- checksum.Sum = md5
- }
- } else {
- checksum.Type = provider.ResourceChecksumType_RESOURCE_CHECKSUM_TYPE_UNSET
- }
+ checksum.Type = provider.ResourceChecksumType_RESOURCE_CHECKSUM_TYPE_UNSET
var ownerID *userv1beta1.UserId
if stat.Uid != 0 {
@@ -230,13 +199,13 @@ func (user *User) fileAsResourceInfo(cv *cacheVal, path string, stat *goceph.Cep
return
}
-func (user *User) resolveRef(ref *provider.Reference) (str string, err error) {
+func (fs *cephfs) resolveRef(ref *provider.Reference) (string, error) {
if ref == nil {
- return "", fmt.Errorf("cephfs: nil reference")
+ return "", fmt.Errorf("cephfs: nil reference provided")
}
- if str = ref.GetPath(); str == "" {
- return "", errtypes.NotSupported("cephfs: entry IDs not currently supported")
+ if ref.GetPath() == "" {
+ return "", errtypes.NotSupported("cephfs: path not provided, id based refs are not supported")
}
- return
+ return ref.GetPath(), nil
}
diff --git a/pkg/storage/fs/cephfs/utils.go b/pkg/storage/fs/cephfs/utils.go
index 8649e5323b..fa868ec895 100644
--- a/pkg/storage/fs/cephfs/utils.go
+++ b/pkg/storage/fs/cephfs/utils.go
@@ -22,13 +22,7 @@
package cephfs
import (
- "crypto/md5"
- "encoding/hex"
- "fmt"
- "io"
- "os"
"path/filepath"
- "strconv"
goceph "github.com/ceph/go-ceph/cephfs"
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
@@ -74,75 +68,6 @@ func isDir(t provider.ResourceType) bool {
return t == provider.ResourceType_RESOURCE_TYPE_CONTAINER
}
-// TODO: Use when fileids are available
-/*
-func (fs *cephfs) makeFIDPath(fid string) string {
- return "" // filepath.Join(fs.conf.EIDFolder, fid) EIDFolder does not exist
-}
-
-func (fs *cephfs) makeFID(absolutePath string, inode string) (rid *provider.ResourceId, err error) {
- sum := md5.New()
- sum.Write([]byte(absolutePath))
- fid := fmt.Sprintf("%s-%s", hex.EncodeToString(sum.Sum(nil)), inode)
- rid = &provider.ResourceId{OpaqueId: fid}
-
- _ = fs.adminConn.adminMount.Link(absolutePath, fs.makeFIDPath(fid))
- _ = fs.adminConn.adminMount.SetXattr(absolutePath, xattrEID, []byte(fid), 0)
-
- return
-}
-
-func (fs *cephfs) getFIDPath(cv *cacheVal, path string) (fid string, err error) {
- var buffer []byte
- if buffer, err = cv.mount.GetXattr(path, xattrEID); err != nil {
- return
- }
-
- return fs.makeFIDPath(string(buffer)), err
-}
-*/
-
-func calcChecksum(filepath string, mt Mount, stat Statx) (checksum string, err error) {
- file, err := mt.Open(filepath, os.O_RDONLY, 0)
- defer closeFile(file)
- if err != nil {
- return
- }
- hash := md5.New()
- if _, err = io.Copy(hash, file); err != nil {
- return
- }
- checksum = hex.EncodeToString(hash.Sum(nil))
- // we don't care if they fail, the checksum will just be recalculated if an error happens
- _ = mt.SetXattr(filepath, xattrMd5ts, []byte(strconv.FormatInt(stat.Mtime.Sec, 10)), 0)
- _ = mt.SetXattr(filepath, xattrMd5, []byte(checksum), 0)
-
- return
-}
-
-func resolveRevRef(mt Mount, ref *provider.Reference, revKey string) (str string, err error) {
- var buf []byte
- if ref.GetResourceId() != nil {
- str, err = mt.Readlink(filepath.Join(snap, revKey, ref.ResourceId.OpaqueId))
- if err != nil {
- return "", fmt.Errorf("cephfs: invalid reference %+v", ref)
- }
- } else if str = ref.GetPath(); str != "" {
- buf, err = mt.GetXattr(str, xattrEID)
- if err != nil {
- return
- }
- str, err = mt.Readlink(filepath.Join(snap, revKey, string(buf)))
- if err != nil {
- return
- }
- } else {
- return "", fmt.Errorf("cephfs: empty reference %+v", ref)
- }
-
- return filepath.Join(snap, revKey, str), err
-}
-
func removeLeadingSlash(path string) string {
return filepath.Join(".", path)
}
@@ -182,6 +107,7 @@ func pathGenerator(path string, reverse bool, str chan string) {
func walkPath(path string, f func(string) error, reverse bool) (err error) {
paths := make(chan string)
+ // TODO(labkode): carefully review this, a race could happen if pathGenerator gorouting is slow
go pathGenerator(path, reverse, paths)
for path := range paths {
if path == "" {
@@ -196,55 +122,3 @@ func walkPath(path string, f func(string) error, reverse bool) (err error) {
return
}
-
-// TODO: Use when fileids are available
-/*
-func (fs *cephfs) writeIndex(oid string, value string) (err error) {
- return fs.adminConn.radosIO.WriteFull(oid, []byte(value))
-}
-
-func (fs *cephfs) removeIndex(oid string) error {
- return fs.adminConn.radosIO.Delete(oid)
-}
-
-func (fs *cephfs) resolveIndex(oid string) (fullPath string, err error) {
- var i int
- var currPath strings.Builder
- root := string(filepath.Separator)
- offset := uint64(0)
- io := fs.adminConn.radosIO
- bsize := 4096
- buffer := make([]byte, bsize)
- for {
- for { //read object
- i, err = io.Read(oid, buffer, offset)
- offset += uint64(bsize)
- currPath.Write(buffer)
- if err == nil && i >= bsize {
- buffer = buffer[:0]
- continue
- } else {
- offset = 0
- break
- }
- }
- if err != nil {
- return
- }
-
- ss := strings.SplitN(currPath.String(), string(filepath.Separator), 2)
- if len(ss) != 2 {
- if currPath.String() == root {
- return
- }
-
- return "", fmt.Errorf("cephfs: entry id is not in the form of \"parentID/entryname\"")
- }
- parentOID := ss[0]
- entryName := ss[1]
- fullPath = filepath.Join(entryName, fullPath)
- oid = parentOID
- currPath.Reset()
- }
-}
-*/
diff --git a/pkg/storage/fs/nextcloud/nextcloud.go b/pkg/storage/fs/nextcloud/nextcloud.go
index db081d3d73..e66307ca49 100644
--- a/pkg/storage/fs/nextcloud/nextcloud.go
+++ b/pkg/storage/fs/nextcloud/nextcloud.go
@@ -317,8 +317,8 @@ func (nc *StorageDriver) InitiateUpload(ctx context.Context, ref *provider.Refer
return res, err
}
-// Upload as defined in the storage.FS interface.
-func (nc *StorageDriver) Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser) error {
+// Upload as defined in the storage.FS interface. The metadata parameters (e.g. lock context) are ignored.
+func (nc *StorageDriver) Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser, _ map[string]string) error {
req, err := nc.prepareRequest(ctx, http.MethodPut, filepath.Join("/Upload/home", ref.Path), r)
if err != nil {
return err
diff --git a/pkg/storage/fs/nextcloud/nextcloud_test.go b/pkg/storage/fs/nextcloud/nextcloud_test.go
index 5ff07bdb16..8d56566ace 100644
--- a/pkg/storage/fs/nextcloud/nextcloud_test.go
+++ b/pkg/storage/fs/nextcloud/nextcloud_test.go
@@ -217,27 +217,18 @@ var _ = Describe("Nextcloud", func() {
Opaque: nil,
Type: provider.ResourceType_RESOURCE_TYPE_FILE,
Id: &provider.ResourceId{
- StorageId: "",
- OpaqueId: "fileid-/some/path",
- XXX_NoUnkeyedLiteral: struct{}{},
- XXX_unrecognized: nil,
- XXX_sizecache: 0,
+ StorageId: "",
+ OpaqueId: "fileid-/some/path",
},
Checksum: &provider.ResourceChecksum{
- Type: 0,
- Sum: "",
- XXX_NoUnkeyedLiteral: struct{}{},
- XXX_unrecognized: nil,
- XXX_sizecache: 0,
+ Type: 0,
+ Sum: "",
},
Etag: "deadbeef",
MimeType: "text/plain",
Mtime: &types.Timestamp{
- Seconds: 1234567890,
- Nanos: 0,
- XXX_NoUnkeyedLiteral: struct{}{},
- XXX_unrecognized: nil,
- XXX_sizecache: 0,
+ Seconds: 1234567890,
+ Nanos: 0,
},
Path: "/some/path",
PermissionSet: conversions.RoleFromOCSPermissions(conversions.Permissions(0)).CS3ResourcePermissions(),
@@ -247,12 +238,9 @@ var _ = Describe("Nextcloud", func() {
OpaqueId: "",
Type: 1,
},
- Target: "",
- CanonicalMetadata: nil,
- ArbitraryMetadata: nil,
- XXX_NoUnkeyedLiteral: struct{}{},
- XXX_unrecognized: nil,
- XXX_sizecache: 0,
+ Target: "",
+ CanonicalMetadata: nil,
+ ArbitraryMetadata: nil,
}))
checkCalled(called, `POST /apps/sciencemesh/~tester/api/storage/GetMD {"ref":{"resource_id":{"storage_id":"storage-id","opaque_id":"opaque-id"},"path":"/some/path"},"mdKeys":["val1","val2","val3"]}`)
})
@@ -279,27 +267,18 @@ var _ = Describe("Nextcloud", func() {
Opaque: nil,
Type: provider.ResourceType_RESOURCE_TYPE_FILE,
Id: &provider.ResourceId{
- StorageId: "",
- OpaqueId: "fileid-/some/path",
- XXX_NoUnkeyedLiteral: struct{}{},
- XXX_unrecognized: nil,
- XXX_sizecache: 0,
+ StorageId: "",
+ OpaqueId: "fileid-/some/path",
},
Checksum: &provider.ResourceChecksum{
- Type: 0,
- Sum: "",
- XXX_NoUnkeyedLiteral: struct{}{},
- XXX_unrecognized: nil,
- XXX_sizecache: 0,
+ Type: 0,
+ Sum: "",
},
Etag: "deadbeef",
MimeType: "text/plain",
Mtime: &types.Timestamp{
- Seconds: 1234567890,
- Nanos: 0,
- XXX_NoUnkeyedLiteral: struct{}{},
- XXX_unrecognized: nil,
- XXX_sizecache: 0,
+ Seconds: 1234567890,
+ Nanos: 0,
},
Path: "/some/path",
PermissionSet: conversions.RoleFromOCSPermissions(conversions.Permissions(0)).CS3ResourcePermissions(),
@@ -309,12 +288,9 @@ var _ = Describe("Nextcloud", func() {
OpaqueId: "",
Type: 1,
},
- Target: "",
- CanonicalMetadata: nil,
- ArbitraryMetadata: nil,
- XXX_NoUnkeyedLiteral: struct{}{},
- XXX_unrecognized: nil,
- XXX_sizecache: 0,
+ Target: "",
+ CanonicalMetadata: nil,
+ ArbitraryMetadata: nil,
}))
Expect(err).ToNot(HaveOccurred())
checkCalled(called, `POST /apps/sciencemesh/~tester/api/storage/ListFolder {"ref":{"resource_id":{"storage_id":"storage-id","opaque_id":"opaque-id"},"path":"/some"},"mdKeys":["val1","val2","val3"]}`)
@@ -351,7 +327,7 @@ var _ = Describe("Nextcloud", func() {
})
})
- // Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser) error
+ // Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser, metadata map[string]string) error
Describe("Upload", func() {
It("calls the Upload endpoint", func() {
nc, called, teardown := setUpNextcloudServer()
@@ -366,7 +342,7 @@ var _ = Describe("Nextcloud", func() {
}
stringReader := strings.NewReader("shiny!")
stringReadCloser := io.NopCloser(stringReader)
- err := nc.Upload(ctx, ref, stringReadCloser)
+ err := nc.Upload(ctx, ref, stringReadCloser, map[string]string{})
Expect(err).ToNot(HaveOccurred())
checkCalled(called, `PUT /apps/sciencemesh/~tester/api/storage/Upload/home/some/file/path.txt shiny!`)
})
@@ -419,13 +395,10 @@ var _ = Describe("Nextcloud", func() {
},
},
},
- Key: "version-12",
- Size: uint64(12345),
- Mtime: uint64(1234567890),
- Etag: "deadb00f",
- XXX_NoUnkeyedLiteral: struct{}{},
- XXX_unrecognized: nil,
- XXX_sizecache: 0,
+ Key: "version-12",
+ Size: uint64(12345),
+ Mtime: uint64(1234567890),
+ Etag: "deadb00f",
}))
Expect(*results[1]).To(Equal(provider.FileVersion{
Opaque: &types.Opaque{
@@ -435,13 +408,10 @@ var _ = Describe("Nextcloud", func() {
},
},
},
- Key: "asdf",
- Size: uint64(12345),
- Mtime: uint64(1234567890),
- Etag: "deadbeef",
- XXX_NoUnkeyedLiteral: struct{}{},
- XXX_unrecognized: nil,
- XXX_sizecache: 0,
+ Key: "asdf",
+ Size: uint64(12345),
+ Mtime: uint64(1234567890),
+ Etag: "deadbeef",
}))
checkCalled(called, `POST /apps/sciencemesh/~tester/api/storage/ListRevisions {"resource_id":{"storage_id":"storage-id","opaque_id":"opaque-id"},"path":"/some/path"}`)
})
@@ -505,17 +475,11 @@ var _ = Describe("Nextcloud", func() {
Opaque: &types.Opaque{},
Key: "some-deleted-version",
Ref: &provider.Reference{
- ResourceId: &provider.ResourceId{},
- Path: "/some/file.txt",
- XXX_NoUnkeyedLiteral: struct{}{},
- XXX_unrecognized: nil,
- XXX_sizecache: 0,
- },
- Size: uint64(12345),
- DeletionTime: &types.Timestamp{Seconds: uint64(1234567890)},
- XXX_NoUnkeyedLiteral: struct{}{},
- XXX_unrecognized: nil,
- XXX_sizecache: 0,
+ ResourceId: &provider.ResourceId{},
+ Path: "/some/file.txt",
+ },
+ Size: uint64(12345),
+ DeletionTime: &types.Timestamp{Seconds: uint64(1234567890)},
}))
checkCalled(called, `POST /apps/sciencemesh/~tester/api/storage/ListRecycle {"key":"asdf","path":"/some/file.txt"}`)
})
diff --git a/pkg/storage/registry/dynamic/dynamic_test.go b/pkg/storage/registry/dynamic/dynamic_test.go
index 9f62c21212..a295467890 100644
--- a/pkg/storage/registry/dynamic/dynamic_test.go
+++ b/pkg/storage/registry/dynamic/dynamic_test.go
@@ -410,7 +410,7 @@ var _ = Describe("Dynamic storage provider", func() {
Path: "/non/existent",
})
Expect(err).To(HaveOccurred())
- Expect(err).To(MatchError(errtypes.NotFound("storage provider not found for ref path:\"/non/existent\" ")))
+ Expect(err.Error()).To(Equal("error: not found: storage provider not found for ref path:\"/non/existent\""))
})
})
})
diff --git a/pkg/storage/storage.go b/pkg/storage/storage.go
index 54de8aefa1..1ce30d9142 100644
--- a/pkg/storage/storage.go
+++ b/pkg/storage/storage.go
@@ -39,7 +39,7 @@ type FS interface {
GetMD(ctx context.Context, ref *provider.Reference, mdKeys []string) (*provider.ResourceInfo, error)
ListFolder(ctx context.Context, ref *provider.Reference, mdKeys []string) ([]*provider.ResourceInfo, error)
InitiateUpload(ctx context.Context, ref *provider.Reference, uploadLength int64, metadata map[string]string) (map[string]string, error)
- Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser) error
+ Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser, metadata map[string]string) error
Download(ctx context.Context, ref *provider.Reference) (io.ReadCloser, error)
ListRevisions(ctx context.Context, ref *provider.Reference) ([]*provider.FileVersion, error)
DownloadRevision(ctx context.Context, ref *provider.Reference, key string) (io.ReadCloser, error)
diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go
index d98bde1fe5..b4860c5927 100644
--- a/pkg/storage/utils/eosfs/eosfs.go
+++ b/pkg/storage/utils/eosfs/eosfs.go
@@ -62,8 +62,10 @@ import (
)
const (
- refTargetAttrKey = "reva.target"
- lwShareAttrKey = "reva.lwshare"
+ refTargetAttrKey = "reva.target" // used as user attr to store a reference
+ lwShareAttrKey = "reva.lwshare" // used to store grants to lightweight accounts
+ lockPayloadKey = "reva.lockpayload" // used to store lock payloads
+ eosLockKey = "app.lock" // this is the key known by EOS to enforce a lock.
)
const (
@@ -73,12 +75,6 @@ const (
UserAttr
)
-// EosLockKey is the key in the xattrs known by EOS to enforce a lock.
-const EosLockKey = "app.lock"
-
-// LockPayloadKey is the key in the xattrs used to store the lock payload.
-const LockPayloadKey = "reva.lockpayload"
-
var hiddenReg = regexp.MustCompile(`\.sys\..#.`)
var eosLockReg = regexp.MustCompile(`expires:\d+,type:[a-z]+,owner:.+:.+`)
@@ -541,9 +537,9 @@ func (fs *eosfs) SetArbitraryMetadata(ctx context.Context, ref *provider.Referen
return errtypes.BadRequest(fmt.Sprintf("eosfs: key or value is empty: key:%s, value:%s", k, v))
}
- // do not allow to set a lock key attr
- if k == LockPayloadKey || k == EosLockKey {
- return errtypes.BadRequest(fmt.Sprintf("eosfs: key %s not allowed", k))
+ // do not allow to override system-reserved keys
+ if k == lockPayloadKey || k == eosLockKey || k == lwShareAttrKey || k == refTargetAttrKey {
+ return errtypes.BadRequest(fmt.Sprintf("eosfs: key %s is reserved", k))
}
attr := &eosclient.Attribute{
@@ -554,7 +550,7 @@ func (fs *eosfs) SetArbitraryMetadata(ctx context.Context, ref *provider.Referen
// TODO(labkode): SetArbitraryMetadata does not have semantics for recursivity.
// We set it to false
- err := fs.c.SetAttr(ctx, rootAuth, attr, false, false, fn)
+ err := fs.c.SetAttr(ctx, rootAuth, attr, false, false, fn, "")
if err != nil {
return errors.Wrap(err, "eosfs: error setting xattr in eos driver")
}
@@ -587,7 +583,7 @@ func (fs *eosfs) UnsetArbitraryMetadata(ctx context.Context, ref *provider.Refer
Key: k,
}
- err := fs.c.UnsetAttr(ctx, rootAuth, attr, false, fn)
+ err := fs.c.UnsetAttr(ctx, rootAuth, attr, false, fn, "")
if err != nil {
if errors.Is(err, eosclient.AttrNotExistsError) {
continue
@@ -598,18 +594,26 @@ func (fs *eosfs) UnsetArbitraryMetadata(ctx context.Context, ref *provider.Refer
return nil
}
+func (fs *eosfs) EncodeAppName(a string) string {
+ // this function returns the string to be used as EOS "app" tag, both in uploads and when handling locks;
+ // note that the GET (and PUT) operations in eosbinary.go and eoshttp.go use a `reva_eosclient::read`
+ // (resp. `write`) tag when no locks are involved.
+ r := strings.NewReplacer(" ", "_")
+ return "reva_eosclient::app_" + strings.ToLower(r.Replace(a))
+}
+
func (fs *eosfs) getLockPayloads(ctx context.Context, path string) (string, string, error) {
// sys attributes want root auth, buddy
rootauth, err := fs.getRootAuth(ctx)
if err != nil {
return "", "", err
}
- data, err := fs.c.GetAttr(ctx, rootauth, "sys."+LockPayloadKey, path)
+ data, err := fs.c.GetAttr(ctx, rootauth, "sys."+lockPayloadKey, path)
if err != nil {
return "", "", err
}
- eoslock, err := fs.c.GetAttr(ctx, rootauth, "sys."+EosLockKey, path)
+ eoslock, err := fs.c.GetAttr(ctx, rootauth, "sys."+eosLockKey, path)
if err != nil {
return "", "", err
}
@@ -617,7 +621,7 @@ func (fs *eosfs) getLockPayloads(ctx context.Context, path string) (string, stri
return data.Val, eoslock.Val, nil
}
-func (fs *eosfs) removeLockAttrs(ctx context.Context, path string) error {
+func (fs *eosfs) removeLockAttrs(ctx context.Context, path, app string) error {
rootAuth, err := fs.getRootAuth(ctx)
if err != nil {
return err
@@ -625,16 +629,16 @@ func (fs *eosfs) removeLockAttrs(ctx context.Context, path string) error {
err = fs.c.UnsetAttr(ctx, rootAuth, &eosclient.Attribute{
Type: SystemAttr,
- Key: EosLockKey,
- }, false, path)
+ Key: eosLockKey,
+ }, false, path, app)
if err != nil {
return errors.Wrap(err, "eosfs: error unsetting the eos lock")
}
err = fs.c.UnsetAttr(ctx, rootAuth, &eosclient.Attribute{
Type: SystemAttr,
- Key: LockPayloadKey,
- }, false, path)
+ Key: lockPayloadKey,
+ }, false, path, app)
if err != nil {
return errors.Wrap(err, "eosfs: error unsetting the lock payload")
}
@@ -665,9 +669,9 @@ func (fs *eosfs) getLock(ctx context.Context, user *userpb.User, path string, re
return nil, errors.Wrap(err, "eosfs: malformed lock payload")
}
- if time.Unix(int64(l.Expiration.Seconds), 0).After(time.Now()) {
+ if time.Unix(int64(l.Expiration.Seconds), 0).Before(time.Now()) {
// the lock expired
- if err := fs.removeLockAttrs(ctx, path); err != nil {
+ if err := fs.removeLockAttrs(ctx, path, fs.EncodeAppName(l.AppName)); err != nil {
return nil, err
}
return nil, errtypes.NotFound("lock not found for ref")
@@ -708,7 +712,7 @@ func (fs *eosfs) setLock(ctx context.Context, lock *provider.Lock, path string)
return err
}
- encodedLock, eosLock, err := encodeLock(lock)
+ encodedLock, eosLock, err := fs.encodeLock(lock)
if err != nil {
return errors.Wrap(err, "eosfs: error encoding lock")
}
@@ -716,12 +720,12 @@ func (fs *eosfs) setLock(ctx context.Context, lock *provider.Lock, path string)
// set eos lock
err = fs.c.SetAttr(ctx, auth, &eosclient.Attribute{
Type: SystemAttr,
- Key: EosLockKey,
+ Key: eosLockKey,
Val: eosLock,
- }, false, false, path)
+ }, false, false, path, fs.EncodeAppName(lock.AppName))
switch {
- case errors.Is(err, eosclient.AttrAlreadyExistsError):
- return errtypes.BadRequest("resource already locked")
+ case errors.Is(err, eosclient.FileIsLockedError):
+ return errtypes.Conflict("resource already locked")
case err != nil:
return errors.Wrap(err, "eosfs: error setting eos lock")
}
@@ -729,9 +733,9 @@ func (fs *eosfs) setLock(ctx context.Context, lock *provider.Lock, path string)
// set payload
err = fs.c.SetAttr(ctx, auth, &eosclient.Attribute{
Type: SystemAttr,
- Key: LockPayloadKey,
+ Key: lockPayloadKey,
Val: encodedLock,
- }, false, false, path)
+ }, false, false, path, fs.EncodeAppName(lock.AppName))
if err != nil {
return errors.Wrap(err, "eosfs: error setting lock payload")
}
@@ -826,14 +830,15 @@ func (fs *eosfs) userHasReadAccess(ctx context.Context, user *userpb.User, ref *
return resInfo.PermissionSet.InitiateFileDownload, nil
}
-func encodeLock(l *provider.Lock) (string, string, error) {
+func (fs *eosfs) encodeLock(l *provider.Lock) (string, string, error) {
data, err := json.Marshal(l)
if err != nil {
return "", "", err
}
var a string
if l.AppName != "" {
- a = l.AppName
+ // cf. upload implementation
+ a = fs.EncodeAppName(l.AppName)
} else {
a = "*"
}
@@ -974,7 +979,7 @@ func (fs *eosfs) Unlock(ctx context.Context, ref *provider.Reference, lock *prov
}
path = fs.wrap(ctx, path)
- return fs.removeLockAttrs(ctx, path)
+ return fs.removeLockAttrs(ctx, path, fs.EncodeAppName(lock.AppName))
}
func (fs *eosfs) AddGrant(ctx context.Context, ref *provider.Reference, g *provider.Grant) error {
@@ -1003,7 +1008,7 @@ func (fs *eosfs) AddGrant(ctx context.Context, ref *provider.Reference, g *provi
Key: fmt.Sprintf("%s.%s", lwShareAttrKey, eosACL.Qualifier),
Val: eosACL.Permissions,
}
- if err := fs.c.SetAttr(ctx, rootAuth, attr, false, true, fn); err != nil {
+ if err := fs.c.SetAttr(ctx, rootAuth, attr, false, true, fn, ""); err != nil {
return errors.Wrap(err, "eosfs: error adding acl for lightweight account")
}
return nil
@@ -1106,7 +1111,7 @@ func (fs *eosfs) RemoveGrant(ctx context.Context, ref *provider.Reference, g *pr
Type: SystemAttr,
Key: fmt.Sprintf("%s.%s", lwShareAttrKey, eosACL.Qualifier),
}
- if err := fs.c.UnsetAttr(ctx, rootAuth, attr, true, fn); err != nil {
+ if err := fs.c.UnsetAttr(ctx, rootAuth, attr, true, fn, ""); err != nil {
return errors.Wrap(err, "eosfs: error removing acl for lightweight account")
}
return nil
@@ -1457,6 +1462,9 @@ func (fs *eosfs) createShadowHome(ctx context.Context) error {
}
}
+ log := appctx.GetLogger(ctx)
+ log.Info().Str("home", home).Interface("user", u.Id).Msg("created shadow home")
+
return nil
}
@@ -1518,6 +1526,9 @@ func (fs *eosfs) createNominalHome(ctx context.Context) error {
}
}
+ log := appctx.GetLogger(ctx)
+ log.Info().Interface("quotaInfo", quotaInfo).Interface("user", u.Id).Msg("created nominal home")
+
return nil
}
@@ -1593,7 +1604,7 @@ func (fs *eosfs) createUserDir(ctx context.Context, u *userpb.User, path string,
}
for _, attr := range attrs {
- err = fs.c.SetAttr(ctx, rootAuth, attr, false, recursiveAttr, path)
+ err = fs.c.SetAttr(ctx, rootAuth, attr, false, recursiveAttr, path, "")
if err != nil {
return errors.Wrap(err, "eosfs: error setting attribute")
}
@@ -1676,7 +1687,7 @@ func (fs *eosfs) CreateReference(ctx context.Context, p string, targetURI *url.U
Val: targetURI.String(),
}
- if err := fs.c.SetAttr(ctx, rootAuth, attr, false, false, tmp); err != nil {
+ if err := fs.c.SetAttr(ctx, rootAuth, attr, false, false, tmp, ""); err != nil {
err = errors.Wrapf(err, "eosfs: error setting reva.ref attr on file: %q", tmp)
return err
}
@@ -2253,7 +2264,7 @@ func (fs *eosfs) convert(ctx context.Context, eosFileInfo *eosclient.FileInfo) (
}
}
- // filter 'sys' attrs and the reserved lock
+ // filter 'sys' attrs
filteredAttrs := make(map[string]string)
for k, v := range eosFileInfo.Attrs {
if !strings.HasPrefix(k, "sys") {
@@ -2276,6 +2287,9 @@ func (fs *eosfs) convert(ctx context.Context, eosFileInfo *eosclient.FileInfo) (
Seconds: eosFileInfo.MTimeSec,
Nanos: eosFileInfo.MTimeNanos,
},
+ ArbitraryMetadata: &provider.ArbitraryMetadata{
+ Metadata: filteredAttrs,
+ },
Opaque: &types.Opaque{
Map: map[string]*types.OpaqueEntry{
"eos": {
@@ -2284,11 +2298,17 @@ func (fs *eosfs) convert(ctx context.Context, eosFileInfo *eosclient.FileInfo) (
},
},
},
- ArbitraryMetadata: &provider.ArbitraryMetadata{
- Metadata: filteredAttrs,
- },
}
-
+ if eosFileInfo.Attrs[eosLockKey] != "" {
+ // populate the lock if decodable, log failure (but move on) if not
+ l, err := decodeLock(eosFileInfo.Attrs[lockPayloadKey], eosFileInfo.Attrs[eosLockKey])
+ if err != nil {
+ sublog := appctx.GetLogger(ctx).With().Logger()
+ sublog.Warn().Interface("xattrs", eosFileInfo.Attrs).Msg("could not decode lock, leaving empty")
+ } else {
+ info.Lock = l
+ }
+ }
if eosFileInfo.IsDir {
info.Opaque.Map["disable_tus"] = &types.OpaqueEntry{
Decoder: "plain",
diff --git a/pkg/storage/utils/eosfs/upload.go b/pkg/storage/utils/eosfs/upload.go
index 2c53920fe1..fb46c2699d 100644
--- a/pkg/storage/utils/eosfs/upload.go
+++ b/pkg/storage/utils/eosfs/upload.go
@@ -30,7 +30,7 @@ import (
"github.com/pkg/errors"
)
-func (fs *eosfs) Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser) error {
+func (fs *eosfs) Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser, metadata map[string]string) error {
p, err := fs.resolve(ctx, ref)
if err != nil {
return errors.Wrap(err, "eos: error resolving reference")
@@ -75,7 +75,18 @@ func (fs *eosfs) Upload(ctx context.Context, ref *provider.Reference, r io.ReadC
if err != nil {
return err
}
- return fs.c.Write(ctx, auth, fn, r)
+
+ if metadata == nil {
+ metadata = map[string]string{}
+ }
+ app := metadata["lockholder"]
+ if app == "" {
+ app = "reva_eosclient::write"
+ } else {
+ // if we have a lock context, the app for EOS must match the lock holder
+ app = fs.EncodeAppName(app)
+ }
+ return fs.c.Write(ctx, auth, fn, r, app)
}
func (fs *eosfs) InitiateUpload(ctx context.Context, ref *provider.Reference, uploadLength int64, metadata map[string]string) (map[string]string, error) {
diff --git a/pkg/storage/utils/grants/grants.go b/pkg/storage/utils/grants/grants.go
index cb30b54893..b4aee7fb41 100644
--- a/pkg/storage/utils/grants/grants.go
+++ b/pkg/storage/utils/grants/grants.go
@@ -24,7 +24,7 @@ import (
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
"github.com/cs3org/reva/pkg/storage/utils/acl"
- "github.com/google/go-cmp/cmp"
+ "google.golang.org/protobuf/proto"
)
// GetACLPerm generates a string representation of CS3APIs' ResourcePermissions,
@@ -32,7 +32,7 @@ import (
// TODO(labkode): fine grained permission controls.
func GetACLPerm(set *provider.ResourcePermissions) (string, error) {
// resource permission is denied
- if cmp.Equal(provider.ResourcePermissions{}, *set) {
+ if proto.Equal(&provider.ResourcePermissions{}, set) {
return "!r!w!x!m!u!d", nil
}
@@ -129,10 +129,10 @@ func GetGranteeType(aclType string) provider.GranteeType {
// PermissionsEqual returns true if the permissions are equal.
func PermissionsEqual(p1, p2 *provider.ResourcePermissions) bool {
- return p1 != nil && p2 != nil && cmp.Equal(*p1, *p2)
+ return p1 != nil && p2 != nil && proto.Equal(p1, p2)
}
// GranteeEqual returns true if the grantee are equal.
func GranteeEqual(g1, g2 *provider.Grantee) bool {
- return g1 != nil && g2 != nil && cmp.Equal(*g1, *g2)
+ return g1 != nil && g2 != nil && proto.Equal(g1, g2)
}
diff --git a/pkg/storage/utils/localfs/upload.go b/pkg/storage/utils/localfs/upload.go
index 67967fa495..604cd26b4f 100644
--- a/pkg/storage/utils/localfs/upload.go
+++ b/pkg/storage/utils/localfs/upload.go
@@ -39,7 +39,7 @@ import (
var defaultFilePerm = os.FileMode(0664)
-func (fs *localfs) Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser) error {
+func (fs *localfs) Upload(ctx context.Context, ref *provider.Reference, r io.ReadCloser, metadata map[string]string) error {
upload, err := fs.GetUpload(ctx, ref.GetPath())
if err != nil {
return errors.Wrap(err, "localfs: error retrieving upload")
diff --git a/pkg/user/manager/demo/demo.go b/pkg/user/manager/demo/demo.go
index d451795294..6ea270f2c6 100644
--- a/pkg/user/manager/demo/demo.go
+++ b/pkg/user/manager/demo/demo.go
@@ -28,6 +28,7 @@ import (
"github.com/cs3org/reva/pkg/errtypes"
"github.com/cs3org/reva/pkg/user"
"github.com/cs3org/reva/pkg/user/manager/registry"
+ "google.golang.org/protobuf/proto"
)
func init() {
@@ -57,11 +58,11 @@ func (m *manager) Configure(ml map[string]interface{}) error {
func (m *manager) GetUser(ctx context.Context, uid *userpb.UserId, skipFetchingGroups bool) (*userpb.User, error) {
if user, ok := m.catalog[uid.OpaqueId]; ok {
if uid.Idp == "" || user.Id.Idp == uid.Idp {
- u := *user
+ u := proto.Clone(user).(*userpb.User)
if skipFetchingGroups {
u.Groups = nil
}
- return &u, nil
+ return u, nil
}
}
return nil, errtypes.NotFound(uid.OpaqueId)
@@ -70,11 +71,11 @@ func (m *manager) GetUser(ctx context.Context, uid *userpb.UserId, skipFetchingG
func (m *manager) GetUserByClaim(ctx context.Context, claim, value string, skipFetchingGroups bool) (*userpb.User, error) {
for _, u := range m.catalog {
if userClaim, err := extractClaim(u, claim); err == nil && value == userClaim {
- user := *u
+ u2 := proto.Clone(u).(*userpb.User)
if skipFetchingGroups {
- user.Groups = nil
+ u2.Groups = nil
}
- return &user, nil
+ return u2, nil
}
}
return nil, errtypes.NotFound(value)
@@ -103,11 +104,11 @@ func (m *manager) FindUsers(ctx context.Context, query string, skipFetchingGroup
users := []*userpb.User{}
for _, u := range m.catalog {
if userContains(u, query) {
- user := *u
+ user := proto.Clone(u).(*userpb.User)
if skipFetchingGroups {
user.Groups = nil
}
- users = append(users, &user)
+ users = append(users, user)
}
}
return users, nil
diff --git a/pkg/user/manager/demo/demo_test.go b/pkg/user/manager/demo/demo_test.go
index a22f4d8de3..8c062453bb 100644
--- a/pkg/user/manager/demo/demo_test.go
+++ b/pkg/user/manager/demo/demo_test.go
@@ -25,6 +25,7 @@ import (
userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
"github.com/cs3org/reva/pkg/errtypes"
+ "google.golang.org/protobuf/proto"
)
var ctx = context.Background()
@@ -58,7 +59,7 @@ func TestUserManager(t *testing.T) {
// positive test GetUserByClaim by uid
resUserByUID, _ := manager.GetUserByClaim(ctx, "uid", "123", false)
- if !reflect.DeepEqual(resUserByUID, userEinstein) {
+ if !proto.Equal(resUserByUID, userEinstein) {
t.Fatalf("user differs: expected=%v got=%v", userEinstein, resUserByUID)
}
@@ -71,13 +72,13 @@ func TestUserManager(t *testing.T) {
// positive test GetUserByClaim by mail
resUserByEmail, _ := manager.GetUserByClaim(ctx, "mail", "einstein@example.org", false)
- if !reflect.DeepEqual(resUserByEmail, userEinstein) {
+ if !proto.Equal(resUserByEmail, userEinstein) {
t.Fatalf("user differs: expected=%v got=%v", userEinstein, resUserByEmail)
}
// positive test GetUserByClaim by uid without groups
resUserByUIDWithoutGroups, _ := manager.GetUserByClaim(ctx, "uid", "123", true)
- if !reflect.DeepEqual(resUserByUIDWithoutGroups, userEinsteinWithoutGroups) {
+ if !proto.Equal(resUserByUIDWithoutGroups, userEinsteinWithoutGroups) {
t.Fatalf("user differs: expected=%v got=%v", userEinsteinWithoutGroups, resUserByUIDWithoutGroups)
}
@@ -96,7 +97,7 @@ func TestUserManager(t *testing.T) {
// test FindUsers
resUser, _ := manager.FindUsers(ctx, "einstein", false)
- if !reflect.DeepEqual(resUser, []*userpb.User{userEinstein}) {
+ if !proto.Equal(resUser[0], userEinstein) {
t.Fatalf("user differs: expected=%v got=%v", []*userpb.User{userEinstein}, resUser)
}
diff --git a/pkg/user/manager/json/json.go b/pkg/user/manager/json/json.go
index c8a93aeb3d..c26eb9a3f5 100644
--- a/pkg/user/manager/json/json.go
+++ b/pkg/user/manager/json/json.go
@@ -31,6 +31,7 @@ import (
"github.com/cs3org/reva/pkg/user/manager/registry"
"github.com/cs3org/reva/pkg/utils/cfg"
"github.com/pkg/errors"
+ "google.golang.org/protobuf/proto"
)
func init() {
@@ -86,11 +87,11 @@ func (m *manager) Configure(ml map[string]interface{}) error {
func (m *manager) GetUser(ctx context.Context, uid *userpb.UserId, skipFetchingGroups bool) (*userpb.User, error) {
for _, u := range m.users {
if (u.Id.GetOpaqueId() == uid.OpaqueId || u.Username == uid.OpaqueId) && (uid.Idp == "" || uid.Idp == u.Id.GetIdp()) {
- user := *u
+ user := proto.Clone(u).(*userpb.User)
if skipFetchingGroups {
user.Groups = nil
}
- return &user, nil
+ return user, nil
}
}
return nil, errtypes.NotFound(uid.OpaqueId)
@@ -99,11 +100,11 @@ func (m *manager) GetUser(ctx context.Context, uid *userpb.UserId, skipFetchingG
func (m *manager) GetUserByClaim(ctx context.Context, claim, value string, skipFetchingGroups bool) (*userpb.User, error) {
for _, u := range m.users {
if userClaim, err := extractClaim(u, claim); err == nil && value == userClaim {
- user := *u
+ user := proto.Clone(u).(*userpb.User)
if skipFetchingGroups {
user.Groups = nil
}
- return &user, nil
+ return user, nil
}
}
return nil, errtypes.NotFound(value)
@@ -134,11 +135,11 @@ func (m *manager) FindUsers(ctx context.Context, query string, skipFetchingGroup
users := []*userpb.User{}
for _, u := range m.users {
if userContains(u, query) {
- user := *u
+ user := proto.Clone(u).(*userpb.User)
if skipFetchingGroups {
user.Groups = nil
}
- users = append(users, &user)
+ users = append(users, user)
}
}
return users, nil
diff --git a/pkg/user/manager/json/json_test.go b/pkg/user/manager/json/json_test.go
index d26df75835..e7f448ac84 100644
--- a/pkg/user/manager/json/json_test.go
+++ b/pkg/user/manager/json/json_test.go
@@ -26,6 +26,7 @@ import (
userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
"github.com/cs3org/reva/pkg/errtypes"
+ "google.golang.org/protobuf/proto"
)
var ctx = context.Background()
@@ -108,26 +109,26 @@ func TestUserManager(t *testing.T) {
// negative test GetUserGroups
expectedErr := errtypes.NotFound(userFake.OpaqueId)
_, err = manager.GetUserGroups(ctx, userFake)
- if !reflect.DeepEqual(err, expectedErr) {
+ if err != expectedErr {
t.Fatalf("user not found error differ: expected='%v' got='%v'", expectedErr, err)
}
// positive test GetUserByClaim by mail
resUserByEmail, _ := manager.GetUserByClaim(ctx, "mail", "einstein@example.org", false)
- if !reflect.DeepEqual(resUserByEmail, userEinstein) {
+ if !proto.Equal(resUserByEmail, userEinstein) {
t.Fatalf("user differs: expected=%v got=%v", userEinstein, resUserByEmail)
}
// negative test GetUserByClaim by mail
expectedErr = errtypes.NotFound("abc@example.com")
_, err = manager.GetUserByClaim(ctx, "mail", "abc@example.com", false)
- if !reflect.DeepEqual(err, expectedErr) {
+ if err != expectedErr {
t.Fatalf("user not found error differs: expected='%v' got='%v'", expectedErr, err)
}
// positive test GetUserByClaim by mail without groups
resUserByEmailWithoutGroups, _ := manager.GetUserByClaim(ctx, "mail", "einstein@example.org", true)
- if !reflect.DeepEqual(resUserByEmailWithoutGroups, userEinsteinWithoutGroups) {
+ if !proto.Equal(resUserByEmailWithoutGroups, userEinsteinWithoutGroups) {
t.Fatalf("user differs: expected=%v got=%v", userEinsteinWithoutGroups, resUserByEmailWithoutGroups)
}
@@ -142,7 +143,8 @@ func TestUserManager(t *testing.T) {
if len(resUser) != 1 {
t.Fatalf("too many users found: expected=%d got=%d", 1, len(resUser))
}
- if !reflect.DeepEqual(resUser[0].Username, "einstein") {
+
+ if resUser[0].Username != "einstein" {
t.Fatalf("user differ: expected=%v got=%v", "einstein", resUser[0].Username)
}
}
diff --git a/pkg/user/manager/ldap/ldap.go b/pkg/user/manager/ldap/ldap.go
index 31dbf8d2af..0973f0a99e 100644
--- a/pkg/user/manager/ldap/ldap.go
+++ b/pkg/user/manager/ldap/ldap.go
@@ -374,6 +374,9 @@ func (m *manager) FindUsers(ctx context.Context, query string, skipFetchingGroup
}
func (m *manager) GetUserGroups(ctx context.Context, uid *userpb.UserId) ([]string, error) {
+ if m.c.GroupFilter == "" {
+ return []string{}, nil
+ }
l, err := utils.GetLDAPConnection(&m.c.LDAPConn)
if err != nil {
return []string{}, err
diff --git a/pkg/user/manager/ldap/ldap_test.go b/pkg/user/manager/ldap/ldap_test.go
index e9a071d42a..c721809437 100644
--- a/pkg/user/manager/ldap/ldap_test.go
+++ b/pkg/user/manager/ldap/ldap_test.go
@@ -67,6 +67,6 @@ func TestUserManager(t *testing.T) {
// positive tests for New
_, err = New(context.Background(), map[string]interface{}{})
if err != nil {
- t.Fatalf(err.Error())
+ t.Fatal(err.Error())
}
}
diff --git a/pkg/user/manager/nextcloud/nextcloud.go b/pkg/user/manager/nextcloud/nextcloud.go
index b2e3f13607..fb7cbcb5e9 100644
--- a/pkg/user/manager/nextcloud/nextcloud.go
+++ b/pkg/user/manager/nextcloud/nextcloud.go
@@ -130,7 +130,7 @@ func (um *Manager) do(ctx context.Context, a Action, username string) (int, []by
body, err := io.ReadAll(resp.Body)
log.Info().Msgf("um.do res %s %s", url, string(body))
if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
- return 0, nil, fmt.Errorf("Unexpected response code from EFSS API: " + strconv.Itoa(resp.StatusCode))
+ return 0, nil, fmt.Errorf("Unexpected response code from EFSS API: %s", strconv.Itoa(resp.StatusCode))
}
return resp.StatusCode, body, err
}
diff --git a/pkg/user/manager/nextcloud/nextcloud_test.go b/pkg/user/manager/nextcloud/nextcloud_test.go
index 63ec1dbe0b..6df35059bf 100644
--- a/pkg/user/manager/nextcloud/nextcloud_test.go
+++ b/pkg/user/manager/nextcloud/nextcloud_test.go
@@ -23,12 +23,12 @@ import (
"os"
userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
-
"github.com/cs3org/reva/pkg/appctx"
"github.com/cs3org/reva/pkg/auth/scope"
jwt "github.com/cs3org/reva/pkg/token/manager/jwt"
"github.com/cs3org/reva/pkg/user/manager/nextcloud"
"github.com/cs3org/reva/tests/helpers"
+ "github.com/jt-nti/gproto"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
"google.golang.org/grpc/metadata"
@@ -204,7 +204,8 @@ var _ = Describe("Nextcloud", func() {
users, err := um.FindUsers(ctx, "some-query", false)
Expect(err).ToNot(HaveOccurred())
Expect(len(users)).To(Equal(1))
- Expect(*users[0]).To(Equal(userpb.User{
+
+ Expect(users[0]).To(gproto.Equal(&userpb.User{
Id: &userpb.UserId{
Idp: "some-idp",
OpaqueId: "some-opaque-user-id",
diff --git a/tests/acceptance/config/behat-core.yml b/tests/acceptance/config/behat-core.yml
deleted file mode 100644
index ecc1059aa4..0000000000
--- a/tests/acceptance/config/behat-core.yml
+++ /dev/null
@@ -1,401 +0,0 @@
-default:
- autoload:
- "": "%paths.base%/../../ocis/tests/acceptance/features/bootstrap"
- suites:
- coreApiMain:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiMain"
- context: &common_ldap_suite_context
- parameters:
- ldapAdminPassword: admin
- ldapUsersOU: TestUsers
- ldapGroupsOU: TestGroups
- ldapInitialUserFilePath: /../../config/ldap-users.ldif
- contexts:
- - FeatureContext: &common_feature_context_params
- baseUrl: http://localhost:8080
- adminUsername: admin
- adminPassword: admin
- regularUserPassword: 123456
- ocPath: apps/testing/api/v1/occ
- - AppConfigurationContext:
- - ChecksumContext:
- - FilesVersionsContext:
- - TrashbinContext:
-
- coreApiAuth:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiAuth"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - AuthContext:
-
- coreApiAuthOcs:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiAuthOcs"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - AuthContext:
-
- coreApiAuthWebDav:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiAuthWebDav"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - SearchContext:
- - PublicWebDavContext:
- - WebDavPropertiesContext:
- - AuthContext:
-
- coreApiCapabilities:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiCapabilities"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - CapabilitiesContext:
- - AppConfigurationContext:
-
- coreApiFavorites:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiFavorites"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - FavoritesContext:
- - WebDavPropertiesContext:
- - AppConfigurationContext:
-
- coreApiShareCreateSpecialToShares1:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiShareCreateSpecialToShares1"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - TrashbinContext:
- - WebDavPropertiesContext:
- - AppConfigurationContext:
-
- coreApiShareCreateSpecialToShares2:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiShareCreateSpecialToShares2"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - TrashbinContext:
- - WebDavPropertiesContext:
- - AppConfigurationContext:
-
- coreApiSharees:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiSharees"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - ShareesContext:
- - AppConfigurationContext:
-
- coreApiShareManagementToShares:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiShareManagementToShares"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - PublicWebDavContext:
- - TrashbinContext:
- - WebDavPropertiesContext:
- - AppConfigurationContext:
- - FilesVersionsContext:
-
- coreApiShareManagementBasicToShares:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiShareManagementBasicToShares"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - PublicWebDavContext:
- - TrashbinContext:
- - WebDavPropertiesContext:
- - AuthContext:
-
- coreApiShareOperationsToShares1:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiShareOperationsToShares1"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - PublicWebDavContext:
- - TrashbinContext:
- - WebDavPropertiesContext:
-
- coreApiShareOperationsToShares2:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiShareOperationsToShares2"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - PublicWebDavContext:
- - TrashbinContext:
- - WebDavPropertiesContext:
-
- coreApiSharePublicLink1:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiSharePublicLink1"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - PublicWebDavContext:
- - TrashbinContext:
- - WebDavPropertiesContext:
- - AppConfigurationContext:
-
- coreApiSharePublicLink2:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiSharePublicLink2"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - PublicWebDavContext:
- - TrashbinContext:
- - WebDavPropertiesContext:
- - AppConfigurationContext:
-
- coreApiSharePublicLink3:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiSharePublicLink3"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - PublicWebDavContext:
- - TrashbinContext:
- - WebDavPropertiesContext:
- - AppConfigurationContext:
-
- coreApiShareReshareToShares1:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiShareReshareToShares1"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - PublicWebDavContext:
- - TrashbinContext:
- - WebDavPropertiesContext:
-
- coreApiShareReshareToShares2:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiShareReshareToShares2"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - PublicWebDavContext:
- - TrashbinContext:
- - WebDavPropertiesContext:
- - AppConfigurationContext:
-
- coreApiShareReshareToShares3:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiShareReshareToShares3"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - PublicWebDavContext:
- - TrashbinContext:
- - WebDavPropertiesContext:
- - AppConfigurationContext:
-
- coreApiShareUpdateToShares:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiShareUpdateToShares"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - PublicWebDavContext:
- - TrashbinContext:
- - WebDavPropertiesContext:
- - AppConfigurationContext:
-
- coreApiTrashbin:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiTrashbin"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - TrashbinContext:
- - AppConfigurationContext:
- - WebDavPropertiesContext:
-
- coreApiTrashbinRestore:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiTrashbinRestore"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - TrashbinContext:
- - AppConfigurationContext:
- - WebDavPropertiesContext:
-
- coreApiVersions:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiVersions"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - ChecksumContext:
- - FilesVersionsContext:
- - WebDavPropertiesContext:
- - AppConfigurationContext:
- - TrashbinContext:
-
- coreApiWebdavDelete:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiWebdavDelete"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - SearchContext:
- - PublicWebDavContext:
- - WebDavPropertiesContext:
- - TrashbinContext:
-
- coreApiWebdavLocks:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiWebdavLocks"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - PublicWebDavContext:
- - WebDavLockingContext:
- - WebDavPropertiesContext:
-
- coreApiWebdavLocks2:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiWebdavLocks2"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - PublicWebDavContext:
- - WebDavLockingContext:
- - WebDavPropertiesContext:
-
- coreApiWebdavLocksUnlock:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiWebdavLocksUnlock"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - PublicWebDavContext:
- - WebDavLockingContext:
- - WebDavPropertiesContext:
-
- coreApiWebdavMove1:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiWebdavMove1"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - WebDavPropertiesContext:
-
- coreApiWebdavMove2:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiWebdavMove2"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - WebDavPropertiesContext:
-
- coreApiWebdavOperations:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiWebdavOperations"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - SearchContext:
- - PublicWebDavContext:
- - WebDavPropertiesContext:
- - TrashbinContext:
-
- coreApiWebdavPreviews:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiWebdavPreviews"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - WebDavPropertiesContext:
-
- coreApiWebdavProperties1:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiWebdavProperties1"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - WebDavPropertiesContext:
- - AppConfigurationContext:
-
- coreApiWebdavProperties2:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiWebdavProperties2"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - WebDavPropertiesContext:
- - AppConfigurationContext:
-
- coreApiWebdavUpload1:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiWebdavUpload1"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - PublicWebDavContext:
- - WebDavPropertiesContext:
-
- coreApiWebdavUpload2:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiWebdavUpload2"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - PublicWebDavContext:
-
- coreApiWebdavUploadTUS:
- paths:
- - "%paths.base%/../../ocis/tests/acceptance/features/coreApiWebdavUploadTUS"
- context: *common_ldap_suite_context
- contexts:
- - FeatureContext: *common_feature_context_params
- - PublicWebDavContext:
- - TUSContext:
- - FilesVersionsContext:
- - ChecksumContext:
-
- # coreApiWebdavEtagPropagation1:
- # paths:
- # - "%paths.base%/../../ocis/tests/acceptance/features/coreApiWebdavEtagPropagation1"
- # context: *common_ldap_suite_context
- # contexts:
- # - FeatureContext: *common_feature_context_params
- # - TrashbinContext:
- # - PublicWebDavContext:
- # - FilesVersionsContext:
- # - WebDavPropertiesContext:
- # - AppConfigurationContext:
-
- # coreApiWebdavEtagPropagation2:
- # paths:
- # - "%paths.base%/../../ocis/tests/acceptance/features/coreApiWebdavEtagPropagation2"
- # context: *common_ldap_suite_context
- # contexts:
- # - FeatureContext: *common_feature_context_params
- # - TrashbinContext:
- # - PublicWebDavContext:
- # - FilesVersionsContext:
- # - WebDavPropertiesContext:
- # - AppConfigurationContext:
-
- extensions:
- rdx\behatvars\BehatVariablesExtension: ~
-
- Cjm\Behat\StepThroughExtension: ~
diff --git a/tests/acceptance/config/behat.yml b/tests/acceptance/config/behat.yml
deleted file mode 100644
index 5429722ec4..0000000000
--- a/tests/acceptance/config/behat.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-default:
- autoload:
- '': '%paths.base%/../features/bootstrap'
-
- suites:
- apiVirtualViews:
- paths:
- - '%paths.base%/../features/apiVirtualViews'
- contexts:
- - RevaContext:
- - FeatureContext: &common_feature_context_params
- baseUrl: http://frontend:20180
- adminUsername: admin
- adminPassword: admin
- regularUserPassword: relativity
- ocPath: apps/testing/api/v1/occ
- - WebDavPropertiesContext:
-
- extensions:
- Cjm\Behat\StepThroughExtension: ~
diff --git a/tests/acceptance/expected-failures-on-EOS-storage.md b/tests/acceptance/expected-failures-on-EOS-storage.md
deleted file mode 100644
index 9a24d5ed28..0000000000
--- a/tests/acceptance/expected-failures-on-EOS-storage.md
+++ /dev/null
@@ -1,1770 +0,0 @@
-## Scenarios from OCIS API tests that are expected to fail with OCIS storage
-
-The expected failures in this file are from features in the owncloud/ocis repo.
-
-#### Virtual Views
-- [apiVirtualViews/virtualViews.feature:19](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiVirtualViews/virtualViews.feature#L19)
-- [apiVirtualViews/virtualViews.feature:56](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiVirtualViews/virtualViews.feature#L56)
-
-### File
-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)
-These tests succeed when running against ocis because there we handle the relevant authentication in the proxy.
-- [coreApiTrashbin/trashbinFilesFolders.feature:235](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinFilesFolders.feature#L235)
-- [coreApiTrashbin/trashbinFilesFolders.feature:268](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinFilesFolders.feature#L268)
-
-#### [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.
-- [coreApiWebdavProperties1/copyFile.feature:272](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L272)
-- [coreApiWebdavProperties1/copyFile.feature:271](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L271)
-- [coreApiWebdavProperties1/copyFile.feature:290](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L290)
-- [coreApiWebdavProperties1/copyFile.feature:289](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L289)
-- [coreApiWebdavProperties1/copyFile.feature:313](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L313)
-- [coreApiWebdavProperties1/copyFile.feature:312](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L312)
-- [coreApiWebdavProperties1/copyFile.feature:338](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L338)
-- [coreApiWebdavProperties1/copyFile.feature:337](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L337)
-- [coreApiWebdavProperties1/copyFile.feature:362](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L362)
-- [coreApiWebdavProperties1/copyFile.feature:361](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L361)
-- [coreApiWebdavProperties1/copyFile.feature:386](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L386)
-- [coreApiWebdavProperties1/copyFile.feature:385](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L385)
-- [coreApiWebdavProperties1/copyFile.feature:465](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L465)
-- [coreApiWebdavProperties1/copyFile.feature:493](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L493)
-- [coreApiWebdavProperties1/copyFile.feature:492](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L492)
-- [coreApiWebdavProperties1/copyFile.feature:520](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L520)
-- [coreApiWebdavProperties1/copyFile.feature:519](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L519)
-- [coreApiWebdavProperties1/copyFile.feature:547](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L547)
-
-#### [Custom dav properties with namespaces are rendered incorrectly](https://github.com/owncloud/ocis/issues/2140)
-_ocdav: double check the webdav property parsing when custom namespaces are used_
-- [coreApiWebdavProperties1/setFileProperties.feature:36](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/setFileProperties.feature#L36)
-- [coreApiWebdavProperties1/setFileProperties.feature:37](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/setFileProperties.feature#L37)
-- [coreApiWebdavProperties1/setFileProperties.feature:77](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/setFileProperties.feature#L77)
-- [coreApiWebdavProperties1/setFileProperties.feature:78](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/setFileProperties.feature#L78)
-
-#### [Cannot set custom webDav properties](https://github.com/owncloud/product/issues/264)
-- [coreApiWebdavProperties2/getFileProperties.feature:340](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L340)
-- [coreApiWebdavProperties2/getFileProperties.feature:341](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L341)
-- [coreApiWebdavProperties2/getFileProperties.feature:376](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L376)
-- [coreApiWebdavProperties2/getFileProperties.feature:377](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L377)
-
-### Sync
-Synchronization features like etag propagation, setting mtime and locking files
-
-#### [Uploading an old method chunked file with checksum should fail using new DAV path](https://github.com/owncloud/ocis/issues/2323)
-- [coreApiMain/checksums.feature:260](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L260)
-
-#### [Webdav LOCK operations](https://github.com/owncloud/ocis/issues/1284)
-- [coreApiWebdavLocks/exclusiveLocks.feature:22](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks/exclusiveLocks.feature#L22)
-- [coreApiWebdavLocks/exclusiveLocks.feature:23](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks/exclusiveLocks.feature#L23)
-- [coreApiWebdavLocks/exclusiveLocks.feature:24](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks/exclusiveLocks.feature#L24)
-- [coreApiWebdavLocks/exclusiveLocks.feature:25](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks/exclusiveLocks.feature#L25)
-- [coreApiWebdavLocks/exclusiveLocks.feature:49](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks/exclusiveLocks.feature#L49)
-- [coreApiWebdavLocks/exclusiveLocks.feature:50](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks/exclusiveLocks.feature#L50)
-- [coreApiWebdavLocks/exclusiveLocks.feature:51](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks/exclusiveLocks.feature#L51)
-- [coreApiWebdavLocks/exclusiveLocks.feature:52](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks/exclusiveLocks.feature#L52)
-- [coreApiWebdavLocks/exclusiveLocks.feature:76](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks/exclusiveLocks.feature#L76)
-- [coreApiWebdavLocks/exclusiveLocks.feature:77](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks/exclusiveLocks.feature#L77)
-- [coreApiWebdavLocks/exclusiveLocks.feature:78](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks/exclusiveLocks.feature#L78)
-- [coreApiWebdavLocks/exclusiveLocks.feature:79](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks/exclusiveLocks.feature#L79)
-- [coreApiWebdavLocks/exclusiveLocks.feature:103](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks/exclusiveLocks.feature#L103)
-- [coreApiWebdavLocks/exclusiveLocks.feature:104](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks/exclusiveLocks.feature#L104)
-- [coreApiWebdavLocks/exclusiveLocks.feature:105](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks/exclusiveLocks.feature#L105)
-- [coreApiWebdavLocks/exclusiveLocks.feature:106](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks/exclusiveLocks.feature#L106)
-- [coreApiWebdavLocks/requestsWithToken.feature:32](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks/requestsWithToken.feature#L32)
-- [coreApiWebdavLocks/requestsWithToken.feature:33](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks/requestsWithToken.feature#L33)
-- [coreApiWebdavLocks2/independentLocks.feature:25](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks2/independentLocks.feature#L25)
-- [coreApiWebdavLocks2/independentLocks.feature:26](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks2/independentLocks.feature#L26)
-- [coreApiWebdavLocks2/independentLocks.feature:27](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks2/independentLocks.feature#L27)
-- [coreApiWebdavLocks2/independentLocks.feature:28](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks2/independentLocks.feature#L28)
-- [coreApiWebdavLocks2/independentLocks.feature:53](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks2/independentLocks.feature#L53)
-- [coreApiWebdavLocks2/independentLocks.feature:54](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks2/independentLocks.feature#L54)
-- [coreApiWebdavLocks2/independentLocks.feature:55](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks2/independentLocks.feature#L55)
-- [coreApiWebdavLocks2/independentLocks.feature:56](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks2/independentLocks.feature#L56)
-- [coreApiWebdavLocks2/independentLocks.feature:57](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks2/independentLocks.feature#L57)
-- [coreApiWebdavLocks2/independentLocks.feature:58](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks2/independentLocks.feature#L58)
-- [coreApiWebdavLocks2/independentLocks.feature:59](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks2/independentLocks.feature#L59)
-- [coreApiWebdavLocks2/independentLocks.feature:60](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks2/independentLocks.feature#L60)
-- [coreApiWebdavLocks2/independentLocksShareToShares.feature:30](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks2/independentLocksShareToShares.feature#L30)
-- [coreApiWebdavLocks2/independentLocksShareToShares.feature:31](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks2/independentLocksShareToShares.feature#L31)
-- [coreApiWebdavLocks2/independentLocksShareToShares.feature:32](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks2/independentLocksShareToShares.feature#L32)
-- [coreApiWebdavLocks2/independentLocksShareToShares.feature:33](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks2/independentLocksShareToShares.feature#L33)
-- [coreApiWebdavLocks2/independentLocksShareToShares.feature:59](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks2/independentLocksShareToShares.feature#L59)
-- [coreApiWebdavLocks2/independentLocksShareToShares.feature:60](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks2/independentLocksShareToShares.feature#L60)
-- [coreApiWebdavLocks2/independentLocksShareToShares.feature:61](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks2/independentLocksShareToShares.feature#L61)
-- [coreApiWebdavLocks2/independentLocksShareToShares.feature:62](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocks2/independentLocksShareToShares.feature#L62)
-- [coreApiWebdavLocksUnlock/unlock.feature:23](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlock.feature#L23)
-- [coreApiWebdavLocksUnlock/unlock.feature:24](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlock.feature#L24)
-- [coreApiWebdavLocksUnlock/unlock.feature:43](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlock.feature#L43)
-- [coreApiWebdavLocksUnlock/unlock.feature:44](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlock.feature#L44)
-- [coreApiWebdavLocksUnlock/unlock.feature:66](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlock.feature#L66)
-- [coreApiWebdavLocksUnlock/unlock.feature:67](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlock.feature#L67)
-- [coreApiWebdavLocksUnlock/unlock.feature:68](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlock.feature#L68)
-- [coreApiWebdavLocksUnlock/unlock.feature:69](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlock.feature#L69)
-- [coreApiWebdavLocksUnlock/unlockSharingToShares.feature:28](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlockSharingToShares.feature#L28)
-- [coreApiWebdavLocksUnlock/unlockSharingToShares.feature:29](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlockSharingToShares.feature#L29)
-- [coreApiWebdavLocksUnlock/unlockSharingToShares.feature:30](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlockSharingToShares.feature#L30)
-- [coreApiWebdavLocksUnlock/unlockSharingToShares.feature:31](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlockSharingToShares.feature#L31)
-- [coreApiWebdavLocksUnlock/unlockSharingToShares.feature:52](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlockSharingToShares.feature#L52)
-- [coreApiWebdavLocksUnlock/unlockSharingToShares.feature:53](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlockSharingToShares.feature#L53)
-- [coreApiWebdavLocksUnlock/unlockSharingToShares.feature:54](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlockSharingToShares.feature#L54)
-- [coreApiWebdavLocksUnlock/unlockSharingToShares.feature:55](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlockSharingToShares.feature#L55)
-- [coreApiWebdavLocksUnlock/unlockSharingToShares.feature:76](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlockSharingToShares.feature#L76)
-- [coreApiWebdavLocksUnlock/unlockSharingToShares.feature:77](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlockSharingToShares.feature#L77)
-- [coreApiWebdavLocksUnlock/unlockSharingToShares.feature:78](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlockSharingToShares.feature#L78)
-- [coreApiWebdavLocksUnlock/unlockSharingToShares.feature:79](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlockSharingToShares.feature#L79)
-- [coreApiWebdavLocksUnlock/unlockSharingToShares.feature:100](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlockSharingToShares.feature#L100)
-- [coreApiWebdavLocksUnlock/unlockSharingToShares.feature:101](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlockSharingToShares.feature#L101)
-- [coreApiWebdavLocksUnlock/unlockSharingToShares.feature:102](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlockSharingToShares.feature#L102)
-- [coreApiWebdavLocksUnlock/unlockSharingToShares.feature:103](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlockSharingToShares.feature#L103)
-- [coreApiWebdavLocksUnlock/unlockSharingToShares.feature:124](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlockSharingToShares.feature#L124)
-- [coreApiWebdavLocksUnlock/unlockSharingToShares.feature:125](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlockSharingToShares.feature#L125)
-- [coreApiWebdavLocksUnlock/unlockSharingToShares.feature:126](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlockSharingToShares.feature#L126)
-- [coreApiWebdavLocksUnlock/unlockSharingToShares.feature:127](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavLocksUnlock/unlockSharingToShares.feature#L127)
-
-### Share
-File and sync features in a shared scenario
-
-### [Different response containing exact and non exact match in response of getting sharees](https://github.com/owncloud/ocis/issues/2376)
-- [coreApiSharees/sharees.feature:99](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharees/sharees.feature#L99)
-- [coreApiSharees/sharees.feature:100](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharees/sharees.feature#L100)
-- [coreApiSharees/sharees.feature:119](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharees/sharees.feature#L119)
-- [coreApiSharees/sharees.feature:120](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharees/sharees.feature#L120)
-- [coreApiSharees/sharees.feature:139](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharees/sharees.feature#L139)
-- [coreApiSharees/sharees.feature:140](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharees/sharees.feature#L140)
-- [coreApiSharees/sharees.feature:159](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharees/sharees.feature#L159)
-- [coreApiSharees/sharees.feature:160](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharees/sharees.feature#L160)
-
-#### [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)
-- [coreApiShareManagementToShares/acceptShares.feature:238](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptShares.feature#L238)
-- [coreApiShareManagementToShares/acceptShares.feature:260](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptShares.feature#L260)
-
-
-#### [Getting content of a shared file with same name returns 500](https://github.com/owncloud/ocis/issues/3880)
-- [coreApiShareManagementToShares/acceptShares.feature:459](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptShares.feature#L459)
-- [coreApiShareManagementToShares/acceptShares.feature:524](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptShares.feature#L524)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:127](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L127)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:128](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L128)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:160](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L160)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:161](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L161)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:39](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L39)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:38](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L38)
-
-#### [different webdav permissions in ocis](https://github.com/owncloud/ocis/issues/4929)
-- [coreApiShareManagementToShares/mergeShare.feature:98](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/mergeShare.feature#L98)
-
-#### [file_target of a auto-renamed file is not correct directly after sharing](https://github.com/owncloud/ocis/issues/32322)
-
-- [coreApiShareManagementToShares/mergeShare.feature:111](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/mergeShare.feature#L111)
-
-#### [[OCIS-storage] not possible to move file into a received folder](https://github.com/owncloud/ocis/issues/764)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:528](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L528)
-
-#### [File deletion using dav gives unique string in filename in the trashbin](https://github.com/owncloud/product/issues/178)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:49](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L49)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:75](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L75)
-
- cannot share a folder with create permission
-#### [Listing shares via ocs API does not show path for parent folders](https://github.com/owncloud/ocis/issues/1231)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:125](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L125)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:138](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L138)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:172](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L172)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:173](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L173)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:174](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L174)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:175](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L175)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:191](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L191)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:192](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L192)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:193](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L193)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:194](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L194)
-- [coreApiShareOperationsToShares1/gettingShares.feature:188](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingShares.feature#L188)
-- [coreApiShareOperationsToShares1/gettingShares.feature:189](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingShares.feature#L189)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:36](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L36)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:37](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L37)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:326](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L326)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:327](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L327)
-
-#### [OCS error message for attempting to access share via share id as an unauthorized user is not informative](https://github.com/owncloud/ocis/issues/1233)
-
-- [coreApiShareOperationsToShares1/gettingShares.feature:151](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingShares.feature#L151)
-- [coreApiShareOperationsToShares1/gettingShares.feature:152](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingShares.feature#L152)
-
-
-#### [Public link enforce permissions](https://github.com/owncloud/ocis/issues/1269)
-
-- [coreApiSharePublicLink1/accessToPublicLinkShare.feature:12](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/accessToPublicLinkShare.feature#L12)
-- [coreApiSharePublicLink1/accessToPublicLinkShare.feature:31](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/accessToPublicLinkShare.feature#L31)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:163](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L163)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:164](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L164)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:317](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L317)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:327](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L327)
-
-
-#### [copying a folder within a public link folder to folder with same name as an already existing file overwrites the parent file](https://github.com/owncloud/ocis/issues/1232)
-
-- [coreApiSharePublicLink2/copyFromPublicLink.feature:65](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L65)
-- [coreApiSharePublicLink2/copyFromPublicLink.feature:91](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L91)
-- [coreApiSharePublicLink2/copyFromPublicLink.feature:175](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L175)
-- [coreApiSharePublicLink2/copyFromPublicLink.feature:176](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L176)
-- [coreApiSharePublicLink2/copyFromPublicLink.feature:191](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L191)
-- [coreApiSharePublicLink2/copyFromPublicLink.feature:192](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L192)
-
-#### [Upload-only shares must not overwrite but create a separate file](https://github.com/owncloud/ocis/issues/1267)
-
-- [coreApiSharePublicLink3/uploadToPublicLinkShare.feature:13](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/uploadToPublicLinkShare.feature#L13)
-- [coreApiSharePublicLink3/uploadToPublicLinkShare.feature:114](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/uploadToPublicLinkShare.feature#L114)
-
-#### [Set quota over settings](https://github.com/owncloud/ocis/issues/1290)
-_requires a [CS3 user provisioning api that can update the quota for a user](https://github.com/cs3org/cs3apis/pull/95#issuecomment-772780683)_
-
-- [coreApiSharePublicLink3/uploadToPublicLinkShare.feature:87](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/uploadToPublicLinkShare.feature#L87)
-- [coreApiSharePublicLink3/uploadToPublicLinkShare.feature:96](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/uploadToPublicLinkShare.feature#L96)
-
-#### [path property in pending shares gives only filename](https://github.com/owncloud/ocis/issues/2156)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:61](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L61)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:732](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L732)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:733](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L733)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:751](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L751)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:752](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L752)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:767](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L767)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:768](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L768)
-
-#### [deleting a file inside a received shared folder is moved to the trash-bin of the sharer not the receiver](https://github.com/owncloud/ocis/issues/1124)
-
-- [coreApiTrashbin/trashbinSharingToShares.feature:46](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinSharingToShares.feature#L46)
-- [coreApiTrashbin/trashbinSharingToShares.feature:73](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinSharingToShares.feature#L73)
-- [coreApiTrashbin/trashbinSharingToShares.feature:100](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinSharingToShares.feature#L100)
-- [coreApiTrashbin/trashbinSharingToShares.feature:128](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinSharingToShares.feature#L128)
-- [coreApiTrashbin/trashbinSharingToShares.feature:156](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinSharingToShares.feature#L156)
-- [coreApiTrashbin/trashbinSharingToShares.feature:184](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinSharingToShares.feature#L184)
-
-#### [Folder overwrite on shared files doesn't works correctly on copying file](https://github.com/owncloud/ocis/issues/2183)
-- [coreApiWebdavProperties1/copyFile.feature:464](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L464)
-- [coreApiWebdavProperties1/copyFile.feature:546](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L546)
-
-#### [cannot get share-types webdav property](https://github.com/owncloud/ocis/issues/567)
-- [coreApiWebdavProperties2/getFileProperties.feature:237](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L237)
-- [coreApiWebdavProperties2/getFileProperties.feature:238](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L238)
-
-#### [oc:privatelink property not returned in webdav responses](https://github.com/owncloud/product/issues/262)
-- [coreApiWebdavProperties2/getFileProperties.feature:293](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L293)
-- [coreApiWebdavProperties2/getFileProperties.feature:294](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L294)
-
-#### [changing user quota gives ocs status 103 / Cannot set quota](https://github.com/owncloud/product/issues/247)
-_requires a [CS3 user provisioning api that can update the quota for a user](https://github.com/cs3org/cs3apis/pull/95#issuecomment-772780683)_
-- [coreApiShareOperationsToShares2/uploadToShare.feature:210](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/uploadToShare.feature#L210)
-- [coreApiShareOperationsToShares2/uploadToShare.feature:211](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/uploadToShare.feature#L211)
-
-#### [not possible to move file into a received folder](https://github.com/owncloud/ocis/issues/764)
-- [coreApiShareOperationsToShares1/changingFilesShare.feature:26](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/changingFilesShare.feature#L26)
-- [coreApiShareOperationsToShares1/changingFilesShare.feature:27](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/changingFilesShare.feature#L27)
-- [coreApiShareOperationsToShares1/changingFilesShare.feature:70](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/changingFilesShare.feature#L70)
-- [coreApiShareOperationsToShares1/changingFilesShare.feature:71](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/changingFilesShare.feature#L71)
-- [coreApiShareOperationsToShares1/changingFilesShare.feature:92](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/changingFilesShare.feature#L92)
-- [coreApiShareOperationsToShares1/changingFilesShare.feature:93](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/changingFilesShare.feature#L93)
-- [coreApiShareOperationsToShares1/changingFilesShare.feature:108](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/changingFilesShare.feature#L108)
-- [coreApiShareOperationsToShares1/changingFilesShare.feature:109](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/changingFilesShare.feature#L109)
-- [coreApiWebdavMove2/moveShareOnOcis.feature:29](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveShareOnOcis.feature#L29)
-- [coreApiWebdavMove2/moveShareOnOcis.feature:31](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveShareOnOcis.feature#L31)
-- [coreApiWebdavMove2/moveShareOnOcis.feature:74](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveShareOnOcis.feature#L74)
-- [coreApiWebdavMove2/moveShareOnOcis.feature:75](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveShareOnOcis.feature#L75)
-- [coreApiWebdavMove2/moveShareOnOcis.feature:97](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveShareOnOcis.feature#L97)
-- [coreApiWebdavMove2/moveShareOnOcis.feature:99](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveShareOnOcis.feature#L99)
-- [coreApiWebdavMove2/moveShareOnOcis.feature:148](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveShareOnOcis.feature#L148)
-- [coreApiWebdavMove2/moveShareOnOcis.feature:149](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveShareOnOcis.feature#L149)
-- [coreApiWebdavMove2/moveShareOnOcis.feature:168](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveShareOnOcis.feature#L168)
-- [coreApiWebdavMove2/moveShareOnOcis.feature:169](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveShareOnOcis.feature#L169)
-- [coreApiWebdavMove2/moveFile.feature:175](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L175)
-- [coreApiWebdavMove2/moveFile.feature:176](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L176)
-
-#### [OCIS-storage overwriting a file as share receiver, does not create a new file version for the sharer](https://github.com/owncloud/ocis/issues/766) //todo
-- [coreApiVersions/fileVersions.feature:274](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L274)
-
-#### [restoring an older version of a shared file deletes the share](https://github.com/owncloud/ocis/issues/765)
-- [coreApiShareManagementToShares/acceptShares.feature:448](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptShares.feature#L448)
-- [coreApiVersions/fileVersions.feature:286](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L286)
-
-#### [Expiration date for shares is not implemented](https://github.com/owncloud/ocis/issues/1250)
-#### Expiration date of user shares
-- [coreApiShareReshareToShares3/reShareWithExpiryDate.feature:35](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares3/reShareWithExpiryDate.feature#L35)
-- [coreApiShareReshareToShares3/reShareWithExpiryDate.feature:36](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares3/reShareWithExpiryDate.feature#L36)
-
-#### Expiration date of group shares
-- [coreApiShareReshareToShares3/reShareWithExpiryDate.feature:60](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares3/reShareWithExpiryDate.feature#L60)
-- [coreApiShareReshareToShares3/reShareWithExpiryDate.feature:61](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares3/reShareWithExpiryDate.feature#L61)
-- [coreApiShareReshareToShares3/reShareWithExpiryDate.feature:82](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares3/reShareWithExpiryDate.feature#L82)
-- [coreApiShareReshareToShares3/reShareWithExpiryDate.feature:83](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares3/reShareWithExpiryDate.feature#L83)
-
-#### [Getting content of a shared file with same name returns 500](https://github.com/owncloud/ocis/issues/3880)
-- [coreApiShareCreateSpecialToShares1/createShareUniqueReceivedNames.feature:15](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares1/createShareUniqueReceivedNames.feature#L15)
-
-#### [Empty OCS response for a share create request using a disabled user](https://github.com/owncloud/ocis/issues/2212)
-- [coreApiShareCreateSpecialToShares2/createShareWithDisabledUser.feature:21](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareWithDisabledUser.feature#L21)
-- [coreApiShareCreateSpecialToShares2/createShareWithDisabledUser.feature:22](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareWithDisabledUser.feature#L22)
-- [coreApiShareUpdateToShares/updateShare.feature:96](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L96)
-- [coreApiShareUpdateToShares/updateShare.feature:97](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L97)
-- [coreApiShareUpdateToShares/updateShare.feature:98](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L98)
-- [coreApiShareUpdateToShares/updateShare.feature:99](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L99)
-- [coreApiShareUpdateToShares/updateShare.feature:100](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L100)
-- [coreApiShareUpdateToShares/updateShare.feature:101](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L101)
-- [coreApiShareUpdateToShares/updateShare.feature:120](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L120)
-- [coreApiShareUpdateToShares/updateShare.feature:121](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L121)
-- [coreApiShareUpdateToShares/updateShare.feature:122](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L122)
-- [coreApiShareUpdateToShares/updateShare.feature:123](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L123)
-- [coreApiShareUpdateToShares/updateShare.feature:124](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L124)
-- [coreApiShareUpdateToShares/updateShare.feature:125](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L125)
-
-#### [Edit user share response has an "name" field](https://github.com/owncloud/ocis/issues/1225)
-- [coreApiShareUpdateToShares/updateShare.feature:235](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L235)
-- [coreApiShareUpdateToShares/updateShare.feature:236](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L236)
-
-#### [user can access version metadata of a received share before accepting it](https://github.com/owncloud/ocis/issues/760)
-- [coreApiVersions/fileVersions.feature:311](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L311)
-
-#### [Share lists deleted user as 'user'](https://github.com/owncloud/ocis/issues/903)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:667](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L667)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:668](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L668)
-
-#### [OCIS-storage overwriting a file as share receiver, does not create a new file version for the sharer](https://github.com/owncloud/ocis/issues/766)
-- [coreApiVersions/fileVersions.feature:431](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L431) //todo
-
-#### [deleting a share with wrong authentication returns OCS status 996 / HTTP 500](https://github.com/owncloud/ocis/issues/1229)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:221](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L221)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:222](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L222)
-
-### User Management
-User and group management features
-
-### Other
-API, search, favorites, config, capabilities, not existing endpoints, CORS and others
-
-#### [no robots.txt available](https://github.com/owncloud/ocis/issues/1314)
-- [coreApiMain/main.feature:7](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/main.feature#L7)
-
-#### [Ability to return error messages in Webdav response bodies](https://github.com/owncloud/ocis/issues/1293)
-- [coreApiAuthOcs/ocsDELETEAuth.feature:10](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthOcs/ocsDELETEAuth.feature#L10)
-- [coreApiAuthOcs/ocsGETAuth.feature:10](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthOcs/ocsGETAuth.feature#L10)
-- [coreApiAuthOcs/ocsGETAuth.feature:31](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthOcs/ocsGETAuth.feature#L31)
-- [coreApiAuthOcs/ocsGETAuth.feature:44](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthOcs/ocsGETAuth.feature#L44)
-- [coreApiAuthOcs/ocsGETAuth.feature:75](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthOcs/ocsGETAuth.feature#L75)
-- [coreApiAuthOcs/ocsGETAuth.feature:106](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthOcs/ocsGETAuth.feature#L106)
-- [coreApiAuthOcs/ocsGETAuth.feature:123](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthOcs/ocsGETAuth.feature#L123)
-- [coreApiAuthOcs/ocsPOSTAuth.feature:10](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthOcs/ocsPOSTAuth.feature#L10)
-- [coreApiAuthOcs/ocsPUTAuth.feature:10](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthOcs/ocsPUTAuth.feature#L10)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:69](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L69)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:70](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L70)
-
-#### [sending MKCOL requests to another or non-existing user's webDav endpoints as normal user should return 404](https://github.com/owncloud/ocis/issues/5049)
-_ocdav: api compatibility, return correct status code_
-- [coreApiAuthWebDav/webDavDELETEAuth.feature:48](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavDELETEAuth.feature#L48)
-- [coreApiAuthWebDav/webDavPROPFINDAuth.feature:45](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavPROPFINDAuth.feature#L45)
-- [coreApiAuthWebDav/webDavPROPPATCHAuth.feature:46](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavPROPPATCHAuth.feature#L46)
-- [coreApiAuthWebDav/webDavMKCOLAuth.feature:42](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavMKCOLAuth.feature#L42)
-- [coreApiAuthWebDav/webDavMKCOLAuth.feature:53](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavMKCOLAuth.feature#L53)
-
-#### [trying to lock file of another user gives http 200](https://github.com/owncloud/ocis/issues/2176)
-- [coreApiAuthWebDav/webDavLOCKAuth.feature:46](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavLOCKAuth.feature#L46)
-
-#### [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_
-- [coreApiAuthWebDav/webDavMOVEAuth.feature:45](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavMOVEAuth.feature#L45) Scenario: send MOVE requests to another user's webDav endpoints as normal user
-- [coreApiAuthWebDav/webDavCOPYAuth.feature:45](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavCOPYAuth.feature#L45)
-
-#### [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_
-- [coreApiAuthWebDav/webDavPOSTAuth.feature:46](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavPOSTAuth.feature#L46)
-
-#### [Using double slash in URL to access a folder gives 501 and other status codes](https://github.com/owncloud/ocis/issues/1667)
-- [coreApiAuthWebDav/webDavSpecialURLs.feature:36](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavSpecialURLs.feature#L36)
-- [coreApiAuthWebDav/webDavSpecialURLs.feature:123](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavSpecialURLs.feature#L123)
-- [coreApiAuthWebDav/webDavSpecialURLs.feature:165](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavSpecialURLs.feature#L165)
-
-#### [Difference in response content of status.php and default capabilities](https://github.com/owncloud/ocis/issues/1286)
-- [coreApiCapabilities/capabilitiesWithNormalUser.feature:13](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiCapabilities/capabilitiesWithNormalUser.feature#L13)
-
-#### [spaces endpoint does not allow REPORT requests](https://github.com/owncloud/ocis/issues/4034)
-- [coreApiWebdavOperations/search.feature:42](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L42)
-- [coreApiWebdavOperations/search.feature:43](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L43)
-- [coreApiWebdavOperations/search.feature:64](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L64)
-- [coreApiWebdavOperations/search.feature:65](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L65)
-- [coreApiWebdavOperations/search.feature:87](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L87)
-- [coreApiWebdavOperations/search.feature:88](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L88)
-- [coreApiWebdavOperations/search.feature:102](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L102)
-- [coreApiWebdavOperations/search.feature:103](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L103)
-- [coreApiWebdavOperations/search.feature:126](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L126)
-- [coreApiWebdavOperations/search.feature:127](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L127)
-- [coreApiWebdavOperations/search.feature:150](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L150)
-- [coreApiWebdavOperations/search.feature:151](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L151)
-- [coreApiWebdavOperations/search.feature:175](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L175)
-- [coreApiWebdavOperations/search.feature:176](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L176)
-- [coreApiWebdavOperations/search.feature:208](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L208)
-- [coreApiWebdavOperations/search.feature:209](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L209)
-- [coreApiWebdavOperations/search.feature:240](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L240)
-- [coreApiWebdavOperations/search.feature:241](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L241)
-- [coreApiWebdavOperations/search.feature:265](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L265)
-- [coreApiWebdavOperations/search.feature:266](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/search.feature#L266)
-
-#### [Support for favorites](https://github.com/owncloud/ocis/issues/1228)
-- [coreApiFavorites/favorites.feature:117](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favorites.feature#L117)
-- [coreApiFavorites/favorites.feature:118](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favorites.feature#L118)
-- [coreApiFavorites/favorites.feature:169](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favorites.feature#L169)
-- [coreApiFavorites/favorites.feature:170](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favorites.feature#L170)
-- [coreApiFavorites/favorites.feature:202](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favorites.feature#L202)
-- [coreApiFavorites/favorites.feature:203](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favorites.feature#L203)
-- [coreApiFavorites/favorites.feature:221](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favorites.feature#L221)
-- [coreApiFavorites/favorites.feature:222](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favorites.feature#L222)
-- [coreApiFavorites/favorites.feature:144](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favorites.feature#L144)
-- [coreApiFavorites/favorites.feature:145](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favorites.feature#L145)
-- [coreApiFavorites/favoritesSharingToShares.feature:67](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favoritesSharingToShares.feature#L67)
-- [coreApiFavorites/favoritesSharingToShares.feature:68](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favoritesSharingToShares.feature#L68)
-
-#### [resource inside Shares dir is not found using the spaces WebDAV API](https://github.com/owncloud/ocis/issues/2968)
-- [coreApiFavorites/favoritesSharingToShares.feature:22](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favoritesSharingToShares.feature#L22)
-- [coreApiFavorites/favoritesSharingToShares.feature:23](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favoritesSharingToShares.feature#L23)
-- [coreApiFavorites/favoritesSharingToShares.feature:37](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favoritesSharingToShares.feature#L37)
-- [coreApiFavorites/favoritesSharingToShares.feature:38](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favoritesSharingToShares.feature#L38)
-- [coreApiFavorites/favoritesSharingToShares.feature:51](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favoritesSharingToShares.feature#L51)
-- [coreApiFavorites/favoritesSharingToShares.feature:52](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favoritesSharingToShares.feature#L52)
-- [coreApiFavorites/favoritesSharingToShares.feature:82](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favoritesSharingToShares.feature#L82)
-- [coreApiFavorites/favoritesSharingToShares.feature:83](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favoritesSharingToShares.feature#L83)
-- [coreApiMain/checksums.feature:189](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L189)
-
-#### [WWW-Authenticate header for unauthenticated requests is not clear](https://github.com/owncloud/ocis/issues/2285)
-- [coreApiWebdavOperations/refuseAccess.feature:21](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/refuseAccess.feature#L21)
-- [coreApiWebdavOperations/refuseAccess.feature:22](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/refuseAccess.feature#L22)
-- [coreApiWebdavOperations/refuseAccess.feature:34](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/refuseAccess.feature#L34)
-- [coreApiWebdavOperations/refuseAccess.feature:35](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/refuseAccess.feature#L35)
-
-#### [App Passwords/Tokens for legacy WebDAV clients](https://github.com/owncloud/ocis/issues/197)
-- [coreApiAuthWebDav/webDavDELETEAuth.feature:108](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavDELETEAuth.feature#L108)
-
-#### [Sharing a same file twice to the same group](https://github.com/owncloud/ocis/issues/1710)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:715](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L715)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:716](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L716)
-
-#### [Request to edit non-existing user by authorized admin gets unauthorized in http response](https://github.com/owncloud/ocis/issues/38423)
-- [coreApiAuthOcs/ocsPUTAuth.feature:26](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthOcs/ocsPUTAuth.feature#L26)
-
-
-### Won't fix
-Not everything needs to be implemented for ocis. While the oc10 testsuite covers these things we are not looking at them right now.
-
-* _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._
-
-#### [Blacklist files extensions](https://github.com/owncloud/ocis/issues/2177)
-- [coreApiWebdavProperties1/copyFile.feature:118](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L118)
-- [coreApiWebdavProperties1/copyFile.feature:117](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L117)
-- [coreApiWebdavProperties1/createFileFolder.feature:97](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolder.feature#L97)
-- [coreApiWebdavProperties1/createFileFolder.feature:98](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolder.feature#L98)
-- [coreApiWebdavUpload1/uploadFile.feature:180](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L180)
-- [coreApiWebdavUpload1/uploadFile.feature:181](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L181)
-
-#### [cannot set blacklisted file names](https://github.com/owncloud/product/issues/260)
-- [coreApiWebdavMove1/moveFolderToBlacklistedName.feature:20](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove1/moveFolderToBlacklistedName.feature#L20)
-- [coreApiWebdavMove1/moveFolderToBlacklistedName.feature:21](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove1/moveFolderToBlacklistedName.feature#L21)
-
-#### [cannot set blacklisted file names](https://github.com/owncloud/product/issues/260)
-- [coreApiWebdavMove2/moveFileToBlacklistedName.feature:18](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFileToBlacklistedName.feature#L18)
-- [coreApiWebdavMove2/moveFileToBlacklistedName.feature:19](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFileToBlacklistedName.feature#L19)
-
-#### [PATCH request for TUS upload with wrong checksum gives incorrect response](https://github.com/owncloud/ocis/issues/1755)
-- [coreApiWebdavUploadTUS/checksums.feature:86](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L86)
-- [coreApiWebdavUploadTUS/checksums.feature:87](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L87)
-- [coreApiWebdavUploadTUS/checksums.feature:88](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L88)
-- [coreApiWebdavUploadTUS/checksums.feature:89](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L89)
-- [coreApiWebdavUploadTUS/checksums.feature:175](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L175)
-- [coreApiWebdavUploadTUS/checksums.feature:176](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L176)
-- [coreApiWebdavUploadTUS/checksums.feature:228](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L228)
-- [coreApiWebdavUploadTUS/checksums.feature:229](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L229)
-- [coreApiWebdavUploadTUS/checksums.feature:230](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L230)
-- [coreApiWebdavUploadTUS/checksums.feature:231](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L231)
-- [coreApiWebdavUploadTUS/checksums.feature:284](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L284)
-- [coreApiWebdavUploadTUS/checksums.feature:285](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L285)
-- [coreApiWebdavUploadTUS/checksums.feature:286](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L286)
-- [coreApiWebdavUploadTUS/checksums.feature:287](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L287)
-- [coreApiWebdavUploadTUS/optionsRequest.feature:10](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/optionsRequest.feature#L10)
-- [coreApiWebdavUploadTUS/optionsRequest.feature:25](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/optionsRequest.feature#L25)
-- [coreApiWebdavUploadTUS/optionsRequest.feature:40](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/optionsRequest.feature#L40)
-- [coreApiWebdavUploadTUS/optionsRequest.feature:55](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/optionsRequest.feature#L55)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:175](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L175)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:176](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L176)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:194](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L194)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:195](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L195)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:213](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L213)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:214](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L214)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:252](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L252)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:253](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L253)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:294](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L294)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:295](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L295)
-
-#### [Share inaccessible if folder with same name was deleted and recreated](https://github.com/owncloud/ocis/issues/1787)
-- [coreApiShareReshareToShares1/reShare.feature:267](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L267)
-- [coreApiShareReshareToShares1/reShare.feature:268](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L268)
-- [coreApiShareReshareToShares1/reShare.feature:285](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L285)
-- [coreApiShareReshareToShares1/reShare.feature:286](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L286)
-- [coreApiShareReshareToShares1/reShare.feature:303](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L303)
-- [coreApiShareReshareToShares1/reShare.feature:304](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L304)
-
-#### [incorrect ocs(v2) status value when getting info of share that does not exist should be 404, gives 998](https://github.com/owncloud/product/issues/250)
-_ocs: api compatibility, return correct status code_
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:48](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L48)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:49](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L49)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:50](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L50)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:51](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L51)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:52](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L52)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:53](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L53)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:54](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L54)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:55](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L55)
-
-
-#### [Trying to accept a share with invalid ID gives incorrect OCS and HTTP status](https://github.com/owncloud/ocis/issues/2111)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:84](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L84)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:85](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L85)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:86](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L86)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:87](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L87)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:88](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L88)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:89](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L89)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:90](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L90)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:91](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L91)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:102](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L102)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:103](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L103)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:133](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L133)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:134](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L134)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:135](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L135)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:136](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L136)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:137](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L137)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:138](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L138)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:139](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L139)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:140](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L140)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:151](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L151)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:152](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L152)
-
-#### [[OC-storage] share-types field empty for shared file folder in webdav response](https://github.com/owncloud/ocis/issues/2144)
-- [coreApiWebdavProperties2/getFileProperties.feature:214](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L214)
-- [coreApiWebdavProperties2/getFileProperties.feature:215](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L215)
-
-#### [Different share permissions provides varying roles in oc10 and ocis](https://github.com/owncloud/ocis/issues/1277)
-- [coreApiWebdavProperties2/getFileProperties.feature:274](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L274)
-- [coreApiWebdavProperties2/getFileProperties.feature:275](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L275)
-
-#### [Cannot move folder/file from one received share to another](https://github.com/owncloud/ocis/issues/2442)
-- - [coreApiShareUpdateToShares/updateShare.feature:128](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L128)
-- [coreApiShareUpdateToShares/updateShare.feature:160](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L160)
-- [coreApiShareManagementToShares/mergeShare.feature:131](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/mergeShare.feature#L131)
-
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:221](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L221)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:252](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L252)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:351](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L351)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:382](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L382)
-
-#### [copying the file inside Shares folder returns 404](https://github.com/owncloud/ocis/issues/3874)
-- [coreApiWebdavProperties1/copyFile.feature:408](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L408)
-- [coreApiWebdavProperties1/copyFile.feature:407](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L407)
-- [coreApiWebdavProperties1/copyFile.feature:434](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L434)
-- [coreApiWebdavProperties1/copyFile.feature:433](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L433)
-
-#### [Downloading the older version of shared file gives 404](https://github.com/owncloud/ocis/issues/3868)
-- [coreApiVersions/fileVersions.feature:158](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L158)
-- [coreApiVersions/fileVersions.feature:176](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L176)
-- [coreApiVersions/fileVersions.feature:443](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L443)
-
-#### [file versions do not report the version author](https://github.com/owncloud/ocis/issues/2914)
-- [coreApiVersions/fileVersionAuthor.feature:15](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersionAuthor.feature#L15)
-- [coreApiVersions/fileVersionAuthor.feature:46](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersionAuthor.feature#L46)
-- [coreApiVersions/fileVersionAuthor.feature:73](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersionAuthor.feature#L73)
-- [coreApiVersions/fileVersionAuthor.feature:99](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersionAuthor.feature#L99)
-- [coreApiVersions/fileVersionAuthor.feature:132](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersionAuthor.feature#L132)
-- [coreApiVersions/fileVersionAuthor.feature:159](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersionAuthor.feature#L159)
-- [coreApiVersions/fileVersionAuthor.feature:190](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersionAuthor.feature#L190)
-- [coreApiVersions/fileVersionAuthor.feature:225](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersionAuthor.feature#L225)
-- [coreApiVersions/fileVersionAuthor.feature:277](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersionAuthor.feature#L277)
-- [coreApiVersions/fileVersionAuthor.feature:326](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersionAuthor.feature#L326)
-- [coreApiVersions/fileVersionAuthor.feature:347](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersionAuthor.feature#L347)
-
-#### [Shares to deleted group listed in the response](https://github.com/owncloud/ocis/issues/2441)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:529](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L529)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:532](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L532)
-
-### [Share path in the response is different between share states](https://github.com/owncloud/ocis/issues/2540)
-- [coreApiShareManagementToShares/acceptShares.feature:28](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptShares.feature#L28)
-- [coreApiShareManagementToShares/acceptShares.feature:62](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptShares.feature#L62)
-- [coreApiShareManagementToShares/acceptShares.feature:134](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptShares.feature#L134)
-- [coreApiShareManagementToShares/acceptShares.feature:155](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptShares.feature#L155)
-- [coreApiShareManagementToShares/acceptShares.feature:183](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptShares.feature#L183)
-- [coreApiShareManagementToShares/acceptShares.feature:228](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptShares.feature#L228)
-- [coreApiShareManagementToShares/acceptShares.feature:438](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptShares.feature#L438)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:121](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L121)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:122](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L122)
-- [coreApiShareManagementToShares/acceptShares.feature:208](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptShares.feature#L208)
-
-### [Content-type is not multipart/byteranges when downloading file with Range Header](https://github.com/owncloud/ocis/issues/2677)
-- [coreApiWebdavOperations/downloadFile.feature:183](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/downloadFile.feature#L183)
-- [coreApiWebdavOperations/downloadFile.feature:184](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/downloadFile.feature#L184)
-
-#### [Creating a new folder which is a substring of Shares leads to Unknown Error](https://github.com/owncloud/ocis/issues/3033)
-- [coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature:26](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature#L26)
-- [coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature:29](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature#L29)
-- [coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature:42](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature#L42)
-- [coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature:45](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature#L45)
-
-#### [moveShareInsideAnotherShare behaves differently on oCIS than oC10](https://github.com/owncloud/ocis/issues/3047)
-- [coreApiShareManagementToShares/moveShareInsideAnotherShare.feature:22](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/moveShareInsideAnotherShare.feature#L22)
-- [coreApiShareManagementToShares/moveShareInsideAnotherShare.feature:42](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/moveShareInsideAnotherShare.feature#L42)
-- [coreApiShareManagementToShares/moveShareInsideAnotherShare.feature:56](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/moveShareInsideAnotherShare.feature#L56)
-
-#### [resource path is included in the returned error message](https://github.com/owncloud/ocis/issues/3344)
-- [coreApiWebdavProperties2/getFileProperties.feature:310](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L310)
-
-#### [OCS status code zero](https://github.com/owncloud/ocis/issues/3621)
-- [coreApiShareManagementToShares/moveReceivedShare.feature:13](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/moveReceivedShare.feature#L13)
-
-#### [HTTP status code differ while listing the contents of another user's trash bin](https://github.com/owncloud/ocis/issues/3561)
-- [coreApiTrashbin/trashbinFilesFolders.feature:249](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinFilesFolders.feature#L249)
-
-#### [Cannot disable the dav propfind depth infinity for resources](https://github.com/owncloud/ocis/issues/3720)
-- [coreApiWebdavOperations/listFiles.feature:354](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L354)
-- [coreApiWebdavOperations/listFiles.feature:355](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L355)
-- [coreApiWebdavOperations/listFiles.feature:374](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L374)
-- [coreApiWebdavOperations/listFiles.feature:393](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L393)
-- [coreApiWebdavOperations/listFiles.feature:394](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L394)
-
-#### [trash-bin propfind responses are wrong in reva master](https://github.com/cs3org/reva/issues/2861)
-- [coreApiTrashbin/trashbinDelete.feature:29](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinDelete.feature#L29)
-- [coreApiTrashbin/trashbinDelete.feature:30](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinDelete.feature#L30)
-- [coreApiTrashbin/trashbinDelete.feature:53](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinDelete.feature#L53)
-- [coreApiTrashbin/trashbinDelete.feature:80](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinDelete.feature#L80)
-- [coreApiTrashbin/trashbinDelete.feature:123](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinDelete.feature#L123)
-- [coreApiTrashbin/trashbinDelete.feature:146](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinDelete.feature#L146)
-- [coreApiTrashbin/trashbinDelete.feature:171](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinDelete.feature#L171)
-- [coreApiTrashbin/trashbinDelete.feature:196](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinDelete.feature#L196)
-- [coreApiTrashbin/trashbinDelete.feature:233](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinDelete.feature#L233)
-- [coreApiTrashbin/trashbinDelete.feature:270](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinDelete.feature#L270)
-- [coreApiTrashbin/trashbinDelete.feature:319](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinDelete.feature#L319)
-- [coreApiTrashbin/trashbinFilesFolders.feature:20](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinFilesFolders.feature#L20)
-- [coreApiTrashbin/trashbinFilesFolders.feature:36](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinFilesFolders.feature#L36)
-- [coreApiTrashbin/trashbinFilesFolders.feature:55](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinFilesFolders.feature#L55)
-- [coreApiTrashbin/trashbinFilesFolders.feature:76](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinFilesFolders.feature#L76)
-- [coreApiTrashbin/trashbinFilesFolders.feature:95](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinFilesFolders.feature#L95)
-- [coreApiTrashbin/trashbinFilesFolders.feature:131](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinFilesFolders.feature#L131)
-- [coreApiTrashbin/trashbinFilesFolders.feature:154](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinFilesFolders.feature#L154)
-- [coreApiTrashbin/trashbinFilesFolders.feature:287](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinFilesFolders.feature#L287)
-- [coreApiTrashbin/trashbinFilesFolders.feature:305](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinFilesFolders.feature#L305)
-- [coreApiTrashbin/trashbinFilesFolders.feature:306](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinFilesFolders.feature#L306)
-- [coreApiTrashbin/trashbinFilesFolders.feature:307](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinFilesFolders.feature#L307)
-- [coreApiTrashbin/trashbinFilesFolders.feature:326](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinFilesFolders.feature#L326)
-- [coreApiTrashbin/trashbinFilesFolders.feature:346](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinFilesFolders.feature#L346)
-- [coreApiTrashbin/trashbinFilesFolders.feature:400](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinFilesFolders.feature#L400)
-- [coreApiTrashbin/trashbinFilesFolders.feature:437](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinFilesFolders.feature#L437)
-- [coreApiTrashbin/trashbinSharingToShares.feature:24](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinSharingToShares.feature#L24)
-- [coreApiTrashbin/trashbinSharingToShares.feature:207](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinSharingToShares.feature#L207)
-- [coreApiTrashbin/trashbinSharingToShares.feature:231](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinSharingToShares.feature#L231)
-- [coreApiTrashbinRestore/trashbinRestore.feature:34](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L34)
-- [coreApiTrashbinRestore/trashbinRestore.feature:35](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L35)
-- [coreApiTrashbinRestore/trashbinRestore.feature:50](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L50)
-- [coreApiTrashbinRestore/trashbinRestore.feature:51](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L51)
-- [coreApiTrashbinRestore/trashbinRestore.feature:68](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L68)
-- [coreApiTrashbinRestore/trashbinRestore.feature:69](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L69)
-- [coreApiTrashbinRestore/trashbinRestore.feature:88](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L88)
-- [coreApiTrashbinRestore/trashbinRestore.feature:89](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L89)
-- [coreApiTrashbinRestore/trashbinRestore.feature:90](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L90)
-- [coreApiTrashbinRestore/trashbinRestore.feature:91](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L91)
-- [coreApiTrashbinRestore/trashbinRestore.feature:92](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L92)
-- [coreApiTrashbinRestore/trashbinRestore.feature:93](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L93)
-- [coreApiTrashbinRestore/trashbinRestore.feature:108](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L108)
-- [coreApiTrashbinRestore/trashbinRestore.feature:109](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L109)
-- [coreApiTrashbinRestore/trashbinRestore.feature:110](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L110)
-- [coreApiTrashbinRestore/trashbinRestore.feature:111](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L111)
-- [coreApiTrashbinRestore/trashbinRestore.feature:130](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L130)
-- [coreApiTrashbinRestore/trashbinRestore.feature:131](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L131)
-- [coreApiTrashbinRestore/trashbinRestore.feature:145](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L145)
-- [coreApiTrashbinRestore/trashbinRestore.feature:146](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L146)
-- [coreApiTrashbinRestore/trashbinRestore.feature:160](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L160)
-- [coreApiTrashbinRestore/trashbinRestore.feature:161](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L161)
-- [coreApiTrashbinRestore/trashbinRestore.feature:175](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L175)
-- [coreApiTrashbinRestore/trashbinRestore.feature:176](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L176)
-- [coreApiTrashbinRestore/trashbinRestore.feature:192](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L192)
-- [coreApiTrashbinRestore/trashbinRestore.feature:193](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L193)
-- [coreApiTrashbinRestore/trashbinRestore.feature:194](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L194)
-- [coreApiTrashbinRestore/trashbinRestore.feature:195](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L195)
-- [coreApiTrashbinRestore/trashbinRestore.feature:190](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L190)
-- [coreApiTrashbinRestore/trashbinRestore.feature:191](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L191)
-- [coreApiTrashbinRestore/trashbinRestore.feature:212](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L212)
-- [coreApiTrashbinRestore/trashbinRestore.feature:213](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L213)
-- [coreApiTrashbinRestore/trashbinRestore.feature:230](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L230)
-- [coreApiTrashbinRestore/trashbinRestore.feature:231](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L231)
-- [coreApiTrashbinRestore/trashbinRestore.feature:250](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L250)
-- [coreApiTrashbinRestore/trashbinRestore.feature:251](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L251)
-- [coreApiTrashbinRestore/trashbinRestore.feature:270](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L270)
-- [coreApiTrashbinRestore/trashbinRestore.feature:271](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L271)
-- [coreApiTrashbinRestore/trashbinRestore.feature:304](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L304)
-- [coreApiTrashbinRestore/trashbinRestore.feature:305](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L305)
-- [coreApiTrashbinRestore/trashbinRestore.feature:343](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L343)
-- [coreApiTrashbinRestore/trashbinRestore.feature:344](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L344)
-- [coreApiTrashbinRestore/trashbinRestore.feature:382](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L382)
-- [coreApiTrashbinRestore/trashbinRestore.feature:383](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L383)
-- [coreApiTrashbinRestore/trashbinRestore.feature:400](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L400)
-- [coreApiTrashbinRestore/trashbinRestore.feature:401](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L401)
-- [coreApiTrashbinRestore/trashbinRestore.feature:419](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L419)
-- [coreApiTrashbinRestore/trashbinRestore.feature:420](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L420)
-- [coreApiTrashbinRestore/trashbinRestore.feature:443](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L443)
-- [coreApiTrashbinRestore/trashbinRestore.feature:444](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L444)
-- [coreApiTrashbinRestore/trashbinRestore.feature:462](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L462)
-- [coreApiTrashbinRestore/trashbinRestore.feature:463](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L463)
-- [coreApiTrashbinRestore/trashbinRestore.feature:477](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L477)
-- [coreApiTrashbinRestore/trashbinRestore.feature:478](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L478)
-- [coreApiTrashbinRestore/trashbinRestore.feature:531](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L531)
-- [coreApiTrashbinRestore/trashbinRestore.feature:532](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbinRestore/trashbinRestore.feature#L532)
-- [coreApiWebdavEtagPropagation2/restoreFromTrash.feature:28](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation2/restoreFromTrash.feature#L28)
-- [coreApiWebdavEtagPropagation2/restoreFromTrash.feature:29](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation2/restoreFromTrash.feature#L29)
-- [coreApiWebdavEtagPropagation2/restoreFromTrash.feature:51](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation2/restoreFromTrash.feature#L51)
-- [coreApiWebdavEtagPropagation2/restoreFromTrash.feature:52](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation2/restoreFromTrash.feature#L52)
-- [coreApiWebdavEtagPropagation2/restoreFromTrash.feature:72](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation2/restoreFromTrash.feature#L72)
-- [coreApiWebdavEtagPropagation2/restoreFromTrash.feature:73](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation2/restoreFromTrash.feature#L73)
-- [coreApiWebdavEtagPropagation2/restoreFromTrash.feature:95](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation2/restoreFromTrash.feature#L95)
-- [coreApiWebdavEtagPropagation2/restoreFromTrash.feature:96](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavEtagPropagation2/restoreFromTrash.feature#L96)
-- [coreApiVersions/fileVersions.feature:231](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L231)
-
-#### [`meta` requests have empty responses with master branch](https://github.com/cs3org/reva/issues/2897)
-- [coreApiVersions/fileVersions.feature:195](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L195)
-- [coreApiVersions/fileVersions.feature:201](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L201)
-- [coreApiVersions/fileVersions.feature:208](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L208)
-- [coreApiVersions/fileVersions.feature:216](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L216)
-- [coreApiVersions/fileVersions.feature:229](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L229)
-- [coreApiVersions/fileVersions.feature:230](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L230)
-- [coreApiVersions/fileVersions.feature:232](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L232)
-- [coreApiVersions/fileVersions.feature:235](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L235)
-
-#### [WebDAV MOVE with body returns 400 rather than 415](https://github.com/cs3org/reva/issues/3119)
-
-- [coreApiAuthWebDav/webDavMOVEAuth.feature:105](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavMOVEAuth.feature#L105)
-
-#### [reShareUpdate API tests failing in reva](https://github.com/cs3org/reva/issues/2916)
-
-- [coreApiShareReshareToShares3/reShareUpdate.feature:153](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares3/reShareUpdate.feature#L153)
-- [coreApiShareReshareToShares3/reShareUpdate.feature:154](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares3/reShareUpdate.feature#L154)
-
-#### [coreApiShareOperationsToShares1/gettingShares.feature:28 fails in CI](https://github.com/cs3org/reva/issues/2926)
-
-- [coreApiShareOperationsToShares1/gettingShares.feature:39](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingShares.feature#L39)
-- [coreApiShareOperationsToShares1/gettingShares.feature:40](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingShares.feature#L40)
-
-#### [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)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:280](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L280)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:281](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L281)
-
-#### [valid WebDAV (DELETE, COPY or MOVE) requests with body must exit with 415](https://github.com/owncloud/ocis/issues/4332)
-- [coreApiAuthWebDav/webDavCOPYAuth.feature:105](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavCOPYAuth.feature#L105)
-
-#### [PROPFIND on (password protected) public link returns invalid XML](https://github.com/owncloud/ocis/issues/39707)
-The problem has been fixed in reva edge branch but not in reva master
-- [coreApiWebdavOperations/propfind.feature:64](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/propfind.feature#L64)
-- [coreApiWebdavOperations/propfind.feature:76](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/propfind.feature#L76)
-
-#### [Updating the role of a public link to internal gives returns 400]
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:483](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L483)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:480](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L480)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:481](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L481)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:482](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L482)
-
-#### [Default capabilities for normal user and admin user not same as in oC-core](https://github.com/owncloud/ocis/issues/1285)
-- [coreApiCapabilities/capabilities.feature:10](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiCapabilities/capabilities.feature#L10)
-- [coreApiCapabilities/capabilities.feature:135](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiCapabilities/capabilities.feature#L135)
-- [coreApiCapabilities/capabilities.feature:174](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiCapabilities/capabilities.feature#L174)
-
-#### [Sharing of project space root via public link does no longer work](https://github.com/owncloud/ocis/issues/6278)
-- [coreApiShareCreateSpecialToShares2/createShareDefaultFolderForReceivedShares.feature:23](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareDefaultFolderForReceivedShares.feature#L23)
-- [coreApiShareCreateSpecialToShares2/createShareDefaultFolderForReceivedShares.feature:24](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareDefaultFolderForReceivedShares.feature#L24)
-
-
-#### Others
-- [coreApiAuthWebDav/webDavCOPYAuth.feature:31](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavCOPYAuth.feature#L31)
-- [coreApiAuthWebDav/webDavCOPYAuth.feature:63](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavCOPYAuth.feature#L63)
-- [coreApiAuthWebDav/webDavCOPYAuth.feature:77](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavCOPYAuth.feature#L77)
-- [coreApiAuthWebDav/webDavCOPYAuth.feature:91](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavCOPYAuth.feature#L91)
-- [coreApiAuthWebDav/webDavDELETEAuth.feature:18](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavDELETEAuth.feature#L18)
-- [coreApiAuthWebDav/webDavDELETEAuth.feature:33](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavDELETEAuth.feature#L33)
-- [coreApiAuthWebDav/webDavDELETEAuth.feature:66](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavDELETEAuth.feature#L66)
-- [coreApiAuthWebDav/webDavDELETEAuth.feature:80](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavDELETEAuth.feature#L80)
-- [coreApiAuthWebDav/webDavDELETEAuth.feature:94](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavDELETEAuth.feature#L94)
-- [coreApiAuthWebDav/webDavLOCKAuth.feature:18](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavLOCKAuth.feature#L18)
-- [coreApiAuthWebDav/webDavLOCKAuth.feature:32](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavLOCKAuth.feature#L32)
-- [coreApiAuthWebDav/webDavLOCKAuth.feature:70](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavLOCKAuth.feature#L70)
-- [coreApiAuthWebDav/webDavLOCKAuth.feature:84](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavLOCKAuth.feature#L84)
-- [coreApiAuthWebDav/webDavLOCKAuth.feature:98](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavLOCKAuth.feature#L98)
-- [coreApiAuthWebDav/webDavMKCOLAuth.feature:100](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavMKCOLAuth.feature#L100)
-- [coreApiAuthWebDav/webDavMKCOLAuth.feature:115](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavMKCOLAuth.feature#L115)
-- [coreApiAuthWebDav/webDavMKCOLAuth.feature:14](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavMKCOLAuth.feature#L14)
-- [coreApiAuthWebDav/webDavMKCOLAuth.feature:28](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavMKCOLAuth.feature#L28)
-- [coreApiAuthWebDav/webDavMKCOLAuth.feature:86](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavMKCOLAuth.feature#L86)
-- [coreApiAuthWebDav/webDavMOVEAuth.feature:17](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavMOVEAuth.feature#L17)
-- [coreApiAuthWebDav/webDavMOVEAuth.feature:31](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavMOVEAuth.feature#L31)
-- [coreApiAuthWebDav/webDavMOVEAuth.feature:63](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavMOVEAuth.feature#L63)
-- [coreApiAuthWebDav/webDavMOVEAuth.feature:77](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavMOVEAuth.feature#L77)
-- [coreApiAuthWebDav/webDavMOVEAuth.feature:91](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavMOVEAuth.feature#L91)
-- [coreApiAuthWebDav/webDavPOSTAuth.feature:18](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavPOSTAuth.feature#L18)
-- [coreApiAuthWebDav/webDavPOSTAuth.feature:32](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavPOSTAuth.feature#L32)
-- [coreApiAuthWebDav/webDavPOSTAuth.feature:64](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavPOSTAuth.feature#L64)
-- [coreApiAuthWebDav/webDavPOSTAuth.feature:78](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavPOSTAuth.feature#L78)
-- [coreApiAuthWebDav/webDavPOSTAuth.feature:92](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavPOSTAuth.feature#L92)
-- [coreApiAuthWebDav/webDavPROPFINDAuth.feature:17](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavPROPFINDAuth.feature#L17)
-- [coreApiAuthWebDav/webDavPROPFINDAuth.feature:31](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavPROPFINDAuth.feature#L31)
-- [coreApiAuthWebDav/webDavPROPFINDAuth.feature:63](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavPROPFINDAuth.feature#L63)
-- [coreApiAuthWebDav/webDavPROPFINDAuth.feature:77](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavPROPFINDAuth.feature#L77)
-- [coreApiAuthWebDav/webDavPROPFINDAuth.feature:91](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavPROPFINDAuth.feature#L91)
-- [coreApiAuthWebDav/webDavPROPPATCHAuth.feature:18](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavPROPPATCHAuth.feature#L18)
-- [coreApiAuthWebDav/webDavPROPPATCHAuth.feature:32](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavPROPPATCHAuth.feature#L32)
-- [coreApiAuthWebDav/webDavPROPPATCHAuth.feature:64](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavPROPPATCHAuth.feature#L64)
-- [coreApiAuthWebDav/webDavPROPPATCHAuth.feature:78](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavPROPPATCHAuth.feature#L78)
-- [coreApiAuthWebDav/webDavPROPPATCHAuth.feature:92](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavPROPPATCHAuth.feature#L92)
-- [coreApiAuthWebDav/webDavPUTAuth.feature:18](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavPUTAuth.feature#L18)
-- [coreApiAuthWebDav/webDavPUTAuth.feature:32](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavPUTAuth.feature#L32)
-- [coreApiAuthWebDav/webDavPUTAuth.feature:46](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavPUTAuth.feature#L46)
-- [coreApiAuthWebDav/webDavPUTAuth.feature:70](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavPUTAuth.feature#L70)
-- [coreApiAuthWebDav/webDavPUTAuth.feature:84](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavPUTAuth.feature#L84)
-- [coreApiAuthWebDav/webDavPUTAuth.feature:98](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavPUTAuth.feature#L98)
-- [coreApiAuthWebDav/webDavSpecialURLs.feature:102](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavSpecialURLs.feature#L102)
-- [coreApiAuthWebDav/webDavSpecialURLs.feature:144](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavSpecialURLs.feature#L144)
-- [coreApiAuthWebDav/webDavSpecialURLs.feature:15](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavSpecialURLs.feature#L15)
-- [coreApiAuthWebDav/webDavSpecialURLs.feature:186](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavSpecialURLs.feature#L186)
-- [coreApiAuthWebDav/webDavSpecialURLs.feature:57](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavSpecialURLs.feature#L57)
-- [coreApiAuthWebDav/webDavSpecialURLs.feature:68](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavSpecialURLs.feature#L68)
-- [coreApiAuthWebDav/webDavSpecialURLs.feature:78](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiAuthWebDav/webDavSpecialURLs.feature#L78)
-- [coreApiFavorites/favorites.feature:31](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favorites.feature#L31)
-- [coreApiFavorites/favorites.feature:32](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favorites.feature#L32)
-- [coreApiFavorites/favorites.feature:53](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favorites.feature#L53)
-- [coreApiFavorites/favorites.feature:54](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favorites.feature#L54)
-- [coreApiFavorites/favorites.feature:74](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favorites.feature#L74)
-- [coreApiFavorites/favorites.feature:75](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favorites.feature#L75)
-- [coreApiFavorites/favorites.feature:96](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favorites.feature#L96)
-- [coreApiFavorites/favorites.feature:97](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiFavorites/favorites.feature#L97)
-- [coreApiMain/checksums.feature:102](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L102)
-- [coreApiMain/checksums.feature:120](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L120)
-- [coreApiMain/checksums.feature:137](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L137)
-- [coreApiMain/checksums.feature:138](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L138)
-- [coreApiMain/checksums.feature:154](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L154)
-- [coreApiMain/checksums.feature:16](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L16)
-- [coreApiMain/checksums.feature:170](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L170)
-- [coreApiMain/checksums.feature:178](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L178)
-- [coreApiMain/checksums.feature:208](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L208)
-- [coreApiMain/checksums.feature:209](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L209)
-- [coreApiMain/checksums.feature:223](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L223)
-- [coreApiMain/checksums.feature:224](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L224)
-- [coreApiMain/checksums.feature:242](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L242)
-- [coreApiMain/checksums.feature:243](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L243)
-- [coreApiMain/checksums.feature:283](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L283)
-- [coreApiMain/checksums.feature:284](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L284)
-- [coreApiMain/checksums.feature:306](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L306)
-- [coreApiMain/checksums.feature:307](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L307)
-- [coreApiMain/checksums.feature:31](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L31)
-- [coreApiMain/checksums.feature:32](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L32)
-- [coreApiMain/checksums.feature:324](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L324)
-- [coreApiMain/checksums.feature:325](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L325)
-- [coreApiMain/checksums.feature:345](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L345)
-- [coreApiMain/checksums.feature:347](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L347)
-- [coreApiMain/checksums.feature:348](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L348)
-- [coreApiMain/checksums.feature:48](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L48)
-- [coreApiMain/checksums.feature:49](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L49)
-- [coreApiMain/checksums.feature:65](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L65)
-- [coreApiMain/checksums.feature:66](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L66)
-- [coreApiMain/checksums.feature:83](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L83)
-- [coreApiMain/checksums.feature:84](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiMain/checksums.feature#L84)
-- [coreApiShareCreateSpecialToShares1/createShareResourceCaseSensitiveName.feature:103](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares1/createShareResourceCaseSensitiveName.feature#L103)
-- [coreApiShareCreateSpecialToShares1/createShareResourceCaseSensitiveName.feature:13](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares1/createShareResourceCaseSensitiveName.feature#L13)
-- [coreApiShareCreateSpecialToShares1/createShareResourceCaseSensitiveName.feature:154](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares1/createShareResourceCaseSensitiveName.feature#L154)
-- [coreApiShareCreateSpecialToShares1/createShareResourceCaseSensitiveName.feature:201](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares1/createShareResourceCaseSensitiveName.feature#L201)
-- [coreApiShareCreateSpecialToShares1/createShareResourceCaseSensitiveName.feature:248](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares1/createShareResourceCaseSensitiveName.feature#L248)
-- [coreApiShareCreateSpecialToShares1/createShareResourceCaseSensitiveName.feature:58](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares1/createShareResourceCaseSensitiveName.feature#L58)
-- [coreApiShareCreateSpecialToShares2/createShareGroupAndUserWithSameName.feature:10](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareGroupAndUserWithSameName.feature#L10)
-- [coreApiShareCreateSpecialToShares2/createShareGroupAndUserWithSameName.feature:32](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareGroupAndUserWithSameName.feature#L32)
-- [coreApiShareCreateSpecialToShares2/createShareGroupAndUserWithSameName.feature:54](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareGroupAndUserWithSameName.feature#L54)
-- [coreApiShareCreateSpecialToShares2/createShareGroupAndUserWithSameName.feature:76](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareGroupAndUserWithSameName.feature#L76)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:191](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L191)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:283](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L283)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:319](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L319)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:413](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L413)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:445](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L445)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:514](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L514)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:515](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L515)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:543](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L543)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:544](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L544)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:570](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L570)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:571](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L571)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:63](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L63)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:64](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L64)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:80](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L80)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:81](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L81)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:98](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L98)
-- [coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature:99](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareReceivedInMultipleWays.feature#L99)
-- [coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature:115](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature#L115)
-- [coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature:116](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature#L116)
-- [coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature:117](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature#L117)
-- [coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature:118](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature#L118)
-- [coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature:27](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature#L27)
-- [coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature:28](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature#L28)
-- [coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature:29](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature#L29)
-- [coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature:30](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature#L30)
-- [coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature:31](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature#L31)
-- [coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature:32](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature#L32)
-- [coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature:33](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature#L33)
-- [coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature:34](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature#L34)
-- [coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature:52](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature#L52)
-- [coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature:53](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature#L53)
-- [coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature:71](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature#L71)
-- [coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature:72](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature#L72)
-- [coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature:73](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature#L73)
-- [coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature:74](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature#L74)
-- [coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature:94](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature#L94)
-- [coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature:95](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareCreateSpecialToShares2/createShareWithInvalidPermissions.feature#L95)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:100](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L100)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:101](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L101)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:116](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L116)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:117](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L117)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:133](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L133)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:157](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L157)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:158](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L158)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:182](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L182)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:183](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L183)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:207](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L207)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:208](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L208)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:235](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L235)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:236](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L236)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:274](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L274)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:275](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L275)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:294](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L294)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:295](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L295)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:342](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L342)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:343](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L343)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:360](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L360)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:361](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L361)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:377](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L377)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:378](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L378)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:396](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L396)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:397](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L397)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:400](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L400)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:422](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L422)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:466](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L466)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:467](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L467)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:561](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L561)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:579](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L579)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:597](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L597)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:644](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L644)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:645](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L645)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:65](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L65)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:66](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L66)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:700](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L700)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:701](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L701)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:91](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L91)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:92](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L92)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:94](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L94)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:95](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L95)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:97](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L97)
-- [coreApiShareManagementBasicToShares/createShareToSharesFolder.feature:98](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/createShareToSharesFolder.feature#L98)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:113](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L113)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:208](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L208)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:209](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L209)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:235](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L235)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:236](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L236)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:30](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L30)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:31](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L31)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:45](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L45)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:46](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L46)
-- [coreApiShareManagementBasicToShares/deleteShareFromShares.feature:92](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementBasicToShares/deleteShareFromShares.feature#L92)
-- [coreApiShareManagementToShares/acceptShares.feature:121](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptShares.feature#L121)
-- [coreApiShareManagementToShares/acceptShares.feature:174](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptShares.feature#L174)
-- [coreApiShareManagementToShares/acceptShares.feature:287](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptShares.feature#L287)
-- [coreApiShareManagementToShares/acceptShares.feature:310](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptShares.feature#L310)
-- [coreApiShareManagementToShares/acceptShares.feature:349](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptShares.feature#L349)
-- [coreApiShareManagementToShares/acceptShares.feature:374](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptShares.feature#L374)
-- [coreApiShareManagementToShares/acceptShares.feature:396](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptShares.feature#L396)
-- [coreApiShareManagementToShares/acceptShares.feature:421](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptShares.feature#L421)
-- [coreApiShareManagementToShares/acceptShares.feature:81](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptShares.feature#L81)
-- [coreApiShareManagementToShares/acceptSharesToSharesFolder.feature:15](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptSharesToSharesFolder.feature#L15)
-- [coreApiShareManagementToShares/acceptSharesToSharesFolder.feature:24](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptSharesToSharesFolder.feature#L24)
-- [coreApiShareManagementToShares/acceptSharesToSharesFolder.feature:32](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptSharesToSharesFolder.feature#L32)
-- [coreApiShareManagementToShares/acceptSharesToSharesFolder.feature:53](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/acceptSharesToSharesFolder.feature#L53)
-- [coreApiShareManagementToShares/mergeShare.feature:14](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/mergeShare.feature#L14)
-- [coreApiShareManagementToShares/mergeShare.feature:25](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/mergeShare.feature#L25)
-- [coreApiShareManagementToShares/mergeShare.feature:36](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/mergeShare.feature#L36)
-- [coreApiShareManagementToShares/mergeShare.feature:49](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/mergeShare.feature#L49)
-- [coreApiShareManagementToShares/mergeShare.feature:62](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/mergeShare.feature#L62)
-- [coreApiShareManagementToShares/mergeShare.feature:76](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/mergeShare.feature#L76)
-- [coreApiShareManagementToShares/mergeShare.feature:85](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/mergeShare.feature#L85)
-- [coreApiShareManagementToShares/moveReceivedShare.feature:105](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/moveReceivedShare.feature#L105)
-- [coreApiShareManagementToShares/moveReceivedShare.feature:117](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/moveReceivedShare.feature#L117)
-- [coreApiShareManagementToShares/moveReceivedShare.feature:129](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/moveReceivedShare.feature#L129)
-- [coreApiShareManagementToShares/moveReceivedShare.feature:141](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/moveReceivedShare.feature#L141)
-- [coreApiShareManagementToShares/moveReceivedShare.feature:153](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/moveReceivedShare.feature#L153)
-- [coreApiShareManagementToShares/moveReceivedShare.feature:184](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/moveReceivedShare.feature#L184)
-- [coreApiShareManagementToShares/moveReceivedShare.feature:185](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/moveReceivedShare.feature#L185)
-- [coreApiShareManagementToShares/moveReceivedShare.feature:209](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/moveReceivedShare.feature#L209)
-- [coreApiShareManagementToShares/moveReceivedShare.feature:210](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/moveReceivedShare.feature#L210)
-- [coreApiShareManagementToShares/moveReceivedShare.feature:29](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/moveReceivedShare.feature#L29)
-- [coreApiShareManagementToShares/moveReceivedShare.feature:42](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/moveReceivedShare.feature#L42)
-- [coreApiShareManagementToShares/moveReceivedShare.feature:58](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/moveReceivedShare.feature#L58)
-- [coreApiShareManagementToShares/moveReceivedShare.feature:73](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/moveReceivedShare.feature#L73)
-- [coreApiShareManagementToShares/moveReceivedShare.feature:83](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/moveReceivedShare.feature#L83)
-- [coreApiShareManagementToShares/moveReceivedShare.feature:93](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/moveReceivedShare.feature#L93)
-- [coreApiShareManagementToShares/moveShareInsideAnotherShare.feature:31](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareManagementToShares/moveShareInsideAnotherShare.feature#L31)
-- [coreApiShareOperationsToShares1/accessToShare.feature:24](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/accessToShare.feature#L24)
-- [coreApiShareOperationsToShares1/accessToShare.feature:25](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/accessToShare.feature#L25)
-- [coreApiShareOperationsToShares1/accessToShare.feature:41](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/accessToShare.feature#L41)
-- [coreApiShareOperationsToShares1/accessToShare.feature:42](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/accessToShare.feature#L42)
-- [coreApiShareOperationsToShares1/accessToShare.feature:58](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/accessToShare.feature#L58)
-- [coreApiShareOperationsToShares1/accessToShare.feature:59](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/accessToShare.feature#L59)
-- [coreApiShareOperationsToShares1/accessToShare.feature:74](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/accessToShare.feature#L74)
-- [coreApiShareOperationsToShares1/accessToShare.feature:75](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/accessToShare.feature#L75)
-- [coreApiShareOperationsToShares1/changingFilesShare.feature:48](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/changingFilesShare.feature#L48)
-- [coreApiShareOperationsToShares1/changingFilesShare.feature:49](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/changingFilesShare.feature#L49)
-- [coreApiShareOperationsToShares1/gettingShares.feature:106](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingShares.feature#L106)
-- [coreApiShareOperationsToShares1/gettingShares.feature:107](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingShares.feature#L107)
-- [coreApiShareOperationsToShares1/gettingShares.feature:137](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingShares.feature#L137)
-- [coreApiShareOperationsToShares1/gettingShares.feature:138](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingShares.feature#L138)
-- [coreApiShareOperationsToShares1/gettingShares.feature:24](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingShares.feature#L24)
-- [coreApiShareOperationsToShares1/gettingShares.feature:25](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingShares.feature#L25)
-- [coreApiShareOperationsToShares1/gettingShares.feature:62](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingShares.feature#L62)
-- [coreApiShareOperationsToShares1/gettingShares.feature:63](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingShares.feature#L63)
-- [coreApiShareOperationsToShares1/gettingShares.feature:85](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingShares.feature#L85)
-- [coreApiShareOperationsToShares1/gettingShares.feature:86](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingShares.feature#L86)
-- [coreApiShareOperationsToShares1/gettingSharesPendingFiltered.feature:42](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesPendingFiltered.feature#L42)
-- [coreApiShareOperationsToShares1/gettingSharesPendingFiltered.feature:43](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesPendingFiltered.feature#L43)
-- [coreApiShareOperationsToShares1/gettingSharesPendingFiltered.feature:55](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesPendingFiltered.feature#L55)
-- [coreApiShareOperationsToShares1/gettingSharesPendingFiltered.feature:56](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesPendingFiltered.feature#L56)
-- [coreApiShareOperationsToShares1/gettingSharesReceivedFilteredEmpty.feature:39](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesReceivedFilteredEmpty.feature#L39)
-- [coreApiShareOperationsToShares1/gettingSharesReceivedFilteredEmpty.feature:40](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesReceivedFilteredEmpty.feature#L40)
-- [coreApiShareOperationsToShares1/gettingSharesReceivedFilteredEmpty.feature:61](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesReceivedFilteredEmpty.feature#L61)
-- [coreApiShareOperationsToShares1/gettingSharesReceivedFilteredEmpty.feature:62](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesReceivedFilteredEmpty.feature#L62)
-- [coreApiShareOperationsToShares1/gettingSharesReceivedFilteredEmpty.feature:90](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesReceivedFilteredEmpty.feature#L90)
-- [coreApiShareOperationsToShares1/gettingSharesReceivedFilteredEmpty.feature:91](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesReceivedFilteredEmpty.feature#L91)
-- [coreApiShareOperationsToShares1/gettingSharesReceivedFiltered.feature:45](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesReceivedFiltered.feature#L45)
-- [coreApiShareOperationsToShares1/gettingSharesReceivedFiltered.feature:46](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesReceivedFiltered.feature#L46)
-- [coreApiShareOperationsToShares1/gettingSharesReceivedFiltered.feature:59](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesReceivedFiltered.feature#L59)
-- [coreApiShareOperationsToShares1/gettingSharesReceivedFiltered.feature:60](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesReceivedFiltered.feature#L60)
-- [coreApiShareOperationsToShares1/gettingSharesSharedFilteredEmpty.feature:39](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesSharedFilteredEmpty.feature#L39)
-- [coreApiShareOperationsToShares1/gettingSharesSharedFilteredEmpty.feature:40](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesSharedFilteredEmpty.feature#L40)
-- [coreApiShareOperationsToShares1/gettingSharesSharedFilteredEmpty.feature:61](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesSharedFilteredEmpty.feature#L61)
-- [coreApiShareOperationsToShares1/gettingSharesSharedFilteredEmpty.feature:62](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesSharedFilteredEmpty.feature#L62)
-- [coreApiShareOperationsToShares1/gettingSharesSharedFilteredEmpty.feature:81](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesSharedFilteredEmpty.feature#L81)
-- [coreApiShareOperationsToShares1/gettingSharesSharedFilteredEmpty.feature:82](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesSharedFilteredEmpty.feature#L82)
-- [coreApiShareOperationsToShares1/gettingSharesSharedFiltered.feature:45](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesSharedFiltered.feature#L45)
-- [coreApiShareOperationsToShares1/gettingSharesSharedFiltered.feature:46](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesSharedFiltered.feature#L46)
-- [coreApiShareOperationsToShares1/gettingSharesSharedFiltered.feature:59](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesSharedFiltered.feature#L59)
-- [coreApiShareOperationsToShares1/gettingSharesSharedFiltered.feature:60](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesSharedFiltered.feature#L60)
-- [coreApiShareOperationsToShares1/gettingSharesSharedFiltered.feature:73](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesSharedFiltered.feature#L73)
-- [coreApiShareOperationsToShares1/gettingSharesSharedFiltered.feature:74](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesSharedFiltered.feature#L74)
-- [coreApiShareOperationsToShares1/gettingSharesSharedFiltered.feature:89](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesSharedFiltered.feature#L89)
-- [coreApiShareOperationsToShares1/gettingSharesSharedFiltered.feature:90](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares1/gettingSharesSharedFiltered.feature#L90)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:104](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L104)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:105](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L105)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:119](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L119)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:120](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L120)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:141](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L141)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:142](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L142)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:156](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L156)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:176](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L176)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:177](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L177)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:197](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L197)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:198](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L198)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:212](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L212)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:213](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L213)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:234](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L234)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:235](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L235)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:249](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L249)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:25](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L25)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:250](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L250)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:271](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L271)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:272](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L272)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:286](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L286)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:287](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L287)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:308](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L308)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:309](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L309)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:323](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L323)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:324](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L324)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:345](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L345)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:346](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L346)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:45](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L45)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:46](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L46)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:67](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L67)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:68](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L68)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:82](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L82)
-- [coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature:83](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/getWebDAVSharePermissions.feature#L83)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:36](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L36)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:37](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L37)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:72](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L72)
-- [coreApiShareOperationsToShares2/shareAccessByID.feature:73](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/shareAccessByID.feature#L73)
-- [coreApiShareOperationsToShares2/uploadToShare.feature:10](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/uploadToShare.feature#L10)
-- [coreApiShareOperationsToShares2/uploadToShare.feature:119](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/uploadToShare.feature#L119)
-- [coreApiShareOperationsToShares2/uploadToShare.feature:120](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/uploadToShare.feature#L120)
-- [coreApiShareOperationsToShares2/uploadToShare.feature:145](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/uploadToShare.feature#L145)
-- [coreApiShareOperationsToShares2/uploadToShare.feature:146](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/uploadToShare.feature#L146)
-- [coreApiShareOperationsToShares2/uploadToShare.feature:272](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/uploadToShare.feature#L272)
-- [coreApiShareOperationsToShares2/uploadToShare.feature:273](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/uploadToShare.feature#L273)
-- [coreApiShareOperationsToShares2/uploadToShare.feature:288](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/uploadToShare.feature#L288)
-- [coreApiShareOperationsToShares2/uploadToShare.feature:289](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/uploadToShare.feature#L289)
-- [coreApiShareOperationsToShares2/uploadToShare.feature:41](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/uploadToShare.feature#L41)
-- [coreApiShareOperationsToShares2/uploadToShare.feature:42](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/uploadToShare.feature#L42)
-- [coreApiShareOperationsToShares2/uploadToShare.feature:67](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/uploadToShare.feature#L67)
-- [coreApiShareOperationsToShares2/uploadToShare.feature:68](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/uploadToShare.feature#L68)
-- [coreApiShareOperationsToShares2/uploadToShare.feature:95](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/uploadToShare.feature#L95)
-- [coreApiShareOperationsToShares2/uploadToShare.feature:96](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareOperationsToShares2/uploadToShare.feature#L96)
-- [coreApiSharePublicLink1/accessToPublicLinkShare.feature:22](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/accessToPublicLinkShare.feature#L22)
-- [coreApiSharePublicLink1/accessToPublicLinkShare.feature:46](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/accessToPublicLinkShare.feature#L46)
-- [coreApiSharePublicLink1/changingPublicLinkShare.feature:103](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L103)
-- [coreApiSharePublicLink1/changingPublicLinkShare.feature:113](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L113)
-- [coreApiSharePublicLink1/changingPublicLinkShare.feature:123](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L123)
-- [coreApiSharePublicLink1/changingPublicLinkShare.feature:26](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L26)
-- [coreApiSharePublicLink1/changingPublicLinkShare.feature:27](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L27)
-- [coreApiSharePublicLink1/changingPublicLinkShare.feature:28](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L28)
-- [coreApiSharePublicLink1/changingPublicLinkShare.feature:29](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L29)
-- [coreApiSharePublicLink1/changingPublicLinkShare.feature:32](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L32)
-- [coreApiSharePublicLink1/changingPublicLinkShare.feature:42](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L42)
-- [coreApiSharePublicLink1/changingPublicLinkShare.feature:51](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L51)
-- [coreApiSharePublicLink1/changingPublicLinkShare.feature:61](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L61)
-- [coreApiSharePublicLink1/changingPublicLinkShare.feature:71](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L71)
-- [coreApiSharePublicLink1/changingPublicLinkShare.feature:82](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L82)
-- [coreApiSharePublicLink1/changingPublicLinkShare.feature:93](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/changingPublicLinkShare.feature#L93)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:100](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L100)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:129](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L129)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:130](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L130)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:228](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L228)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:229](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L229)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:248](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L248)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:249](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L249)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:268](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L268)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:269](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L269)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:296](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L296)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:297](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L297)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:313](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L313)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:314](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L314)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:338](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L338)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:358](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L358)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:359](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L359)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:37](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L37)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:373](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L373)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:374](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L374)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:377](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L377)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:38](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L38)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:389](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L389)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:402](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L402)
-- [coreApiSharePublicLink1/createPublicLinkShare.feature:99](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/createPublicLinkShare.feature#L99)
-- [coreApiSharePublicLink1/deletePublicLinkShare.feature:22](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/deletePublicLinkShare.feature#L22)
-- [coreApiSharePublicLink1/deletePublicLinkShare.feature:23](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/deletePublicLinkShare.feature#L23)
-- [coreApiSharePublicLink1/deletePublicLinkShare.feature:39](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/deletePublicLinkShare.feature#L39)
-- [coreApiSharePublicLink1/deletePublicLinkShare.feature:40](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/deletePublicLinkShare.feature#L40)
-- [coreApiSharePublicLink1/deletePublicLinkShare.feature:55](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/deletePublicLinkShare.feature#L55)
-- [coreApiSharePublicLink1/deletePublicLinkShare.feature:56](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/deletePublicLinkShare.feature#L56)
-- [coreApiSharePublicLink1/deletePublicLinkShare.feature:72](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/deletePublicLinkShare.feature#L72)
-- [coreApiSharePublicLink1/deletePublicLinkShare.feature:73](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink1/deletePublicLinkShare.feature#L73)
-- [coreApiSharePublicLink2/copyFromPublicLink.feature:11](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L11)
-- [coreApiSharePublicLink2/copyFromPublicLink.feature:119](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L119)
-- [coreApiSharePublicLink2/copyFromPublicLink.feature:120](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L120)
-- [coreApiSharePublicLink2/copyFromPublicLink.feature:121](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L121)
-- [coreApiSharePublicLink2/copyFromPublicLink.feature:122](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L122)
-- [coreApiSharePublicLink2/copyFromPublicLink.feature:138](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L138)
-- [coreApiSharePublicLink2/copyFromPublicLink.feature:139](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L139)
-- [coreApiSharePublicLink2/copyFromPublicLink.feature:140](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L140)
-- [coreApiSharePublicLink2/copyFromPublicLink.feature:141](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L141)
-- [coreApiSharePublicLink2/copyFromPublicLink.feature:158](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L158)
-- [coreApiSharePublicLink2/copyFromPublicLink.feature:159](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L159)
-- [coreApiSharePublicLink2/copyFromPublicLink.feature:160](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L160)
-- [coreApiSharePublicLink2/copyFromPublicLink.feature:161](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L161)
-- [coreApiSharePublicLink2/copyFromPublicLink.feature:24](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L24)
-- [coreApiSharePublicLink2/copyFromPublicLink.feature:38](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L38)
-- [coreApiSharePublicLink2/copyFromPublicLink.feature:52](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L52)
-- [coreApiSharePublicLink2/copyFromPublicLink.feature:80](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/copyFromPublicLink.feature#L80)
-- [coreApiSharePublicLink2/multilinkSharing.feature:112](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/multilinkSharing.feature#L112)
-- [coreApiSharePublicLink2/multilinkSharing.feature:113](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/multilinkSharing.feature#L113)
-- [coreApiSharePublicLink2/multilinkSharing.feature:178](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/multilinkSharing.feature#L178)
-- [coreApiSharePublicLink2/multilinkSharing.feature:179](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/multilinkSharing.feature#L179)
-- [coreApiSharePublicLink2/multilinkSharing.feature:206](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/multilinkSharing.feature#L206)
-- [coreApiSharePublicLink2/multilinkSharing.feature:207](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/multilinkSharing.feature#L207)
-- [coreApiSharePublicLink2/multilinkSharing.feature:241](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/multilinkSharing.feature#L241)
-- [coreApiSharePublicLink2/multilinkSharing.feature:242](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/multilinkSharing.feature#L242)
-- [coreApiSharePublicLink2/multilinkSharing.feature:45](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/multilinkSharing.feature#L45)
-- [coreApiSharePublicLink2/multilinkSharing.feature:46](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/multilinkSharing.feature#L46)
-- [coreApiSharePublicLink2/multilinkSharing.feature:81](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/multilinkSharing.feature#L81)
-- [coreApiSharePublicLink2/multilinkSharing.feature:82](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/multilinkSharing.feature#L82)
-- [coreApiSharePublicLink2/reShareAsPublicLinkToSharesNewDav.feature:119](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/reShareAsPublicLinkToSharesNewDav.feature#L119)
-- [coreApiSharePublicLink2/reShareAsPublicLinkToSharesNewDav.feature:120](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/reShareAsPublicLinkToSharesNewDav.feature#L120)
-- [coreApiSharePublicLink2/reShareAsPublicLinkToSharesNewDav.feature:45](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/reShareAsPublicLinkToSharesNewDav.feature#L45)
-- [coreApiSharePublicLink2/reShareAsPublicLinkToSharesNewDav.feature:46](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/reShareAsPublicLinkToSharesNewDav.feature#L46)
-- [coreApiSharePublicLink2/reShareAsPublicLinkToSharesNewDav.feature:98](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/reShareAsPublicLinkToSharesNewDav.feature#L98)
-- [coreApiSharePublicLink2/reShareAsPublicLinkToSharesNewDav.feature:99](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink2/reShareAsPublicLinkToSharesNewDav.feature#L99)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:117](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L117)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:118](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L118)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:149](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L149)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:150](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L150)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:181](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L181)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:182](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L182)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:213](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L213)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:214](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L214)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:245](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L245)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:246](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L246)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:287](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L287)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:288](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L288)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:329](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L329)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:330](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L330)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:349](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L349)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:350](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L350)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:371](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L371)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:372](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L372)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:409](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L409)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:410](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L410)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:411](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L411)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:412](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L412)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:455](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L455)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:456](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L456)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:457](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L457)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:458](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L458)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:47](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L47)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:48](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L48)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:80](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L80)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:81](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L81)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:98](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L98)
-- [coreApiSharePublicLink3/updatePublicLinkShare.feature:99](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/updatePublicLinkShare.feature#L99)
-- [coreApiSharePublicLink3/uploadToPublicLinkShare.feature:105](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/uploadToPublicLinkShare.feature#L105)
-- [coreApiSharePublicLink3/uploadToPublicLinkShare.feature:39](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/uploadToPublicLinkShare.feature#L39)
-- [coreApiSharePublicLink3/uploadToPublicLinkShare.feature:40](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/uploadToPublicLinkShare.feature#L40)
-- [coreApiSharePublicLink3/uploadToPublicLinkShare.feature:48](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/uploadToPublicLinkShare.feature#L48)
-- [coreApiSharePublicLink3/uploadToPublicLinkShare.feature:56](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/uploadToPublicLinkShare.feature#L56)
-- [coreApiSharePublicLink3/uploadToPublicLinkShare.feature:67](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/uploadToPublicLinkShare.feature#L67)
-- [coreApiSharePublicLink3/uploadToPublicLinkShare.feature:77](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiSharePublicLink3/uploadToPublicLinkShare.feature#L77)
-- [coreApiShareReshareToShares1/reShare.feature:109](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L109)
-- [coreApiShareReshareToShares1/reShare.feature:110](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L110)
-- [coreApiShareReshareToShares1/reShare.feature:165](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L165)
-- [coreApiShareReshareToShares1/reShare.feature:166](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L166)
-- [coreApiShareReshareToShares1/reShare.feature:167](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L167)
-- [coreApiShareReshareToShares1/reShare.feature:168](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L168)
-- [coreApiShareReshareToShares1/reShare.feature:169](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L169)
-- [coreApiShareReshareToShares1/reShare.feature:170](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L170)
-- [coreApiShareReshareToShares1/reShare.feature:171](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L171)
-- [coreApiShareReshareToShares1/reShare.feature:172](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L172)
-- [coreApiShareReshareToShares1/reShare.feature:173](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L173)
-- [coreApiShareReshareToShares1/reShare.feature:174](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L174)
-- [coreApiShareReshareToShares1/reShare.feature:175](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L175)
-- [coreApiShareReshareToShares1/reShare.feature:176](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L176)
-- [coreApiShareReshareToShares1/reShare.feature:177](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L177)
-- [coreApiShareReshareToShares1/reShare.feature:178](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L178)
-- [coreApiShareReshareToShares1/reShare.feature:179](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L179)
-- [coreApiShareReshareToShares1/reShare.feature:180](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L180)
-- [coreApiShareReshareToShares1/reShare.feature:61](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L61)
-- [coreApiShareReshareToShares1/reShare.feature:62](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L62)
-- [coreApiShareReshareToShares1/reShare.feature:77](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L77)
-- [coreApiShareReshareToShares1/reShare.feature:78](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L78)
-- [coreApiShareReshareToShares1/reShare.feature:93](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L93)
-- [coreApiShareReshareToShares1/reShare.feature:94](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares1/reShare.feature#L94)
-- [coreApiShareReshareToShares2/reShareChain.feature:8](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares2/reShareChain.feature#L8)
-- [coreApiShareReshareToShares2/reShareDisabled.feature:22](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares2/reShareDisabled.feature#L22)
-- [coreApiShareReshareToShares2/reShareDisabled.feature:23](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares2/reShareDisabled.feature#L23)
-- [coreApiShareReshareToShares2/reShareSubfolder.feature:103](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares2/reShareSubfolder.feature#L103)
-- [coreApiShareReshareToShares2/reShareSubfolder.feature:104](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares2/reShareSubfolder.feature#L104)
-- [coreApiShareReshareToShares2/reShareSubfolder.feature:123](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares2/reShareSubfolder.feature#L123)
-- [coreApiShareReshareToShares2/reShareSubfolder.feature:124](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares2/reShareSubfolder.feature#L124)
-- [coreApiShareReshareToShares2/reShareSubfolder.feature:29](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares2/reShareSubfolder.feature#L29)
-- [coreApiShareReshareToShares2/reShareSubfolder.feature:30](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares2/reShareSubfolder.feature#L30)
-- [coreApiShareReshareToShares3/reShareUpdate.feature:116](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares3/reShareUpdate.feature#L116)
-- [coreApiShareReshareToShares3/reShareUpdate.feature:117](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares3/reShareUpdate.feature#L117)
-- [coreApiShareReshareToShares3/reShareUpdate.feature:135](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares3/reShareUpdate.feature#L135)
-- [coreApiShareReshareToShares3/reShareUpdate.feature:136](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares3/reShareUpdate.feature#L136)
-- [coreApiShareReshareToShares3/reShareUpdate.feature:29](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares3/reShareUpdate.feature#L29)
-- [coreApiShareReshareToShares3/reShareUpdate.feature:30](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares3/reShareUpdate.feature#L30)
-- [coreApiShareReshareToShares3/reShareUpdate.feature:46](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares3/reShareUpdate.feature#L46)
-- [coreApiShareReshareToShares3/reShareUpdate.feature:47](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares3/reShareUpdate.feature#L47)
-- [coreApiShareReshareToShares3/reShareUpdate.feature:80](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares3/reShareUpdate.feature#L80)
-- [coreApiShareReshareToShares3/reShareUpdate.feature:81](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares3/reShareUpdate.feature#L81)
-- [coreApiShareReshareToShares3/reShareUpdate.feature:97](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares3/reShareUpdate.feature#L97)
-- [coreApiShareReshareToShares3/reShareUpdate.feature:98](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareReshareToShares3/reShareUpdate.feature#L98)
-- [coreApiShareUpdateToShares/updateShare.feature:128](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L128)
-- [coreApiShareUpdateToShares/updateShare.feature:258](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L258)
-- [coreApiShareUpdateToShares/updateShare.feature:259](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L259)
-- [coreApiShareUpdateToShares/updateShare.feature:279](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L279)
-- [coreApiShareUpdateToShares/updateShare.feature:280](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L280)
-- [coreApiShareUpdateToShares/updateShare.feature:30](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L30)
-- [coreApiShareUpdateToShares/updateShare.feature:31](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L31)
-- [coreApiShareUpdateToShares/updateShare.feature:63](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L63)
-- [coreApiShareUpdateToShares/updateShare.feature:64](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L64)
-- [coreApiShareUpdateToShares/updateShare.feature:78](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L78)
-- [coreApiShareUpdateToShares/updateShare.feature:79](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShare.feature#L79)
-- [coreApiShareUpdateToShares/updateShareGroupAndUserWithSameName.feature:35](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShareGroupAndUserWithSameName.feature#L35)
-- [coreApiShareUpdateToShares/updateShareGroupAndUserWithSameName.feature:36](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShareGroupAndUserWithSameName.feature#L36)
-- [coreApiShareUpdateToShares/updateShareGroupAndUserWithSameName.feature:55](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShareGroupAndUserWithSameName.feature#L55)
-- [coreApiShareUpdateToShares/updateShareGroupAndUserWithSameName.feature:56](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiShareUpdateToShares/updateShareGroupAndUserWithSameName.feature#L56)
-- [coreApiTrashbin/trashbinFilesFolders.feature:363](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiTrashbin/trashbinFilesFolders.feature#L363)
-- [coreApiVersions/fileVersions.feature:12](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L12)
-- [coreApiVersions/fileVersions.feature:120](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L120)
-- [coreApiVersions/fileVersions.feature:129](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L129)
-- [coreApiVersions/fileVersions.feature:141](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L141)
-- [coreApiVersions/fileVersions.feature:148](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L148)
-- [coreApiVersions/fileVersions.feature:18](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L18)
-- [coreApiVersions/fileVersions.feature:251](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L251)
-- [coreApiVersions/fileVersions.feature:258](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L258)
-- [coreApiVersions/fileVersions.feature:26](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L26)
-- [coreApiVersions/fileVersions.feature:266](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L266)
-- [coreApiVersions/fileVersions.feature:298](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L298)
-- [coreApiVersions/fileVersions.feature:324](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L324)
-- [coreApiVersions/fileVersions.feature:337](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L337)
-- [coreApiVersions/fileVersions.feature:34](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L34)
-- [coreApiVersions/fileVersions.feature:350](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L350)
-- [coreApiVersions/fileVersions.feature:391](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L391)
-- [coreApiVersions/fileVersions.feature:392](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L392)
-- [coreApiVersions/fileVersions.feature:416](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L416)
-- [coreApiVersions/fileVersions.feature:417](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L417)
-- [coreApiVersions/fileVersions.feature:420](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L420)
-- [coreApiVersions/fileVersions.feature:43](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L43)
-- [coreApiVersions/fileVersions.feature:53](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L53)
-- [coreApiVersions/fileVersions.feature:62](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L62)
-- [coreApiVersions/fileVersions.feature:71](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L71)
-- [coreApiVersions/fileVersions.feature:84](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiVersions/fileVersions.feature#L84)
-- [coreApiWebdavDelete/deleteFile.feature:124](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavDelete/deleteFile.feature#L124)
-- [coreApiWebdavDelete/deleteFile.feature:125](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavDelete/deleteFile.feature#L125)
-- [coreApiWebdavDelete/deleteFile.feature:57](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavDelete/deleteFile.feature#L57)
-- [coreApiWebdavDelete/deleteFile.feature:62](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavDelete/deleteFile.feature#L62)
-- [coreApiWebdavDelete/deleteFile.feature:63](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavDelete/deleteFile.feature#L63)
-- [coreApiWebdavDelete/deleteFile.feature:64](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavDelete/deleteFile.feature#L64)
-- [coreApiWebdavDelete/deleteFile.feature:65](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavDelete/deleteFile.feature#L65)
-- [coreApiWebdavDelete/deleteFile.feature:66](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavDelete/deleteFile.feature#L66)
-- [coreApiWebdavDelete/deleteFile.feature:67](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavDelete/deleteFile.feature#L67)
-- [coreApiWebdavDelete/deleteFile.feature:68](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavDelete/deleteFile.feature#L68)
-- [coreApiWebdavDelete/deleteFile.feature:69](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavDelete/deleteFile.feature#L69)
-- [coreApiWebdavDelete/deleteFolderContents.feature:32](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavDelete/deleteFolderContents.feature#L32)
-- [coreApiWebdavDelete/deleteFolderContents.feature:33](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavDelete/deleteFolderContents.feature#L33)
-- [coreApiWebdavDelete/deleteFolder.feature:37](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavDelete/deleteFolder.feature#L37)
-- [coreApiWebdavDelete/deleteFolder.feature:76](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavDelete/deleteFolder.feature#L76)
-- [coreApiWebdavDelete/deleteFolder.feature:83](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavDelete/deleteFolder.feature#L83)
-- [coreApiWebdavMove1/moveFolder.feature:114](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove1/moveFolder.feature#L114)
-- [coreApiWebdavMove1/moveFolder.feature:115](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove1/moveFolder.feature#L115)
-- [coreApiWebdavMove1/moveFolder.feature:116](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove1/moveFolder.feature#L116)
-- [coreApiWebdavMove1/moveFolder.feature:117](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove1/moveFolder.feature#L117)
-- [coreApiWebdavMove1/moveFolder.feature:118](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove1/moveFolder.feature#L118)
-- [coreApiWebdavMove1/moveFolder.feature:119](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove1/moveFolder.feature#L119)
-- [coreApiWebdavMove1/moveFolder.feature:120](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove1/moveFolder.feature#L120)
-- [coreApiWebdavMove1/moveFolder.feature:121](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove1/moveFolder.feature#L121)
-- [coreApiWebdavMove1/moveFolder.feature:122](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove1/moveFolder.feature#L122)
-- [coreApiWebdavMove1/moveFolder.feature:21](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove1/moveFolder.feature#L21)
-- [coreApiWebdavMove1/moveFolder.feature:38](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove1/moveFolder.feature#L38)
-- [coreApiWebdavMove1/moveFolder.feature:39](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove1/moveFolder.feature#L39)
-- [coreApiWebdavMove1/moveFolder.feature:56](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove1/moveFolder.feature#L56)
-- [coreApiWebdavMove1/moveFolder.feature:57](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove1/moveFolder.feature#L57)
-- [coreApiWebdavMove1/moveFolder.feature:77](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove1/moveFolder.feature#L77)
-- [coreApiWebdavMove1/moveFolder.feature:78](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove1/moveFolder.feature#L78)
-- [coreApiWebdavMove1/moveFolder.feature:95](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove1/moveFolder.feature#L95)
-- [coreApiWebdavMove1/moveFolder.feature:96](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove1/moveFolder.feature#L96)
-- [coreApiWebdavMove2/moveFile.feature:100](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L100)
-- [coreApiWebdavMove2/moveFile.feature:152](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L152)
-- [coreApiWebdavMove2/moveFile.feature:153](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L153)
-- [coreApiWebdavMove2/moveFile.feature:204](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L204)
-- [coreApiWebdavMove2/moveFile.feature:222](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L222)
-- [coreApiWebdavMove2/moveFile.feature:23](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L23)
-- [coreApiWebdavMove2/moveFile.feature:240](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L240)
-- [coreApiWebdavMove2/moveFile.feature:245](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L245)
-- [coreApiWebdavMove2/moveFile.feature:246](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L246)
-- [coreApiWebdavMove2/moveFile.feature:247](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L247)
-- [coreApiWebdavMove2/moveFile.feature:248](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L248)
-- [coreApiWebdavMove2/moveFile.feature:249](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L249)
-- [coreApiWebdavMove2/moveFile.feature:250](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L250)
-- [coreApiWebdavMove2/moveFile.feature:271](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L271)
-- [coreApiWebdavMove2/moveFile.feature:272](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L272)
-- [coreApiWebdavMove2/moveFile.feature:318](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L318)
-- [coreApiWebdavMove2/moveFile.feature:319](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L319)
-- [coreApiWebdavMove2/moveFile.feature:349](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L349)
-- [coreApiWebdavMove2/moveFile.feature:370](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L370)
-- [coreApiWebdavMove2/moveFile.feature:371](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L371)
-- [coreApiWebdavMove2/moveFile.feature:372](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L372)
-- [coreApiWebdavMove2/moveFile.feature:374](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L374)
-- [coreApiWebdavMove2/moveFile.feature:375](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L375)
-- [coreApiWebdavMove2/moveFile.feature:376](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L376)
-- [coreApiWebdavMove2/moveFile.feature:377](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L377)
-- [coreApiWebdavMove2/moveFile.feature:378](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L378)
-- [coreApiWebdavMove2/moveFile.feature:379](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L379)
-- [coreApiWebdavMove2/moveFile.feature:380](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L380)
-- [coreApiWebdavMove2/moveFile.feature:381](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L381)
-- [coreApiWebdavMove2/moveFile.feature:382](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L382)
-- [coreApiWebdavMove2/moveFile.feature:383](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L383)
-- [coreApiWebdavMove2/moveFile.feature:384](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L384)
-- [coreApiWebdavMove2/moveFile.feature:410](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L410)
-- [coreApiWebdavMove2/moveFile.feature:411](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L411)
-- [coreApiWebdavMove2/moveFile.feature:412](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L412)
-- [coreApiWebdavMove2/moveFile.feature:413](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L413)
-- [coreApiWebdavMove2/moveFile.feature:414](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L414)
-- [coreApiWebdavMove2/moveFile.feature:415](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L415)
-- [coreApiWebdavMove2/moveFile.feature:416](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L416)
-- [coreApiWebdavMove2/moveFile.feature:417](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L417)
-- [coreApiWebdavMove2/moveFile.feature:418](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L418)
-- [coreApiWebdavMove2/moveFile.feature:419](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L419)
-- [coreApiWebdavMove2/moveFile.feature:420](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L420)
-- [coreApiWebdavMove2/moveFile.feature:421](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L421)
-- [coreApiWebdavMove2/moveFile.feature:445](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L445)
-- [coreApiWebdavMove2/moveFile.feature:463](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L463)
-- [coreApiWebdavMove2/moveFile.feature:61](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L61)
-- [coreApiWebdavMove2/moveFile.feature:79](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L79)
-- [coreApiWebdavMove2/moveFile.feature:80](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L80)
-- [coreApiWebdavMove2/moveFile.feature:99](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveFile.feature#L99)
-- [coreApiWebdavMove2/moveShareOnOcis.feature:100](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveShareOnOcis.feature#L100)
-- [coreApiWebdavMove2/moveShareOnOcis.feature:124](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveShareOnOcis.feature#L124)
-- [coreApiWebdavMove2/moveShareOnOcis.feature:125](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveShareOnOcis.feature#L125)
-- [coreApiWebdavMove2/moveShareOnOcis.feature:190](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveShareOnOcis.feature#L190)
-- [coreApiWebdavMove2/moveShareOnOcis.feature:191](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveShareOnOcis.feature#L191)
-- [coreApiWebdavMove2/moveShareOnOcis.feature:220](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveShareOnOcis.feature#L220)
-- [coreApiWebdavMove2/moveShareOnOcis.feature:221](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveShareOnOcis.feature#L221)
-- [coreApiWebdavMove2/moveShareOnOcis.feature:30](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveShareOnOcis.feature#L30)
-- [coreApiWebdavMove2/moveShareOnOcis.feature:32](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveShareOnOcis.feature#L32)
-- [coreApiWebdavMove2/moveShareOnOcis.feature:53](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveShareOnOcis.feature#L53)
-- [coreApiWebdavMove2/moveShareOnOcis.feature:54](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveShareOnOcis.feature#L54)
-- [coreApiWebdavMove2/moveShareOnOcis.feature:98](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavMove2/moveShareOnOcis.feature#L98)
-- [coreApiWebdavOperations/downloadFile.feature:257](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/downloadFile.feature#L257)
-- [coreApiWebdavOperations/downloadFile.feature:258](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/downloadFile.feature#L258)
-- [coreApiWebdavOperations/listFiles.feature:120](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L120)
-- [coreApiWebdavOperations/listFiles.feature:121](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L121)
-- [coreApiWebdavOperations/listFiles.feature:148](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L148)
-- [coreApiWebdavOperations/listFiles.feature:149](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L149)
-- [coreApiWebdavOperations/listFiles.feature:173](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L173)
-- [coreApiWebdavOperations/listFiles.feature:174](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L174)
-- [coreApiWebdavOperations/listFiles.feature:182](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L182)
-- [coreApiWebdavOperations/listFiles.feature:205](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L205)
-- [coreApiWebdavOperations/listFiles.feature:230](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L230)
-- [coreApiWebdavOperations/listFiles.feature:275](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L275)
-- [coreApiWebdavOperations/listFiles.feature:276](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L276)
-- [coreApiWebdavOperations/listFiles.feature:308](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L308)
-- [coreApiWebdavOperations/listFiles.feature:309](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L309)
-- [coreApiWebdavOperations/listFiles.feature:339](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L339)
-- [coreApiWebdavOperations/listFiles.feature:340](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L340)
-- [coreApiWebdavOperations/listFiles.feature:42](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L42)
-- [coreApiWebdavOperations/listFiles.feature:67](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L67)
-- [coreApiWebdavOperations/listFiles.feature:68](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L68)
-- [coreApiWebdavOperations/listFiles.feature:96](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L96)
-- [coreApiWebdavOperations/listFiles.feature:97](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/listFiles.feature#L97)
-- [coreApiWebdavOperations/propfind.feature:39](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/propfind.feature#L39)
-- [coreApiWebdavOperations/propfind.feature:51](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavOperations/propfind.feature#L51)
-- [coreApiWebdavProperties1/copyFile.feature:100](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L100)
-- [coreApiWebdavProperties1/copyFile.feature:101](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L101)
-- [coreApiWebdavProperties1/copyFile.feature:136](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L136)
-- [coreApiWebdavProperties1/copyFile.feature:137](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L137)
-- [coreApiWebdavProperties1/copyFile.feature:154](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L154)
-- [coreApiWebdavProperties1/copyFile.feature:155](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L155)
-- [coreApiWebdavProperties1/copyFile.feature:176](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L176)
-- [coreApiWebdavProperties1/copyFile.feature:177](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L177)
-- [coreApiWebdavProperties1/copyFile.feature:200](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L200)
-- [coreApiWebdavProperties1/copyFile.feature:201](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L201)
-- [coreApiWebdavProperties1/copyFile.feature:22](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L22)
-- [coreApiWebdavProperties1/copyFile.feature:223](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L223)
-- [coreApiWebdavProperties1/copyFile.feature:224](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L224)
-- [coreApiWebdavProperties1/copyFile.feature:247](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L247)
-- [coreApiWebdavProperties1/copyFile.feature:248](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L248)
-- [coreApiWebdavProperties1/copyFile.feature:37](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L37)
-- [coreApiWebdavProperties1/copyFile.feature:38](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L38)
-- [coreApiWebdavProperties1/copyFile.feature:55](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L55)
-- [coreApiWebdavProperties1/copyFile.feature:56](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L56)
-- [coreApiWebdavProperties1/copyFile.feature:560](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L560)
-- [coreApiWebdavProperties1/copyFile.feature:561](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L561)
-- [coreApiWebdavProperties1/copyFile.feature:577](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L577)
-- [coreApiWebdavProperties1/copyFile.feature:578](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L578)
-- [coreApiWebdavProperties1/copyFile.feature:593](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L593)
-- [coreApiWebdavProperties1/copyFile.feature:594](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L594)
-- [coreApiWebdavProperties1/copyFile.feature:611](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L611)
-- [coreApiWebdavProperties1/copyFile.feature:612](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L612)
-- [coreApiWebdavProperties1/copyFile.feature:636](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L636)
-- [coreApiWebdavProperties1/copyFile.feature:637](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L637)
-- [coreApiWebdavProperties1/copyFile.feature:657](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L657)
-- [coreApiWebdavProperties1/copyFile.feature:658](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L658)
-- [coreApiWebdavProperties1/copyFile.feature:679](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L679)
-- [coreApiWebdavProperties1/copyFile.feature:680](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L680)
-- [coreApiWebdavProperties1/copyFile.feature:701](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L701)
-- [coreApiWebdavProperties1/copyFile.feature:702](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L702)
-- [coreApiWebdavProperties1/copyFile.feature:723](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L723)
-- [coreApiWebdavProperties1/copyFile.feature:724](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L724)
-- [coreApiWebdavProperties1/copyFile.feature:759](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L759)
-- [coreApiWebdavProperties1/copyFile.feature:760](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L760)
-- [coreApiWebdavProperties1/copyFile.feature:79](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L79)
-- [coreApiWebdavProperties1/copyFile.feature:791](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L791)
-- [coreApiWebdavProperties1/copyFile.feature:792](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L792)
-- [coreApiWebdavProperties1/copyFile.feature:80](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L80)
-- [coreApiWebdavProperties1/copyFile.feature:820](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L820)
-- [coreApiWebdavProperties1/copyFile.feature:821](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L821)
-- [coreApiWebdavProperties1/copyFile.feature:836](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L836)
-- [coreApiWebdavProperties1/copyFile.feature:837](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L837)
-- [coreApiWebdavProperties1/copyFile.feature:874](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L874)
-- [coreApiWebdavProperties1/copyFile.feature:875](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/copyFile.feature#L875)
-- [coreApiWebdavProperties1/create](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/create)
-- [coreApiWebdavProperties1/createFileFolder.feature:117](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolder.feature#L117)
-- [coreApiWebdavProperties1/createFileFolder.feature:155](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolder.feature#L155)
-- [coreApiWebdavProperties1/createFileFolder.feature:160](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolder.feature#L160)
-- [coreApiWebdavProperties1/createFileFolder.feature:161](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolder.feature#L161)
-- [coreApiWebdavProperties1/createFileFolder.feature:162](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolder.feature#L162)
-- [coreApiWebdavProperties1/createFileFolder.feature:163](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolder.feature#L163)
-- [coreApiWebdavProperties1/createFileFolder.feature:164](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolder.feature#L164)
-- [coreApiWebdavProperties1/createFileFolder.feature:165](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolder.feature#L165)
-- [coreApiWebdavProperties1/createFileFolder.feature:166](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolder.feature#L166)
-- [coreApiWebdavProperties1/createFileFolder.feature:167](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolder.feature#L167)
-- [coreApiWebdavProperties1/createFileFolder.feature:26](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolder.feature#L26)
-- [coreApiWebdavProperties1/createFileFolder.feature:27](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolder.feature#L27)
-- [coreApiWebdavProperties1/createFileFolder.feature:28](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolder.feature#L28)
-- [coreApiWebdavProperties1/createFileFolder.feature:29](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolder.feature#L29)
-- [coreApiWebdavProperties1/createFileFolder.feature:30](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolder.feature#L30)
-- [coreApiWebdavProperties1/createFileFolder.feature:31](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolder.feature#L31)
-- [coreApiWebdavProperties1/createFileFolder.feature:32](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolder.feature#L32)
-- [coreApiWebdavProperties1/createFileFolder.feature:33](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolder.feature#L33)
-- [coreApiWebdavProperties1/createFileFolder.feature:59](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolder.feature#L59)
-- [coreApiWebdavProperties1/createFileFolder.feature:78](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolder.feature#L78)
-- [coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature:24](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature#L24)
-- [coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature:25](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature#L25)
-- [coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature:27](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature#L27)
-- [coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature:28](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature#L28)
-- [coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature:40](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature#L40)
-- [coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature:41](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature#L41)
-- [coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature:43](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature#L43)
-- [coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature:44](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature#L44)
-- [coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature:56](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature#L56)
-- [coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature:57](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature#L57)
-- [coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature:68](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature#L68)
-- [coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature:69](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/createFileFolderWhenSharesExist.feature#L69)
-- [coreApiWebdavProperties1/setFileProperties.feature:55](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties1/setFileProperties.feature#L55)
-- [coreApiWebdavProperties2/getFileProperties.feature:112](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L112)
-- [coreApiWebdavProperties2/getFileProperties.feature:113](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L113)
-- [coreApiWebdavProperties2/getFileProperties.feature:114](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L114)
-- [coreApiWebdavProperties2/getFileProperties.feature:115](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L115)
-- [coreApiWebdavProperties2/getFileProperties.feature:116](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L116)
-- [coreApiWebdavProperties2/getFileProperties.feature:117](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L117)
-- [coreApiWebdavProperties2/getFileProperties.feature:119](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L119)
-- [coreApiWebdavProperties2/getFileProperties.feature:120](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L120)
-- [coreApiWebdavProperties2/getFileProperties.feature:121](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L121)
-- [coreApiWebdavProperties2/getFileProperties.feature:143](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L143)
-- [coreApiWebdavProperties2/getFileProperties.feature:144](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L144)
-- [coreApiWebdavProperties2/getFileProperties.feature:163](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L163)
-- [coreApiWebdavProperties2/getFileProperties.feature:188](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L188)
-- [coreApiWebdavProperties2/getFileProperties.feature:189](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L189)
-- [coreApiWebdavProperties2/getFileProperties.feature:19](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L19)
-- [coreApiWebdavProperties2/getFileProperties.feature:23](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L23)
-- [coreApiWebdavProperties2/getFileProperties.feature:24](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L24)
-- [coreApiWebdavProperties2/getFileProperties.feature:25](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L25)
-- [coreApiWebdavProperties2/getFileProperties.feature:26](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L26)
-- [coreApiWebdavProperties2/getFileProperties.feature:395](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L395)
-- [coreApiWebdavProperties2/getFileProperties.feature:396](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L396)
-- [coreApiWebdavProperties2/getFileProperties.feature:414](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L414)
-- [coreApiWebdavProperties2/getFileProperties.feature:415](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L415)
-- [coreApiWebdavProperties2/getFileProperties.feature:434](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L434)
-- [coreApiWebdavProperties2/getFileProperties.feature:452](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L452)
-- [coreApiWebdavProperties2/getFileProperties.feature:453](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L453)
-- [coreApiWebdavProperties2/getFileProperties.feature:46](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L46)
-- [coreApiWebdavProperties2/getFileProperties.feature:47](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L47)
-- [coreApiWebdavProperties2/getFileProperties.feature:471](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L471)
-- [coreApiWebdavProperties2/getFileProperties.feature:472](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L472)
-- [coreApiWebdavProperties2/getFileProperties.feature:48](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L48)
-- [coreApiWebdavProperties2/getFileProperties.feature:490](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L490)
-- [coreApiWebdavProperties2/getFileProperties.feature:491](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L491)
-- [coreApiWebdavProperties2/getFileProperties.feature:50](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L50)
-- [coreApiWebdavProperties2/getFileProperties.feature:509](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L509)
-- [coreApiWebdavProperties2/getFileProperties.feature:51](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L51)
-- [coreApiWebdavProperties2/getFileProperties.feature:510](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L510)
-- [coreApiWebdavProperties2/getFileProperties.feature:52](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L52)
-- [coreApiWebdavProperties2/getFileProperties.feature:528](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L528)
-- [coreApiWebdavProperties2/getFileProperties.feature:529](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L529)
-- [coreApiWebdavProperties2/getFileProperties.feature:53](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L53)
-- [coreApiWebdavProperties2/getFileProperties.feature:547](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L547)
-- [coreApiWebdavProperties2/getFileProperties.feature:548](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L548)
-- [coreApiWebdavProperties2/getFileProperties.feature:566](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L566)
-- [coreApiWebdavProperties2/getFileProperties.feature:567](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L567)
-- [coreApiWebdavProperties2/getFileProperties.feature:585](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L585)
-- [coreApiWebdavProperties2/getFileProperties.feature:586](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L586)
-- [coreApiWebdavProperties2/getFileProperties.feature:604](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L604)
-- [coreApiWebdavProperties2/getFileProperties.feature:605](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L605)
-- [coreApiWebdavProperties2/getFileProperties.feature:623](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L623)
-- [coreApiWebdavProperties2/getFileProperties.feature:624](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L624)
-- [coreApiWebdavProperties2/getFileProperties.feature:647](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L647)
-- [coreApiWebdavProperties2/getFileProperties.feature:648](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L648)
-- [coreApiWebdavProperties2/getFileProperties.feature:76](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L76)
-- [coreApiWebdavProperties2/getFileProperties.feature:77](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L77)
-- [coreApiWebdavProperties2/getFileProperties.feature:79](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L79)
-- [coreApiWebdavProperties2/getFileProperties.feature:81](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L81)
-- [coreApiWebdavProperties2/getFileProperties.feature:83](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L83)
-- [coreApiWebdavProperties2/getFileProperties.feature:84](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L84)
-- [coreApiWebdavProperties2/getFileProperties.feature:85](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L85)
-- [coreApiWebdavProperties2/getFileProperties.feature:86](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L86)
-- [coreApiWebdavProperties2/getFileProperties.feature:87](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L87)
-- [coreApiWebdavProperties2/getFileProperties.feature:88](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L88)
-- [coreApiWebdavProperties2/getFileProperties.feature:89](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavProperties2/getFileProperties.feature#L89)
-- [coreApiWebdavUpload1/uploadFile.feature:110](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L110)
-- [coreApiWebdavUpload1/uploadFile.feature:111](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L111)
-- [coreApiWebdavUpload1/uploadFile.feature:112](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L112)
-- [coreApiWebdavUpload1/uploadFile.feature:113](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L113)
-- [coreApiWebdavUpload1/uploadFile.feature:114](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L114)
-- [coreApiWebdavUpload1/uploadFile.feature:115](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L115)
-- [coreApiWebdavUpload1/uploadFile.feature:116](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L116)
-- [coreApiWebdavUpload1/uploadFile.feature:117](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L117)
-- [coreApiWebdavUpload1/uploadFile.feature:118](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L118)
-- [coreApiWebdavUpload1/uploadFile.feature:119](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L119)
-- [coreApiWebdavUpload1/uploadFile.feature:140](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L140)
-- [coreApiWebdavUpload1/uploadFile.feature:141](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L141)
-- [coreApiWebdavUpload1/uploadFile.feature:142](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L142)
-- [coreApiWebdavUpload1/uploadFile.feature:143](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L143)
-- [coreApiWebdavUpload1/uploadFile.feature:160](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L160)
-- [coreApiWebdavUpload1/uploadFile.feature:161](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L161)
-- [coreApiWebdavUpload1/uploadFile.feature:199](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L199)
-- [coreApiWebdavUpload1/uploadFile.feature:20](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L20)
-- [coreApiWebdavUpload1/uploadFile.feature:204](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L204)
-- [coreApiWebdavUpload1/uploadFile.feature:205](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L205)
-- [coreApiWebdavUpload1/uploadFile.feature:206](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L206)
-- [coreApiWebdavUpload1/uploadFile.feature:207](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L207)
-- [coreApiWebdavUpload1/uploadFile.feature:208](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L208)
-- [coreApiWebdavUpload1/uploadFile.feature:21](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L21)
-- [coreApiWebdavUpload1/uploadFile.feature:22](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L22)
-- [coreApiWebdavUpload1/uploadFile.feature:228](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L228)
-- [coreApiWebdavUpload1/uploadFile.feature:229](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L229)
-- [coreApiWebdavUpload1/uploadFile.feature:23](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L23)
-- [coreApiWebdavUpload1/uploadFile.feature:24](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L24)
-- [coreApiWebdavUpload1/uploadFile.feature:245](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L245)
-- [coreApiWebdavUpload1/uploadFile.feature:246](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L246)
-- [coreApiWebdavUpload1/uploadFile.feature:25](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L25)
-- [coreApiWebdavUpload1/uploadFile.feature:26](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L26)
-- [coreApiWebdavUpload1/uploadFile.feature:263](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L263)
-- [coreApiWebdavUpload1/uploadFile.feature:264](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L264)
-- [coreApiWebdavUpload1/uploadFile.feature:27](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L27)
-- [coreApiWebdavUpload1/uploadFile.feature:281](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L281)
-- [coreApiWebdavUpload1/uploadFile.feature:282](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L282)
-- [coreApiWebdavUpload1/uploadFile.feature:300](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L300)
-- [coreApiWebdavUpload1/uploadFile.feature:301](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L301)
-- [coreApiWebdavUpload1/uploadFile.feature:319](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L319)
-- [coreApiWebdavUpload1/uploadFile.feature:320](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L320)
-- [coreApiWebdavUpload1/uploadFile.feature:346](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L346)
-- [coreApiWebdavUpload1/uploadFile.feature:347](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L347)
-- [coreApiWebdavUpload1/uploadFile.feature:363](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L363)
-- [coreApiWebdavUpload1/uploadFile.feature:45](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L45)
-- [coreApiWebdavUpload1/uploadFile.feature:46](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L46)
-- [coreApiWebdavUpload1/uploadFile.feature:47](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L47)
-- [coreApiWebdavUpload1/uploadFile.feature:48](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L48)
-- [coreApiWebdavUpload1/uploadFile.feature:65](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L65)
-- [coreApiWebdavUpload1/uploadFile.feature:66](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L66)
-- [coreApiWebdavUpload1/uploadFile.feature:68](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L68)
-- [coreApiWebdavUpload1/uploadFile.feature:69](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L69)
-- [coreApiWebdavUpload1/uploadFile.feature:70](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L70)
-- [coreApiWebdavUpload1/uploadFile.feature:90](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L90)
-- [coreApiWebdavUpload1/uploadFile.feature:91](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L91)
-- [coreApiWebdavUpload1/uploadFile.feature:92](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload1/uploadFile.feature#L92)
-- [coreApiWebdavUpload2/uploadFileUsingOldChunking.feature:114](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUpload2/uploadFileUsingOldChunking.feature#L114)
-- [coreApiWebdavUploadTUS/checksums.feature:110](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L110)
-- [coreApiWebdavUploadTUS/checksums.feature:111](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L111)
-- [coreApiWebdavUploadTUS/checksums.feature:132](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L132)
-- [coreApiWebdavUploadTUS/checksums.feature:133](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L133)
-- [coreApiWebdavUploadTUS/checksums.feature:154](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L154)
-- [coreApiWebdavUploadTUS/checksums.feature:155](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L155)
-- [coreApiWebdavUploadTUS/checksums.feature:201](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L201)
-- [coreApiWebdavUploadTUS/checksums.feature:202](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L202)
-- [coreApiWebdavUploadTUS/checksums.feature:203](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L203)
-- [coreApiWebdavUploadTUS/checksums.feature:204](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L204)
-- [coreApiWebdavUploadTUS/checksums.feature:21](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L21)
-- [coreApiWebdavUploadTUS/checksums.feature:22](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L22)
-- [coreApiWebdavUploadTUS/checksums.feature:23](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L23)
-- [coreApiWebdavUploadTUS/checksums.feature:24](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L24)
-- [coreApiWebdavUploadTUS/checksums.feature:257](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L257)
-- [coreApiWebdavUploadTUS/checksums.feature:258](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L258)
-- [coreApiWebdavUploadTUS/checksums.feature:259](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L259)
-- [coreApiWebdavUploadTUS/checksums.feature:260](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L260)
-- [coreApiWebdavUploadTUS/checksums.feature:45](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L45)
-- [coreApiWebdavUploadTUS/checksums.feature:46](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L46)
-- [coreApiWebdavUploadTUS/checksums.feature:66](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L66)
-- [coreApiWebdavUploadTUS/checksums.feature:67](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/checksums.feature#L67)
-- [coreApiWebdavUploadTUS/creationWithUploadExtension.feature:27](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/creationWithUploadExtension.feature#L27)
-- [coreApiWebdavUploadTUS/creationWithUploadExtension.feature:28](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/creationWithUploadExtension.feature#L28)
-- [coreApiWebdavUploadTUS/creationWithUploadExtension.feature:42](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/creationWithUploadExtension.feature#L42)
-- [coreApiWebdavUploadTUS/creationWithUploadExtension.feature:43](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/creationWithUploadExtension.feature#L43)
-- [coreApiWebdavUploadTUS/lowLevelCreationExtension.feature:23](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/lowLevelCreationExtension.feature#L23)
-- [coreApiWebdavUploadTUS/lowLevelCreationExtension.feature:24](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/lowLevelCreationExtension.feature#L24)
-- [coreApiWebdavUploadTUS/lowLevelUpload.feature:22](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/lowLevelUpload.feature#L22)
-- [coreApiWebdavUploadTUS/lowLevelUpload.feature:23](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/lowLevelUpload.feature#L23)
-- [coreApiWebdavUploadTUS/lowLevelUpload.feature:44](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/lowLevelUpload.feature#L44)
-- [coreApiWebdavUploadTUS/lowLevelUpload.feature:45](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/lowLevelUpload.feature#L45)
-- [coreApiWebdavUploadTUS/lowLevelUpload.feature:66](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/lowLevelUpload.feature#L66)
-- [coreApiWebdavUploadTUS/lowLevelUpload.feature:67](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/lowLevelUpload.feature#L67)
-- [coreApiWebdavUploadTUS/lowLevelUpload.feature:86](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/lowLevelUpload.feature#L86)
-- [coreApiWebdavUploadTUS/lowLevelUpload.feature:87](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/lowLevelUpload.feature#L87)
-- [coreApiWebdavUploadTUS/uploadFile.feature:114](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L114)
-- [coreApiWebdavUploadTUS/uploadFile.feature:115](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L115)
-- [coreApiWebdavUploadTUS/uploadFile.feature:129](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L129)
-- [coreApiWebdavUploadTUS/uploadFile.feature:130](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L130)
-- [coreApiWebdavUploadTUS/uploadFile.feature:146](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L146)
-- [coreApiWebdavUploadTUS/uploadFile.feature:147](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L147)
-- [coreApiWebdavUploadTUS/uploadFile.feature:16](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L16)
-- [coreApiWebdavUploadTUS/uploadFile.feature:161](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L161)
-- [coreApiWebdavUploadTUS/uploadFile.feature:162](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L162)
-- [coreApiWebdavUploadTUS/uploadFile.feature:17](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L17)
-- [coreApiWebdavUploadTUS/uploadFile.feature:173](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L173)
-- [coreApiWebdavUploadTUS/uploadFile.feature:174](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L174)
-- [coreApiWebdavUploadTUS/uploadFile.feature:18](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L18)
-- [coreApiWebdavUploadTUS/uploadFile.feature:19](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L19)
-- [coreApiWebdavUploadTUS/uploadFile.feature:197](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L197)
-- [coreApiWebdavUploadTUS/uploadFile.feature:20](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L20)
-- [coreApiWebdavUploadTUS/uploadFile.feature:201](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L201)
-- [coreApiWebdavUploadTUS/uploadFile.feature:21](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L21)
-- [coreApiWebdavUploadTUS/uploadFile.feature:22](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L22)
-- [coreApiWebdavUploadTUS/uploadFile.feature:23](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L23)
-- [coreApiWebdavUploadTUS/uploadFile.feature:24](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L24)
-- [coreApiWebdavUploadTUS/uploadFile.feature:25](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L25)
-- [coreApiWebdavUploadTUS/uploadFile.feature:26](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L26)
-- [coreApiWebdavUploadTUS/uploadFile.feature:27](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L27)
-- [coreApiWebdavUploadTUS/uploadFile.feature:28](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L28)
-- [coreApiWebdavUploadTUS/uploadFile.feature:29](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L29)
-- [coreApiWebdavUploadTUS/uploadFile.feature:50](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L50)
-- [coreApiWebdavUploadTUS/uploadFile.feature:51](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L51)
-- [coreApiWebdavUploadTUS/uploadFile.feature:52](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L52)
-- [coreApiWebdavUploadTUS/uploadFile.feature:53](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L53)
-- [coreApiWebdavUploadTUS/uploadFile.feature:54](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L54)
-- [coreApiWebdavUploadTUS/uploadFile.feature:55](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L55)
-- [coreApiWebdavUploadTUS/uploadFile.feature:56](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L56)
-- [coreApiWebdavUploadTUS/uploadFile.feature:57](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L57)
-- [coreApiWebdavUploadTUS/uploadFile.feature:58](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L58)
-- [coreApiWebdavUploadTUS/uploadFile.feature:59](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L59)
-- [coreApiWebdavUploadTUS/uploadFile.feature:60](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L60)
-- [coreApiWebdavUploadTUS/uploadFile.feature:61](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L61)
-- [coreApiWebdavUploadTUS/uploadFile.feature:62](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L62)
-- [coreApiWebdavUploadTUS/uploadFile.feature:63](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L63)
-- [coreApiWebdavUploadTUS/uploadFile.feature:83](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L83)
-- [coreApiWebdavUploadTUS/uploadFile.feature:84](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L84)
-- [coreApiWebdavUploadTUS/uploadFile.feature:98](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L98)
-- [coreApiWebdavUploadTUS/uploadFile.feature:99](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFile.feature#L99)
-- [coreApiWebdavUploadTUS/uploadFileMtime.feature:16](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtime.feature#L16)
-- [coreApiWebdavUploadTUS/uploadFileMtime.feature:17](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtime.feature#L17)
-- [coreApiWebdavUploadTUS/uploadFileMtime.feature:31](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtime.feature#L31)
-- [coreApiWebdavUploadTUS/uploadFileMtime.feature:32](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtime.feature#L32)
-- [coreApiWebdavUploadTUS/uploadFileMtime.feature:47](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtime.feature#L47)
-- [coreApiWebdavUploadTUS/uploadFileMtime.feature:48](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtime.feature#L48)
-- [coreApiWebdavUploadTUS/uploadFileMtime.feature:63](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtime.feature#L63)
-- [coreApiWebdavUploadTUS/uploadFileMtime.feature:64](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtime.feature#L64)
-- [coreApiWebdavUploadTUS/uploadFileMtimeShares.feature:23](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtimeShares.feature#L23)
-- [coreApiWebdavUploadTUS/uploadFileMtimeShares.feature:24](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtimeShares.feature#L24)
-- [coreApiWebdavUploadTUS/uploadFileMtimeShares.feature:37](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtimeShares.feature#L37)
-- [coreApiWebdavUploadTUS/uploadFileMtimeShares.feature:38](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtimeShares.feature#L38)
-- [coreApiWebdavUploadTUS/uploadFileMtimeShares.feature:52](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtimeShares.feature#L52)
-- [coreApiWebdavUploadTUS/uploadFileMtimeShares.feature:53](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtimeShares.feature#L53)
-- [coreApiWebdavUploadTUS/uploadFileMtimeShares.feature:67](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtimeShares.feature#L67)
-- [coreApiWebdavUploadTUS/uploadFileMtimeShares.feature:68](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadFileMtimeShares.feature#L68)
-- [coreApiWebdavUploadTUS/uploadToMoveFolder.feature:20](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToMoveFolder.feature#L20)
-- [coreApiWebdavUploadTUS/uploadToMoveFolder.feature:21](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToMoveFolder.feature#L21)
-- [coreApiWebdavUploadTUS/uploadToNonExistingFolder.feature:29](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToNonExistingFolder.feature#L29)
-- [coreApiWebdavUploadTUS/uploadToNonExistingFolder.feature:30](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToNonExistingFolder.feature#L30)
-- [coreApiWebdavUploadTUS/uploadToNonExistingFolder.feature:49](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToNonExistingFolder.feature#L49)
-- [coreApiWebdavUploadTUS/uploadToNonExistingFolder.feature:50](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToNonExistingFolder.feature#L50)
-- [coreApiWebdavUploadTUS/uploadToNonExistingFolder.feature:64](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToNonExistingFolder.feature#L64)
-- [coreApiWebdavUploadTUS/uploadToNonExistingFolder.feature:65](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToNonExistingFolder.feature#L65)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:100](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L100)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:101](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L101)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:119](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L119)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:120](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L120)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:137](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L137)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:138](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L138)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:155](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L155)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:156](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L156)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:23](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L23)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:231](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L231)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:232](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L232)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:24](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L24)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:273](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L273)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:274](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L274)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:37](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L37)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:38](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L38)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:53](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L53)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:54](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L54)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:68](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L68)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:69](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L69)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:81](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L81)
-- [coreApiWebdavUploadTUS/uploadToShare.feature:82](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/coreApiWebdavUploadTUS/uploadToShare.feature#L82)
-
-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/features/apiVirtualViews/virtualViews.feature b/tests/acceptance/features/apiVirtualViews/virtualViews.feature
deleted file mode 100644
index 3baa7b0fb5..0000000000
--- a/tests/acceptance/features/apiVirtualViews/virtualViews.feature
+++ /dev/null
@@ -1,65 +0,0 @@
-@api @virtual-views-required
-Feature: virtual views
- As admin
- I want to be able to shard large folders over multiple storage providers
- So that I can scale large numbers of users better.
-
- Background:
- Given user "einstein" deletes everything from folder "virtual/" using the WebDAV API
- And user "einstein" has created the following folders
- | path |
- | virtual/a |
- | virtual/a/alice |
- | virtual/b |
- | virtual/c |
- | virtual/k |
- | virtual/l |
- | virtual/z |
-
- Scenario: list large folder
- Given using old DAV path
- When user "einstein" lists the resources in "/virtual" with depth "0" using the WebDAV API
- Then the HTTP status code should be "207"
- And the last DAV response for user "einstein" should not contain these nodes
- | name |
- | virtual/a |
- | virtual/b |
- | virtual/c |
- | virtual/k |
- | virtual/l |
- | virtual/z |
- When user "einstein" lists the resources in "/virtual" with depth 1 using the WebDAV API
- Then the HTTP status code should be "207"
- And the last DAV response for user "einstein" should contain these nodes
- | name |
- | virtual/a |
- | virtual/b |
- | virtual/c |
- | virtual/k |
- | virtual/l |
- | virtual/z |
- And the last DAV response for user "einstein" should not contain these nodes
- | name |
- | virtual/a/alice |
- When user "einstein" lists the resources in "/virtual" with depth "infinity" using the WebDAV API
- Then the HTTP status code should be "207"
- And the last DAV response for user "einstein" should contain these nodes
- | name |
- | virtual/a |
- | virtual/a/alice |
- | virtual/b |
- | virtual/c |
- | virtual/k |
- | virtual/l |
- | virtual/z |
-
- Scenario: etag changes when adding a folder
- Given user "einstein" has stored etag of element "/"
- And user "einstein" has stored etag of element "/virtual"
- And user "einstein" has stored etag of element "/virtual/b"
- When user "einstein" creates folder "/virtual/b/bar" using the WebDAV API
- Then these etags should have changed:
- | user | path |
- | einstein | / |
- | einstein | /virtual |
- | einstein | /virtual/b |
\ No newline at end of file
diff --git a/tests/acceptance/features/bootstrap/RevaContext.php b/tests/acceptance/features/bootstrap/RevaContext.php
deleted file mode 100644
index 1da62bb46b..0000000000
--- a/tests/acceptance/features/bootstrap/RevaContext.php
+++ /dev/null
@@ -1,40 +0,0 @@
-getEnvironment();
- // Get all the contexts you need in this context
- $this->featureContext = $environment->getContext('FeatureContext');
- SetupHelper::init(
- $this->featureContext->getAdminUsername(),
- $this->featureContext->getAdminPassword(),
- $this->featureContext->getBaseUrl(),
- $this->featureContext->getOcPath()
- );
- }
-}
diff --git a/tests/acceptance/features/bootstrap/bootstrap.php b/tests/acceptance/features/bootstrap/bootstrap.php
deleted file mode 100644
index 23204c3688..0000000000
--- a/tests/acceptance/features/bootstrap/bootstrap.php
+++ /dev/null
@@ -1,14 +0,0 @@
-addPsr4(
- "", $pathToApiTests . "/tests/acceptance/features/bootstrap", true
-);
-
-$classLoader->register();
diff --git a/tests/acceptance/filtered-suites-acceptance-2-EOS b/tests/acceptance/filtered-suites-acceptance-2-EOS
deleted file mode 100644
index 1a333a03ef..0000000000
--- a/tests/acceptance/filtered-suites-acceptance-2-EOS
+++ /dev/null
@@ -1,2 +0,0 @@
-coreApiWebdavEtagPropagation1
-coreApiWebdavEtagPropagation2
diff --git a/tests/acceptance/lint-expected-failures.sh b/tests/acceptance/lint-expected-failures.sh
deleted file mode 100755
index c17be50595..0000000000
--- a/tests/acceptance/lint-expected-failures.sh
+++ /dev/null
@@ -1,145 +0,0 @@
-#!/usr/bin/env bash
-
-log_error() {
- if [ -n "${PLAIN_OUTPUT}" ]
- then
- echo -e "$1"
- else
- echo -e "\e[31m$1\e[0m"
- fi
-}
-
-log_info() {
- if [ -n "${PLAIN_OUTPUT}" ]
- then
- echo -e "$1"
- else
- echo -e "\e[34m$1\e[0m"
- fi
-}
-
-log_success() {
- if [ -n "${PLAIN_OUTPUT}" ]
- then
- echo -e "$1"
- else
- echo -e "\e[32m$1\e[0m"
- fi
-}
-
-declare -A scenarioLines
-
-if [ -n "${EXPECTED_FAILURES_FILE}" ]
-then
- if [ -f "${EXPECTED_FAILURES_FILE}" ]
- then
- log_info "Checking expected failures in ${EXPECTED_FAILURES_FILE}"
- else
- log_error "Expected failures file ${EXPECTED_FAILURES_FILE} not found"
- log_error "Check the setting of EXPECTED_FAILURES_FILE environment variable"
- exit 1
- fi
- FINAL_EXIT_STATUS=0
- # If the last line of the expected-failures file ends without a newline character
- # then that line may not get processed by some of the bash code in this script
- # So check that the last character in the file is a newline
- if [ "$(tail -c1 "${EXPECTED_FAILURES_FILE}" | wc -l)" -eq 0 ]
- then
- log_error "Expected failures file ${EXPECTED_FAILURES_FILE} must end with a newline"
- log_error "Put a newline at the end of the last line and try again"
- FINAL_EXIT_STATUS=1
- fi
- # Check the expected-failures file to ensure that the lines are self-consistent
- # In most cases the features that are being run are in owncloud/core,
- # so assume that by default.
- FEATURE_FILE_REPO="owncloud/core"
- FEATURE_FILE_PATH="tests/acceptance/features"
- LINE_NUMBER=0
- while read -r INPUT_LINE
- do
- LINE_NUMBER=$(("$LINE_NUMBER" + 1))
-
- # Ignore comment lines (starting with hash)
- if [[ "${INPUT_LINE}" =~ ^# ]]
- then
- continue
- fi
- # A line of text in the feature file can be used to indicate that the
- # features being run are actually from some other repo. For example:
- # "The expected failures in this file are from features in the owncloud/ocis repo."
- # Write a line near the top of the expected-failures file to "declare" this,
- # overriding the default "owncloud/core"
- FEATURE_FILE_SPEC_LINE_FOUND="false"
- if [[ "${INPUT_LINE}" =~ features[[:blank:]]in[[:blank:]]the[[:blank:]]([a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+)[[:blank:]]repo ]]; then
- FEATURE_FILE_REPO="${BASH_REMATCH[1]}"
- log_info "Features are expected to be in the ${FEATURE_FILE_REPO} repo\n"
- FEATURE_FILE_SPEC_LINE_FOUND="true"
- fi
- if [[ "${INPUT_LINE}" =~ repo[[:blank:]]in[[:blank:]]the[[:blank:]]([a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+)[[:blank:]]folder[[:blank:]]tree ]]; then
- FEATURE_FILE_PATH="${BASH_REMATCH[1]}"
- log_info "Features are expected to be in the ${FEATURE_FILE_PATH} folder tree\n"
- FEATURE_FILE_SPEC_LINE_FOUND="true"
- fi
- if [[ $FEATURE_FILE_SPEC_LINE_FOUND == "true" ]]; then
- continue
- fi
- # Match lines that have "- [someSuite/someName.feature:n]" pattern on start
- # the part inside the brackets is the suite, feature and line number of the expected failure.
- if [[ "${INPUT_LINE}" =~ ^-[[:space:]]\[([a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+\.feature:[0-9]+)] ]]; then
- SUITE_SCENARIO_LINE="${BASH_REMATCH[1]}"
- elif [[
- # report for lines like: " - someSuite/someName.feature:n"
- "${INPUT_LINE}" =~ ^[[:space:]]*-[[:space:]][a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+\.feature:[0-9]+[[:space:]]*$ ||
- # report for lines starting with: "[someSuite/someName.feature:n]"
- "${INPUT_LINE}" =~ ^[[:space:]]*\[([a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+\.feature:[0-9]+)]
- ]]; then
- log_error "> Line ${LINE_NUMBER}: Not in the correct format."
- log_error " + Actual Line : '${INPUT_LINE}'"
- log_error " - Expected Format : '- [suite/scenario.feature:line_number](scenario_line_url)'"
- FINAL_EXIT_STATUS=1
- continue
- else
- # otherwise, ignore the line
- continue
- fi
- # Find the link in round-brackets that should be after the SUITE_SCENARIO_LINE
- if [[ "${INPUT_LINE}" =~ \(([a-zA-Z0-9:/.#_-]+)\) ]]; then
- ACTUAL_LINK="${BASH_REMATCH[1]}"
- else
- log_error "Line ${LINE_NUMBER}: ${INPUT_LINE} : Link is empty"
- FINAL_EXIT_STATUS=1
- continue
- fi
- if [[ -n "${scenarioLines[${SUITE_SCENARIO_LINE}]:-}" ]];
- then
- log_error "> Line ${LINE_NUMBER}: Scenario line ${SUITE_SCENARIO_LINE} is duplicated"
- FINAL_EXIT_STATUS=1
- fi
- scenarioLines[${SUITE_SCENARIO_LINE}]="exists"
- OLD_IFS=${IFS}
- IFS=':'
- read -ra FEATURE_PARTS <<< "${SUITE_SCENARIO_LINE}"
- IFS=${OLD_IFS}
- SUITE_FEATURE="${FEATURE_PARTS[0]}"
- FEATURE_LINE="${FEATURE_PARTS[1]}"
- EXPECTED_LINK="https://github.com/${FEATURE_FILE_REPO}/blob/master/${FEATURE_FILE_PATH}/${SUITE_FEATURE}#L${FEATURE_LINE}"
- if [[ "${ACTUAL_LINK}" != "${EXPECTED_LINK}" ]]; then
- log_error "> Line ${LINE_NUMBER}: Link is not correct for ${SUITE_SCENARIO_LINE}"
- log_error " + Actual link : ${ACTUAL_LINK}"
- log_error " - Expected link : ${EXPECTED_LINK}"
- FINAL_EXIT_STATUS=1
- fi
-
- done < "${EXPECTED_FAILURES_FILE}"
-else
- log_error "Environment variable EXPECTED_FAILURES_FILE must be defined to be the file to check"
- exit 1
-fi
-
-if [ ${FINAL_EXIT_STATUS} == 1 ]
-then
- log_error "\nErrors were found in the expected failures file - see the messages above!"
-else
- log_success "\nNo problems were found in the expected failures file."
-fi
-exit ${FINAL_EXIT_STATUS}
diff --git a/tests/acceptance/run.sh b/tests/acceptance/run.sh
deleted file mode 100755
index 3435e89e5e..0000000000
--- a/tests/acceptance/run.sh
+++ /dev/null
@@ -1,712 +0,0 @@
-#!/bin/bash
-[[ "${DEBUG}" == "true" ]] && set -x
-
-# from http://stackoverflow.com/a/630387
-SCRIPT_PATH="`dirname \"$0\"`" # relative
-SCRIPT_PATH="`( cd \"${SCRIPT_PATH}\" && pwd )`" # absolutized and normalized
-
-echo 'Script path: '${SCRIPT_PATH}
-
-# Allow optionally passing in the path to the behat program.
-# This gives flexibility for callers that have installed their own behat
-if [ -z "${BEHAT_BIN}" ]
-then
- BEHAT=${SCRIPT_PATH}/../../vendor-bin/behat/vendor/bin/behat
-else
- BEHAT=${BEHAT_BIN}
-fi
-BEHAT_TAGS_OPTION_FOUND=false
-
-if [ -n "${STEP_THROUGH}" ]
-then
- STEP_THROUGH_OPTION="--step-through"
-fi
-
-if [ -n "${STOP_ON_FAILURE}" ]
-then
- STOP_OPTION="--stop-on-failure"
-fi
-
-if [ -n "${PLAIN_OUTPUT}" ]
-then
- # explicitly tell Behat to not do colored output
- COLORS_OPTION="--no-colors"
- # Use the Bash "null" command to do nothing, rather than use tput to set a color
- RED_COLOR=":"
- GREEN_COLOR=":"
- YELLOW_COLOR=":"
-else
- COLORS_OPTION="--colors"
- RED_COLOR="tput setaf 1"
- GREEN_COLOR="tput setaf 2"
- YELLOW_COLOR="tput setaf 3"
-fi
-
-# The following environment variables can be specified:
-#
-# ACCEPTANCE_TEST_TYPE - see "--type" description
-# BEHAT_FEATURE - see "--feature" description
-# BEHAT_FILTER_TAGS - see "--tags" description
-# BEHAT_SUITE - see "--suite" description
-# BEHAT_YML - see "--config" description
-# RUN_PART and DIVIDE_INTO_NUM_PARTS - see "--part" description
-# SHOW_OC_LOGS - see "--show-oc-logs" description
-# TESTING_REMOTE_SYSTEM - see "--remote" description
-# EXPECTED_FAILURES_FILE - a file that contains a list of the scenarios that are expected to fail
-
-if [ -n "${EXPECTED_FAILURES_FILE}" ]
-then
- # Check the expected-failures file
- ${SCRIPT_PATH}/lint-expected-failures.sh
- LINT_STATUS=$?
- if [ ${LINT_STATUS} -ne 0 ]
- then
- echo "Error: expected failures file ${EXPECTED_FAILURES_FILE} is invalid"
- exit ${LINT_STATUS}
- fi
-fi
-
-# Default to API tests
-# Note: if a specific feature or suite is also specified, then the acceptance
-# test type is deduced from the suite name, and this environment variable
-# ACCEPTANCE_TEST_TYPE is overridden.
-if [ -z "${ACCEPTANCE_TEST_TYPE}" ]
-then
- ACCEPTANCE_TEST_TYPE="api"
-fi
-
-# Look for command line options for:
-# -c or --config - specify a behat.yml to use
-# --feature - specify a single feature to run
-# --suite - specify a single suite to run
-# --type - api or core-api - if no individual feature or suite is specified, then
-# specify the type of acceptance tests to run. Default api.
-# --tags - specify tags for scenarios to run (or not)
-# --remote - the server under test is remote, so we cannot locally enable the
-# testing app. We have to assume it is already enabled.
-# --show-oc-logs - tail the ownCloud log after the test run
-# --loop - loop tests for given number of times. Only use it for debugging purposes
-# --part - run a subset of scenarios, need two numbers.
-# first number: which part to run
-# second number: in how many parts to divide the set of scenarios
-# --step-through - pause after each test step
-
-# Command line options processed here will override environment variables that
-# might have been set by the caller, or in the code above.
-while [[ $# -gt 0 ]]
-do
- key="$1"
- case ${key} in
- -c|--config)
- BEHAT_YML="$2"
- shift
- ;;
- --feature)
- BEHAT_FEATURE="$2"
- shift
- ;;
- --suite)
- BEHAT_SUITE="$2"
- shift
- ;;
- --loop)
- BEHAT_RERUN_TIMES="$2"
- shift
- ;;
- --type)
- # Lowercase the parameter value, so the user can provide "API", "CORE-API", etc
- ACCEPTANCE_TEST_TYPE="${2,,}"
- shift
- ;;
- --tags)
- BEHAT_FILTER_TAGS="$2"
- BEHAT_TAGS_OPTION_FOUND=true
- shift
- ;;
- --part)
- RUN_PART="$2"
- DIVIDE_INTO_NUM_PARTS="$3"
- if [ ${RUN_PART} -gt ${DIVIDE_INTO_NUM_PARTS} ]
- then
- echo "cannot run part ${RUN_PART} of ${DIVIDE_INTO_NUM_PARTS}"
- exit 1
- fi
- shift 2
- ;;
- --step-through)
- STEP_THROUGH_OPTION="--step-through"
- ;;
- *)
- # A "random" parameter is presumed to be a feature file to run.
- # Typically that will be specified at the end, or as the only
- # parameter.
- BEHAT_FEATURE="$1"
- ;;
- esac
- shift
-done
-
-# Set the language to "C"
-# We want to have it all in english to be able to parse outputs
-export LANG=C
-
-# Provide a default admin username and password.
-# But let the caller pass them if they wish
-if [ -z "${ADMIN_USERNAME}" ]
-then
- ADMIN_USERNAME="admin"
-fi
-
-if [ -z "${ADMIN_PASSWORD}" ]
-then
- ADMIN_PASSWORD="admin"
-fi
-
-export ADMIN_USERNAME
-export ADMIN_PASSWORD
-
-if [ -z "${BEHAT_RERUN_TIMES}" ]
-then
- BEHAT_RERUN_TIMES=1
-fi
-
-# expected variables
-# --------------------
-# $SUITE_FEATURE_TEXT - human readable which test to run
-# $BEHAT_SUITE_OPTION - suite setting with "--suite" or empty if all suites have to be run
-# $BEHAT_FEATURE - feature file, or empty
-# $BEHAT_FILTER_TAGS - list of tags
-# $BEHAT_TAGS_OPTION_FOUND
-# $TEST_LOG_FILE
-# $BEHAT - behat executable
-# $BEHAT_YML
-#
-# set arrays
-# ---------------
-# $UNEXPECTED_FAILED_SCENARIOS array of scenarios that failed unexpectedly
-# $UNEXPECTED_PASSED_SCENARIOS array of scenarios that passed unexpectedly (while running with expected-failures.txt)
-# $STOP_ON_FAILURE - aborts the test run after the first failure
-
-declare -a UNEXPECTED_FAILED_SCENARIOS
-declare -a UNEXPECTED_PASSED_SCENARIOS
-declare -a UNEXPECTED_BEHAT_EXIT_STATUSES
-
-function run_behat_tests() {
- echo "Running ${SUITE_FEATURE_TEXT} tests tagged ${BEHAT_FILTER_TAGS}" | tee ${TEST_LOG_FILE}
-
- if [ "${REPLACE_USERNAMES}" == "true" ]
- then
- echo "Usernames and attributes in tests are being replaced:"
- cat ${SCRIPT_PATH}/usernames.json
- fi
-
- echo "Using behat config '${BEHAT_YML}'"
- ${BEHAT} ${COLORS_OPTION} ${STOP_OPTION} --strict ${STEP_THROUGH_OPTION} -c ${BEHAT_YML} -f pretty ${BEHAT_SUITE_OPTION} --tags ${BEHAT_FILTER_TAGS} ${BEHAT_FEATURE} -v 2>&1 | tee -a ${TEST_LOG_FILE}
-
- BEHAT_EXIT_STATUS=${PIPESTATUS[0]}
-
- # remove nullbytes from the test log
- TEMP_CONTENT=$(tr < ${TEST_LOG_FILE} -d '\000')
- OLD_IFS="${IFS}"
- IFS=""
- echo ${TEMP_CONTENT} > ${TEST_LOG_FILE}
- IFS="${OLD_IFS}"
-
- # Find the count of scenarios that passed
- SCENARIO_RESULTS_COLORED=`grep -Ea '^[0-9]+[[:space:]]scenario(|s)[[:space:]]\(' ${TEST_LOG_FILE}`
- SCENARIO_RESULTS=$(echo "${SCENARIO_RESULTS_COLORED}" | sed "s/\x1b[^m]*m//g")
- if [ ${BEHAT_EXIT_STATUS} -eq 0 ]
- then
- # They (SCENARIO_RESULTS) all passed, so just get the first number.
- # The text looks like "1 scenario (1 passed)" or "123 scenarios (123 passed)"
- [[ ${SCENARIO_RESULTS} =~ ([0-9]+) ]]
- SCENARIOS_THAT_PASSED=$((SCENARIOS_THAT_PASSED + BASH_REMATCH[1]))
- else
- # "Something went wrong" with the Behat run (non-zero exit status).
- # If there were "ordinary" test fails, then we process that later. Maybe they are all "expected failures".
- # But if there were steps in a feature file that are undefined, we want to fail immediately.
- # So exit the tests and do not lint expected failures when undefined steps exist.
- if [[ ${SCENARIO_RESULTS} == *"undefined"* ]]
- then
- ${RED_COLOR}; echo -e "Undefined steps: There were some undefined steps found."
- exit 1
- fi
- # If there were no scenarios in the requested suite or feature that match
- # the requested combination of tags, then Behat exits with an error status
- # and reports "No scenarios" in its output.
- # This can happen, for example, when running core suites from an app and
- # requesting some tag combination that does not happen frequently. Then
- # sometimes there may not be any matching scenarios in one of the suites.
- # In this case, consider the test has passed.
- MATCHING_COUNT=`grep -ca '^No scenarios$' ${TEST_LOG_FILE}`
- if [ ${MATCHING_COUNT} -eq 1 ]
- then
- echo "Information: no matching scenarios were found."
- BEHAT_EXIT_STATUS=0
- else
- # Find the count of scenarios that passed and failed
- SCENARIO_RESULTS_COLORED=`grep -Ea '^[0-9]+[[:space:]]scenario(|s)[[:space:]]\(' ${TEST_LOG_FILE}`
- SCENARIO_RESULTS=$(echo "${SCENARIO_RESULTS_COLORED}" | sed "s/\x1b[^m]*m//g")
- if [[ ${SCENARIO_RESULTS} =~ [0-9]+[^0-9]+([0-9]+)[^0-9]+([0-9]+)[^0-9]+ ]]
- then
- # Some passed and some failed, we got the second and third numbers.
- # The text looked like "15 scenarios (6 passed, 9 failed)"
- SCENARIOS_THAT_PASSED=$((SCENARIOS_THAT_PASSED + BASH_REMATCH[1]))
- SCENARIOS_THAT_FAILED=$((SCENARIOS_THAT_FAILED + BASH_REMATCH[2]))
- elif [[ ${SCENARIO_RESULTS} =~ [0-9]+[^0-9]+([0-9]+)[^0-9]+ ]]
- then
- # All failed, we got the second number.
- # The text looked like "4 scenarios (4 failed)"
- SCENARIOS_THAT_FAILED=$((SCENARIOS_THAT_FAILED + BASH_REMATCH[1]))
- fi
- fi
- fi
-
- FAILED_SCENARIO_PATHS_COLORED=`awk '/Failed scenarios:/',0 ${TEST_LOG_FILE} | grep -a feature`
- # There will be some ANSI escape codes for color in the FEATURE_COLORED var.
- # Strip them out so we can pass just the ordinary feature details to Behat.
- # Thanks to https://en.wikipedia.org/wiki/Tee_(command) and
- # https://stackoverflow.com/questions/23416278/how-to-strip-ansi-escape-sequences-from-a-variable
- # for ideas.
- FAILED_SCENARIO_PATHS=$(echo "${FAILED_SCENARIO_PATHS_COLORED}" | sed "s/\x1b[^m]*m//g")
-
- # If something else went wrong, and there were no failed scenarios,
- # then the awk, grep, sed command sequence above ends up with an empty string.
- # Unset FAILED_SCENARIO_PATHS to avoid later code thinking that there might be
- # one failed scenario.
- if [ -z "${FAILED_SCENARIO_PATHS}" ]
- then
- unset FAILED_SCENARIO_PATHS
- fi
-
- if [ -n "${EXPECTED_FAILURES_FILE}" ]
- then
- if [ -n "${BEHAT_SUITE_TO_RUN}" ]
- then
- echo "Checking expected failures for suite ${BEHAT_SUITE_TO_RUN}"
- else
- echo "Checking expected failures"
- fi
-
- # Check that every failed scenario is in the list of expected failures
- for FAILED_SCENARIO_PATH in ${FAILED_SCENARIO_PATHS}
- do
- SUITE_PATH=`dirname ${FAILED_SCENARIO_PATH}`
- SUITE=`basename ${SUITE_PATH}`
- SCENARIO=`basename ${FAILED_SCENARIO_PATH}`
- SUITE_SCENARIO="${SUITE}/${SCENARIO}"
- grep "\[${SUITE_SCENARIO}\]" "${EXPECTED_FAILURES_FILE}" > /dev/null
- if [ $? -ne 0 ]
- then
- echo "Error: Scenario ${SUITE_SCENARIO} failed but was not expected to fail."
- UNEXPECTED_FAILED_SCENARIOS+=("${SUITE_SCENARIO}")
- fi
- done
-
- # Check that every scenario in the list of expected failures did fail
- while read SUITE_SCENARIO
- do
- # Ignore comment lines (starting with hash)
- if [[ "${SUITE_SCENARIO}" =~ ^# ]]
- then
- continue
- fi
- # Match lines that have [someSuite/someName.feature:n] - the part inside the
- # brackets is the suite, feature and line number of the expected failure.
- # Else ignore the line.
- if [[ "${SUITE_SCENARIO}" =~ \[([a-zA-Z0-9-]+/[a-zA-Z0-9-]+\.feature:[0-9]+)] ]]; then
- SUITE_SCENARIO="${BASH_REMATCH[1]}"
- else
- continue
- fi
- if [ -n "${BEHAT_SUITE_TO_RUN}" ]
- then
- # If the expected failure is not in the suite that is currently being run,
- # then do not try and check that it failed.
- REGEX_TO_MATCH="^${BEHAT_SUITE_TO_RUN}/"
- if ! [[ "${SUITE_SCENARIO}" =~ ${REGEX_TO_MATCH} ]]
- then
- continue
- fi
- fi
-
- # look for the expected suite-scenario at the end of a line in the
- # FAILED_SCENARIO_PATHS - for example looking for apiComments/comments.feature:9
- # we want to match lines like:
- # tests/acceptance/features/apiComments/comments.feature:9
- # but not lines like::
- # tests/acceptance/features/apiComments/comments.feature:902
- echo "${FAILED_SCENARIO_PATHS}" | grep ${SUITE_SCENARIO}$ > /dev/null
- if [ $? -ne 0 ]
- then
- echo "Info: Scenario ${SUITE_SCENARIO} was expected to fail but did not fail."
- UNEXPECTED_PASSED_SCENARIOS+=("${SUITE_SCENARIO}")
- fi
- done < ${EXPECTED_FAILURES_FILE}
- else
- for FAILED_SCENARIO_PATH in ${FAILED_SCENARIO_PATHS}
- do
- SUITE_PATH=$(dirname "${FAILED_SCENARIO_PATH}")
- SUITE=$(basename "${SUITE_PATH}")
- SCENARIO=$(basename "${FAILED_SCENARIO_PATH}")
- SUITE_SCENARIO="${SUITE}/${SCENARIO}"
- UNEXPECTED_FAILED_SCENARIOS+=("${SUITE_SCENARIO}")
- done
- fi
-
- if [ ${BEHAT_EXIT_STATUS} -ne 0 ] && [ ${#FAILED_SCENARIO_PATHS[@]} -eq 0 ]
- then
- # Behat had some problem and there were no failed scenarios reported
- # So the problem is something else.
- # Possibly there were missing step definitions. Or Behat crashed badly, or...
- UNEXPECTED_BEHAT_EXIT_STATUSES+=("${SUITE_FEATURE_TEXT} had behat exit status ${BEHAT_EXIT_STATUS}")
- fi
-
- if [ "${BEHAT_TAGS_OPTION_FOUND}" != true ]
- then
- # The behat run specified to skip scenarios tagged @skip
- # Report them in a dry-run so they can be seen
- # Big red error output is displayed if there are no matching scenarios - send it to null
- DRY_RUN_FILE=$(mktemp)
- SKIP_TAGS="@skip"
- ${BEHAT} --dry-run {$COLORS_OPTION} -c ${BEHAT_YML} -f pretty ${BEHAT_SUITE_OPTION} --tags "${SKIP_TAGS}" ${BEHAT_FEATURE} 1>${DRY_RUN_FILE} 2>/dev/null
- if grep -q -m 1 'No scenarios' "${DRY_RUN_FILE}"
- then
- # If there are no skip scenarios, then no need to report that
- :
- else
- echo ""
- echo "The following tests were skipped because they are tagged @skip:"
- cat "${DRY_RUN_FILE}" | tee -a ${TEST_LOG_FILE}
- fi
- rm -f "${DRY_RUN_FILE}"
- fi
-}
-
-declare -x TEST_SERVER_URL
-
-if [ -z "${IPV4_URL}" ]
-then
- IPV4_URL="${TEST_SERVER_URL}"
-fi
-
-if [ -z "${IPV6_URL}" ]
-then
- IPV6_URL="${TEST_SERVER_URL}"
-fi
-
-# If a feature file has been specified but no suite, then deduce the suite
-if [ -n "${BEHAT_FEATURE}" ] && [ -z "${BEHAT_SUITE}" ]
-then
- SUITE_PATH=`dirname ${BEHAT_FEATURE}`
- BEHAT_SUITE=`basename ${SUITE_PATH}`
-fi
-
-if [ -z "${BEHAT_YML}" ]
-then
- # Look for a behat.yml somewhere below the current working directory
- # This saves app acceptance tests being forced to specify BEHAT_YML
- BEHAT_YML="config/behat.yml"
- if [ ! -f "${BEHAT_YML}" ]
- then
- BEHAT_YML="acceptance/config/behat.yml"
- fi
- if [ ! -f "${BEHAT_YML}" ]
- then
- BEHAT_YML="tests/acceptance/config/behat.yml"
- fi
- # If no luck above, then use the core behat.yml that should live below this script
- if [ ! -f "${BEHAT_YML}" ]
- then
- BEHAT_YML="${SCRIPT_PATH}/config/behat.yml"
- fi
-fi
-
-BEHAT_CONFIG_DIR=$(dirname "${BEHAT_YML}")
-ACCEPTANCE_DIR=$(dirname "${BEHAT_CONFIG_DIR}")
-
-if [[ -z "$BEHAT_FEATURES_DIR" ]]
-then
- BEHAT_FEATURES_DIR="${ACCEPTANCE_DIR}/features"
-fi
-
-declare -a BEHAT_SUITES
-
-function get_behat_suites() {
- # $1 type of suites to get "api" or "core-api"
- # defaults to "api"
- TYPE="$1"
- if [[ -z "$TYPE" ]]
- then
- TYPE="api"
- fi
-
- ALL_SUITES=""
- for suite in `find ${BEHAT_FEATURES_DIR}/ -type d -iname ${TYPE}* | sort | rev | cut -d"/" -f1 | rev`
- do
- if [[ -f "${BEHAT_FILTER_SUITE_FILE}" ]]
- then
- if [[ ! `grep $suite "${BEHAT_FILTER_SUITE_FILE}"` ]]
- then
- ALL_SUITES+="$suite"$'\n'
- fi
- else
- ALL_SUITES+="$suite"$'\n'
- fi
- done
-
- COUNT_ALL_SUITES=`echo "${ALL_SUITES}" | tr " " "\n" | wc -l`
-
- #divide the suites letting it round down (could be zero)
- MIN_SUITES_PER_RUN=$((${COUNT_ALL_SUITES} / ${DIVIDE_INTO_NUM_PARTS}))
- #some jobs might need an extra suite
- MAX_SUITES_PER_RUN=$((${MIN_SUITES_PER_RUN} + 1))
- # the remaining number of suites that need to be distributed (could be zero)
- REMAINING_SUITES=$((${COUNT_ALL_SUITES} - (${DIVIDE_INTO_NUM_PARTS} * ${MIN_SUITES_PER_RUN})))
-
- if [[ ${RUN_PART} -le ${REMAINING_SUITES} ]]
- then
- SUITES_THIS_RUN=${MAX_SUITES_PER_RUN}
- SUITES_IN_PREVIOUS_RUNS=$((${MAX_SUITES_PER_RUN} * (${RUN_PART} - 1)))
- else
- SUITES_THIS_RUN=${MIN_SUITES_PER_RUN}
- SUITES_IN_PREVIOUS_RUNS=$((((${MAX_SUITES_PER_RUN} * ${REMAINING_SUITES}) + (${MIN_SUITES_PER_RUN} * (${RUN_PART} - ${REMAINING_SUITES} - 1)))))
- fi
-
- if [ ${SUITES_THIS_RUN} -eq 0 ]
- then
- echo "there are only ${COUNT_ALL_SUITES} suites, nothing to do in part ${RUN_PART}"
- exit 0
- fi
-
- COUNT_FINISH_AND_TODO_SUITES=$((${SUITES_IN_PREVIOUS_RUNS} + ${SUITES_THIS_RUN}))
- BEHAT_SUITES+=(`echo "${ALL_SUITES}" | tr " " "\n" | head -n ${COUNT_FINISH_AND_TODO_SUITES} | tail -n ${SUITES_THIS_RUN}`)
-}
-
-if [[ -n "${BEHAT_SUITE}" ]]
-then
- BEHAT_SUITES+=("${BEHAT_SUITE}")
-else
- if [[ -n "${RUN_PART}" ]]; then
- if [[ "${ACCEPTANCE_TEST_TYPE}" == "core-api" ]]; then
- get_behat_suites "core"
- else
- get_behat_suites "${ACCEPTANCE_TEST_TYPE}"
- fi
- fi
-fi
-
-
-TEST_TYPE_TEXT="API"
-
-# Always have "@api"
-if [ ! -z "${BEHAT_FILTER_TAGS}" ]
-then
- # Be nice to the caller
- # Remove any extra "&&" at the end of their tags list
- BEHAT_FILTER_TAGS="${BEHAT_FILTER_TAGS%&&}"
- # Remove any extra "&&" at the beginning of their tags list
- BEHAT_FILTER_TAGS="${BEHAT_FILTER_TAGS#&&}"
-fi
-
-# EMAIL_HOST defines where the system-under-test can find the email server (inbucket)
-# for sending email.
-if [ -z "${EMAIL_HOST}" ]
-then
- EMAIL_HOST="127.0.0.1"
-fi
-
-# LOCAL_INBUCKET_HOST defines where this test script can find the Inbucket server
-# for sending email. When testing a remote system, the Inbucket server somewhere
-# "in the middle" might have a different host name from the point of view of
-# the test script.
-if [ -z "${LOCAL_EMAIL_HOST}" ]
-then
- LOCAL_EMAIL_HOST="${EMAIL_HOST}"
-fi
-
-if [ -z "${EMAIL_SMTP_PORT}" ]
-then
- EMAIL_SMTP_PORT="2500"
-fi
-
-# If the caller did not mention specific tags, skip the skipped tests by default
-if [ "${BEHAT_TAGS_OPTION_FOUND}" = false ]
-then
- if [[ -z $BEHAT_FILTER_TAGS ]]
- then
- BEHAT_FILTER_TAGS="~@skip"
- # If the caller has already specified specifically to run "@skip" scenarios
- # then do not append "not @skip"
- elif [[ ! ${BEHAT_FILTER_TAGS} =~ (^|&)@skip(&|$) ]]
- then
- BEHAT_FILTER_TAGS="${BEHAT_FILTER_TAGS}&&~@skip"
- fi
-fi
-
-export IPV4_URL
-export IPV6_URL
-export FILES_FOR_UPLOAD="${SCRIPT_PATH}/filesForUpload/"
-
-if [ "${TEST_OCIS}" != "true" ] && [ "${TEST_REVA}" != "true" ]
-then
- # We are testing on an ownCloud core server.
- # Tell the tests to wait 1 second between each upload/delete action
- # to avoid problems with actions that depend on timestamps in seconds.
- export UPLOAD_DELETE_WAIT_TIME=1
-fi
-
-TEST_LOG_FILE=$(mktemp)
-SCENARIOS_THAT_PASSED=0
-SCENARIOS_THAT_FAILED=0
-
-if [ ${#BEHAT_SUITES[@]} -eq 0 ] && [ -z "${BEHAT_FEATURE}" ]
-then
- SUITE_FEATURE_TEXT="all ${TEST_TYPE_TEXT}"
- run_behat_tests
-else
- if [ -n "${BEHAT_SUITE}" ]
- then
- SUITE_FEATURE_TEXT="${BEHAT_SUITE}"
- fi
-
- if [ -n "${BEHAT_FEATURE}" ]
- then
- # If running a whole feature, it will be something like login.feature
- # If running just a single scenario, it will also have the line number
- # like login.feature:36 - which will be parsed correctly like a "file"
- # by basename.
- BEHAT_FEATURE_FILE=`basename ${BEHAT_FEATURE}`
- SUITE_FEATURE_TEXT="${SUITE_FEATURE_TEXT} ${BEHAT_FEATURE_FILE}"
- fi
-fi
-
-for i in "${!BEHAT_SUITES[@]}"
- do
- BEHAT_SUITE_TO_RUN="${BEHAT_SUITES[$i]}"
- BEHAT_SUITE_OPTION="--suite=${BEHAT_SUITE_TO_RUN}"
- SUITE_FEATURE_TEXT="${BEHAT_SUITES[$i]}"
- for rerun_number in $(seq 1 ${BEHAT_RERUN_TIMES})
- do
- if ((${BEHAT_RERUN_TIMES} > 1))
- then
- echo -e "\nTest repeat $rerun_number of ${BEHAT_RERUN_TIMES}"
- fi
- run_behat_tests
- done
-done
-
-TOTAL_SCENARIOS=$((SCENARIOS_THAT_PASSED + SCENARIOS_THAT_FAILED))
-
-echo "runsh: Total ${TOTAL_SCENARIOS} scenarios (${SCENARIOS_THAT_PASSED} passed, ${SCENARIOS_THAT_FAILED} failed)"
-
-# 3 types of things can have gone wrong:
-# - some scenario failed (and it was not expected to fail)
-# - some scenario passed (but it was expected to fail)
-# - Behat exited with non-zero status because of some other error
-# If any of these happened then report about it and exit with status 1 (error)
-
-if [ ${#UNEXPECTED_FAILED_SCENARIOS[@]} -gt 0 ]
-then
- UNEXPECTED_FAILURE=true
-else
- UNEXPECTED_FAILURE=false
-fi
-
-if [ ${#UNEXPECTED_PASSED_SCENARIOS[@]} -gt 0 ]
-then
- UNEXPECTED_SUCCESS=true
-else
- UNEXPECTED_SUCCESS=false
-fi
-
-if [ ${#UNEXPECTED_BEHAT_EXIT_STATUSES[@]} -gt 0 ]
-then
- UNEXPECTED_BEHAT_EXIT_STATUS=true
-else
- UNEXPECTED_BEHAT_EXIT_STATUS=false
-fi
-
-# If we got some unexpected success, and we only ran a single feature or scenario
-# then the fact that some expected failures did not happen might be because those
-# scenarios were never even run.
-# Filter the UNEXPECTED_PASSED_SCENARIOS to remove scenarios that were not run.
-if [ "${UNEXPECTED_SUCCESS}" = true ]
-then
- ACTUAL_UNEXPECTED_PASS=()
- # if running a single feature or a single scenario
- if [[ -n "${BEHAT_FEATURE}" ]]
- then
- for unexpected_passed_value in "${UNEXPECTED_PASSED_SCENARIOS[@]}"
- do
- # check only for the running feature
- if [[ $BEHAT_FEATURE == *":"* ]]
- then
- BEHAT_FEATURE_WITH_LINE_NUM=$BEHAT_FEATURE
- else
- LINE_NUM=$(echo ${unexpected_passed_value} | cut -d":" -f2)
- BEHAT_FEATURE_WITH_LINE_NUM=$BEHAT_FEATURE:$LINE_NUM
- fi
- if [[ $BEHAT_FEATURE_WITH_LINE_NUM == *"${unexpected_passed_value}" ]]
- then
- ACTUAL_UNEXPECTED_PASS+=("${unexpected_passed_value}")
- fi
- done
- else
- ACTUAL_UNEXPECTED_PASS=("${UNEXPECTED_PASSED_SCENARIOS[@]}")
- fi
-
- if [ ${#ACTUAL_UNEXPECTED_PASS[@]} -eq 0 ]
- then
- UNEXPECTED_SUCCESS=false
- fi
-fi
-
-if [ "${UNEXPECTED_FAILURE}" = false ] && [ "${UNEXPECTED_SUCCESS}" = false ] && [ "${UNEXPECTED_BEHAT_EXIT_STATUS}" = false ]
-then
- FINAL_EXIT_STATUS=0
-else
- FINAL_EXIT_STATUS=1
-fi
-
-if [ -n "${EXPECTED_FAILURES_FILE}" ]
-then
- echo "runsh: Exit code after checking expected failures: ${FINAL_EXIT_STATUS}"
-fi
-
-if [ "${UNEXPECTED_FAILURE}" = true ]
-then
- ${YELLOW_COLOR}; echo "runsh: Total unexpected failed scenarios throughout the test run:"
- ${RED_COLOR}; printf "%s\n" "${UNEXPECTED_FAILED_SCENARIOS[@]}"
-else
- ${GREEN_COLOR}; echo "runsh: There were no unexpected failures."
-fi
-
-if [ "${UNEXPECTED_SUCCESS}" = true ]
-then
- ${YELLOW_COLOR}; echo "runsh: Total unexpected passed scenarios throughout the test run:"
- ${RED_COLOR}; printf "%s\n" "${ACTUAL_UNEXPECTED_PASS[@]}"
-else
- ${GREEN_COLOR}; echo "runsh: There were no unexpected success."
-fi
-
-if [ "${UNEXPECTED_BEHAT_EXIT_STATUS}" = true ]
-then
- ${YELLOW_COLOR}; echo "runsh: The following Behat test runs exited with non-zero status:"
- ${RED_COLOR}; printf "%s\n" "${UNEXPECTED_BEHAT_EXIT_STATUSES[@]}"
-fi
-
-# sync the file-system so all output will be flushed to storage.
-# In drone we sometimes see that the last lines of output are missing from the
-# drone log.
-sync
-
-# If we are running in drone CI, then sleep for a bit to (hopefully) let the
-# drone agent send all the output to the drone server.
-if [ -n "${CI_REPO}" ]
-then
- echo "sleeping for 30 seconds at end of test run"
- sleep 30
-fi
-
-exit ${FINAL_EXIT_STATUS}
diff --git a/tests/docker/docker-compose.yml b/tests/docker/docker-compose.yml
index 5f40f17d61..b1067b9684 100644
--- a/tests/docker/docker-compose.yml
+++ b/tests/docker/docker-compose.yml
@@ -1,4 +1,3 @@
-version: "3.4"
services:
revad:
# image: ${REVAD_IMAGE}
@@ -9,11 +8,11 @@ services:
build:
context: ../../
dockerfile: docker/Dockerfile.revad-eos
- volumes:
- - ../revad:/etc/revad
working_dir: /etc/revad/
healthcheck:
test: sleep 5
+ volumes:
+ - ../revad:/etc/revad
eos-storage:
image: ${EOS_FULL_IMAGE}
security_opt:
@@ -31,50 +30,56 @@ services:
interval: 10s
timeout: 5s
retries: 5
+ depends_on:
+ ldap:
+ condition: service_healthy
litmus:
image: registry.cern.ch/docker.io/owncloud/litmus:latest
environment:
LITMUS_USERNAME: einstein
LITMUS_PASSWORD: relativity
- TESTS: basic http copymove props
- acceptance:
- image: cs3org/behat:latest
- entrypoint: /mnt/acceptance/run.sh
- environment:
- OCIS_REVA_DATA_ROOT: /var/tmp/reva/data/
- DELETE_USER_DATA_CMD: rm -rf /var/tmp/reva/data/nodes/root/* /var/tmp/reva/data/nodes/*-*-*-* /var/tmp/reva/data/blobs/*
- SKELETON_DIR: /mnt/testing/data/apiSkeleton
- PLAIN_OUTPUT: 'true'
- volumes:
- - ../testing:/mnt/testing
- - ../ocis:/mnt/ocis
- - ../acceptance:/mnt/acceptance
+ TESTS: basic http copymove
gateway:
extends: revad
command: -c /etc/revad/gateway.toml
volumes:
- shared-volume:/var/tmp
+ depends_on:
+ ldap:
+ condition: service_healthy
frontend:
extends: revad
command: -c /etc/revad/frontend.toml
volumes:
- shared-volume:/var/tmp
+ depends_on:
+ ldap:
+ condition: service_healthy
storage-home:
extends: revad
hostname: storage-home
command: -c /etc/revad/storage-home.toml
volumes:
- shared-volume:/var/tmp
+ depends_on:
+ ldap:
+ condition: service_healthy
users:
extends: revad
command: -c /etc/revad/users.toml
volumes:
- shared-volume:/var/tmp
+ depends_on:
+ ldap:
+ condition: service_healthy
shares:
extends: revad
command: -c /etc/revad/shares.toml
volumes:
- shared-volume:/var/tmp
+ depends_on:
+ ldap:
+ condition: service_healthy
litmus-1:
extends: litmus
environment:
@@ -92,6 +97,8 @@ services:
condition: service_healthy
shares:
condition: service_healthy
+ ldap:
+ condition: service_healthy
litmus-2:
extends: litmus
environment:
@@ -120,10 +127,12 @@ services:
condition: service_healthy
frontend-global:
extends: revad
- hostname: frontend
command: -c /etc/revad/frontend-global.toml
volumes:
- shared-volume:/var/tmp
+ depends_on:
+ eos-storage:
+ condition: service_healthy
storage-local-1:
extends: revad
command: -c /etc/revad/storage-local-1.toml
@@ -140,35 +149,6 @@ services:
depends_on:
eos-storage:
condition: service_healthy
- acceptance-1:
- extends: acceptance
- environment:
- PATH_TO_APITESTS: /mnt/ocis
- TEST_SERVER_URL: http://frontend:20180
- TEST_REVA: 'true'
- EXPECTED_FAILURES_FILE: /mnt/acceptance/expected-failures-on-EOS-storage.md
- REGULAR_USER_PASSWORD: relativity
- SEND_SCENARIO_LINE_REFERENCES: 'true'
- BEHAT_SUITE: apiVirtualViews
- ACCEPTANCE_TEST_TYPE: api
- volumes:
- - shared-volume:/var/tmp
- working_dir: /mnt/acceptance
- depends_on:
- gateway:
- condition: service_healthy
- frontend-global:
- condition: service_healthy
- storage-home:
- condition: service_healthy
- users:
- condition: service_healthy
- shares:
- condition: service_healthy
- storage-local-1:
- condition: service_healthy
- storage-local-2:
- condition: service_healthy
ldap:
image: osixia/openldap:1.5.0
environment:
@@ -198,58 +178,5 @@ services:
depends_on:
ldap:
condition: service_healthy
- acceptance-2:
- extends: acceptance
- environment:
- TEST_SERVER_URL: http://frontend:20080
- TEST_WITH_LDAP: 'true'
- REVA_LDAP_HOSTNAME: ldap
- TEST_REVA: 'true'
- SEND_SCENARIO_LINE_REFERENCES: 'true'
- BEHAT_FILTER_TAGS: ~@provisioning_api-app-required&&~@skipOnOcis-OCIS-Storage&&~@personalSpace&&~@skipOnGraph&&~@carddav&&~@skipOnReva&&~@skipOnRevaMaster
- DIVIDE_INTO_NUM_PARTS: ${PARTS:-1}
- RUN_PART: ${PART:-1}
- EXPECTED_FAILURES_FILE: /mnt/acceptance/expected-failures-on-EOS-storage.md
- BEHAT_FEATURES_DIR: /mnt/ocis/tests/acceptance/features
- BEHAT_YML: /mnt/acceptance/config/behat-core.yml
- ACCEPTANCE_TEST_TYPE: core-api
- BEHAT_FILTER_SUITE_FILE: /mnt/acceptance/filtered-suites-acceptance-2-EOS
- volumes:
- - shared-volume:/var/tmp
- working_dir: /mnt/ocis
- depends_on:
- gateway:
- condition: service_healthy
- frontend:
- condition: service_healthy
- storage-home:
- condition: service_healthy
- shares:
- condition: service_healthy
- storage-users:
- condition: service_healthy
- storage-publiclink:
- condition: service_healthy
- ldap-users:
- condition: service_healthy
- # ceph:
- # image: ceph/daemon
- # environment:
- # CEPH_DAEMON: demo
- # NETWORK_AUTO_DETECT: 4
- # MON_IP: 0.0.0.0
- # CEPH_PUBLIC_NETWORK: 0.0.0.0/0
- # RGW_CIVETWEB_PORT: 4000
- # RGW_NAME: ceph
- # CEPH_DEMO_UID: test-user
- # CEPH_DEMO_ACCESS_KEY: test
- # CEPH_DEMO_SECRET_KEY: test
- # CEPH_DEMO_BUCKET: test
- # healthcheck:
- # test: ceph health
- # interval: 5s
- # timeout: 5s
- # retries: 5
-
volumes:
shared-volume:
diff --git a/tests/docker/eos-storage/Dockerfile b/tests/docker/eos-storage/Dockerfile
index 587331fa0d..00a5798caf 100644
--- a/tests/docker/eos-storage/Dockerfile
+++ b/tests/docker/eos-storage/Dockerfile
@@ -5,7 +5,7 @@
# needs to be passed, else the container will run out of fd.
# docker run myeoscontainer --ulimit nofiles:1024000:1024000
-FROM gitlab-registry.cern.ch/dss/eos/eos-ci:5.1.25
+FROM gitlab-registry.cern.ch/dss/eos/eos-ci:02352772.el9
COPY scripts/eos-run.sh /mnt/scripts/eos-run.sh
COPY sssd/sssd.conf /etc/sssd/sssd.conf
diff --git a/tests/docker/eos-storage/scripts/eos-run.sh b/tests/docker/eos-storage/scripts/eos-run.sh
index 1237c96216..7f51bb55a7 100755
--- a/tests/docker/eos-storage/scripts/eos-run.sh
+++ b/tests/docker/eos-storage/scripts/eos-run.sh
@@ -32,11 +32,21 @@ for letter in {a..z}; do
eos mkdir -p "/eos/user/$letter"
done
+# create cbox sudoer user
+adduser cbox -u 58679 -g 0 -m -s /bin/sh
eos vid set membership 0 +sudo
-eos vid set membership 99 +sudo
-eos vid set map -tident "*@storage-home" vuid:0 vgid:0
-eos vid set map -tident "*@storage-users" vuid:0 vgid:0
-eos vid set map -tident "*@storage-local-1" vuid:0 vgid:0
-eos vid set map -tident "*@storage-local-2" vuid:0 vgid:0
+eos vid set membership cbox +sudo
+
+eos vid set map -tident "*@storage-home" vuid:58679 vgid:0
+eos vid set map -tident "*@storage-users" vuid:58679 vgid:0
+eos vid set map -tident "*@storage-local-1" vuid:58679 vgid:0
+eos vid set map -tident "*@storage-local-2" vuid:58679 vgid:0
+eos vid set map -tident "*@docker-storage-home-1.docker_default" vuid:58679 vgid:0
+
+eos vid set map -tident "unix@storage-home" vuid:58679 vgid:0
+eos vid set map -tident "unix@storage-users" vuid:58679 vgid:0
+eos vid set map -tident "unix@storage-local-1" vuid:58679 vgid:0
+eos vid set map -tident "unix@storage-local-2" vuid:58679 vgid:0
+eos vid set map -tident "unix@docker-storage-home-1.docker_default" vuid:58679 vgid:0
tail -f /dev/null
diff --git a/tests/helpers/helpers.go b/tests/helpers/helpers.go
index d84923b15c..2354c72be0 100644
--- a/tests/helpers/helpers.go
+++ b/tests/helpers/helpers.go
@@ -105,7 +105,7 @@ func Upload(ctx context.Context, fs storage.FS, ref *provider.Reference, content
return errors.New("simple upload method not available")
}
uploadRef := &provider.Reference{Path: "/" + uploadID}
- err = fs.Upload(ctx, uploadRef, io.NopCloser(bytes.NewReader(content)))
+ err = fs.Upload(ctx, uploadRef, io.NopCloser(bytes.NewReader(content)), map[string]string{})
return err
}
diff --git a/tests/integration/grpc/ocm_share_test.go b/tests/integration/grpc/ocm_share_test.go.disabled
similarity index 100%
rename from tests/integration/grpc/ocm_share_test.go
rename to tests/integration/grpc/ocm_share_test.go.disabled
diff --git a/tests/revad/revad.toml b/tests/revad/revad.toml
new file mode 100644
index 0000000000..e69de29bb2