Skip to content

Commit

Permalink
update response struct
Browse files Browse the repository at this point in the history
Signed-off-by: MUzairS15 <[email protected]>
  • Loading branch information
MUzairS15 committed Aug 14, 2024
1 parent a4ceb8e commit a702069
Showing 1 changed file with 12 additions and 11 deletions.
23 changes: 12 additions & 11 deletions models/meshmodel/core/policies/rego_policy_relationship.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,10 @@ func NewRegoInstance(policyDir string, regManager *registry.RegistryManager) (*R
}

// RegoPolicyHandler takes the required inputs and run the query against all the policy files provided
func (r *Rego) RegoPolicyHandler(designFile pattern.PatternFile, regoQueryString string, relationshipsToEvalaute ...string) (interface{}, error) {
func (r *Rego) RegoPolicyHandler(designFile pattern.PatternFile, regoQueryString string, relationshipsToEvalaute ...string) (pattern.EvaluationResponse, error) {
var evaluationResponse pattern.EvaluationResponse
if r == nil {
return nil, ErrEval(fmt.Errorf("policy engine is not yet ready"))
return evaluationResponse, ErrEval(fmt.Errorf("policy engine is not yet ready"))
}
regoEngine, err := rego.New(
rego.Query(regoQueryString),
Expand All @@ -61,37 +62,37 @@ func (r *Rego) RegoPolicyHandler(designFile pattern.PatternFile, regoQueryString
).PrepareForEval(r.ctx)
if err != nil {
logrus.Error("error preparing for evaluation", err)
return nil, ErrPrepareForEval(err)
return evaluationResponse, ErrPrepareForEval(err)
}

eval_result, err := regoEngine.Eval(r.ctx, rego.EvalInput(designFile))
if err != nil {
return nil, ErrEval(err)
return evaluationResponse, ErrEval(err)
}

if len(eval_result) == 0 {
return nil, ErrEval(fmt.Errorf("evaluation results are empty"))
return evaluationResponse, ErrEval(fmt.Errorf("evaluation results are empty"))
}

if len(eval_result[0].Expressions) == 0 {
return nil, ErrEval(fmt.Errorf("evaluation results are empty"))
return evaluationResponse, ErrEval(fmt.Errorf("evaluation results are empty"))
}

result, err := utils.Cast[map[string]interface{}](eval_result[0].Expressions[0].Value)
if err != nil {
return nil, ErrEval(err)
return evaluationResponse, ErrEval(err)
}

evalResults, ok := result["evaluate"]
if !ok {
return nil, ErrEval(fmt.Errorf("evaluation results are empty"))
return evaluationResponse, ErrEval(fmt.Errorf("evaluation results are empty"))
}

evaluatedPatternFile, err := utils.MarshalAndUnmarshal[interface{}, pattern.PatternFile](evalResults)
if err != nil {
return nil, err
return evaluationResponse, err
}

return evaluatedPatternFile, nil
evaluationResponse.Design = evaluatedPatternFile
return evaluationResponse, nil

}

0 comments on commit a702069

Please sign in to comment.