1919package org .apache .syncope .core .flowable ;
2020
2121import java .util .List ;
22+ import javax .script .ScriptContext ;
23+ import javax .script .ScriptEngine ;
2224import org .apache .syncope .common .keymaster .client .api .ConfParamOps ;
2325import org .apache .syncope .core .flowable .api .UserRequestHandler ;
2426import org .apache .syncope .core .flowable .impl .FlowableBpmnProcessManager ;
4850import org .apache .syncope .core .provisioning .api .data .UserDataBinder ;
4951import org .apache .syncope .core .provisioning .api .notification .NotificationManager ;
5052import org .apache .syncope .core .provisioning .api .rules .RuleProvider ;
53+ import org .apache .syncope .core .spring .implementation .GroovySandboxScriptEngineImpl ;
5154import org .apache .syncope .core .spring .security .SecurityProperties ;
5255import org .apache .syncope .core .workflow .api .UserWorkflowAdapter ;
56+ import org .flowable .common .engine .api .FlowableException ;
5357import org .flowable .common .engine .impl .AbstractEngineConfiguration ;
5458import org .flowable .common .engine .impl .cfg .IdGenerator ;
5559import org .flowable .common .engine .impl .persistence .StrongUuidGenerator ;
60+ import org .flowable .common .engine .impl .scripting .JSR223FlowableScriptEngine ;
61+ import org .flowable .common .engine .impl .scripting .ScriptingEngines ;
5662import org .flowable .idm .spring .SpringIdmEngineConfiguration ;
5763import org .flowable .idm .spring .configurator .SpringIdmEngineConfigurator ;
5864import org .flowable .spring .SpringProcessEngineConfiguration ;
65+ import org .jenkinsci .plugins .scriptsecurity .sandbox .blacklists .Blacklist ;
5966import org .springframework .boot .autoconfigure .condition .ConditionalOnMissingBean ;
6067import org .springframework .boot .context .properties .EnableConfigurationProperties ;
6168import org .springframework .context .ApplicationEventPublisher ;
@@ -140,9 +147,10 @@ public IdGenerator idGenerator() {
140147 public SpringProcessEngineConfiguration processEngineConfiguration (
141148 final WorkflowFlowableProperties props ,
142149 final SpringIdmEngineConfigurator syncopeIdmEngineConfigurator ,
143- final IdGenerator idGenerator ,
144150 final SyncopeEntitiesVariableType syncopeEntitiesVariableType ,
145- final SyncopeFormHandlerHelper syncopeFormHandlerHelper ) {
151+ final SyncopeFormHandlerHelper syncopeFormHandlerHelper ,
152+ final IdGenerator idGenerator ,
153+ final Blacklist groovyBlackList ) {
146154
147155 SpringProcessEngineConfiguration conf = new SpringProcessEngineConfiguration ();
148156 conf .setDatabaseSchemaUpdate (AbstractEngineConfiguration .DB_SCHEMA_UPDATE_TRUE );
@@ -154,6 +162,22 @@ public SpringProcessEngineConfiguration processEngineConfiguration(
154162 conf .setFormHandlerHelper (syncopeFormHandlerHelper );
155163 conf .setIdGenerator (idGenerator );
156164 conf .setPreBpmnParseHandlers (List .of (new ShellServiceTaskDisablingBpmnParseHandler ()));
165+
166+ ScriptEngine groovyScriptEngine = new GroovySandboxScriptEngineImpl (groovyBlackList );
167+ groovyScriptEngine .getContext ().
168+ setAttribute ("#jsr223.groovy.engine.keep.globals" , "weak" , ScriptContext .ENGINE_SCOPE );
169+ conf .setScriptEngine (new JSR223FlowableScriptEngine () {
170+
171+ @ Override
172+ protected ScriptEngine getEngineByName (final String language ) {
173+ if (ScriptingEngines .GROOVY_SCRIPTING_LANGUAGE .equals (language )) {
174+ return groovyScriptEngine ;
175+ }
176+
177+ throw new FlowableException ("Can't find scripting engine for '" + language + "'" );
178+ }
179+ });
180+
157181 return conf ;
158182 }
159183
0 commit comments