mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-01-08 05:09:46 -06:00
Merge pull request #7898 from owncloud/chore/update-reva
chore: bump reva to include metadata in propfinds
This commit is contained in:
@@ -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"
|
||||
|
||||
2
go.mod
2
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
|
||||
|
||||
2
go.sum
2
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=
|
||||
|
||||
@@ -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("</")
|
||||
content.WriteString(tagNamespace)
|
||||
content.WriteString(":")
|
||||
content.WriteString(lowerCaseKey)
|
||||
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":
|
||||
|
||||
2
vendor/modules.txt
vendored
2
vendor/modules.txt
vendored
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user