Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit a8e50b8

Browse files
committedMar 7, 2024
Changed strategy following cs3org/cs3apis#226
1 parent 6bd9f6d commit a8e50b8

File tree

6 files changed

+30
-29
lines changed

6 files changed

+30
-29
lines changed
 

‎internal/grpc/services/storageprovider/storageprovider.go

-9
Original file line numberDiff line numberDiff line change
@@ -453,8 +453,6 @@ func (s *service) InitiateFileUpload(ctx context.Context, req *provider.Initiate
453453
}, nil
454454
}
455455

456-
// extract all metadata from (custom) headers
457-
// TODO(lopresti) They are defined in the http/services/ownclod/ocdav package (webdav.go) but duplicated here
458456
metadata := map[string]string{}
459457
var uploadLength int64
460458
if req.Opaque != nil && req.Opaque.Map != nil {
@@ -475,13 +473,6 @@ func (s *service) InitiateFileUpload(ctx context.Context, req *provider.Initiate
475473
if req.Opaque.Map["X-OC-Mtime"] != nil {
476474
metadata["mtime"] = string(req.Opaque.Map["X-OC-Mtime"].Value)
477475
}
478-
// in addition to the lock_id we may have the lock holder
479-
if req.Opaque.Map["Lock-Holder"] != nil {
480-
metadata["lockholder"] = string(req.Opaque.Map["Lock-Holder"].Value)
481-
}
482-
}
483-
if req.LockId != "" {
484-
metadata["lockid"] = req.LockId
485476
}
486477
uploadIDs, err := s.storage.InitiateUpload(ctx, newRef, uploadLength, metadata)
487478
if err != nil {

‎internal/http/services/owncloud/ocdav/put.go

+6-7
Original file line numberDiff line numberDiff line change
@@ -186,13 +186,6 @@ func (s *svc) handlePut(ctx context.Context, w http.ResponseWriter, r *http.Requ
186186
w.Header().Set(HeaderOCMtime, "accepted")
187187
}
188188

189-
if lockholder := r.Header.Get(HeaderLockHolder); lockholder != "" {
190-
opaqueMap[HeaderLockHolder] = &typespb.OpaqueEntry{
191-
Decoder: "plain",
192-
Value: []byte(lockholder),
193-
}
194-
}
195-
196189
// curl -X PUT https://demo.owncloud.com/remote.php/webdav/testcs.bin -u demo:demo -d '123' -v -H 'OC-Checksum: SHA1:40bd001563085fc35165329ea1ff5c5ecbdbbeef'
197190

198191
var cparts []string
@@ -278,6 +271,12 @@ func (s *svc) handlePut(ctx context.Context, w http.ResponseWriter, r *http.Requ
278271
return
279272
}
280273
httpReq.Header.Set(datagateway.TokenTransportHeader, token)
274+
if lockid := r.Header.Get(HeaderLockID); lockid != "" {
275+
httpReq.Header.Set(HeaderLockID, lockid)
276+
}
277+
if lockholder := r.Header.Get(HeaderLockHolder); lockholder != "" {
278+
httpReq.Header.Set(HeaderLockHolder, lockholder)
279+
}
281280

282281
httpRes, err := s.client.Do(httpReq)
283282
if err != nil {

‎internal/http/services/owncloud/ocdav/webdav.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ const (
7676
HeaderOCMtime = "X-OC-Mtime"
7777
HeaderExpectedEntityLength = "X-Expected-Entity-Length"
7878
HeaderTransferAuth = "TransferHeaderAuthorization"
79-
HeaderLockHolder = "Lock-Holder"
79+
HeaderLockID = "X-Lock-Id"
80+
HeaderLockHolder = "X-Lock-Holder"
8081
)
8182

8283
// WebDavHandler implements a dav endpoint.

‎pkg/ocm/storage/outcoming/ocm.go

+8-12
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import (
3434
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
3535
typespb "github.com/cs3org/go-cs3apis/cs3/types/v1beta1"
3636
"github.com/cs3org/reva/internal/http/services/datagateway"
37+
"github.com/cs3org/reva/internal/http/services/owncloud/ocdav"
3738
"github.com/cs3org/reva/internal/http/services/owncloud/ocs/conversions"
3839

3940
"github.com/cs3org/reva/pkg/appctx"
@@ -399,20 +400,9 @@ func (d *driver) Upload(ctx context.Context, ref *provider.Reference, content io
399400
}
400401

401402
return d.unwrappedOpFromShareCreator(ctx, share, rel, func(ctx context.Context, newRef *provider.Reference) error {
402-
opaqueMap := map[string]*typespb.OpaqueEntry{}
403-
if lockholder := metadata["lockholder"]; lockholder != "" {
404-
opaqueMap["Lock-Holder"] = &typespb.OpaqueEntry{
405-
Decoder: "plain",
406-
Value: []byte(lockholder),
407-
}
408-
}
409403
initRes, err := d.gateway.InitiateFileUpload(ctx, &provider.InitiateFileUploadRequest{
410404
Ref: newRef,
411-
LockId: metadata["lockid"],
412-
Opaque: &typespb.Opaque{
413-
Map: opaqueMap,
414-
},
415-
})
405+
LockId: metadata["lockid"]})
416406
switch {
417407
case err != nil:
418408
return err
@@ -431,6 +421,12 @@ func (d *driver) Upload(ctx context.Context, ref *provider.Reference, content io
431421
}
432422

433423
httpReq.Header.Set(datagateway.TokenTransportHeader, token)
424+
if lockid := metadata["lockid"]; lockid != "" {
425+
httpReq.Header.Set(ocdav.HeaderLockID, lockid)
426+
}
427+
if lockholder := metadata["lockholder"]; lockholder != "" {
428+
httpReq.Header.Set(ocdav.HeaderLockHolder, lockholder)
429+
}
434430

435431
httpRes, err := httpclient.New().Do(httpReq)
436432
if err != nil {

‎pkg/rhttp/datatx/manager/simple/simple.go

+7
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"net/http"
2424

2525
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
26+
"github.com/cs3org/reva/internal/http/services/owncloud/ocdav"
2627
"github.com/cs3org/reva/pkg/appctx"
2728
"github.com/cs3org/reva/pkg/errtypes"
2829
"github.com/cs3org/reva/pkg/rhttp/datatx"
@@ -76,6 +77,12 @@ func (m *manager) Handler(fs storage.FS) (http.Handler, error) {
7677

7778
ref := &provider.Reference{Path: fn}
7879
metadata := map[string]string{}
80+
if lockid := r.Header.Get(ocdav.HeaderLockID); lockid != "" {
81+
metadata["lockid"] = lockid
82+
}
83+
if lockholder := r.Header.Get(ocdav.HeaderLockHolder); lockholder != "" {
84+
metadata["lockholder"] = lockholder
85+
}
7986

8087
err := fs.Upload(ctx, ref, r.Body, metadata)
8188
switch v := err.(type) {

‎pkg/rhttp/datatx/manager/spaces/spaces.go

+7
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"strings"
2626

2727
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
28+
"github.com/cs3org/reva/internal/http/services/owncloud/ocdav"
2829
"github.com/cs3org/reva/pkg/appctx"
2930
"github.com/cs3org/reva/pkg/errtypes"
3031
"github.com/cs3org/reva/pkg/rhttp/datatx"
@@ -97,6 +98,12 @@ func (m *manager) Handler(fs storage.FS) (http.Handler, error) {
9798
Path: fn,
9899
}
99100
metadata := map[string]string{}
101+
if lockid := r.Header.Get(ocdav.HeaderLockID); lockid != "" {
102+
metadata["lockid"] = lockid
103+
}
104+
if lockholder := r.Header.Get(ocdav.HeaderLockHolder); lockholder != "" {
105+
metadata["lockholder"] = lockholder
106+
}
100107

101108
err = fs.Upload(ctx, ref, r.Body, metadata)
102109
switch v := err.(type) {

0 commit comments

Comments
 (0)
Please sign in to comment.