From 441041575f264b362509f3455b59b3c0cadf2e8e Mon Sep 17 00:00:00 2001 From: Giuseppe Lo Presti Date: Fri, 26 Nov 2021 09:15:34 +0100 Subject: [PATCH] Make sure /app/new takes target as absolute path (#2305) --- changelog/unreleased/app-abspath.md | 5 +++++ internal/http/services/appprovider/appprovider.go | 7 +++++++ internal/http/services/ocmd/reqres.go | 7 ++++--- 3 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 changelog/unreleased/app-abspath.md diff --git a/changelog/unreleased/app-abspath.md b/changelog/unreleased/app-abspath.md new file mode 100644 index 00000000000..551576e9dd2 --- /dev/null +++ b/changelog/unreleased/app-abspath.md @@ -0,0 +1,5 @@ +Bugfix: Make sure /app/new takes `target` as absolute path + +A mini-PR to make the `target` parameter absolute (by prepending `/` if missing). + +https://github.com/cs3org/reva/pull/2305 diff --git a/internal/http/services/appprovider/appprovider.go b/internal/http/services/appprovider/appprovider.go index 52a17545322..9795b1302ef 100644 --- a/internal/http/services/appprovider/appprovider.go +++ b/internal/http/services/appprovider/appprovider.go @@ -153,6 +153,13 @@ func (s *svc) handleNew(w http.ResponseWriter, r *http.Request) { return } + // TODO(lopresti) if target is relative, currently the gateway fails to identify a storage provider (?) + // and just returns a CODE_INTERNAL error on InitiateFileUpload. + // Therefore for now make sure the target is absolute. + if target[0] != '/' { + target = "/" + target + } + // Create empty file via storageprovider createReq := &provider.InitiateFileUploadRequest{ Ref: &provider.Reference{Path: target}, diff --git a/internal/http/services/ocmd/reqres.go b/internal/http/services/ocmd/reqres.go index ac815673715..d37824a8fc8 100644 --- a/internal/http/services/ocmd/reqres.go +++ b/internal/http/services/ocmd/reqres.go @@ -57,12 +57,13 @@ type APIError struct { } // WriteError handles writing error responses -func WriteError(w http.ResponseWriter, r *http.Request, code APIErrorCode, message string, err error) { - if err != nil { - appctx.GetLogger(r.Context()).Error().Err(err).Msg(message) +func WriteError(w http.ResponseWriter, r *http.Request, code APIErrorCode, message string, e error) { + if e != nil { + appctx.GetLogger(r.Context()).Error().Err(e).Msg(message) } var encoded []byte + var err error w.Header().Set("Content-Type", "application/json") encoded, err = json.MarshalIndent(APIError{Code: code, Message: message}, "", " ")