Add support for custom response content-type in webhook triggers to enable
integration with services like Microsoft Graph that require text/plain responses
for validation handshakes.
Changes:
- Add responseContentType property to Webhook trigger (allowed: application/json, text/plain)
- Update ExecutionController to handle text/plain responses when returnOutputs is true
- Add validation for allowed content type values
- Add example for Microsoft Graph webhook validation use case
- Add unit and integration tests
Closes#14272
* test(system): bring back parallelization on core, jdbc-h2, jdbc-mysql and jdbc-postgres
* fix(tests): make some tests sequential
* feat(tests): make tests run in parallel
* fix(tests):make unit test pass
* fix(tests): add load flow with tenant to clean the tests and remove flakyness
* fix(tests): failing unit test
* test: remove // on core
---------
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
Co-authored-by: Nicolas K. <nk_mikmak@hotmail.com>
* feat(core): return EncryptedString object for SecretInput in case of pause task
- this is important for proper decryption when secret input is from onResume in pause task
* feat(tests): add test coverage for secret input decryption case for onResume with PauseTask
* fix(tests): create state for execution to avoid failing tests in InputsTest
* fix(tests): add the missing secret input and assert on it at resumeExecutionPausedWithInputs() test
* feat(core): return EncryptedString object for secret inputs
- providing type is required for decrypting pause task secret outputs
- remove the redundant explicit mapping to EncryptedString in typedOutputs() method
* chore(tests): remove unnecessary added execution state at InputsTest
* fix(tests): resumeExecutionPausedWithInputs() expects encrypted secret inputs
* fix(core): handle secret input casting to map when masking log in case of decryption is not enabled
* chore(tests): update secret input assertions to assert on type and value
* chore(core): use decryptVariables for validation when extracting secret input value for log masking
* chore(core): simplify by using object variable
ScheduledCondition are special types of conditions used when computing the Schedule trigger next date.
If no next date can be computed, the Scheduler will try to compute again the next date after 1s.
So ScheduleConditions must be conditions that only works on date to limit the number of date a trigger should be scheduled on.
Without that, it creates a kind of inifinte loop.
In my local machine, this uses 5% CPU whereas with the fix the CPU becomes idle.
On resource restricted computers this can cost way more.
Fixes https://github.com/kestra-io/kestra-ee/issues/6444
* feat(core): invalid flow yaml files shouldn't be imported
* feat(core): enhance import flow file endpoint call to have failOnError as true
- this is to allow the endpoint to catch illegal flow files when there is wrong files
* fix(tests): use valid tenant id for FlowTopologyTest
* feat(core): apply strict parsing on flow import
* chore(core): remove unnecessary validation in importFlow()
- we need to apply strict parsing only
* feat(tests): add test coverage for strict parsing for flow files import
* chore(tests): add the second flow using Download
* chore(core): use overloaded method to simplify changes
* Update core/src/main/java/io/kestra/core/services/ExecutionService.java
---------
Co-authored-by: Loïc Mathieu <loikeseke@gmail.com>
* fix(repositories): use term query instead of prefix for mysql
* fix(repository): make mysql fulltext query works like other repositories
* clean(repository): combine term query and like query to be close to search query
---------
Co-authored-by: nKwiatkowski <nkwiatkowski@kestra.io>
- Make `Execution.removeDisabled(List<ResolvedTask>)` public and use it instread of the passthrought `Execution.findTaskDependingFlowState(List<ResolvedTask>)` method and delete the later.
- Add namespace to the error log inside the `TestRunnerUtils`.
- Code against interfaces
- Init hashmap with the right size when possible
- Avoid cloning collections when possible
* feat(http): add digest auth (RFC 7616)
Adds options.auth.type: DIGEST (username/password) for HTTP tasks (Request/Download/http()).
Digest requires an initial 401 challenge/response handshake, so failure handling runs after execution to avoid aborting negotiation.
Also preserves allowedResponseCodes semantics, scopes digest creds to per-request HttpClientContext, and centralizes error construction for readability.
* chore(http): add explicit getType overrides
Avoid relying on Lombok-generated getters to satisfy AbstractAuthConfiguration.getType; add explicit @Override methods and suppress Lombok getter generation for the type field.