| // |
| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you under the Apache License, Version 2.0 (the |
| // "License"); you may not use this file except in compliance |
| // with the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, |
| // software distributed under the License is distributed on an |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| // KIND, either express or implied. See the License for the |
| // specific language governing permissions and limitations |
| // under the License. |
| // |
| === Implementations |
| |
| It is possible to provide implementations suitable for <<customization-core,customization>> as: |
| |
| . Java classes |
| . http://www.groovy-lang.org/[Apache Groovy^] classes |
| |
| While the former shows some advantages about execution performance, the latter is extremely useful as it allows for |
| runtime updates, freeing from the hassle to redeploy when something needs to be changed. |
| |
| [WARNING] |
| .With great power comes great responsibility |
| ==== |
| Customizing and extending the Core behavior by uploading a Groovy class via REST adds further flexibility to the |
| platform, allows to speed up the development cycle and can be used as Swiss army knife for maintenance and |
| administration. |
| |
| Please beware that granting the permission to manage Implementations to non-admin users shall be performed with great |
| care. The Groovy code is anyway going to be executed in a sandbox, where the set of forbidden classes and methods |
| can be configured on each deployment. + |
| Check the provided |
| ifeval::["{snapshotOrRelease}" == "release"] |
| https://github.com/ilgrosso/syncope/blob/syncope-{docVersion}/core/spring/src/main/resources/META-INF/groovy.blacklist[groovy.blacklist^] |
| endif::[] |
| ifeval::["{snapshotOrRelease}" == "snapshot"] |
| https://github.com/ilgrosso/syncope/blob/master/core/spring/src/main/resources/META-INF/groovy.blacklist[groovy.blacklist^] |
| endif::[] |
| . |
| |
| The default Groovy sandbox controls can be tweaked by configuring a local copy of `groovy.blacklist`, which will then |
| have to be referenced by adjusting the value of the `security.groovyBlacklist` property in the `core.properties` file. |
| ==== |