adorsys / adorsys/keycloak-config-cli
JS evaluation does not work with arrays
- Linguagem predominante
- Java
- Estrelas
- 1.2k
- Forks
- 200
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Descrição
### Current Behavior
When JavaScript substitution ($${javascript: ... }) returns an array (e.g. for redirectUris/webOrigins), import fails with:
InvalidImportException: Failed to serialize script result: The Context is already closed.
Stack trace shows PolyglotList serialization failure in KeycloakImportProvider.evaluateScripts(...).
### Expected Behavior
JavaScript substitution should support JSON-serializable return types documented by keycloak-config-cli, including arrays and objects. Returning an array should be serialized and imported successfully.
### Steps To Reproduce
```markdown
1. Enable variable substitution and JS evaluation:
--import.var-substitution.enabled=true
--import.var-substitution.script-evaluation-enabled=true
2. Use a config containing $${javascript: ... } that returns an array for a field like redirectUris.
3. Run keycloak-config-cli import.
4. Observe failure: Failed to serialize script result: The Context is already closed. (If JS returns a string/boolean/number, import works.)
```
### Deployment Method
Docker
### Environment
- Keycloak Version: 26.5.6
- keycloak-config-cli Version: 6.5.1
- Java Version: 21
### Relevant configuration (sanitized)
```yaml
{
"realm": "repro-realm",
"enabled": true,
"clients": [
{
"clientId": "repro-client",
"enabled": true,
"publicClient": true,
"protocol": "openid-connect",
"redirectUris": "$${javascript: env.DISABLE_LOCALHOST === 'true' ? ['https://example.com/*'] : ['https://example.com/*', 'http://localhost:4200/*']}",
"webOrigins": "$${javascript: env.DISABLE_LOCALHOST === 'true' ? ['https://example.com'] : ['https://example.com', 'http://localhost:4200']}"
}
]
}
--import.var-substitution.enabled=true \
--import.var-substitution.script-evaluation-enabled=true
# example env:
DISABLE_LOCALHOST=true
```
### Logs / error output
```shell
de.adorsys.keycloak.config.exception.InvalidImportException: Failed to serialize script result: The Context is already closed.
Caused by: java.lang.IllegalStateException: The Context is already closed.
...
at com.oracle.truffle.polyglot.PolyglotList.size(...)
at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(...)
```
### Anything else?
_No response_
Guia de contribuição
Avaliação
Esta issue ainda não foi avaliada.