From 75cadce7c1bb9d490c9d61de0dd2cec262a4c3bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A1lint=20Ujv=C3=A1ri?= Date: Wed, 26 Feb 2025 14:25:12 +0100 Subject: [PATCH] fix: act expose headers --- pkg/api/accesscontrol.go | 12 +++++------- pkg/api/bytes.go | 7 ++++++- pkg/api/bzz.go | 7 ++++++- pkg/api/chunk.go | 7 ++++++- pkg/api/dirs.go | 7 ++++++- pkg/api/feed.go | 7 ++++++- pkg/api/soc.go | 7 ++++++- 7 files changed, 41 insertions(+), 13 deletions(-) diff --git a/pkg/api/accesscontrol.go b/pkg/api/accesscontrol.go index 4e64d451197..1ae0fb2fe6e 100644 --- a/pkg/api/accesscontrol.go +++ b/pkg/api/accesscontrol.go @@ -154,32 +154,30 @@ func (s *Service) actDecryptionHandler() func(h http.Handler) http.Handler { // uploads the encrypted reference, history and kvs to the store. func (s *Service) actEncryptionHandler( ctx context.Context, - w http.ResponseWriter, putter storer.PutterSession, reference swarm.Address, historyRootHash swarm.Address, -) (swarm.Address, error) { +) (swarm.Address, swarm.Address, error) { publisherPublicKey := &s.publicKey ls := loadsave.New(s.storer.Download(true), s.storer.Cache(), requestPipelineFactory(ctx, putter, false, redundancy.NONE), redundancy.DefaultLevel) storageReference, historyReference, encryptedReference, err := s.accesscontrol.UploadHandler(ctx, ls, reference, publisherPublicKey, historyRootHash) if err != nil { - return swarm.ZeroAddress, err + return swarm.ZeroAddress, swarm.ZeroAddress, err } // only need to upload history and kvs if a new history is created, // meaning that the publisher uploaded to the history for the first time if !historyReference.Equal(historyRootHash) { err = putter.Done(storageReference) if err != nil { - return swarm.ZeroAddress, fmt.Errorf("done split key-value store failed: %w", err) + return swarm.ZeroAddress, swarm.ZeroAddress, fmt.Errorf("done split key-value store failed: %w", err) } err = putter.Done(historyReference) if err != nil { - return swarm.ZeroAddress, fmt.Errorf("done split history failed: %w", err) + return swarm.ZeroAddress, swarm.ZeroAddress, fmt.Errorf("done split history failed: %w", err) } } - w.Header().Set(SwarmActHistoryAddressHeader, historyReference.String()) - return encryptedReference, nil + return encryptedReference, historyReference, nil } // actListGranteesHandler is a middleware that decrypts the given address and returns the list of grantees, diff --git a/pkg/api/bytes.go b/pkg/api/bytes.go index 0eac07092be..c3cdcc0bfc2 100644 --- a/pkg/api/bytes.go +++ b/pkg/api/bytes.go @@ -118,8 +118,9 @@ func (s *Service) bytesUploadHandler(w http.ResponseWriter, r *http.Request) { } encryptedReference := reference + historyReference := swarm.ZeroAddress if headers.Act { - encryptedReference, err = s.actEncryptionHandler(r.Context(), w, putter, reference, headers.HistoryAddress) + encryptedReference, historyReference, err = s.actEncryptionHandler(r.Context(), putter, reference, headers.HistoryAddress) if err != nil { logger.Debug("access control upload failed", "error", err) logger.Error(nil, "access control upload failed") @@ -154,6 +155,10 @@ func (s *Service) bytesUploadHandler(w http.ResponseWriter, r *http.Request) { span.LogFields(olog.Bool("success", true)) w.Header().Set(AccessControlExposeHeaders, SwarmTagHeader) + if headers.Act { + w.Header().Set(SwarmActHistoryAddressHeader, historyReference.String()) + w.Header().Add(AccessControlExposeHeaders, SwarmActHistoryAddressHeader) + } jsonhttp.Created(w, bytesPostResponse{ Reference: encryptedReference, }) diff --git a/pkg/api/bzz.go b/pkg/api/bzz.go index 0c9f152faba..e2e6c6e3063 100644 --- a/pkg/api/bzz.go +++ b/pkg/api/bzz.go @@ -267,8 +267,9 @@ func (s *Service) fileUploadHandler( logger.Debug("store", "manifest_reference", manifestReference) reference := manifestReference + historyReference := swarm.ZeroAddress if act { - reference, err = s.actEncryptionHandler(r.Context(), w, putter, reference, historyAddress) + reference, historyReference, err = s.actEncryptionHandler(r.Context(), putter, reference, historyAddress) if err != nil { logger.Debug("access control upload failed", "error", err) logger.Error(nil, "access control upload failed") @@ -303,6 +304,10 @@ func (s *Service) fileUploadHandler( } w.Header().Set(ETagHeader, fmt.Sprintf("%q", reference.String())) w.Header().Set(AccessControlExposeHeaders, SwarmTagHeader) + if act { + w.Header().Set(SwarmActHistoryAddressHeader, historyReference.String()) + w.Header().Add(AccessControlExposeHeaders, SwarmActHistoryAddressHeader) + } jsonhttp.Created(w, bzzUploadResponse{ Reference: reference, diff --git a/pkg/api/chunk.go b/pkg/api/chunk.go index 65f6ab6f6b3..a9ffcad5ae0 100644 --- a/pkg/api/chunk.go +++ b/pkg/api/chunk.go @@ -185,8 +185,9 @@ func (s *Service) chunkUploadHandler(w http.ResponseWriter, r *http.Request) { } reference := chunk.Address() + historyReference := swarm.ZeroAddress if headers.Act { - reference, err = s.actEncryptionHandler(r.Context(), w, putter, reference, headers.HistoryAddress) + reference, historyReference, err = s.actEncryptionHandler(r.Context(), putter, reference, headers.HistoryAddress) if err != nil { logger.Debug("access control upload failed", "error", err) logger.Error(nil, "access control upload failed") @@ -217,6 +218,10 @@ func (s *Service) chunkUploadHandler(w http.ResponseWriter, r *http.Request) { } w.Header().Set(AccessControlExposeHeaders, SwarmTagHeader) + if headers.Act { + w.Header().Set(SwarmActHistoryAddressHeader, historyReference.String()) + w.Header().Add(AccessControlExposeHeaders, SwarmActHistoryAddressHeader) + } jsonhttp.Created(w, chunkAddressResponse{Reference: reference}) } diff --git a/pkg/api/dirs.go b/pkg/api/dirs.go index b3c01a7d0c2..58160790857 100644 --- a/pkg/api/dirs.go +++ b/pkg/api/dirs.go @@ -102,8 +102,9 @@ func (s *Service) dirUploadHandler( } encryptedReference := reference + historyReference := swarm.ZeroAddress if act { - encryptedReference, err = s.actEncryptionHandler(r.Context(), w, putter, reference, historyAddress) + encryptedReference, historyReference, err = s.actEncryptionHandler(r.Context(), putter, reference, historyAddress) if err != nil { logger.Debug("access control upload failed", "error", err) logger.Error(nil, "access control upload failed") @@ -135,6 +136,10 @@ func (s *Service) dirUploadHandler( span.LogFields(olog.Bool("success", true)) } w.Header().Set(AccessControlExposeHeaders, SwarmTagHeader) + if act { + w.Header().Set(SwarmActHistoryAddressHeader, historyReference.String()) + w.Header().Add(AccessControlExposeHeaders, SwarmActHistoryAddressHeader) + } jsonhttp.Created(w, bzzUploadResponse{ Reference: encryptedReference, }) diff --git a/pkg/api/feed.go b/pkg/api/feed.go index 109ffd64594..a1345e2b39d 100644 --- a/pkg/api/feed.go +++ b/pkg/api/feed.go @@ -280,8 +280,9 @@ func (s *Service) feedPostHandler(w http.ResponseWriter, r *http.Request) { } encryptedReference := ref + historyReference := swarm.ZeroAddress if headers.Act { - encryptedReference, err = s.actEncryptionHandler(r.Context(), w, putter, ref, headers.HistoryAddress) + encryptedReference, historyReference, err = s.actEncryptionHandler(r.Context(), putter, ref, headers.HistoryAddress) if err != nil { logger.Debug("access control upload failed", "error", err) logger.Error(nil, "access control upload failed") @@ -307,5 +308,9 @@ func (s *Service) feedPostHandler(w http.ResponseWriter, r *http.Request) { return } + if headers.Act { + w.Header().Set(SwarmActHistoryAddressHeader, historyReference.String()) + w.Header().Set(AccessControlExposeHeaders, SwarmActHistoryAddressHeader) + } jsonhttp.Created(w, feedReferenceResponse{Reference: encryptedReference}) } diff --git a/pkg/api/soc.go b/pkg/api/soc.go index 01729ce7247..85d9bf5aaa3 100644 --- a/pkg/api/soc.go +++ b/pkg/api/soc.go @@ -181,8 +181,9 @@ func (s *Service) socUploadHandler(w http.ResponseWriter, r *http.Request) { } reference := sch.Address() + historyReference := swarm.ZeroAddress if headers.Act { - reference, err = s.actEncryptionHandler(r.Context(), w, putter, reference, headers.HistoryAddress) + reference, historyReference, err = s.actEncryptionHandler(r.Context(), putter, reference, headers.HistoryAddress) if err != nil { logger.Debug("access control upload failed", "error", err) logger.Error(nil, "access control upload failed") @@ -207,6 +208,10 @@ func (s *Service) socUploadHandler(w http.ResponseWriter, r *http.Request) { jsonhttp.InternalServerError(ow, "done split failed") return } + if headers.Act { + w.Header().Set(SwarmActHistoryAddressHeader, historyReference.String()) + w.Header().Set(AccessControlExposeHeaders, SwarmActHistoryAddressHeader) + } jsonhttp.Created(w, socPostResponse{Reference: reference}) }