Skip to content
Snippets Groups Projects
Commit bd693c97 authored by Lyuben Penkovski's avatar Lyuben Penkovski
Browse files

Merge branch '27-overwrite-evaluation-id' into 'main'

Allow passing evaluationID when evaluating a policy

Closes #27

See merge request !17
parents 339fd8f2 1f94f702
No related branches found
No related tags found
1 merge request!17Allow passing evaluationID when evaluating a policy
Pipeline #51151 passed with stage
in 1 minute and 10 seconds
.idea/
......@@ -24,6 +24,9 @@ var _ = Service("policy", func() {
Result(Any)
HTTP(func() {
POST("/policy/{group}/{policyName}/{version}/evaluation")
Header("evaluationID:x-evaluation-id", String, "EvaluationID allows overwriting the randomly generated evaluationID", func() {
Example("did:web:example.com")
})
Body("input")
Response(StatusOK)
})
......
......@@ -14,6 +14,7 @@ var EvaluateRequest = Type("EvaluateRequest", func() {
Example("1.0")
})
Field(4, "input", Any, "Input data passed to the policy execution runtime.")
Field(5, "evaluationID", String, "Identifier created by external system and passed as parameter to overwrite the randomly generated evaluationID.")
Required("group", "policyName", "version", "input")
})
......
......@@ -32,7 +32,7 @@ policy (evaluate|lock|unlock)
// UsageExamples produces an example of a valid invocation of the CLI tool.
func UsageExamples() string {
return os.Args[0] + ` health liveness` + "\n" +
os.Args[0] + ` policy evaluate --body "Ab accusamus voluptatem et est." --group "example" --policy-name "example" --version "1.0"` + "\n" +
os.Args[0] + ` policy evaluate --body "Illum ad assumenda consectetur minima voluptatibus." --group "example" --policy-name "example" --version "1.0" --evaluation-id "Ab accusamus voluptatem et est."` + "\n" +
""
}
......@@ -54,11 +54,12 @@ func ParseEndpoint(
policyFlags = flag.NewFlagSet("policy", flag.ContinueOnError)
policyEvaluateFlags = flag.NewFlagSet("evaluate", flag.ExitOnError)
policyEvaluateBodyFlag = policyEvaluateFlags.String("body", "REQUIRED", "")
policyEvaluateGroupFlag = policyEvaluateFlags.String("group", "REQUIRED", "Policy group.")
policyEvaluatePolicyNameFlag = policyEvaluateFlags.String("policy-name", "REQUIRED", "Policy name.")
policyEvaluateVersionFlag = policyEvaluateFlags.String("version", "REQUIRED", "Policy version.")
policyEvaluateFlags = flag.NewFlagSet("evaluate", flag.ExitOnError)
policyEvaluateBodyFlag = policyEvaluateFlags.String("body", "REQUIRED", "")
policyEvaluateGroupFlag = policyEvaluateFlags.String("group", "REQUIRED", "Policy group.")
policyEvaluatePolicyNameFlag = policyEvaluateFlags.String("policy-name", "REQUIRED", "Policy name.")
policyEvaluateVersionFlag = policyEvaluateFlags.String("version", "REQUIRED", "Policy version.")
policyEvaluateEvaluationIDFlag = policyEvaluateFlags.String("evaluation-id", "", "")
policyLockFlags = flag.NewFlagSet("lock", flag.ExitOnError)
policyLockGroupFlag = policyLockFlags.String("group", "REQUIRED", "Policy group.")
......@@ -171,7 +172,7 @@ func ParseEndpoint(
switch epn {
case "evaluate":
endpoint = c.Evaluate()
data, err = policyc.BuildEvaluatePayload(*policyEvaluateBodyFlag, *policyEvaluateGroupFlag, *policyEvaluatePolicyNameFlag, *policyEvaluateVersionFlag)
data, err = policyc.BuildEvaluatePayload(*policyEvaluateBodyFlag, *policyEvaluateGroupFlag, *policyEvaluatePolicyNameFlag, *policyEvaluateVersionFlag, *policyEvaluateEvaluationIDFlag)
case "lock":
endpoint = c.Lock()
data, err = policyc.BuildLockPayload(*policyLockGroupFlag, *policyLockPolicyNameFlag, *policyLockVersionFlag)
......@@ -238,16 +239,17 @@ Additional help:
`, os.Args[0])
}
func policyEvaluateUsage() {
fmt.Fprintf(os.Stderr, `%[1]s [flags] policy evaluate -body JSON -group STRING -policy-name STRING -version STRING
fmt.Fprintf(os.Stderr, `%[1]s [flags] policy evaluate -body JSON -group STRING -policy-name STRING -version STRING -evaluation-id STRING
Evaluate executes a policy with the given 'data' as input.
-body JSON:
-group STRING: Policy group.
-policy-name STRING: Policy name.
-version STRING: Policy version.
-evaluation-id STRING:
Example:
%[1]s policy evaluate --body "Ab accusamus voluptatem et est." --group "example" --policy-name "example" --version "1.0"
%[1]s policy evaluate --body "Illum ad assumenda consectetur minima voluptatibus." --group "example" --policy-name "example" --version "1.0" --evaluation-id "Ab accusamus voluptatem et est."
`, os.Args[0])
}
......@@ -260,7 +262,7 @@ Lock a policy so that it cannot be evaluated.
-version STRING: Policy version.
Example:
%[1]s policy lock --group "Vitae qui." --policy-name "Provident fugiat at cupiditate." --version "Commodi vitae voluptatem."
%[1]s policy lock --group "Commodi vitae voluptatem." --policy-name "Similique quisquam optio." --version "Explicabo beatae quisquam officiis libero voluptatibus."
`, os.Args[0])
}
......@@ -273,6 +275,6 @@ Unlock a policy so it can be evaluated again.
-version STRING: Policy version.
Example:
%[1]s policy unlock --group "Aut ut fuga quae eius minus." --policy-name "Architecto quibusdam ab." --version "In illum est et hic."
%[1]s policy unlock --group "In illum est et hic." --policy-name "Deleniti non nihil dolor aut sed." --version "Incidunt unde consequatur voluptas dolorem nisi temporibus."
`, os.Args[0])
}
{"swagger":"2.0","info":{"title":"Policy Service","description":"The policy service exposes HTTP API for executing policies.","version":""},"host":"localhost:8081","consumes":["application/json","application/xml","application/gob"],"produces":["application/json","application/xml","application/gob"],"paths":{"/liveness":{"get":{"tags":["health"],"summary":"Liveness health","operationId":"health#Liveness","responses":{"200":{"description":"OK response."}},"schemes":["http"]}},"/policy/{group}/{policyName}/{version}/evaluation":{"post":{"tags":["policy"],"summary":"Evaluate policy","description":"Evaluate executes a policy with the given 'data' as input.","operationId":"policy#Evaluate","parameters":[{"name":"group","in":"path","description":"Policy group.","required":true,"type":"string"},{"name":"policyName","in":"path","description":"Policy name.","required":true,"type":"string"},{"name":"version","in":"path","description":"Policy version.","required":true,"type":"string"},{"name":"any","in":"body","description":"Input data passed to the policy execution runtime.","required":true,"schema":{"type":"string","format":"binary"}}],"responses":{"200":{"description":"OK response.","schema":{"type":"string","format":"binary"}}},"schemes":["http"]}},"/policy/{group}/{policyName}/{version}/lock":{"post":{"tags":["policy"],"summary":"Lock policy","description":"Lock a policy so that it cannot be evaluated.","operationId":"policy#Lock","parameters":[{"name":"group","in":"path","description":"Policy group.","required":true,"type":"string"},{"name":"policyName","in":"path","description":"Policy name.","required":true,"type":"string"},{"name":"version","in":"path","description":"Policy version.","required":true,"type":"string"}],"responses":{"200":{"description":"OK response."}},"schemes":["http"]},"delete":{"tags":["policy"],"summary":"Unlock policy","description":"Unlock a policy so it can be evaluated again.","operationId":"policy#Unlock","parameters":[{"name":"group","in":"path","description":"Policy group.","required":true,"type":"string"},{"name":"policyName","in":"path","description":"Policy name.","required":true,"type":"string"},{"name":"version","in":"path","description":"Policy version.","required":true,"type":"string"}],"responses":{"200":{"description":"OK response."}},"schemes":["http"]}},"/readiness":{"get":{"tags":["health"],"summary":"Readiness health","operationId":"health#Readiness","responses":{"200":{"description":"OK response."}},"schemes":["http"]}}}}
\ No newline at end of file
{"swagger":"2.0","info":{"title":"Policy Service","description":"The policy service exposes HTTP API for executing policies.","version":""},"host":"localhost:8081","consumes":["application/json","application/xml","application/gob"],"produces":["application/json","application/xml","application/gob"],"paths":{"/liveness":{"get":{"tags":["health"],"summary":"Liveness health","operationId":"health#Liveness","responses":{"200":{"description":"OK response."}},"schemes":["http"]}},"/policy/{group}/{policyName}/{version}/evaluation":{"post":{"tags":["policy"],"summary":"Evaluate policy","description":"Evaluate executes a policy with the given 'data' as input.","operationId":"policy#Evaluate","parameters":[{"name":"group","in":"path","description":"Policy group.","required":true,"type":"string"},{"name":"policyName","in":"path","description":"Policy name.","required":true,"type":"string"},{"name":"version","in":"path","description":"Policy version.","required":true,"type":"string"},{"name":"x-evaluation-id","in":"header","description":"EvaluationID allows overwriting the randomly generated evaluationID","required":false,"type":"string"},{"name":"any","in":"body","description":"Input data passed to the policy execution runtime.","required":true,"schema":{"type":"string","format":"binary"}}],"responses":{"200":{"description":"OK response.","schema":{"type":"string","format":"binary"}}},"schemes":["http"]}},"/policy/{group}/{policyName}/{version}/lock":{"post":{"tags":["policy"],"summary":"Lock policy","description":"Lock a policy so that it cannot be evaluated.","operationId":"policy#Lock","parameters":[{"name":"group","in":"path","description":"Policy group.","required":true,"type":"string"},{"name":"policyName","in":"path","description":"Policy name.","required":true,"type":"string"},{"name":"version","in":"path","description":"Policy version.","required":true,"type":"string"}],"responses":{"200":{"description":"OK response."}},"schemes":["http"]},"delete":{"tags":["policy"],"summary":"Unlock policy","description":"Unlock a policy so it can be evaluated again.","operationId":"policy#Unlock","parameters":[{"name":"group","in":"path","description":"Policy group.","required":true,"type":"string"},{"name":"policyName","in":"path","description":"Policy name.","required":true,"type":"string"},{"name":"version","in":"path","description":"Policy version.","required":true,"type":"string"}],"responses":{"200":{"description":"OK response."}},"schemes":["http"]}},"/readiness":{"get":{"tags":["health"],"summary":"Readiness health","operationId":"health#Readiness","responses":{"200":{"description":"OK response."}},"schemes":["http"]}}}}
\ No newline at end of file
......@@ -47,6 +47,11 @@ paths:
description: Policy version.
required: true
type: string
- name: x-evaluation-id
in: header
description: EvaluationID allows overwriting the randomly generated evaluationID
required: false
type: string
- name: any
in: body
description: Input data passed to the policy execution runtime.
......
{"openapi":"3.0.3","info":{"title":"Policy Service","description":"The policy service exposes HTTP API for executing policies.","version":"1.0"},"servers":[{"url":"http://localhost:8081","description":"Policy Server"}],"paths":{"/liveness":{"get":{"tags":["health"],"summary":"Liveness health","operationId":"health#Liveness","responses":{"200":{"description":"OK response."}}}},"/policy/{group}/{policyName}/{version}/evaluation":{"post":{"tags":["policy"],"summary":"Evaluate policy","description":"Evaluate executes a policy with the given 'data' as input.","operationId":"policy#Evaluate","parameters":[{"name":"group","in":"path","description":"Policy group.","required":true,"schema":{"type":"string","description":"Policy group.","example":"example"},"example":"example"},{"name":"policyName","in":"path","description":"Policy name.","required":true,"schema":{"type":"string","description":"Policy name.","example":"example"},"example":"example"},{"name":"version","in":"path","description":"Policy version.","required":true,"schema":{"type":"string","description":"Policy version.","example":"1.0"},"example":"1.0"}],"requestBody":{"description":"Input data passed to the policy execution runtime.","required":true,"content":{"application/json":{"schema":{"type":"string","description":"Input data passed to the policy execution runtime.","example":"Deleniti non nihil dolor aut sed.","format":"binary"},"example":"Omnis quasi aut consequuntur."}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"type":"string","example":"Incidunt unde consequatur voluptas dolorem nisi temporibus.","format":"binary"},"example":"Tempore minus."}}}}}},"/policy/{group}/{policyName}/{version}/lock":{"delete":{"tags":["policy"],"summary":"Unlock policy","description":"Unlock a policy so it can be evaluated again.","operationId":"policy#Unlock","parameters":[{"name":"group","in":"path","description":"Policy group.","required":true,"schema":{"type":"string","description":"Policy group.","example":"Dolorem cumque laborum quis nesciunt."},"example":"Aut voluptas."},{"name":"policyName","in":"path","description":"Policy name.","required":true,"schema":{"type":"string","description":"Policy name.","example":"Sint nam voluptatem ea consequatur similique et."},"example":"Non mollitia nesciunt impedit facere."},{"name":"version","in":"path","description":"Policy version.","required":true,"schema":{"type":"string","description":"Policy version.","example":"Ut commodi perspiciatis corporis."},"example":"Accusamus autem sequi."}],"responses":{"200":{"description":"OK response."}}},"post":{"tags":["policy"],"summary":"Lock policy","description":"Lock a policy so that it cannot be evaluated.","operationId":"policy#Lock","parameters":[{"name":"group","in":"path","description":"Policy group.","required":true,"schema":{"type":"string","description":"Policy group.","example":"Quis quos qui earum velit illum."},"example":"Aliquam atque voluptatum ut dolorem."},{"name":"policyName","in":"path","description":"Policy name.","required":true,"schema":{"type":"string","description":"Policy name.","example":"Aut facere veniam repudiandae id."},"example":"Aut minus alias."},{"name":"version","in":"path","description":"Policy version.","required":true,"schema":{"type":"string","description":"Policy version.","example":"At eos facilis molestias in voluptas rem."},"example":"Ab accusantium ut ut aliquid sint animi."}],"responses":{"200":{"description":"OK response."}}}},"/readiness":{"get":{"tags":["health"],"summary":"Readiness health","operationId":"health#Readiness","responses":{"200":{"description":"OK response."}}}}},"components":{},"tags":[{"name":"health","description":"Health service provides health check endpoints."},{"name":"policy","description":"Policy Service provides evaluation of policies through Open Policy Agent."}]}
\ No newline at end of file
{"openapi":"3.0.3","info":{"title":"Policy Service","description":"The policy service exposes HTTP API for executing policies.","version":"1.0"},"servers":[{"url":"http://localhost:8081","description":"Policy Server"}],"paths":{"/liveness":{"get":{"tags":["health"],"summary":"Liveness health","operationId":"health#Liveness","responses":{"200":{"description":"OK response."}}}},"/policy/{group}/{policyName}/{version}/evaluation":{"post":{"tags":["policy"],"summary":"Evaluate policy","description":"Evaluate executes a policy with the given 'data' as input.","operationId":"policy#Evaluate","parameters":[{"name":"group","in":"path","description":"Policy group.","required":true,"schema":{"type":"string","description":"Policy group.","example":"example"},"example":"example"},{"name":"policyName","in":"path","description":"Policy name.","required":true,"schema":{"type":"string","description":"Policy name.","example":"example"},"example":"example"},{"name":"version","in":"path","description":"Policy version.","required":true,"schema":{"type":"string","description":"Policy version.","example":"1.0"},"example":"1.0"},{"name":"x-evaluation-id","in":"header","description":"EvaluationID allows overwriting the randomly generated evaluationID","allowEmptyValue":true,"schema":{"type":"string","description":"EvaluationID allows overwriting the randomly generated evaluationID","example":"did:web:example.com"},"example":"did:web:example.com"}],"requestBody":{"description":"Input data passed to the policy execution runtime.","required":true,"content":{"application/json":{"schema":{"type":"string","description":"Input data passed to the policy execution runtime.","example":"Omnis quasi aut consequuntur.","format":"binary"},"example":"Quis quos qui earum velit illum."}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"type":"string","example":"Tempore minus.","format":"binary"},"example":"Aliquam atque voluptatum ut dolorem."}}}}}},"/policy/{group}/{policyName}/{version}/lock":{"delete":{"tags":["policy"],"summary":"Unlock policy","description":"Unlock a policy so it can be evaluated again.","operationId":"policy#Unlock","parameters":[{"name":"group","in":"path","description":"Policy group.","required":true,"schema":{"type":"string","description":"Policy group.","example":"Sint nam voluptatem ea consequatur similique et."},"example":"Non mollitia nesciunt impedit facere."},{"name":"policyName","in":"path","description":"Policy name.","required":true,"schema":{"type":"string","description":"Policy name.","example":"Ut commodi perspiciatis corporis."},"example":"Accusamus autem sequi."},{"name":"version","in":"path","description":"Policy version.","required":true,"schema":{"type":"string","description":"Policy version.","example":"Et nulla."},"example":"In quis nesciunt autem et."}],"responses":{"200":{"description":"OK response."}}},"post":{"tags":["policy"],"summary":"Lock policy","description":"Lock a policy so that it cannot be evaluated.","operationId":"policy#Lock","parameters":[{"name":"group","in":"path","description":"Policy group.","required":true,"schema":{"type":"string","description":"Policy group.","example":"Aut facere veniam repudiandae id."},"example":"Aut minus alias."},{"name":"policyName","in":"path","description":"Policy name.","required":true,"schema":{"type":"string","description":"Policy name.","example":"At eos facilis molestias in voluptas rem."},"example":"Ab accusantium ut ut aliquid sint animi."},{"name":"version","in":"path","description":"Policy version.","required":true,"schema":{"type":"string","description":"Policy version.","example":"Dolorem cumque laborum quis nesciunt."},"example":"Aut voluptas."}],"responses":{"200":{"description":"OK response."}}}},"/readiness":{"get":{"tags":["health"],"summary":"Readiness health","operationId":"health#Readiness","responses":{"200":{"description":"OK response."}}}}},"components":{},"tags":[{"name":"health","description":"Health service provides health check endpoints."},{"name":"policy","description":"Policy Service provides evaluation of policies through Open Policy Agent."}]}
\ No newline at end of file
......@@ -51,6 +51,15 @@ paths:
description: Policy version.
example: "1.0"
example: "1.0"
- name: x-evaluation-id
in: header
description: EvaluationID allows overwriting the randomly generated evaluationID
allowEmptyValue: true
schema:
type: string
description: EvaluationID allows overwriting the randomly generated evaluationID
example: did:web:example.com
example: did:web:example.com
requestBody:
description: Input data passed to the policy execution runtime.
required: true
......@@ -59,9 +68,9 @@ paths:
schema:
type: string
description: Input data passed to the policy execution runtime.
example: Deleniti non nihil dolor aut sed.
example: Omnis quasi aut consequuntur.
format: binary
example: Omnis quasi aut consequuntur.
example: Quis quos qui earum velit illum.
responses:
"200":
description: OK response.
......@@ -69,9 +78,9 @@ paths:
application/json:
schema:
type: string
example: Incidunt unde consequatur voluptas dolorem nisi temporibus.
example: Tempore minus.
format: binary
example: Tempore minus.
example: Aliquam atque voluptatum ut dolorem.
/policy/{group}/{policyName}/{version}/lock:
delete:
tags:
......@@ -87,8 +96,8 @@ paths:
schema:
type: string
description: Policy group.
example: Dolorem cumque laborum quis nesciunt.
example: Aut voluptas.
example: Sint nam voluptatem ea consequatur similique et.
example: Non mollitia nesciunt impedit facere.
- name: policyName
in: path
description: Policy name.
......@@ -96,8 +105,8 @@ paths:
schema:
type: string
description: Policy name.
example: Sint nam voluptatem ea consequatur similique et.
example: Non mollitia nesciunt impedit facere.
example: Ut commodi perspiciatis corporis.
example: Accusamus autem sequi.
- name: version
in: path
description: Policy version.
......@@ -105,8 +114,8 @@ paths:
schema:
type: string
description: Policy version.
example: Ut commodi perspiciatis corporis.
example: Accusamus autem sequi.
example: Et nulla.
example: In quis nesciunt autem et.
responses:
"200":
description: OK response.
......@@ -124,8 +133,8 @@ paths:
schema:
type: string
description: Policy group.
example: Quis quos qui earum velit illum.
example: Aliquam atque voluptatum ut dolorem.
example: Aut facere veniam repudiandae id.
example: Aut minus alias.
- name: policyName
in: path
description: Policy name.
......@@ -133,8 +142,8 @@ paths:
schema:
type: string
description: Policy name.
example: Aut facere veniam repudiandae id.
example: Aut minus alias.
example: At eos facilis molestias in voluptas rem.
example: Ab accusantium ut ut aliquid sint animi.
- name: version
in: path
description: Policy version.
......@@ -142,8 +151,8 @@ paths:
schema:
type: string
description: Policy version.
example: At eos facilis molestias in voluptas rem.
example: Ab accusantium ut ut aliquid sint animi.
example: Dolorem cumque laborum quis nesciunt.
example: Aut voluptas.
responses:
"200":
description: OK response.
......
......@@ -16,13 +16,13 @@ import (
// BuildEvaluatePayload builds the payload for the policy Evaluate endpoint
// from CLI flags.
func BuildEvaluatePayload(policyEvaluateBody string, policyEvaluateGroup string, policyEvaluatePolicyName string, policyEvaluateVersion string) (*policy.EvaluateRequest, error) {
func BuildEvaluatePayload(policyEvaluateBody string, policyEvaluateGroup string, policyEvaluatePolicyName string, policyEvaluateVersion string, policyEvaluateEvaluationID string) (*policy.EvaluateRequest, error) {
var err error
var body interface{}
{
err = json.Unmarshal([]byte(policyEvaluateBody), &body)
if err != nil {
return nil, fmt.Errorf("invalid JSON for body, \nerror: %s, \nexample of valid JSON:\n%s", err, "\"Ab accusamus voluptatem et est.\"")
return nil, fmt.Errorf("invalid JSON for body, \nerror: %s, \nexample of valid JSON:\n%s", err, "\"Illum ad assumenda consectetur minima voluptatibus.\"")
}
}
var group string
......@@ -37,6 +37,12 @@ func BuildEvaluatePayload(policyEvaluateBody string, policyEvaluateGroup string,
{
version = policyEvaluateVersion
}
var evaluationID *string
{
if policyEvaluateEvaluationID != "" {
evaluationID = &policyEvaluateEvaluationID
}
}
v := body
res := &policy.EvaluateRequest{
Input: v,
......@@ -44,6 +50,7 @@ func BuildEvaluatePayload(policyEvaluateBody string, policyEvaluateGroup string,
res.Group = group
res.PolicyName = policyName
res.Version = version
res.EvaluationID = evaluationID
return res, nil
}
......
......@@ -55,6 +55,10 @@ func EncodeEvaluateRequest(encoder func(*http.Request) goahttp.Encoder) func(*ht
if !ok {
return goahttp.ErrInvalidType("policy", "Evaluate", "*policy.EvaluateRequest", v)
}
if p.EvaluationID != nil {
head := *p.EvaluationID
req.Header.Set("x-evaluation-id", head)
}
body := p.Input
if err := encoder(req).Encode(&body); err != nil {
return goahttp.ErrEncodingError("policy", "Evaluate", err)
......
......@@ -45,16 +45,21 @@ func DecodeEvaluateRequest(mux goahttp.Muxer, decoder func(*http.Request) goahtt
}
var (
group string
policyName string
version string
group string
policyName string
version string
evaluationID *string
params = mux.Vars(r)
)
group = params["group"]
policyName = params["policyName"]
version = params["version"]
payload := NewEvaluateRequest(body, group, policyName, version)
evaluationIDRaw := r.Header.Get("x-evaluation-id")
if evaluationIDRaw != "" {
evaluationID = &evaluationIDRaw
}
payload := NewEvaluateRequest(body, group, policyName, version, evaluationID)
return payload, nil
}
......
......@@ -12,7 +12,7 @@ import (
)
// NewEvaluateRequest builds a policy service Evaluate endpoint payload.
func NewEvaluateRequest(body interface{}, group string, policyName string, version string) *policy.EvaluateRequest {
func NewEvaluateRequest(body interface{}, group string, policyName string, version string, evaluationID *string) *policy.EvaluateRequest {
v := body
res := &policy.EvaluateRequest{
Input: v,
......@@ -20,6 +20,7 @@ func NewEvaluateRequest(body interface{}, group string, policyName string, versi
res.Group = group
res.PolicyName = policyName
res.Version = version
res.EvaluationID = evaluationID
return res
}
......
......@@ -41,6 +41,9 @@ type EvaluateRequest struct {
Version string
// Input data passed to the policy execution runtime.
Input interface{}
// Identifier created by external system and passed as parameter to overwrite
// the randomly generated evaluationID.
EvaluationID *string
}
// LockRequest is the payload type of the policy service Lock method.
......
......@@ -59,7 +59,13 @@ func New(storage Storage, queryCache RegoCache, cache Cache, logger *zap.Logger)
// return results correctly, only if the package declaration inside the policy is:
// `package mygroup.example`.
func (s *Service) Evaluate(ctx context.Context, req *policy.EvaluateRequest) (interface{}, error) {
evaluationID := uuid.NewString()
var evaluationID string
if req.EvaluationID != nil && *req.EvaluationID != "" {
evaluationID = *req.EvaluationID
} else {
evaluationID = uuid.NewString()
}
logger := s.logger.With(
zap.String("group", req.Group),
zap.String("name", req.PolicyName),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment