mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-11 17:27:31 +00:00
feat: add action v2 execution on requests and responses (#7637)
* feat: add execution of targets to grpc calls * feat: add execution of targets to grpc calls * feat: add execution of targets to grpc calls * feat: add execution of targets to grpc calls * feat: add execution of targets to grpc calls * feat: add execution of targets to grpc calls * feat: add execution of targets to grpc calls * feat: split request and response logic to handle the different context information * feat: split request and response logic to handle the different context information * fix: integration test * fix: import alias * fix: refactor execution package * fix: refactor execution interceptor integration and unit tests * fix: refactor execution interceptor integration and unit tests * fix: refactor execution interceptor integration and unit tests * fix: refactor execution interceptor integration and unit tests * fix: refactor execution interceptor integration and unit tests * docs: basic documentation for executions and targets * fix: change order for interceptors * fix: merge back origin/main * fix: change target definition command and query side (#7735) * fix: change target definition command and query side * fix: correct refactoring name changes * fix: correct refactoring name changes * fix: changing execution defintion with target list and type * fix: changing execution definition with target list and type * fix: add back search queries for target and include * fix: projections change for execution with targets suffix table * fix: projections change for execution with targets suffix table * fix: projections change for execution with targets suffix table * fix: projections change for execution with targets suffix table * fix: projections change for execution with targets suffix table * fix: projections change for execution with targets suffix table * fix: projections change for execution with targets suffix table * docs: add example to actions v2 * docs: add example to actions v2 * fix: correct integration tests on query for executions * fix: add separate event for execution v2 as content changed * fix: add separate event for execution v2 as content changed * fix: added review comment changes * fix: added review comment changes * fix: added review comment changes --------- Co-authored-by: adlerhurst <silvan.reusser@gmail.com> * fix: added review comment changes * fix: added review comment changes * Update internal/api/grpc/server/middleware/execution_interceptor.go Co-authored-by: Silvan <silvan.reusser@gmail.com> * fix: added review comment changes * fix: added review comment changes * fix: added review comment changes * fix: added review comment changes * fix: added review comment changes * fix: added review comment changes --------- Co-authored-by: adlerhurst <silvan.reusser@gmail.com> Co-authored-by: Elio Bischof <elio@zitadel.com>
This commit is contained in:
@@ -423,22 +423,26 @@ message CreateTargetRequest {
|
||||
option (validate.required) = true;
|
||||
|
||||
SetRESTWebhook rest_webhook = 2;
|
||||
SetRESTRequestResponse rest_request_response = 3;
|
||||
SetRESTCall rest_call = 3;
|
||||
SetRESTAsync rest_async = 4;
|
||||
}
|
||||
// Timeout defines the duration until ZITADEL cancels the execution.
|
||||
google.protobuf.Duration timeout = 4 [
|
||||
google.protobuf.Duration timeout = 5 [
|
||||
(validate.rules).duration = {gt: {seconds: 0}, required: true},
|
||||
(google.api.field_behavior) = REQUIRED,
|
||||
(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
|
||||
example: "\"10s\"";
|
||||
}
|
||||
];
|
||||
oneof execution_type {
|
||||
// Set the execution to run asynchronously.
|
||||
bool is_async = 5;
|
||||
// Define if any error stops the whole execution. By default the process continues as normal.
|
||||
bool interrupt_on_error = 6;
|
||||
}
|
||||
string endpoint = 6 [
|
||||
(validate.rules).string = {min_len: 1, max_len: 1000, uri: true},
|
||||
(google.api.field_behavior) = REQUIRED,
|
||||
(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
|
||||
min_length: 1,
|
||||
max_length: 1000,
|
||||
example: "\"https://example.com/hooks/ip_check\"";
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
message CreateTargetResponse {
|
||||
@@ -472,21 +476,24 @@ message UpdateTargetRequest {
|
||||
// or its target URL.
|
||||
oneof target_type {
|
||||
SetRESTWebhook rest_webhook = 3;
|
||||
SetRESTRequestResponse rest_request_response = 4;
|
||||
SetRESTCall rest_call = 4;
|
||||
SetRESTAsync rest_async = 5;
|
||||
}
|
||||
// Optionally change the timeout, which defines the duration until ZITADEL cancels the execution.
|
||||
optional google.protobuf.Duration timeout = 5 [
|
||||
optional google.protobuf.Duration timeout = 6 [
|
||||
(validate.rules).duration = {gt: {seconds: 0}},
|
||||
(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
|
||||
example: "\"10s\"";
|
||||
}
|
||||
];
|
||||
oneof execution_type {
|
||||
// Set the execution to run asynchronously.
|
||||
bool is_async = 6;
|
||||
// Define if any error stops the whole execution. By default the process continues as normal.
|
||||
bool interrupt_on_error = 7;
|
||||
}
|
||||
|
||||
optional string endpoint = 7 [
|
||||
(validate.rules).string = {max_len: 1000, uri: true},
|
||||
(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
|
||||
max_length: 1000,
|
||||
example: "\"https://example.com/hooks/ip_check\"";
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
message UpdateTargetResponse {
|
||||
@@ -554,10 +561,8 @@ message GetTargetByIDResponse {
|
||||
message SetExecutionRequest {
|
||||
// Defines the condition type and content of the condition for execution.
|
||||
Condition condition = 1;
|
||||
// Defines the execution targets which are defined as a different resource, which are called in the defined conditions.
|
||||
repeated string targets = 2;
|
||||
// Defines other executions as included with the same condition-types.
|
||||
repeated string includes = 3;
|
||||
// Ordered list of targets/includes called during the execution.
|
||||
repeated zitadel.action.v3alpha.ExecutionTargetType targets = 2;
|
||||
}
|
||||
|
||||
message SetExecutionResponse {
|
||||
|
@@ -14,17 +14,20 @@ import "zitadel/protoc_gen_zitadel/v2/options.proto";
|
||||
option go_package = "github.com/zitadel/zitadel/pkg/grpc/action/v3alpha;action";
|
||||
|
||||
message Execution {
|
||||
string execution_id = 1 [
|
||||
(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
|
||||
example: "\"request.zitadel.session.v2beta.SessionService\"";
|
||||
}
|
||||
];
|
||||
Condition Condition = 1;
|
||||
// Details provide some base information (such as the last change date) of the target.
|
||||
zitadel.object.v2beta.Details details = 2;
|
||||
// Targets which are called in the defined conditions.
|
||||
repeated string targets = 3;
|
||||
// Included executions with the same condition-types.
|
||||
repeated string includes = 4;
|
||||
// List of ordered list of targets/includes called during the execution.
|
||||
repeated ExecutionTargetType targets = 3;
|
||||
}
|
||||
|
||||
message ExecutionTargetType {
|
||||
oneof type {
|
||||
// Unique identifier of existing target to call.
|
||||
string target = 1;
|
||||
// Unique identifier of existing execution to include targets of.
|
||||
Condition include = 2;
|
||||
}
|
||||
}
|
||||
|
||||
message Condition {
|
||||
@@ -37,7 +40,7 @@ message Condition {
|
||||
// Condition-type to execute on response if a request on the defined API point happens.
|
||||
ResponseExecution response = 2;
|
||||
// Condition-type to execute if function is used, replaces actions v1.
|
||||
string function = 3;
|
||||
FunctionExecution function = 3;
|
||||
// Condition-type to execute if an event is created in the system.
|
||||
EventExecution event = 4;
|
||||
}
|
||||
@@ -95,6 +98,11 @@ message ResponseExecution {
|
||||
}
|
||||
}
|
||||
|
||||
// Executed on the specified function
|
||||
message FunctionExecution {
|
||||
string name = 1 [(validate.rules).string = {min_len: 1, max_len: 1000}];
|
||||
}
|
||||
|
||||
message EventExecution{
|
||||
// Condition for the event execution, only one possible.
|
||||
oneof condition{
|
||||
|
@@ -43,7 +43,7 @@ message TargetQuery {
|
||||
|
||||
message IncludeQuery {
|
||||
// Defines the include to query for.
|
||||
string include = 1 [
|
||||
Condition include = 1 [
|
||||
(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
|
||||
description: "the id of the include"
|
||||
example: "\"request.zitadel.session.v2beta.SessionService\"";
|
||||
|
@@ -13,30 +13,21 @@ import "zitadel/protoc_gen_zitadel/v2/options.proto";
|
||||
|
||||
option go_package = "github.com/zitadel/zitadel/pkg/grpc/action/v3alpha;action";
|
||||
|
||||
// Wait for response but response body is ignored, status is checked, call is sent as post.
|
||||
message SetRESTWebhook {
|
||||
string url = 1 [
|
||||
(validate.rules).string = {min_len: 1, max_len: 1000, uri: true},
|
||||
(google.api.field_behavior) = REQUIRED,
|
||||
(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
|
||||
min_length: 1,
|
||||
max_length: 1000,
|
||||
example: "\"https://example.com/hooks/ip_check\"";
|
||||
}
|
||||
];
|
||||
// Define if any error stops the whole execution. By default the process continues as normal.
|
||||
bool interrupt_on_error = 1;
|
||||
}
|
||||
|
||||
message SetRESTRequestResponse {
|
||||
string url = 1 [
|
||||
(validate.rules).string = {min_len: 1, max_len: 1000, uri: true},
|
||||
(google.api.field_behavior) = REQUIRED,
|
||||
(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
|
||||
min_length: 1,
|
||||
max_length: 1000,
|
||||
example: "\"https://example.com/hooks/ip_check\"";
|
||||
}
|
||||
];
|
||||
// Wait for response and response body is used, status is checked, call is sent as post.
|
||||
message SetRESTCall {
|
||||
// Define if any error stops the whole execution. By default the process continues as normal.
|
||||
bool interrupt_on_error = 1;
|
||||
}
|
||||
|
||||
// Call is executed in parallel to others, ZITADEL does not wait until the call is finished. The state is ignored, call is sent as post.
|
||||
message SetRESTAsync {}
|
||||
|
||||
message Target {
|
||||
// ID is the read-only unique identifier of the target.
|
||||
string target_id = 1 [
|
||||
@@ -56,18 +47,19 @@ message Target {
|
||||
// Defines the target type and how the response of the target is treated.
|
||||
oneof target_type {
|
||||
SetRESTWebhook rest_webhook = 4;
|
||||
SetRESTRequestResponse rest_request_response = 5;
|
||||
SetRESTCall rest_call = 5;
|
||||
SetRESTAsync rest_async = 6;
|
||||
}
|
||||
// Timeout defines the duration until ZITADEL cancels the execution.
|
||||
google.protobuf.Duration timeout = 6 [
|
||||
google.protobuf.Duration timeout = 7 [
|
||||
(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
|
||||
example: "\"10s\"";
|
||||
}
|
||||
];
|
||||
oneof execution_type {
|
||||
// Set the execution to run asynchronously.
|
||||
bool is_async = 7;
|
||||
// Define if any error stops the whole execution. By default the process continues as normal.
|
||||
bool interrupt_on_error = 8;
|
||||
}
|
||||
|
||||
string endpoint = 8 [
|
||||
(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
|
||||
example: "\"https://example.com/hooks/ip_check\"";
|
||||
}
|
||||
];
|
||||
}
|
Reference in New Issue
Block a user