diff --git a/.drone.star b/.drone.star index eaa0834c52..7a33c245e5 100644 --- a/.drone.star +++ b/.drone.star @@ -18,7 +18,7 @@ OC_CI_PHP = "owncloudci/php:%s" OC_CI_WAIT_FOR = "owncloudci/wait-for:latest" OC_CS3_API_VALIDATOR = "owncloud/cs3api-validator:0.2.0" OC_LITMUS = "owncloudci/litmus:latest" -OC_OC_TEST_MIDDLEWARE = "owncloud/owncloud-test-middleware:1.8.7" +OC_OC_TEST_MIDDLEWARE = "owncloud/owncloud-test-middleware:1.8.8" OC_UBUNTU = "owncloud/ubuntu:20.04" PLUGINS_CODACY = "plugins/codacy:1" PLUGINS_DOCKER = "plugins/docker:latest" diff --git a/go.mod b/go.mod index 2eefbc5e79..d090772df8 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/coreos/go-oidc v2.2.1+incompatible github.com/coreos/go-oidc/v3 v3.8.0 github.com/cs3org/go-cs3apis v0.0.0-20231023073225-7748710e0781 - github.com/cs3org/reva/v2 v2.16.1-0.20231206110211-7198abf507f6 + github.com/cs3org/reva/v2 v2.16.1-0.20231206142634-7b47abdafd55 github.com/dhowden/tag v0.0.0-20230630033851-978a0926ee25 github.com/disintegration/imaging v1.6.2 github.com/dutchcoders/go-clamd v0.0.0-20170520113014-b970184f4d9e diff --git a/go.sum b/go.sum index e1b5d013c1..d1585e3e7b 100644 --- a/go.sum +++ b/go.sum @@ -1019,6 +1019,8 @@ github.com/cs3org/go-cs3apis v0.0.0-20231023073225-7748710e0781 h1:BUdwkIlf8IS2F github.com/cs3org/go-cs3apis v0.0.0-20231023073225-7748710e0781/go.mod h1:UXha4TguuB52H14EMoSsCqDj7k8a/t7g4gVP+bgY5LY= github.com/cs3org/reva/v2 v2.16.1-0.20231206110211-7198abf507f6 h1:wR1XlTT8ilWd5Yd943yayvRPyz1GBaAt7vZ9SOxHzqI= github.com/cs3org/reva/v2 v2.16.1-0.20231206110211-7198abf507f6/go.mod h1:zcrrYVsBv/DwhpyO2/W5hoSZ/k6az6Z2EYQok65uqZY= +github.com/cs3org/reva/v2 v2.16.1-0.20231206142634-7b47abdafd55 h1:89YKeYd7nFa1AassJRvA8KOCpFN/4mfaiSxytUnG/AI= +github.com/cs3org/reva/v2 v2.16.1-0.20231206142634-7b47abdafd55/go.mod h1:zcrrYVsBv/DwhpyO2/W5hoSZ/k6az6Z2EYQok65uqZY= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= 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= diff --git a/vendor/github.com/cs3org/reva/v2/internal/http/services/owncloud/ocdav/propfind/propfind.go b/vendor/github.com/cs3org/reva/v2/internal/http/services/owncloud/ocdav/propfind/propfind.go index 648ded6210..d410bfcba7 100644 --- a/vendor/github.com/cs3org/reva/v2/internal/http/services/owncloud/ocdav/propfind/propfind.go +++ b/vendor/github.com/cs3org/reva/v2/internal/http/services/owncloud/ocdav/propfind/propfind.go @@ -64,6 +64,33 @@ const ( tracerName = "ocdav" ) +// these keys are used to lookup in ArbitraryMetadata, generated prop names are lowercased +var ( + audioKeys = []string{ + "album", + "albumArtist", + "artist", + "bitrate", + "composers", + "copyright", + "disc", + "discCount", + "duration", + "genre", + "hasDrm", + "isVariableBitrate", + "title", + "track", + "trackCount", + "year", + } + locationKeys = []string{ + "altitude", + "latitude", + "longitude", + } +) + type countingReader struct { n int r io.Reader @@ -786,6 +813,14 @@ func (p *Handler) getSpaceResourceInfos(ctx context.Context, w http.ResponseWrit return resourceInfos, true } +func metadataKeysWithPrefix(prefix string, keys []string) []string { + fullKeys := []string{} + for _, key := range keys { + fullKeys = append(fullKeys, fmt.Sprintf("%s.%s", prefix, key)) + } + return fullKeys +} + // metadataKeys splits the propfind properties into arbitrary metadata and ResourceInfo field mask paths func metadataKeys(pf XML) ([]string, []string) { @@ -809,6 +844,10 @@ func metadataKeys(pf XML) ([]string, []string) { switch key { case "share-types": fieldMaskKeys = append(fieldMaskKeys, key) + case "http://owncloud.org/ns/audio": + metadataKeys = append(metadataKeys, metadataKeysWithPrefix("libre.graph.audio", audioKeys)...) + case "http://owncloud.org/ns/location": + metadataKeys = append(metadataKeys, metadataKeysWithPrefix("libre.graph.location", locationKeys)...) default: metadataKeys = append(metadataKeys, key) } @@ -866,7 +905,7 @@ func requiresExplicitFetching(n *xml.Name) bool { } case net.NsOwncloud: switch n.Local { - case "favorite", "share-types", "checksums", "size", "tags": + case "favorite", "share-types", "checksums", "size", "tags", "audio", "location": return true default: return false @@ -1082,6 +1121,33 @@ func mdToPropResponse(ctx context.Context, pf *XML, md *provider.ResourceInfo, p appendToNotFound = func(p ...prop.PropertyXML) {} } + appendMetadataProp := func(metadata map[string]string, tagNamespace string, name string, metadataPrefix string, keys []string) { + content := strings.Builder{} + for _, key := range keys { + lowerCaseKey := strings.ToLower(key) + if v, ok := metadata[fmt.Sprintf("%s.%s", metadataPrefix, key)]; ok { + content.WriteString("<") + content.WriteString(tagNamespace) + content.WriteString(":") + content.WriteString(lowerCaseKey) + content.WriteString(">") + content.Write(prop.Escaped("", v).InnerXML) + content.WriteString("") + } + } + + propName := fmt.Sprintf("%s:%s", tagNamespace, name) + if content.Len() > 0 { + appendToOK(prop.Raw(propName, content.String())) + } else { + appendToNotFound(prop.NotFound(propName)) + } + } + // when allprops has been requested if pf.Allprop != nil { // return all known properties @@ -1180,6 +1246,8 @@ func mdToPropResponse(ctx context.Context, pf *XML, md *provider.ResourceInfo, p if k := md.GetArbitraryMetadata().GetMetadata(); k != nil { propstatOK.Prop = append(propstatOK.Prop, prop.Raw("oc:tags", k["tags"])) + appendMetadataProp(k, "oc", "audio", "libre.graph.audio", audioKeys) + appendMetadataProp(k, "oc", "location", "libre.graph.location", locationKeys) } // ls do not report any properties as missing by default @@ -1453,6 +1521,14 @@ func mdToPropResponse(ctx context.Context, pf *XML, md *provider.ResourceInfo, p if k := md.GetArbitraryMetadata().GetMetadata(); k != nil { propstatOK.Prop = append(propstatOK.Prop, prop.Raw("oc:tags", k["tags"])) } + case "audio": + if k := md.GetArbitraryMetadata().GetMetadata(); k != nil { + appendMetadataProp(k, "oc", "audio", "libre.graph.audio", audioKeys) + } + case "location": + if k := md.GetArbitraryMetadata().GetMetadata(); k != nil { + appendMetadataProp(k, "oc", "location", "libre.graph.location", locationKeys) + } case "name": appendToOK(prop.Escaped("oc:name", md.Name)) case "shareid": diff --git a/vendor/modules.txt b/vendor/modules.txt index 4185eac179..d41253d9b2 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -359,7 +359,7 @@ github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1 github.com/cs3org/go-cs3apis/cs3/storage/registry/v1beta1 github.com/cs3org/go-cs3apis/cs3/tx/v1beta1 github.com/cs3org/go-cs3apis/cs3/types/v1beta1 -# github.com/cs3org/reva/v2 v2.16.1-0.20231206110211-7198abf507f6 +# github.com/cs3org/reva/v2 v2.16.1-0.20231206142634-7b47abdafd55 ## explicit; go 1.20 github.com/cs3org/reva/v2/cmd/revad/internal/grace github.com/cs3org/reva/v2/cmd/revad/runtime