diff --git a/pkg/apiserver/apic.go b/pkg/apiserver/apic.go index 8f73665c1..9fa8ea7eb 100644 --- a/pkg/apiserver/apic.go +++ b/pkg/apiserver/apic.go @@ -78,7 +78,7 @@ func (a *apic) FetchScenariosListFromDB() ([]string, error) { } func AlertToSignal(alert *models.Alert, scenarioTrust string, keepDecisions bool) *models.AddSignalsRequestItem { - return &models.AddSignalsRequestItem{ + signal := &models.AddSignalsRequestItem{ Message: alert.Message, Scenario: alert.Scenario, ScenarioHash: alert.ScenarioHash, @@ -88,7 +88,13 @@ func AlertToSignal(alert *models.Alert, scenarioTrust string, keepDecisions bool StopAt: alert.StopAt, CreatedAt: alert.CreatedAt, MachineID: alert.MachineID, + ScenarioTrust: &scenarioTrust, } + if keepDecisions { + log.Printf("Keeping decisions to send to CAPI") + signal.Decisions = alert.Decisions + } + return signal } func NewAPIC(config *csconfig.OnlineApiClientCfg, dbClient *database.Client, consoleConfig *csconfig.ConsoleConfig) (*apic, error) { diff --git a/pkg/models/add_signals_request_item.go b/pkg/models/add_signals_request_item.go index 555566cfb..72740978d 100644 --- a/pkg/models/add_signals_request_item.go +++ b/pkg/models/add_signals_request_item.go @@ -6,6 +6,8 @@ package models // Editing this file might prove futile when you re-run the swagger generate command import ( + "strconv" + "github.com/go-openapi/errors" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" @@ -20,6 +22,9 @@ type AddSignalsRequestItem struct { // created at CreatedAt string `json:"created_at,omitempty"` + // decisions + Decisions []*Decision `json:"decisions"` + // machine id MachineID string `json:"machine_id,omitempty"` @@ -35,6 +40,10 @@ type AddSignalsRequestItem struct { // Required: true ScenarioHash *string `json:"scenario_hash"` + // scenario trust + // Required: true + ScenarioTrust *string `json:"scenario_trust"` + // scenario version // Required: true ScenarioVersion *string `json:"scenario_version"` @@ -56,6 +65,10 @@ type AddSignalsRequestItem struct { func (m *AddSignalsRequestItem) Validate(formats strfmt.Registry) error { var res []error + if err := m.validateDecisions(formats); err != nil { + res = append(res, err) + } + if err := m.validateMessage(formats); err != nil { res = append(res, err) } @@ -68,6 +81,10 @@ func (m *AddSignalsRequestItem) Validate(formats strfmt.Registry) error { res = append(res, err) } + if err := m.validateScenarioTrust(formats); err != nil { + res = append(res, err) + } + if err := m.validateScenarioVersion(formats); err != nil { res = append(res, err) } @@ -90,6 +107,30 @@ func (m *AddSignalsRequestItem) Validate(formats strfmt.Registry) error { return nil } +func (m *AddSignalsRequestItem) validateDecisions(formats strfmt.Registry) error { + if swag.IsZero(m.Decisions) { // not required + return nil + } + + for i := 0; i < len(m.Decisions); i++ { + if swag.IsZero(m.Decisions[i]) { // not required + continue + } + + if m.Decisions[i] != nil { + if err := m.Decisions[i].Validate(formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("decisions" + "." + strconv.Itoa(i)) + } + return err + } + } + + } + + return nil +} + func (m *AddSignalsRequestItem) validateMessage(formats strfmt.Registry) error { if err := validate.Required("message", "body", m.Message); err != nil { @@ -117,6 +158,15 @@ func (m *AddSignalsRequestItem) validateScenarioHash(formats strfmt.Registry) er return nil } +func (m *AddSignalsRequestItem) validateScenarioTrust(formats strfmt.Registry) error { + + if err := validate.Required("scenario_trust", "body", m.ScenarioTrust); err != nil { + return err + } + + return nil +} + func (m *AddSignalsRequestItem) validateScenarioVersion(formats strfmt.Registry) error { if err := validate.Required("scenario_version", "body", m.ScenarioVersion); err != nil { diff --git a/pkg/models/localapi_swagger.yaml b/pkg/models/localapi_swagger.yaml index 680f39a47..796994947 100644 --- a/pkg/models/localapi_swagger.yaml +++ b/pkg/models/localapi_swagger.yaml @@ -45,7 +45,6 @@ paths: required: false type: string description: 'Comma separated scopes of decisions to fetch' - example: ip,range,country responses: '200': description: successful operation @@ -917,6 +916,7 @@ definitions: - "source" - "start_at" - "stop_at" + - "scenario_trust" properties: scenario_hash: type: "string" @@ -930,6 +930,8 @@ definitions: $ref: "#/definitions/Source" scenario_version: type: "string" + scenario_trust: + type: "string" message: type: "string" description: "a human readable message" @@ -937,6 +939,10 @@ definitions: type: "string" stop_at: type: "string" + decisions: + type: array + items: + $ref: '#/definitions/Decision' title: "Signal" tags: - name: bouncers