(set, del []*api.NQuad, guardReserved reservedPredicateGuard)
| 2309 | } |
| 2310 | |
| 2311 | func validateNQuads(set, del []*api.NQuad, guardReserved reservedPredicateGuard) error { |
| 2312 | for _, nq := range set { |
| 2313 | if err := validatePredName(nq.Predicate); err != nil { |
| 2314 | return err |
| 2315 | } |
| 2316 | var ostar bool |
| 2317 | if o, ok := nq.ObjectValue.GetVal().(*api.Value_DefaultVal); ok { |
| 2318 | ostar = o.DefaultVal == x.Star |
| 2319 | } |
| 2320 | if nq.Subject == x.Star || nq.Predicate == x.Star || ostar { |
| 2321 | return errors.Errorf("Cannot use star in set n-quad: %+v", nq) |
| 2322 | } |
| 2323 | if err := validateKeys(nq); err != nil { |
| 2324 | return errors.Wrapf(err, "key error: %+v", nq) |
| 2325 | } |
| 2326 | if err := guardReserved(nq); err != nil { |
| 2327 | return err |
| 2328 | } |
| 2329 | } |
| 2330 | for _, nq := range del { |
| 2331 | if err := validatePredName(nq.Predicate); err != nil { |
| 2332 | return err |
| 2333 | } |
| 2334 | var ostar bool |
| 2335 | if o, ok := nq.ObjectValue.GetVal().(*api.Value_DefaultVal); ok { |
| 2336 | ostar = o.DefaultVal == x.Star |
| 2337 | } |
| 2338 | if nq.Subject == x.Star || (nq.Predicate == x.Star && !ostar) { |
| 2339 | return errors.Errorf("Only valid wildcard delete patterns are 'S * *' and 'S P *': %v", nq) |
| 2340 | } |
| 2341 | // guardReserved matches a named predicate, so a 'S P *' delete of a |
| 2342 | // value-locked predicate is caught here. A 'S * *' delete (predicate is |
| 2343 | // the wildcard) cannot be matched per-predicate: the subject's predicates |
| 2344 | // aren't known at validation, and the wildcard is expanded post-Raft in |
| 2345 | // worker where the request's TrustMarker is gone. Bulk subject deletes |
| 2346 | // that remove a value-locked predicate are outside the value lock's scope |
| 2347 | // and are gated by ACL predicate-level permissions. |
| 2348 | if err := guardReserved(nq); err != nil { |
| 2349 | return err |
| 2350 | } |
| 2351 | // NOTE: we dont validateKeys() with delete to let users fix existing mistakes |
| 2352 | // with bad predicate forms. ex: foo@bar ~something |
| 2353 | } |
| 2354 | return nil |
| 2355 | } |
| 2356 | |
| 2357 | func validateKey(key string) error { |
| 2358 | switch { |
no test coverage detected
searching dependent graphs…