From b8a3a9829bf8691446d2f2f915a74655ea8d59aa Mon Sep 17 00:00:00 2001 From: Abhishek Kamti Date: Sat, 8 Aug 2026 16:33:25 +0530 Subject: [PATCH] Support custom required actions in add-required-action workflow step Look up required actions using the provider alias instead of the UserModel.RequiredAction enum. This allows workflows to add custom required actions while preserving support for built-in required actions. Closes #51415 Signed-off-by: Abhishek Kamti --- .../AddRequiredActionStepProvider.java | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/services/src/main/java/org/keycloak/models/workflow/AddRequiredActionStepProvider.java b/services/src/main/java/org/keycloak/models/workflow/AddRequiredActionStepProvider.java index 527f4dc53710..cfd9375bdb88 100644 --- a/services/src/main/java/org/keycloak/models/workflow/AddRequiredActionStepProvider.java +++ b/services/src/main/java/org/keycloak/models/workflow/AddRequiredActionStepProvider.java @@ -32,20 +32,20 @@ public void run(WorkflowExecutionContext context) { log.warnv("Missing required configuration option '{0}' in {1}", REQUIRED_ACTION_KEY, AddRequiredActionStepProviderFactory.ID); return; } - try { - // Convert hyphens to underscores and uppercase to match enum naming - configuredAction = configuredAction.replace("-", "_").toUpperCase(); - UserModel.RequiredAction action = UserModel.RequiredAction.valueOf(configuredAction); - if (!realm.getRequiredActionProviderByAlias(action.name()).isEnabled()) { - log.warnv("Required action {0} is not enabled in realm {1}", action, realm.getName()); - return; - } - log.debugv("Adding required action {0} to user {1}", action, user.getId()); - user.addRequiredAction(action); - } catch (IllegalArgumentException e) { - log.warnv("Invalid required action {0} configured in {1}", stepModel.getConfig().getFirst(REQUIRED_ACTION_KEY), - AddRequiredActionStepProviderFactory.ID); + RequiredActionProviderModel provider = realm.getRequiredActionProviderByAlias(configuredAction); + + if (provider == null) { + log.warnv("Required action {0} is not configured in realm {1}", + configuredAction, realm.getName()); + return; + } + + if (!provider.isEnabled()) { + log.warnv("Required action {0} is not enabled in realm {1}", + configuredAction, realm.getName()); + return; } + user.addRequiredAction(configuredAction); } }