From 43fb3fd1a6e4fd9ec233d590e267ae7170cb525e Mon Sep 17 00:00:00 2001 From: Silvan Date: Thu, 6 Oct 2022 14:23:59 +0200 Subject: [PATCH] feat(actions): add token customization flow and extend functionally with modules (#4337) * fix: potential memory leak * feat(actions): possibility to parse json feat(actions): possibility to perform http calls * add query call * feat(api): list flow and trigger types fix(api): switch flow and trigger types to dynamic objects * fix(translations): add action translations * use `domain.FlowType` * localizers * localization * trigger types * options on `query.Action` * add functions for actions * feat: management api: add list flow and trigger (#4352) * console changes * cleanup * fix: wrong localization Co-authored-by: Max Peintner * id token works * check if claims not nil * feat(actions): metadata api * refactor(actions): modules * fix: allow prerelease * fix: test * feat(actions): deny list for http hosts * feat(actions): deny list for http hosts * refactor: actions * fix: different error ids * fix: rename statusCode to status * Actions objects as options (#4418) * fix: rename statusCode to status * fix(actions): objects as options * fix(actions): objects as options * fix(actions): set fields * add http client to old actions * fix(actions): add log module * fix(actions): add user to context where possible * fix(actions): add user to ctx in external authorization/pre creation * fix(actions): query correct flow in claims * test: actions * fix(id-generator): panic if no machine id * tests * maybe this? * fix linting * refactor: improve code * fix: metadata and usergrant usage in actions * fix: appendUserGrant * fix: allowedToFail and timeout in action execution * fix: allowed to fail in token complement flow * docs: add action log claim * Update defaults.yaml * fix log claim * remove prerelease build Co-authored-by: Max Peintner Co-authored-by: Livio Spring --- cmd/defaults.yaml | 7 + cmd/start/config.go | 4 + .../app/pages/actions/actions.component.html | 28 +- .../app/pages/actions/actions.component.scss | 4 + .../app/pages/actions/actions.component.ts | 120 +++-- .../add-flow-dialog.component.html | 11 +- .../add-flow-dialog.component.ts | 39 +- console/src/app/services/mgmt.service.ts | 23 +- console/src/assets/i18n/de.json | 13 +- console/src/assets/i18n/en.json | 13 +- console/src/assets/i18n/fr.json | 13 +- console/src/assets/i18n/it.json | 13 +- console/src/assets/i18n/zh.json | 13 +- docs/docs/apis/actions.md | 8 +- docs/docs/apis/openidoauth/claims.md | 49 +- docs/docs/apis/proto/action.md | 70 +-- docs/docs/apis/proto/management.md | 71 ++- go.mod | 22 +- go.sum | 45 +- internal/actions/actions.go | 153 ++++--- internal/actions/actions_test.go | 69 +++ internal/actions/api.go | 110 +---- internal/actions/config.go | 86 ++++ internal/actions/context.go | 43 +- internal/actions/fields.go | 71 +++ internal/actions/fields_test.go | 186 ++++++++ internal/actions/http_module.go | 196 ++++++++ internal/actions/http_module_config.go | 98 ++++ internal/actions/http_module_test.go | 433 ++++++++++++++++++ internal/actions/log_module.go | 30 ++ internal/actions/object/metadata.go | 56 +++ internal/actions/object/user.go | 165 +++++++ internal/actions/provided.go | 48 -- internal/api/grpc/action/action.go | 72 +-- internal/api/grpc/admin/export.go | 11 +- internal/api/grpc/admin/import.go | 5 +- internal/api/grpc/management/flow.go | 22 + internal/api/oidc/client.go | 223 ++++++++- internal/api/ui/login/custom_action.go | 263 ++++++++++- .../api/ui/login/external_login_handler.go | 31 +- internal/command/instance_idp_config.go | 22 +- internal/command/org.go | 4 +- internal/command/project.go | 2 +- internal/command/user.go | 2 +- internal/command/user_grant.go | 2 +- internal/domain/flow.go | 85 +++- internal/id/sonyflake.go | 36 +- internal/query/action.go | 18 +- internal/query/action_flow.go | 13 +- internal/query/action_flow_test.go | 63 ++- internal/query/action_test.go | 8 +- internal/query/query.go | 5 +- internal/query/search_query.go | 4 +- internal/static/i18n/de.yaml | 14 + internal/static/i18n/en.yaml | 14 + internal/static/i18n/fr.yaml | 14 + internal/static/i18n/it.yaml | 14 + internal/static/i18n/zh.yaml | 14 + pkg/grpc/action/action.go | 41 ++ pkg/grpc/management/action.go | 37 ++ proto/zitadel/action.proto | 47 +- proto/zitadel/management.proto | 46 +- 62 files changed, 2806 insertions(+), 636 deletions(-) create mode 100644 internal/actions/actions_test.go create mode 100644 internal/actions/config.go create mode 100644 internal/actions/fields.go create mode 100644 internal/actions/fields_test.go create mode 100644 internal/actions/http_module.go create mode 100644 internal/actions/http_module_config.go create mode 100644 internal/actions/http_module_test.go create mode 100644 internal/actions/log_module.go create mode 100644 internal/actions/object/metadata.go create mode 100644 internal/actions/object/user.go create mode 100644 pkg/grpc/action/action.go create mode 100644 pkg/grpc/management/action.go diff --git a/cmd/defaults.yaml b/cmd/defaults.yaml index 6841d8c8b..6539457b2 100644 --- a/cmd/defaults.yaml +++ b/cmd/defaults.yaml @@ -307,6 +307,13 @@ SystemDefaults: PublicKeyLifetime: 30h CertificateLifetime: 8766h +Actions: + HTTP: + # wildcard sub domains are currently unsupported + DenyList: + - localhost + - '127.0.0.1' + DefaultInstance: InstanceName: DefaultLanguage: en diff --git a/cmd/start/config.go b/cmd/start/config.go index a3d8e9c86..078e3ce1d 100644 --- a/cmd/start/config.go +++ b/cmd/start/config.go @@ -8,6 +8,7 @@ import ( "github.com/zitadel/logging" "github.com/zitadel/zitadel/internal/api/saml" + "github.com/zitadel/zitadel/internal/actions" admin_es "github.com/zitadel/zitadel/internal/admin/repository/eventsourcing" internal_authz "github.com/zitadel/zitadel/internal/api/authz" "github.com/zitadel/zitadel/internal/api/http/middleware" @@ -58,6 +59,7 @@ type Config struct { SystemAPIUsers map[string]*internal_authz.SystemAPIUser CustomerPortal string Machine *id.Config + Actions *actions.Config } func MustNewConfig(v *viper.Viper) *Config { @@ -70,6 +72,7 @@ func MustNewConfig(v *viper.Viper) *Config { mapstructure.StringToTimeDurationHookFunc(), mapstructure.StringToSliceHookFunc(","), database.DecodeHook, + actions.HTTPConfigDecodeHook, )), ) logging.OnError(err).Fatal("unable to read config") @@ -84,6 +87,7 @@ func MustNewConfig(v *viper.Viper) *Config { logging.OnError(err).Fatal("unable to set meter") id.Configure(config.Machine) + actions.SetHTTPConfig(&config.Actions.HTTP) return config } diff --git a/console/src/app/pages/actions/actions.component.html b/console/src/app/pages/actions/actions.component.html index df9d75796..c0c60c7ab 100644 --- a/console/src/app/pages/actions/actions.component.html +++ b/console/src/app/pages/actions/actions.component.html @@ -21,12 +21,12 @@

{{ 'FLOWS.FLOWSDESCRIPTION' | translate }}

-
+
{{ 'FLOWS.FLOWTYPE' | translate }} - {{ 'FLOWS.TYPES.' + type | translate }} + {{ type.name?.localizedMessage }} @@ -36,8 +36,14 @@
- {{ 'FLOWS.TYPES.' + flow.type | translate }} -
@@ -45,7 +51,11 @@
- {{ 'FLOWS.TRIGGERTYPES.' + trigger.triggerType | translate }} + {{ trigger.triggerType?.name?.localizedMessage }} + +
@@ -72,7 +82,13 @@
-