mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-01-24 13:58:12 -05:00
In preparation for some more advanced queries pass the parse odata request
tVo the identity backend methods instead of the raw url.Values{}. This also
add some helpers for validating $expand and $search queries to reject
some unsupported queries.
Also remove support for `$select=memberOf` and `$select=drive|drives` queries
and stick to the technically correct `$expand=...`.
42 lines
1.5 KiB
Go
42 lines
1.5 KiB
Go
package identity
|
|
|
|
import "github.com/CiscoM31/godata"
|
|
|
|
// GetExpandValues extracts the values of the $expand query parameter and
|
|
// returns them in a []string, rejects any $expand value that consists of more
|
|
// than just a single path segment
|
|
func GetExpandValues(req *godata.GoDataQuery) ([]string, error) {
|
|
if req == nil || req.Expand == nil {
|
|
return []string{}, nil
|
|
}
|
|
expand := make([]string, 0, len(req.Expand.ExpandItems))
|
|
for _, item := range req.Expand.ExpandItems {
|
|
if item.Filter != nil || item.At != nil || item.Search != nil ||
|
|
item.OrderBy != nil || item.Skip != nil || item.Top != nil ||
|
|
item.Select != nil || item.Compute != nil || item.Expand != nil ||
|
|
item.Levels != 0 {
|
|
return []string{}, godata.NotImplementedError("options for $expand not supported")
|
|
}
|
|
if len(item.Path) > 1 {
|
|
return []string{}, godata.NotImplementedError("multiple segments in $expand not supported")
|
|
}
|
|
expand = append(expand, item.Path[0].Value)
|
|
}
|
|
return expand, nil
|
|
}
|
|
|
|
// GetSearchValues extracts the value of the $search query parameter and returns
|
|
// it as a string. Rejects any search query that is more than just a simple string
|
|
func GetSearchValues(req *godata.GoDataQuery) (string, error) {
|
|
if req == nil || req.Search == nil {
|
|
return "", nil
|
|
}
|
|
|
|
// Only allow simple search queries for now
|
|
if len(req.Search.Tree.Children) != 0 {
|
|
return "", godata.NotImplementedError("complex search queries are not supported")
|
|
}
|
|
|
|
return req.Search.Tree.Token.Value, nil
|
|
}
|