From 261ad714609ad121a0450eb61912cba5b21f0e9f Mon Sep 17 00:00:00 2001 From: Denis Arh Date: Thu, 18 Mar 2021 08:20:55 +0100 Subject: [PATCH] Serve event contraints via API --- automation/rest/eventTypes.gen.go | 1063 ++++++++++++++++- automation/rest/eventTypes.go | 11 +- compose/service/event/events.yaml | 23 + compose/service/event/namespace.go | 2 +- compose/service/event/record.go | 6 +- pkg/codegen/assets/events_rest_def.gen.go.tpl | 11 +- pkg/codegen/events.go | 13 +- system/service/event/auth_client.go | 21 +- system/service/event/events.yaml | 38 + system/service/event/mail.go | 12 +- system/service/event/sink.go | 4 +- 11 files changed, 1167 insertions(+), 37 deletions(-) diff --git a/automation/rest/eventTypes.gen.go b/automation/rest/eventTypes.gen.go index 14f4d49ba..1d08c9524 100644 --- a/automation/rest/eventTypes.gen.go +++ b/automation/rest/eventTypes.gen.go @@ -4,31 +4,29 @@ package rest // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. -// -// Definitions file that controls how this file is generated: -// func getEventTypeDefinitions() []eventTypeDef { return []eventTypeDef{ - // []string{"github.com/cortezaproject/corteza-server/compose/types", "github.com/cortezaproject/corteza-server/compose/automation", "github.com/cortezaproject/corteza-server/pkg/auth"} - { ResourceType: "compose", EventType: "onManual", Properties: []eventTypePropertyDef{}, + Constraints: []eventTypeConstraintDef{}, }, { ResourceType: "compose", EventType: "onInterval", Properties: []eventTypePropertyDef{}, + Constraints: []eventTypeConstraintDef{}, }, { ResourceType: "compose", EventType: "onTimestamp", Properties: []eventTypePropertyDef{}, + Constraints: []eventTypeConstraintDef{}, }, { @@ -54,6 +52,24 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + + { + Name: "module.handle", + }, + + { + Name: "module.name", + }, + }, }, { @@ -79,6 +95,24 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + + { + Name: "module.handle", + }, + + { + Name: "module.name", + }, + }, }, { @@ -104,6 +138,24 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + + { + Name: "module.handle", + }, + + { + Name: "module.name", + }, + }, }, { @@ -129,6 +181,24 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + + { + Name: "module.handle", + }, + + { + Name: "module.name", + }, + }, }, { @@ -154,6 +224,24 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + + { + Name: "module.handle", + }, + + { + Name: "module.name", + }, + }, }, { @@ -179,6 +267,24 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + + { + Name: "module.handle", + }, + + { + Name: "module.name", + }, + }, }, { @@ -204,6 +310,24 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + + { + Name: "module.handle", + }, + + { + Name: "module.name", + }, + }, }, { @@ -223,6 +347,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + }, }, { @@ -242,6 +376,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + }, }, { @@ -261,6 +405,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + }, }, { @@ -280,6 +434,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + }, }, { @@ -299,6 +463,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + }, }, { @@ -318,6 +492,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + }, }, { @@ -337,6 +521,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + }, }, { @@ -362,6 +556,24 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + + { + Name: "page.handle", + }, + + { + Name: "page.name", + }, + }, }, { @@ -387,6 +599,24 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + + { + Name: "page.handle", + }, + + { + Name: "page.name", + }, + }, }, { @@ -412,6 +642,24 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + + { + Name: "page.handle", + }, + + { + Name: "page.name", + }, + }, }, { @@ -437,6 +685,24 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + + { + Name: "page.handle", + }, + + { + Name: "page.name", + }, + }, }, { @@ -462,6 +728,24 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + + { + Name: "page.handle", + }, + + { + Name: "page.name", + }, + }, }, { @@ -487,6 +771,24 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + + { + Name: "page.handle", + }, + + { + Name: "page.name", + }, + }, }, { @@ -512,6 +814,24 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + + { + Name: "page.handle", + }, + + { + Name: "page.name", + }, + }, }, { @@ -549,6 +869,40 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: false, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + + { + Name: "module.handle", + }, + + { + Name: "module.name", + }, + + { + Name: "record.created-at", + }, + + { + Name: "record.updated-at", + }, + + { + Name: "record.deleted-at", + }, + + { + Name: "record.values.*", + }, + }, }, { @@ -586,6 +940,40 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: false, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + + { + Name: "module.handle", + }, + + { + Name: "module.name", + }, + + { + Name: "record.created-at", + }, + + { + Name: "record.updated-at", + }, + + { + Name: "record.deleted-at", + }, + + { + Name: "record.values.*", + }, + }, }, { @@ -623,6 +1011,40 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: false, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + + { + Name: "module.handle", + }, + + { + Name: "module.name", + }, + + { + Name: "record.created-at", + }, + + { + Name: "record.updated-at", + }, + + { + Name: "record.deleted-at", + }, + + { + Name: "record.values.*", + }, + }, }, { @@ -660,6 +1082,40 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: false, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + + { + Name: "module.handle", + }, + + { + Name: "module.name", + }, + + { + Name: "record.created-at", + }, + + { + Name: "record.updated-at", + }, + + { + Name: "record.deleted-at", + }, + + { + Name: "record.values.*", + }, + }, }, { @@ -697,6 +1153,40 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: false, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + + { + Name: "module.handle", + }, + + { + Name: "module.name", + }, + + { + Name: "record.created-at", + }, + + { + Name: "record.updated-at", + }, + + { + Name: "record.deleted-at", + }, + + { + Name: "record.values.*", + }, + }, }, { @@ -734,6 +1224,40 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: false, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + + { + Name: "module.handle", + }, + + { + Name: "module.name", + }, + + { + Name: "record.created-at", + }, + + { + Name: "record.updated-at", + }, + + { + Name: "record.deleted-at", + }, + + { + Name: "record.values.*", + }, + }, }, { @@ -771,6 +1295,40 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: false, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + + { + Name: "module.handle", + }, + + { + Name: "module.name", + }, + + { + Name: "record.created-at", + }, + + { + Name: "record.updated-at", + }, + + { + Name: "record.deleted-at", + }, + + { + Name: "record.values.*", + }, + }, }, { @@ -808,26 +1366,61 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: false, }, }, - }, + Constraints: []eventTypeConstraintDef{ - // []string{"github.com/cortezaproject/corteza-server/system/types", "github.com/cortezaproject/corteza-server/system/automation", "github.com/cortezaproject/corteza-server/pkg/auth"} + { + Name: "namespace.handle", + }, + + { + Name: "namespace.name", + }, + + { + Name: "module.handle", + }, + + { + Name: "module.name", + }, + + { + Name: "record.created-at", + }, + + { + Name: "record.updated-at", + }, + + { + Name: "record.deleted-at", + }, + + { + Name: "record.values.*", + }, + }, + }, { ResourceType: "system", EventType: "onManual", Properties: []eventTypePropertyDef{}, + Constraints: []eventTypeConstraintDef{}, }, { ResourceType: "system", EventType: "onInterval", Properties: []eventTypePropertyDef{}, + Constraints: []eventTypeConstraintDef{}, }, { ResourceType: "system", EventType: "onTimestamp", Properties: []eventTypePropertyDef{}, + Constraints: []eventTypeConstraintDef{}, }, { @@ -847,6 +1440,12 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "application.name", + }, + }, }, { @@ -866,6 +1465,12 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "application.name", + }, + }, }, { @@ -885,6 +1490,12 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "application.name", + }, + }, }, { @@ -904,6 +1515,12 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "application.name", + }, + }, }, { @@ -923,6 +1540,12 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "application.name", + }, + }, }, { @@ -942,6 +1565,12 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "application.name", + }, + }, }, { @@ -961,6 +1590,12 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "application.name", + }, + }, }, { @@ -980,6 +1615,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: false, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "user.handle", + }, + + { + Name: "user.email", + }, + }, }, { @@ -999,6 +1644,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: false, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "user.handle", + }, + + { + Name: "user.email", + }, + }, }, { @@ -1018,6 +1673,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: false, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "user.handle", + }, + + { + Name: "user.email", + }, + }, }, { @@ -1037,6 +1702,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: false, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "user.handle", + }, + + { + Name: "user.email", + }, + }, }, { @@ -1056,6 +1731,12 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "auth-client.handle", + }, + }, }, { @@ -1075,6 +1756,12 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "auth-client.handle", + }, + }, }, { @@ -1094,6 +1781,12 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "auth-client.handle", + }, + }, }, { @@ -1113,6 +1806,12 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "auth-client.handle", + }, + }, }, { @@ -1132,6 +1831,12 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "auth-client.handle", + }, + }, }, { @@ -1151,6 +1856,12 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "auth-client.handle", + }, + }, }, { @@ -1170,6 +1881,12 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "auth-client.handle", + }, + }, }, { @@ -1183,6 +1900,32 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: false, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "message.header.subject", + }, + + { + Name: "message.header.from", + }, + + { + Name: "message.header.to", + }, + + { + Name: "message.header.reply-to", + }, + + { + Name: "message.header.cc", + }, + + { + Name: "message.header.bcc", + }, + }, }, { @@ -1196,6 +1939,32 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: false, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "message.header.subject", + }, + + { + Name: "message.header.from", + }, + + { + Name: "message.header.to", + }, + + { + Name: "message.header.reply-to", + }, + + { + Name: "message.header.cc", + }, + + { + Name: "message.header.bcc", + }, + }, }, { @@ -1209,6 +1978,32 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: false, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "message.header.subject", + }, + + { + Name: "message.header.from", + }, + + { + Name: "message.header.to", + }, + + { + Name: "message.header.reply-to", + }, + + { + Name: "message.header.cc", + }, + + { + Name: "message.header.bcc", + }, + }, }, { @@ -1228,6 +2023,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "role.handle", + }, + + { + Name: "role.name", + }, + }, }, { @@ -1247,6 +2052,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "role.handle", + }, + + { + Name: "role.name", + }, + }, }, { @@ -1266,6 +2081,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "role.handle", + }, + + { + Name: "role.name", + }, + }, }, { @@ -1285,6 +2110,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "role.handle", + }, + + { + Name: "role.name", + }, + }, }, { @@ -1304,6 +2139,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "role.handle", + }, + + { + Name: "role.name", + }, + }, }, { @@ -1323,6 +2168,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "role.handle", + }, + + { + Name: "role.name", + }, + }, }, { @@ -1342,6 +2197,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "role.handle", + }, + + { + Name: "role.name", + }, + }, }, { @@ -1361,6 +2226,24 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: false, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "role.handle", + }, + + { + Name: "role.name", + }, + + { + Name: "user.handle", + }, + + { + Name: "user.email", + }, + }, }, { @@ -1380,6 +2263,24 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: false, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "role.handle", + }, + + { + Name: "role.name", + }, + + { + Name: "user.handle", + }, + + { + Name: "user.email", + }, + }, }, { @@ -1399,6 +2300,24 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: false, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "role.handle", + }, + + { + Name: "role.name", + }, + + { + Name: "user.handle", + }, + + { + Name: "user.email", + }, + }, }, { @@ -1418,6 +2337,24 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: false, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "role.handle", + }, + + { + Name: "role.name", + }, + + { + Name: "user.handle", + }, + + { + Name: "user.email", + }, + }, }, { @@ -1437,6 +2374,48 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "request.host", + }, + + { + Name: "request.remote-address", + }, + + { + Name: "request.method", + }, + + { + Name: "request.path", + }, + + { + Name: "request.username", + }, + + { + Name: "request.password", + }, + + { + Name: "request.content-type", + }, + + { + Name: "request.get.*", + }, + + { + Name: "request.post.*", + }, + + { + Name: "request.header.*", + }, + }, }, { @@ -1456,6 +2435,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "user.handle", + }, + + { + Name: "user.email", + }, + }, }, { @@ -1475,6 +2464,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "user.handle", + }, + + { + Name: "user.email", + }, + }, }, { @@ -1494,6 +2493,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "user.handle", + }, + + { + Name: "user.email", + }, + }, }, { @@ -1513,6 +2522,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "user.handle", + }, + + { + Name: "user.email", + }, + }, }, { @@ -1532,6 +2551,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "user.handle", + }, + + { + Name: "user.email", + }, + }, }, { @@ -1551,6 +2580,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "user.handle", + }, + + { + Name: "user.email", + }, + }, }, { @@ -1570,6 +2609,16 @@ func getEventTypeDefinitions() []eventTypeDef { Immutable: true, }, }, + Constraints: []eventTypeConstraintDef{ + + { + Name: "user.handle", + }, + + { + Name: "user.email", + }, + }, }, } } diff --git a/automation/rest/eventTypes.go b/automation/rest/eventTypes.go index 401258c0b..fb562f3aa 100644 --- a/automation/rest/eventTypes.go +++ b/automation/rest/eventTypes.go @@ -18,9 +18,10 @@ type ( } eventTypeDef struct { - ResourceType string `json:"resourceType"` - EventType string `json:"eventType"` - Properties []eventTypePropertyDef `json:"properties"` + ResourceType string `json:"resourceType"` + EventType string `json:"eventType"` + Properties []eventTypePropertyDef `json:"properties"` + Constraints []eventTypeConstraintDef `json:"constraints"` } eventTypePropertyDef struct { @@ -28,6 +29,10 @@ type ( Type string `json:"type"` Immutable bool `json:"immutable"` } + + eventTypeConstraintDef struct { + Name string `json:"name"` + } ) func (EventTypes) New() *EventTypes { diff --git a/compose/service/event/events.yaml b/compose/service/event/events.yaml index 61ec89ce5..6202cea83 100644 --- a/compose/service/event/events.yaml +++ b/compose/service/event/events.yaml @@ -10,6 +10,9 @@ compose:namespace: - name: 'oldNamespace' type: '*types.Namespace' immutable: true + constraints: + - name: namespace.handle + - name: namespace.name compose:page: on: ['manual'] @@ -23,6 +26,11 @@ compose:page: - name: 'namespace' type: '*types.Namespace' immutable: true + constraints: + - name: namespace.handle + - name: namespace.name + - name: page.handle + - name: page.name compose:module: on: ['manual'] @@ -36,6 +44,11 @@ compose:module: - name: 'namespace' type: '*types.Namespace' immutable: true + constraints: + - name: namespace.handle + - name: namespace.name + - name: module.handle + - name: module.name compose:record: on: ['manual', 'iteration'] @@ -54,3 +67,13 @@ compose:record: immutable: true - name: 'recordValueErrors' type: '*types.RecordValueErrorSet' + + constraints: + - name: namespace.handle + - name: namespace.name + - name: module.handle + - name: module.name + - name: record.created-at + - name: record.updated-at + - name: record.deleted-at + - name: record.values.* diff --git a/compose/service/event/namespace.go b/compose/service/event/namespace.go index c9a81cc8e..0149e9e8e 100644 --- a/compose/service/event/namespace.go +++ b/compose/service/event/namespace.go @@ -13,7 +13,7 @@ func (res namespaceBase) Match(c eventbus.ConstraintMatcher) bool { // Handles namespace matchers func namespaceMatch(r *types.Namespace, c eventbus.ConstraintMatcher) bool { switch c.Name() { - case "namespace", "namespace.slug": + case "namespace", "namespace.slug", "namespace.handle": return c.Match(r.Slug) case "namespace.name": return c.Match(r.Name) diff --git a/compose/service/event/record.go b/compose/service/event/record.go index 17ee2b6e8..4bda84533 100644 --- a/compose/service/event/record.go +++ b/compose/service/event/record.go @@ -22,11 +22,11 @@ func (res recordBase) Match(c eventbus.ConstraintMatcher) bool { func recordMatch(r *types.Record, c eventbus.ConstraintMatcher) bool { switch c.Name() { - case "record.updatedAt": + case "record.updatedAt", "record.updated-at": return c.Match(r.UpdatedAt.Format(time.RFC3339)) - case "record.createdAt": + case "record.createdAt", "record.created-at": return c.Match(r.CreatedAt.Format(time.RFC3339)) - case "record.deletedAt": + case "record.deletedAt", "record.deleted-at": return c.Match(r.DeletedAt.Format(time.RFC3339)) } diff --git a/pkg/codegen/assets/events_rest_def.gen.go.tpl b/pkg/codegen/assets/events_rest_def.gen.go.tpl index 8d339caba..d04694f6e 100644 --- a/pkg/codegen/assets/events_rest_def.gen.go.tpl +++ b/pkg/codegen/assets/events_rest_def.gen.go.tpl @@ -4,14 +4,10 @@ package rest // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. -// -// Definitions file that controls how this file is generated: -// {{ .Source }} func getEventTypeDefinitions() []eventTypeDef { return []eventTypeDef{ {{ range .Definitions }} - // {{ printf "%#v" .Imports }} {{ range $r := .Resources }} {{ template "eventTypeDefinitions" dict "res" $r "type" "on" "types" .On }} {{ template "eventTypeDefinitions" dict "res" $r "type" "before" "types" .BeforeAfter }} @@ -37,6 +33,13 @@ func getEventTypeDefinitions() []eventTypeDef { {{ end }} {{ end }} }, + Constraints: []eventTypeConstraintDef{ + {{ range $.res.Constraints }} + { + Name: {{ printf "%q" .Name }}, + }, + {{ end }} + }, }, {{ end }} {{ end }} diff --git a/pkg/codegen/events.go b/pkg/codegen/events.go index 5fdaa5032..f8858657d 100644 --- a/pkg/codegen/events.go +++ b/pkg/codegen/events.go @@ -38,10 +38,11 @@ type ( // used for filename ResourceFile string - On []string `yaml:"on"` - BeforeAfter []string `yaml:"ba"` - Properties []*eventProps `yaml:"props"` - Result string `yaml:"result"` + On []string `yaml:"on"` + BeforeAfter []string `yaml:"ba"` + Properties []*eventProps `yaml:"props"` + Constraints []*eventConstraint `yaml:"constraints"` + Result string `yaml:"result"` } eventProps struct { @@ -58,6 +59,10 @@ type ( // Do not allow change of the variable through Immutable bool } + + eventConstraint struct { + Name string + } ) func procEvents(mm ...string) (dd []*eventsDef, err error) { diff --git a/system/service/event/auth_client.go b/system/service/event/auth_client.go index 3100202b7..659644109 100644 --- a/system/service/event/auth_client.go +++ b/system/service/event/auth_client.go @@ -2,18 +2,23 @@ package event import ( "github.com/cortezaproject/corteza-server/pkg/eventbus" + "github.com/cortezaproject/corteza-server/system/types" ) var _ = eventbus.ConstraintMaker // Match returns false if given conditions do not match event & resource internals func (res authClientBase) Match(c eventbus.ConstraintMatcher) bool { - // By default we match no mather what kind of constraints we receive - // - // Function will be called multiple times - once for every trigger constraint - // All should match (return true): - // constraint#1 AND constraint#2 AND constraint#3 ... - // - // When there are multiple values, Match() can decide how to treat them (OR, AND...) - return true + return authClientMatch(res.authClient, c) +} + +// Handles application matchers +func authClientMatch(r *types.AuthClient, c eventbus.ConstraintMatcher) bool { + switch c.Name() { + // not supported yet + case "auth-client", "auth-client.handle": + return c.Match(r.Handle) + } + + return false } diff --git a/system/service/event/events.yaml b/system/service/event/events.yaml index 3fffbf1bc..6779bd7c1 100644 --- a/system/service/event/events.yaml +++ b/system/service/event/events.yaml @@ -9,12 +9,30 @@ system:sink: - name: 'request' type: '*types.SinkRequest' immutable: true + constraints: + - name: request.host + - name: request.remote-address + - name: request.method + - name: request.path + - name: request.username + - name: request.password + - name: request.content-type + - name: request.get.* + - name: request.post.* + - name: request.header.* system:mail: on: ['manual', 'receive', 'send'] props: - name: 'message' type: '*types.MailMessage' + constraints: + - name: message.header.subject + - name: message.header.from + - name: message.header.to + - name: message.header.reply-to + - name: message.header.cc + - name: message.header.bcc system:auth: ba: ['login', 'signup'] @@ -23,6 +41,9 @@ system:auth: type: '*types.User' - name: 'provider' type: '*types.AuthProvider' + constraints: + - name: user.handle + - name: user.email system:auth-client: on: ['manual'] @@ -33,6 +54,9 @@ system:auth-client: - name: 'oldAuthClient' type: '*types.AuthClient' immutable: true + constraints: + - name: auth-client.handle + system:user: on: ['manual'] @@ -43,6 +67,9 @@ system:user: - name: 'oldUser' type: '*types.User' immutable: true + constraints: + - name: user.handle + - name: user.email system:role: on: ['manual'] @@ -53,6 +80,9 @@ system:role: - name: 'oldRole' type: '*types.Role' immutable: true + constraints: + - name: role.handle + - name: role.name system:role:member: ba: ['add', 'remove'] @@ -61,6 +91,12 @@ system:role:member: type: '*types.User' - name: 'role' type: '*types.Role' + constraints: + - name: role.handle + - name: role.name + - name: user.handle + - name: user.email + system:application: on: ['manual'] @@ -71,3 +107,5 @@ system:application: - name: 'oldApplication' type: '*types.Application' immutable: true + constraints: + - name: application.name diff --git a/system/service/event/mail.go b/system/service/event/mail.go index 643e8ad96..f91a7401c 100644 --- a/system/service/event/mail.go +++ b/system/service/event/mail.go @@ -21,17 +21,17 @@ func (res mailBase) Match(c eventbus.ConstraintMatcher) bool { // Handles role matchers func mailMatch(r *types.MailMessage, c eventbus.ConstraintMatcher) bool { switch c.Name() { - case "mail.header.subject": + case "message.header.subject", "mail.header.subject": return c.Match(r.Subject) - case "mail.header.from": + case "message.header.from", "mail.header.from": return mailMatchAnyAddress(c, r.Header.From...) - case "mail.header.to": + case "message.header.to", "mail.header.to": return mailMatchAnyAddress(c, r.Header.To...) - case "mail.header.replyTo": + case "message.header.reply-to", "mail.header.replyTo": return mailMatchAnyAddress(c, r.Header.ReplyTo...) - case "mail.header.cc": + case "message.header.cc", "mail.header.cc": return mailMatchAnyAddress(c, r.Header.CC...) - case "mail.header.bcc": + case "message.header.bcc", "mail.header.bcc": return mailMatchAnyAddress(c, r.Header.BCC...) } diff --git a/system/service/event/sink.go b/system/service/event/sink.go index c14a71444..71e1b10f5 100644 --- a/system/service/event/sink.go +++ b/system/service/event/sink.go @@ -20,7 +20,9 @@ func (res sinkBase) Match(c eventbus.ConstraintMatcher) bool { // Handles sink's URL matchers func sinkMatch(r *types.SinkRequest, c eventbus.ConstraintMatcher) bool { switch c.Name() { - case "request.remoteAddress": + case "request.host": + return c.Match(r.Host) + case "request.remoteAddress", "request.remote-address": return c.Match(r.RemoteAddr) case "request.method": return c.Match(r.Method)