blob: 7740637959b4bcb6f471e8bd5761219b17498c7f [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build java android
package security
import (
"v.io/v23/context"
"v.io/v23/security"
jutil "v.io/x/jni/util"
jcontext "v.io/x/jni/v23/context"
)
// #include "jni.h"
import "C"
func caveatValidator(context *context.T, call security.Call, sets [][]security.Caveat) []error {
jEnv, freeFunc := jutil.GetEnv()
defer freeFunc()
jContext, err := jcontext.JavaContext(jEnv, context, nil)
if err != nil {
return errors(err, len(sets))
}
jCall, err := JavaCall(jEnv, call)
if err != nil {
return errors(err, len(sets))
}
ret := make([]error, len(sets))
for i, set := range sets {
for _, caveat := range set {
jCaveat, err := JavaCaveat(jEnv, caveat)
if err != nil {
ret[i] = err
break
}
if err := jutil.CallStaticVoidMethod(jEnv, jCaveatRegistryClass, "validate", []jutil.Sign{contextSign, callSign, caveatSign}, jContext, jCall, jCaveat); err != nil {
ret[i] = err
break
}
}
}
return ret
}
func errors(err error, len int) []error {
ret := make([]error, len)
for i := 0; i < len; i++ {
ret[i] = err
}
return ret
}