From f232923d606c0c842984ca75aef736f68c9f5224 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Wed, 13 Apr 2022 11:47:15 +0000 Subject: [PATCH] webdav: handle REPORT MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jörn Friedrich Dreyer --- webdav/pkg/service/v0/search.go | 33 ++++++++++++++++++++++++++++++++ webdav/pkg/service/v0/service.go | 5 +++++ 2 files changed, 38 insertions(+) create mode 100644 webdav/pkg/service/v0/search.go diff --git a/webdav/pkg/service/v0/search.go b/webdav/pkg/service/v0/search.go new file mode 100644 index 000000000..3a299db02 --- /dev/null +++ b/webdav/pkg/service/v0/search.go @@ -0,0 +1,33 @@ +package svc + +import ( + "net/http" + + searchsvc "github.com/owncloud/ocis/protogen/gen/ocis/services/search/v0" + merrors "go-micro.dev/v4/errors" +) + +// Search is the endpoint for retrieving search results for REPORT requests +func (g Webdav) Search(w http.ResponseWriter, r *http.Request) { + + rsp, err := g.searchClient.Search(r.Context(), &searchsvc.SearchRequest{}) + if err != nil { + e := merrors.Parse(err.Error()) + switch e.Code { + case http.StatusBadRequest: + renderError(w, r, errBadRequest(err.Error())) + default: + renderError(w, r, errInternalError(err.Error())) + } + g.log.Error().Err(err).Msg("could not get search results") + return + } + + g.sendSearchResponse(rsp, w, r) +} + +func (g Webdav) sendSearchResponse(rsp *searchsvc.SearchResponse, w http.ResponseWriter, r *http.Request) { + + w.WriteHeader(http.StatusOK) + +} diff --git a/webdav/pkg/service/v0/service.go b/webdav/pkg/service/v0/service.go index c98a3b3af..8d08ac1cf 100644 --- a/webdav/pkg/service/v0/service.go +++ b/webdav/pkg/service/v0/service.go @@ -21,6 +21,7 @@ import ( "github.com/go-chi/chi/v5" thumbnailsmsg "github.com/owncloud/ocis/protogen/gen/ocis/messages/thumbnails/v0" + searchsvc "github.com/owncloud/ocis/protogen/gen/ocis/services/search/v0" thumbnailssvc "github.com/owncloud/ocis/protogen/gen/ocis/services/thumbnails/v0" "github.com/owncloud/ocis/webdav/pkg/config" "github.com/owncloud/ocis/webdav/pkg/dav/requests" @@ -62,6 +63,7 @@ func NewService(opts ...Option) (Service, error) { config: conf, log: options.Logger, mux: m, + searchClient: searchsvc.NewSearchProviderService("search", grpc.DefaultClient), thumbnailsClient: thumbnailssvc.NewThumbnailService("com.owncloud.api.thumbnails", grpc.DefaultClient), revaClient: gwc, } @@ -71,6 +73,8 @@ func NewService(opts ...Option) (Service, error) { r.Get("/remote.php/dav/files/{id}/*", svc.Thumbnail) r.Get("/remote.php/dav/public-files/{token}/*", svc.PublicThumbnail) r.Head("/remote.php/dav/public-files/{token}/*", svc.PublicThumbnailHead) + + r.MethodFunc("REPORT", "/remote.php/dav/files/{id}/*", svc.Search) }) return svc, nil @@ -81,6 +85,7 @@ type Webdav struct { config *config.Config log log.Logger mux *chi.Mux + searchClient searchsvc.SearchProviderService thumbnailsClient thumbnailssvc.ThumbnailService revaClient gatewayv1beta1.GatewayAPIClient }