Skip to content

Commit

Permalink
feat: add create/delete/update methods to PolicyConditionService (#14)
Browse files Browse the repository at this point in the history
* Add PolicyConditionService

Signed-off-by: 久米 拓馬 <takuma.kume@pepabo.com>

* Add PolicyConditionOperator, PolicyConditionSubject

Signed-off-by: 久米 拓馬 <takuma.kume@pepabo.com>

---------

Signed-off-by: 久米 拓馬 <takuma.kume@pepabo.com>
  • Loading branch information
takumakume committed Aug 29, 2023
1 parent b5f2805 commit f3504fe
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 6 deletions.
2 changes: 2 additions & 0 deletions client.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ type Client struct {
Metrics MetricsService
Permission PermissionService
Policy PolicyService
PolicyCondition PolicyConditionService
PolicyViolation PolicyViolationService
Project ProjectService
ProjectProperty ProjectPropertyService
Expand Down Expand Up @@ -86,6 +87,7 @@ func NewClient(baseURL string, options ...ClientOption) (*Client, error) {
client.Metrics = MetricsService{client: &client}
client.Permission = PermissionService{client: &client}
client.Policy = PolicyService{client: &client}
client.PolicyCondition = PolicyConditionService{client: &client}
client.PolicyViolation = PolicyViolationService{client: &client}
client.Project = ProjectService{client: &client}
client.ProjectProperty = ProjectPropertyService{client: &client}
Expand Down
86 changes: 80 additions & 6 deletions policy_condition.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,85 @@
package dtrack

import "github.com/google/uuid"
import (
"context"
"fmt"
"net/http"

"github.com/google/uuid"
)

type PolicyCondition struct {
UUID uuid.UUID
Policy *Policy `json:"policy,omitempty"`
Operator string `json:"operator"`
Subject string `json:"subject"`
Value string `json:"value"`
UUID uuid.UUID `json:"uuid,omitempty"`
Policy *Policy `json:"policy,omitempty"`
Operator PolicyConditionOperator `json:"operator"`
Subject PolicyConditionSubject `json:"subject"`
Value string `json:"value"`
}

type PolicyConditionService struct {
client *Client
}

type PolicyConditionOperator string

const (
PolicyConditionOperatorIs PolicyConditionOperator = "IS"
PolicyConditionOperatorIsNot PolicyConditionOperator = "IS_NOT"
PolicyConditionOperatorMatches PolicyConditionOperator = "MATCHES"
PolicyConditionOperatorNoMatch PolicyConditionOperator = "NO_MATCH"
PolicyConditionOperatorNumericGreaterThan PolicyConditionOperator = "NUMERIC_GREATER_THAN"
PolicyConditionOperatorNumericLessThan PolicyConditionOperator = "NUMERIC_LESS_THAN"
PolicyConditionOperatorNumericEqual PolicyConditionOperator = "NUMERIC_EQUAL"
PolicyConditionOperatorNumericNotEqual PolicyConditionOperator = "NUMERIC_NOT_EQUAL"
PolicyConditionOperatorNumericGreaterThanOrEqual PolicyConditionOperator = "NUMERIC_GREATER_THAN_OR_EQUAL"
PolicyConditionOperatorNumericLesserThanOrEqual PolicyConditionOperator = "NUMERIC_LESSER_THAN_OR_EQUAL"
PolicyConditionOperatorContainsAll PolicyConditionOperator = "CONTAINS_ALL"
PolicyConditionOperatorContainsAny PolicyConditionOperator = "CONTAINS_ANY"
)

type PolicyConditionSubject string

const (
PolicyConditionSubjectAge PolicyConditionSubject = "AGE"
PolicyConditionSubjectCoordinates PolicyConditionSubject = "COORDINATES"
PolicyConditionSubjectCPE PolicyConditionSubject = "CPE"
PolicyConditionSubjectLicense PolicyConditionSubject = "LICENSE"
PolicyConditionSubjectLicenseGroup PolicyConditionSubject = "LICENSE_GROUP"
PolicyConditionSubjectPackageURL PolicyConditionSubject = "PACKAGE_URL"
PolicyConditionSubjectSeverity PolicyConditionSubject = "SEVERITY"
PolicyConditionSubjectSWIDTagID PolicyConditionSubject = "SWID_TAGID"
PolicyConditionSubjectVersion PolicyConditionSubject = "VERSION"
PolicyConditionSubjectComponentHash PolicyConditionSubject = "COMPONENT_HASH"
PolicyConditionSubjectCWE PolicyConditionSubject = "CWE"
PolicyConditionSubjectVulnerabilityID PolicyConditionSubject = "VULNERABILITY_ID"
)

func (pcs PolicyConditionService) Create(ctx context.Context, policyUUID uuid.UUID, policyCondition PolicyCondition) (p PolicyCondition, err error) {
req, err := pcs.client.newRequest(ctx, http.MethodPut, fmt.Sprintf("/api/v1/policy/%s/condition", policyUUID), withBody(policyCondition))
if err != nil {
return
}

_, err = pcs.client.doRequest(req, &p)
return
}

func (pcs PolicyConditionService) Update(ctx context.Context, policyCondition PolicyCondition) (p PolicyCondition, err error) {
req, err := pcs.client.newRequest(ctx, http.MethodPost, "/api/v1/policy/condition", withBody(policyCondition))
if err != nil {
return
}

_, err = pcs.client.doRequest(req, &p)
return
}

func (pcs PolicyConditionService) Delete(ctx context.Context, policyConditionUUID uuid.UUID) (err error) {
req, err := pcs.client.newRequest(ctx, http.MethodDelete, fmt.Sprintf("/api/v1/policy/condition/%s", policyConditionUUID))
if err != nil {
return
}

_, err = pcs.client.doRequest(req, nil)
return
}

0 comments on commit f3504fe

Please sign in to comment.