Untitled

 avatar
unknown
plain_text
5 months ago
4.9 kB
3
Indexable
public Response handleAsyncConfiguredSoarMultiActionTrigger(
            String accountId,
            String triggerSource,
            SoarMultipleActionTrigger soarMultipleActionTrigger,
            String userEmail,
            String userRole
    ) throws ConfiguredSoarApplicationException, EntityNotFoundException {
        logger.info("Attempting to validate ConfiguredSoarActionTrigger UI request ");
        if (Objects.isNull(soarMultipleActionTrigger)) {
            throw new ConfiguredSoarApplicationException("SoarMultipleActionTrigger User Input is Empty");
        }
        if(soarMultipleActionTrigger.userInputParameters() == null || soarMultipleActionTrigger.userInputParameters().isEmpty() || soarMultipleActionTrigger.assetValues() == null) {
            throw new ConfiguredSoarApplicationException("User Input Multiple Parameters must not be Empty", LogLevel.ERROR);
        }
        Map<String, AssetValues> assetValues = soarMultipleActionTrigger.assetValues();
        List<UserInputParameters> userInputParameters = soarMultipleActionTrigger.userInputParameters();

        List<String> successActions = new ArrayList<>();
        List<String> failedActions = new ArrayList<>();
        // Iterate through each asset and trigger action
        for (String assetId : assetValues.keySet()) {
            AssetValues asset = assetValues.get(assetId);

            ConfiguredSoarAction configuredSoarAction = configuredSoarActionRepositoryService.findConfiguredActionById(soarMultipleActionTrigger.actionId());
            SoarAction soarAction = soarActionRepositoryService.readById(configuredSoarAction.soarActionId(),rolesService.getAllRoles());
            List<SoarActionConfigParameter> customConfig = new ArrayList<>(soarAction.customConfiguration());
            // Remove hidden custom config parameters

            customConfig.removeIf(config -> Boolean.TRUE.equals(config.getHidden()));
            UserInputParameters inputParameters = null;

            if (customConfig.isEmpty()) {
                // If there are no custom config parameters left, follow regular path of execution
            } else {
                // Check if any required parameters are empty
                for (CustomConfigParameter<?> config : customConfig) {
                    if (Boolean.TRUE.equals(config.isRequired())
                            && CollectionUtils.isEmpty(soarMultipleActionTrigger.userInputParameters())) {
                        throw new ConfiguredSoarApplicationException(
                                "SoarActionTrigger User Input Parameters cannot be Empty");
                    }
                    if ("hostname".equalsIgnoreCase(config.getName())) {
                        inputParameters = new UserInputParameters(config.getName(), asset.hostname());
                    } else if ("ip_address".equalsIgnoreCase(config.getName())) {
                        inputParameters = new UserInputParameters(config.getName(), asset.ip_address());
                    } else if ("mac_address".equalsIgnoreCase(config.getName())) {
                        inputParameters = new UserInputParameters(config.getName(), asset.mac_address());
                    }
                }
                if(inputParameters == null && userInputParameters != null) {
                    inputParameters = userInputParameters.get(0);
                }
                    SoarActionTrigger soarActionTrigger = new SoarActionTrigger(
                            soarMultipleActionTrigger.soarApplicationId(),
                            soarMultipleActionTrigger.actionId(),
                            soarMultipleActionTrigger.userId(),
                            Arrays.asList(inputParameters)
                    );

                try {
                   Response response = handleAsyncConfiguredSoarActionTrigger(
                            accountId,
                            assetId,
                            triggerSource,
                            soarActionTrigger,
                            userEmail,
                            userRole
                    );

                    // If response indicates success, add to success list
                    if (response.getStatus() == Response.Status.OK.getStatusCode()) {
                        successActions.add(assetId);
                    } else {
                        failedActions.add(assetId);
                    }

                } catch (Exception ex) {
                    logger.error("Error triggering action for assetId {}: {}", assetId, ex.getMessage());
                    failedActions.add(assetId);
                }
            }

            }

        Map<String, Object> result = new HashMap<>();
        result.put("success", successActions);
        result.put("failed", failedActions);

        return Response.status(Response.Status.OK)
            .entity(result)
            .build();
    }
Editor is loading...
Leave a Comment