This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch 4_1_X
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/4_1_X by this push:
new 12e94dd200 Setting JexlPermissions
12e94dd200 is described below
commit 12e94dd200e30237f9604cf35e61808d5eb5ee94
Author: Francesco Chicchiriccò <[email protected]>
AuthorDate: Fri Aug 21 18:07:22 2026 +0200
Setting JexlPermissions
---
.../client/console/panels/UserDirectoryPanel.java | 4 +-
.../client/console/wizards/any/Management.java | 30 +++----
.../apache/syncope/common/lib/AnyOperations.java | 32 ++++----
.../apache/syncope/common/lib/EntityTOUtils.java | 8 +-
.../apache/syncope/common/lib/request/AnyCR.java | 12 +--
.../apache/syncope/common/lib/request/AnyUR.java | 12 +--
.../apache/syncope/common/lib/request/UserCR.java | 4 +-
.../apache/syncope/common/lib/request/UserUR.java | 4 +-
.../org/apache/syncope/common/lib/to/AnyTO.java | 8 +-
.../syncope/core/persistence/api/entity/Any.java | 8 +-
.../core/persistence/api/entity/user/Account.java | 2 +-
.../common/validation/AnyValidator.java | 2 +-
.../core/persistence/jpa/entity/AbstractAny.java | 8 +-
.../core/persistence/jpa/outer/GroupTest.java | 8 +-
.../neo4j/dao/repo/AnyObjectRepoExtImpl.java | 8 +-
.../neo4j/dao/repo/GroupRepoExtImpl.java | 8 +-
.../neo4j/dao/repo/UserRepoExtImpl.java | 8 +-
.../core/persistence/neo4j/entity/AbstractAny.java | 8 +-
.../core/persistence/neo4j/outer/GroupTest.java | 8 +-
.../core/provisioning/api/jexl/JexlFunctions.java | 1 +
.../core/provisioning/api/jexl/JexlTools.java | 41 +++++++--
.../core/provisioning/api/jexl/TemplateUtils.java | 12 +--
.../core/provisioning/api/AbstractTest.java | 3 +-
.../{JexlUtilsTest.java => JexlToolsTest.java} | 2 +-
.../provisioning/java/DefaultMappingManager.java | 12 +--
.../provisioning/java/ProvisioningContext.java | 3 +-
.../core/provisioning/java/data/AnyDataBinder.java | 50 ++++++-----
.../java/pushpull/AbstractPullResultHandler.java | 24 +++---
.../core/provisioning/java/JexlToolsTest.java | 96 ++++++++++++++++++++++
.../DefaultNotificationManagerTest.java | 3 +-
.../elasticsearch/client/ElasticsearchUtils.java | 4 +-
.../ext/opensearch/client/OpenSearchUtils.java | 4 +-
.../org/apache/syncope/fit/core/GroupITCase.java | 6 +-
.../org/apache/syncope/fit/core/ManagerITCase.java | 8 +-
.../apache/syncope/fit/core/PullTaskITCase.java | 4 +-
.../apache/syncope/fit/core/UserIssuesITCase.java | 18 ++--
36 files changed, 298 insertions(+), 175 deletions(-)
diff --git
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
index 3fa73757b2..774f4e5324 100644
---
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
+++
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
@@ -220,7 +220,7 @@ public class UserDirectoryPanel extends
AnyDirectoryPanel<UserTO, UserRestClient
SyncopeConsoleSession.get().success(getString(Constants.OPERATION_SUCCEEDED));
target.add(container);
} catch (Exception e) {
- LOG.error("While requesting password reject for
{}", model.getObject().getUManager(), e);
+ LOG.error("While requesting password reject for
{}", model.getObject().getuManager(), e);
SyncopeConsoleSession.get().onException(e);
}
((BasePage)
pageRef.getPage()).getNotificationPanel().refresh(target);
@@ -241,7 +241,7 @@ public class UserDirectoryPanel extends
AnyDirectoryPanel<UserTO, UserRestClient
SyncopeConsoleSession.get().success(getString(Constants.OPERATION_SUCCEEDED));
target.add(container);
} catch (Exception e) {
- LOG.error("While dismissing MFA for {}",
model.getObject().getUManager(), e);
+ LOG.error("While dismissing MFA for {}",
model.getObject().getuManager(), e);
SyncopeConsoleSession.get().onException(e);
}
((BasePage)
pageRef.getPage()).getNotificationPanel().refresh(target);
diff --git
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Management.java
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Management.java
index a481486d64..bdbebfd677 100644
---
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Management.java
+++
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Management.java
@@ -117,7 +117,7 @@ public class Management extends WizardStep implements
ICondition {
setTitleModel(new ResourceModel("manager"));
this.wrapper = anyWrapper;
- isGManager = Model.of(anyWrapper.getInnerObject().getGManager() !=
null);
+ isGManager = Model.of(anyWrapper.getInnerObject().getgManager() !=
null);
BootstrapToggleConfig config = new BootstrapToggleConfig().
withOnStyle(BootstrapToggleConfig.Style.info).
@@ -213,11 +213,11 @@ public class Management extends WizardStep implements
ICondition {
@Override
public String getObject() {
- if (anyWrapper.getInnerObject().getUManager() == null) {
+ if (anyWrapper.getInnerObject().getuManager() == null) {
return StringUtils.EMPTY;
}
- UserTO userTO =
userRestClient.read(anyWrapper.getInnerObject().getUManager());
+ UserTO userTO =
userRestClient.read(anyWrapper.getInnerObject().getuManager());
if (userTO == null) {
return StringUtils.EMPTY;
}
@@ -228,11 +228,11 @@ public class Management extends WizardStep implements
ICondition {
@Override
public void setObject(final String object) {
if (StringUtils.isBlank(object)) {
- anyWrapper.getInnerObject().setUManager(null);
+ anyWrapper.getInnerObject().setuManager(null);
} else {
Matcher matcher = manager.matcher(object);
if (matcher.matches()) {
-
anyWrapper.getInnerObject().setUManager(matcher.group(1));
+
anyWrapper.getInnerObject().setuManager(matcher.group(1));
}
}
}
@@ -262,10 +262,10 @@ public class Management extends WizardStep implements
ICondition {
@Override
public String getObject() {
- if (anyWrapper.getInnerObject().getGManager() == null) {
+ if (anyWrapper.getInnerObject().getgManager() == null) {
return StringUtils.EMPTY;
} else {
- GroupTO groupTO =
groupRestClient.read(anyWrapper.getInnerObject().getGManager());
+ GroupTO groupTO =
groupRestClient.read(anyWrapper.getInnerObject().getgManager());
if (groupTO == null) {
return StringUtils.EMPTY;
} else {
@@ -277,11 +277,11 @@ public class Management extends WizardStep implements
ICondition {
@Override
public void setObject(final String object) {
if (StringUtils.isBlank(object)) {
- anyWrapper.getInnerObject().setGManager(null);
+ anyWrapper.getInnerObject().setgManager(null);
} else {
final Matcher matcher = manager.matcher(object);
if (matcher.matches()) {
-
anyWrapper.getInnerObject().setGManager(matcher.group(1));
+
anyWrapper.getInnerObject().setgManager(matcher.group(1));
}
}
}
@@ -322,14 +322,14 @@ public class Management extends WizardStep implements
ICondition {
} else if (event.getPayload() instanceof final
AnySelectionDirectoryPanel.ItemSelection<?> itemSelection) {
AnyTO sel = itemSelection.getSelection();
if (sel == null) {
- wrapper.getInnerObject().setUManager(null);
- wrapper.getInnerObject().setGManager(null);
+ wrapper.getInnerObject().setuManager(null);
+ wrapper.getInnerObject().setgManager(null);
} else if (sel instanceof UserTO) {
- wrapper.getInnerObject().setUManager(sel.getKey());
- wrapper.getInnerObject().setGManager(null);
+ wrapper.getInnerObject().setuManager(sel.getKey());
+ wrapper.getInnerObject().setgManager(null);
} else if (sel instanceof GroupTO) {
- wrapper.getInnerObject().setUManager(null);
- wrapper.getInnerObject().setGManager(sel.getKey());
+ wrapper.getInnerObject().setuManager(null);
+ wrapper.getInnerObject().setgManager(sel.getKey());
}
itemSelection.getTarget().add(managerContainer);
} else {
diff --git
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
index 7b086202fb..d371d12ff8 100644
---
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
+++
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
@@ -123,29 +123,29 @@ public final class AnyOperations {
result.setRealm(replacePatchItem(updated.getRealm(),
original.getRealm(), new StringReplacePatchItem()));
// 2. manager
- if (updated.getUManager() != null || original.getUManager() != null) {
+ if (updated.getuManager() != null || original.getuManager() != null) {
StringReplacePatchItem uManager = new StringReplacePatchItem();
- if (updated.getUManager() == null) {
+ if (updated.getuManager() == null) {
if (!incremental) {
uManager.setOperation(PatchOperation.DELETE);
- result.setUManager(uManager);
+ result.setuManager(uManager);
}
- } else if (!updated.getUManager().equals(original.getUManager())) {
- uManager.setValue(updated.getUManager());
- result.setUManager(uManager);
+ } else if (!updated.getuManager().equals(original.getuManager())) {
+ uManager.setValue(updated.getuManager());
+ result.setuManager(uManager);
}
}
- if (updated.getGManager() != null || original.getGManager() != null) {
+ if (updated.getgManager() != null || original.getgManager() != null) {
StringReplacePatchItem gManager = new StringReplacePatchItem();
- if (updated.getGManager() == null) {
+ if (updated.getgManager() == null) {
if (!incremental) {
gManager.setOperation(PatchOperation.DELETE);
- result.setGManager(gManager);
+ result.setgManager(gManager);
}
- } else if (!updated.getGManager().equals(original.getGManager())) {
- gManager.setValue(updated.getGManager());
- result.setGManager(gManager);
+ } else if (!updated.getgManager().equals(original.getgManager())) {
+ gManager.setValue(updated.getgManager());
+ result.setgManager(gManager);
}
}
@@ -406,11 +406,11 @@ public final class AnyOperations {
}
// 1. manager
- if (req.getUManager() != null) {
- result.setUManager(req.getUManager().getValue());
+ if (req.getuManager() != null) {
+ result.setuManager(req.getuManager().getValue());
}
- if (req.getGManager() != null) {
- result.setGManager(req.getGManager().getValue());
+ if (req.getgManager() != null) {
+ result.setgManager(req.getgManager().getValue());
}
// 2. auxiliary classes
diff --git
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/EntityTOUtils.java
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/EntityTOUtils.java
index cb41968f09..b810721a2c 100644
---
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/EntityTOUtils.java
+++
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/EntityTOUtils.java
@@ -65,8 +65,8 @@ public final class EntityTOUtils {
public static <A extends AnyTO, C extends AnyCR> void toAnyCR(final A
anyTO, final C anyCR) {
anyCR.setRealm(anyTO.getRealm());
- anyCR.setUManager(anyTO.getUManager());
- anyCR.setGManager(anyTO.getGManager());
+ anyCR.setuManager(anyTO.getuManager());
+ anyCR.setgManager(anyTO.getgManager());
anyCR.getAuxClasses().addAll(anyTO.getAuxClasses());
anyCR.getPlainAttrs().addAll(anyTO.getPlainAttrs());
anyCR.getResources().addAll(anyTO.getResources());
@@ -91,8 +91,8 @@ public final class EntityTOUtils {
public static <C extends AnyCR, A extends AnyTO> void toAnyTO(final C
anyCR, final A anyTO) {
anyTO.setRealm(anyCR.getRealm());
- anyTO.setUManager(anyCR.getUManager());
- anyTO.setGManager(anyCR.getGManager());
+ anyTO.setuManager(anyCR.getuManager());
+ anyTO.setgManager(anyCR.getgManager());
anyTO.getAuxClasses().addAll(anyCR.getAuxClasses());
anyTO.getPlainAttrs().addAll(anyCR.getPlainAttrs());
anyTO.getResources().addAll(anyCR.getResources());
diff --git
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyCR.java
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyCR.java
index d7c0e77dee..a21bab0a96 100644
---
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyCR.java
+++
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyCR.java
@@ -63,13 +63,13 @@ public abstract class AnyCR implements BaseBean,
RealmMember, RelatableTO {
@SuppressWarnings("unchecked")
public B uManager(final String uManager) {
- getInstance().setUManager(uManager);
+ getInstance().setuManager(uManager);
return (B) this;
}
@SuppressWarnings("unchecked")
public B gManager(final String gManager) {
- getInstance().setGManager(gManager);
+ getInstance().setgManager(gManager);
return (B) this;
}
@@ -185,19 +185,19 @@ public abstract class AnyCR implements BaseBean,
RealmMember, RelatableTO {
this.realm = realm;
}
- public String getUManager() {
+ public String getuManager() {
return uManager;
}
- public void setUManager(final String uManager) {
+ public void setuManager(final String uManager) {
this.uManager = uManager;
}
- public String getGManager() {
+ public String getgManager() {
return gManager;
}
- public void setGManager(final String gManager) {
+ public void setgManager(final String gManager) {
this.gManager = gManager;
}
diff --git
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyUR.java
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyUR.java
index a3c18fb0fb..7b29a19578 100644
---
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyUR.java
+++
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyUR.java
@@ -64,13 +64,13 @@ public abstract class AnyUR implements BaseBean {
@SuppressWarnings("unchecked")
public B uManager(final StringReplacePatchItem uManager) {
- getInstance().setUManager(uManager);
+ getInstance().setuManager(uManager);
return (B) this;
}
@SuppressWarnings("unchecked")
public B gManager(final StringReplacePatchItem gManager) {
- getInstance().setGManager(gManager);
+ getInstance().setgManager(gManager);
return (B) this;
}
@@ -195,19 +195,19 @@ public abstract class AnyUR implements BaseBean {
this.realm = realm;
}
- public StringReplacePatchItem getUManager() {
+ public StringReplacePatchItem getuManager() {
return uManager;
}
- public void setUManager(final StringReplacePatchItem uManager) {
+ public void setuManager(final StringReplacePatchItem uManager) {
this.uManager = uManager;
}
- public StringReplacePatchItem getGManager() {
+ public StringReplacePatchItem getgManager() {
return gManager;
}
- public void setGManager(final StringReplacePatchItem gManager) {
+ public void setgManager(final StringReplacePatchItem gManager) {
this.gManager = gManager;
}
diff --git
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserCR.java
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserCR.java
index 0fe8dae439..fefca338a7 100644
---
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserCR.java
+++
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserCR.java
@@ -219,8 +219,8 @@ public class UserCR extends AnyCR implements
GroupableRelatableTO {
@JsonIgnore
public boolean requiresApproval() {
- return getUManager() != null
- || getGManager() != null
+ return getuManager() != null
+ || getgManager() != null
|| !getResources().isEmpty()
|| !getRelationships().isEmpty()
|| !memberships.isEmpty()
diff --git
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserUR.java
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserUR.java
index 7e33b9dad3..71bab24a8e 100644
---
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserUR.java
+++
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserUR.java
@@ -197,8 +197,8 @@ public class UserUR extends AnyUR {
@JsonIgnore
public boolean requiresApproval() {
- return getUManager() != null
- || getGManager() != null
+ return getuManager() != null
+ || getgManager() != null
|| !getResources().isEmpty()
|| !getRelationships().isEmpty()
|| !memberships.isEmpty()
diff --git
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java
index b92d5d522c..8d8853b3c5 100644
---
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java
+++
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java
@@ -183,19 +183,19 @@ public abstract class AnyTO implements EntityTO,
RealmMember, RelatableTO {
this.realm = realm;
}
- public String getUManager() {
+ public String getuManager() {
return uManager;
}
- public void setUManager(final String uManager) {
+ public void setuManager(final String uManager) {
this.uManager = uManager;
}
- public String getGManager() {
+ public String getgManager() {
return gManager;
}
- public void setGManager(final String gManager) {
+ public void setgManager(final String gManager) {
this.gManager = gManager;
}
diff --git
a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Any.java
b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Any.java
index 3e6e8c4150..a6e6fa828b 100644
---
a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Any.java
+++
b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Any.java
@@ -57,13 +57,13 @@ public interface Any extends Attributable, Entity {
void setRealm(Realm realm);
- User getUManager();
+ User getuManager();
- void setUManager(User manager);
+ void setuManager(User manager);
- Group getGManager();
+ Group getgManager();
- void setGManager(Group manager);
+ void setgManager(Group manager);
String getStatus();
diff --git
a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/Account.java
b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/Account.java
index dc34148856..f6b2fc93b3 100644
---
a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/Account.java
+++
b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/Account.java
@@ -37,7 +37,7 @@ public interface Account {
void setPassword(String password);
void setCipherAlgorithm(CipherAlgorithm cipherAlgorithm);
-
+
Boolean isSuspended();
void setSuspended(Boolean suspended);
diff --git
a/core/persistence-common/src/main/java/org/apache/syncope/core/persistence/common/validation/AnyValidator.java
b/core/persistence-common/src/main/java/org/apache/syncope/core/persistence/common/validation/AnyValidator.java
index 9471252245..98ef1d92f5 100644
---
a/core/persistence-common/src/main/java/org/apache/syncope/core/persistence/common/validation/AnyValidator.java
+++
b/core/persistence-common/src/main/java/org/apache/syncope/core/persistence/common/validation/AnyValidator.java
@@ -38,7 +38,7 @@ public class AnyValidator extends AbstractValidator<AnyCheck,
Any> {
public boolean isValid(final Any any, final ConstraintValidatorContext
context) {
context.disableDefaultConstraintViolation();
- if (any.getUManager() != null && any.getGManager() != null) {
+ if (any.getuManager() != null && any.getgManager() != null) {
context.buildConstraintViolationWithTemplate(
getTemplate(EntityViolationType.InvalidManager,
"Must either be managed by an user or by a group,
not both")).
diff --git
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractAny.java
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractAny.java
index 76eb8507fe..1659412a59 100644
---
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractAny.java
+++
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractAny.java
@@ -154,23 +154,23 @@ public abstract class AbstractAny extends
AbstractAttributable implements Any {
}
@Override
- public User getUManager() {
+ public User getuManager() {
return uManager;
}
@Override
- public void setUManager(final User manager) {
+ public void setuManager(final User manager) {
checkType(manager, JPAUser.class);
this.uManager = (JPAUser) manager;
}
@Override
- public Group getGManager() {
+ public Group getgManager() {
return gManager;
}
@Override
- public void setGManager(final Group manager) {
+ public void setgManager(final Group manager) {
checkType(manager, JPAGroup.class);
this.gManager = (JPAGroup) manager;
}
diff --git
a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
index f78b9dce06..6a5f487700 100644
---
a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
+++
b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
@@ -136,8 +136,8 @@ public class GroupTest extends AbstractTest {
Group group = entityFactory.newEntity(Group.class);
group.setRealm(realmDAO.getRoot());
group.setName("error");
- group.setUManager(user);
- group.setGManager(root);
+ group.setuManager(user);
+ group.setgManager(root);
groupDAO.save(group);
});
@@ -149,7 +149,7 @@ public class GroupTest extends AbstractTest {
User user =
userDAO.findById("823074dc-d280-436d-a7dd-07399fae48ec").orElseThrow();
- assertEquals(user, group.getUManager());
+ assertEquals(user, group.getuManager());
List<Group> managed = userDAO.findManagedGroups(user.getKey());
assertFalse(managed.isEmpty());
@@ -163,7 +163,7 @@ public class GroupTest extends AbstractTest {
Group group = entityFactory.newEntity(Group.class);
group.setRealm(realmDAO.getRoot());
group.setName("error");
- group.setGManager(root);
+ group.setgManager(root);
group = groupDAO.save(group);
entityManager.flush();
diff --git
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/AnyObjectRepoExtImpl.java
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/AnyObjectRepoExtImpl.java
index a9c76e6568..cd8b0f70f6 100644
---
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/AnyObjectRepoExtImpl.java
+++
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/AnyObjectRepoExtImpl.java
@@ -245,20 +245,20 @@ public class AnyObjectRepoExtImpl extends
AbstractAnyRepoExt<AnyObject, Neo4jAny
anyObject.getKey(),
auxClass.getKey(),
Neo4jAnyObject.ANY_OBJECT_AUX_CLASSES_REL));
- if (before.getUManager() != null && anyObject.getUManager() ==
null) {
+ if (before.getuManager() != null && anyObject.getuManager() ==
null) {
deleteRelationship(
Neo4jAnyObject.NODE,
Neo4jUser.NODE,
anyObject.getKey(),
- before.getUManager().getKey(),
+ before.getuManager().getKey(),
Neo4jGroup.USER_MANAGER_REL);
}
- if (before.getGManager() != null && anyObject.getGManager() ==
null) {
+ if (before.getgManager() != null && anyObject.getgManager() ==
null) {
deleteRelationship(
Neo4jAnyObject.NODE,
Neo4jGroup.NODE,
anyObject.getKey(),
- before.getGManager().getKey(),
+ before.getgManager().getKey(),
Neo4jGroup.GROUP_MANAGER_REL);
}
diff --git
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/GroupRepoExtImpl.java
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/GroupRepoExtImpl.java
index 1af911e9c2..f42f1573d0 100644
---
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/GroupRepoExtImpl.java
+++
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/GroupRepoExtImpl.java
@@ -274,20 +274,20 @@ public class GroupRepoExtImpl extends
AbstractAnyRepoExt<Group, Neo4jGroup> impl
group.getKey(),
auxClass.getKey(),
Neo4jGroup.GROUP_AUX_CLASSES_REL));
- if (before.getUManager() != null && group.getUManager() == null) {
+ if (before.getuManager() != null && group.getuManager() == null) {
deleteRelationship(
Neo4jGroup.NODE,
Neo4jUser.NODE,
group.getKey(),
- before.getUManager().getKey(),
+ before.getuManager().getKey(),
AbstractAny.USER_MANAGER_REL);
}
- if (before.getGManager() != null && group.getGManager() == null) {
+ if (before.getgManager() != null && group.getgManager() == null) {
deleteRelationship(
Neo4jGroup.NODE,
Neo4jGroup.NODE,
group.getKey(),
- before.getGManager().getKey(),
+ before.getgManager().getKey(),
AbstractAny.GROUP_MANAGER_REL);
}
diff --git
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/UserRepoExtImpl.java
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/UserRepoExtImpl.java
index 12874546eb..a2a1e41dd5 100644
---
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/UserRepoExtImpl.java
+++
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/UserRepoExtImpl.java
@@ -340,20 +340,20 @@ public class UserRepoExtImpl extends
AbstractAnyRepoExt<User, Neo4jUser> impleme
user.getKey(),
auxClass.getKey(),
Neo4jUser.USER_AUX_CLASSES_REL));
- if (before.getUManager() != null && user.getUManager() == null) {
+ if (before.getuManager() != null && user.getuManager() == null) {
deleteRelationship(
Neo4jUser.NODE,
Neo4jUser.NODE,
user.getKey(),
- before.getUManager().getKey(),
+ before.getuManager().getKey(),
AbstractAny.USER_MANAGER_REL);
}
- if (before.getGManager() != null && user.getGManager() == null) {
+ if (before.getgManager() != null && user.getgManager() == null) {
deleteRelationship(
Neo4jUser.NODE,
Neo4jGroup.NODE,
user.getKey(),
- before.getGManager().getKey(),
+ before.getgManager().getKey(),
AbstractAny.GROUP_MANAGER_REL);
}
if (before.getSecurityQuestion() != null &&
user.getSecurityQuestion() == null) {
diff --git
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/entity/AbstractAny.java
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/entity/AbstractAny.java
index 0e7060b356..9daeff6a8a 100644
---
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/entity/AbstractAny.java
+++
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/entity/AbstractAny.java
@@ -155,23 +155,23 @@ public abstract class AbstractAny extends
AbstractAttributable implements Any {
}
@Override
- public User getUManager() {
+ public User getuManager() {
return uManager;
}
@Override
- public void setUManager(final User uManager) {
+ public void setuManager(final User uManager) {
checkType(uManager, Neo4jUser.class);
this.uManager = (Neo4jUser) uManager;
}
@Override
- public Group getGManager() {
+ public Group getgManager() {
return gManager;
}
@Override
- public void setGManager(final Group gManager) {
+ public void setgManager(final Group gManager) {
checkType(gManager, Neo4jGroup.class);
this.gManager = (Neo4jGroup) gManager;
}
diff --git
a/core/persistence-neo4j/src/test/java/org/apache/syncope/core/persistence/neo4j/outer/GroupTest.java
b/core/persistence-neo4j/src/test/java/org/apache/syncope/core/persistence/neo4j/outer/GroupTest.java
index 553077cad3..7510fd30a9 100644
---
a/core/persistence-neo4j/src/test/java/org/apache/syncope/core/persistence/neo4j/outer/GroupTest.java
+++
b/core/persistence-neo4j/src/test/java/org/apache/syncope/core/persistence/neo4j/outer/GroupTest.java
@@ -134,8 +134,8 @@ public class GroupTest extends AbstractTest {
Group group = entityFactory.newEntity(Group.class);
group.setRealm(realmDAO.getRoot());
group.setName("error");
- group.setUManager(user);
- group.setGManager(root);
+ group.setuManager(user);
+ group.setgManager(root);
groupDAO.save(group);
});
@@ -147,7 +147,7 @@ public class GroupTest extends AbstractTest {
User user =
userDAO.findById("823074dc-d280-436d-a7dd-07399fae48ec").orElseThrow();
- assertEquals(user, group.getUManager());
+ assertEquals(user, group.getuManager());
List<Group> managed = userDAO.findManagedGroups(user.getKey());
assertFalse(managed.isEmpty());
@@ -161,7 +161,7 @@ public class GroupTest extends AbstractTest {
Group group = entityFactory.newEntity(Group.class);
group.setRealm(realmDAO.getRoot());
group.setName("error");
- group.setGManager(root);
+ group.setgManager(root);
group = groupDAO.save(group);
List<Group> managed = groupDAO.findManagedGroups(root.getKey());
diff --git
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/JexlFunctions.java
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/JexlFunctions.java
index 56fd253091..72d18e859c 100644
---
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/JexlFunctions.java
+++
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/JexlFunctions.java
@@ -18,6 +18,7 @@
*/
package org.apache.syncope.core.provisioning.api.jexl;
+@FunctionalInterface
public interface JexlFunctions {
String getNamespace();
diff --git
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/JexlTools.java
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/JexlTools.java
index e34df5b5ba..333e886240 100644
---
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/JexlTools.java
+++
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/JexlTools.java
@@ -25,6 +25,7 @@ import org.apache.commons.jexl3.JexlEngine;
import org.apache.commons.jexl3.JexlException;
import org.apache.commons.jexl3.JexlExpression;
import org.apache.commons.jexl3.JxltEngine;
+import org.apache.commons.jexl3.introspection.JexlPermissions;
import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.core.persistence.api.entity.Attributable;
import org.apache.syncope.core.provisioning.api.DerAttrHandler;
@@ -39,6 +40,41 @@ public class JexlTools {
protected static final Logger LOG =
LoggerFactory.getLogger(JexlTools.class);
+ public static final JexlPermissions DEFAULT_PERMISSIONS =
JexlPermissions.RESTRICTED.compose(
+ "java.time.*",
+ "org.apache.syncope.* ",
+ "org.apache.syncope.core.persistence.jpa.entity.user { -JPAUser { "
+ + "getCipherAlgorithm(); "
+ + "getPassword(); "
+ + "getPasswordHistory(); "
+ + "getSecurityAnswer(); "
+ + "getMfa(); "
+ + "getToken(); "
+ + "getTokenExpireTime(); "
+ + "} }",
+ "org.apache.syncope.core.persistence.jpa.entity.user {
-JPALinkedAccount { "
+ + "getPassword(); "
+ + "} }",
+ "org.apache.syncope.core.persistence.neo4j.entity.user {
-Neo4jUser { "
+ + "getCipherAlgorithm(); "
+ + "getPassword(); "
+ + "getPasswordHistory(); "
+ + "getSecurityAnswer(); "
+ + "getMfa(); "
+ + "getToken(); "
+ + "getTokenExpireTime(); "
+ + "} }",
+ "org.apache.syncope.core.persistence.neo4j.entity.user {
-Neo4jLinkedAccount { "
+ + "getPassword(); "
+ + "} }",
+ "org.apache.syncope.common.lib.to { -UserTO { "
+ + "getPassword(); "
+ + "} }",
+ "org.apache.syncope.common.lib.to { -LinkedAccountTO { "
+ + "getPassword(); "
+ + "} }"
+ );
+
protected final JexlEngine jexlEngine;
protected final JxltEngine jxltEngine;
@@ -48,11 +84,6 @@ public class JexlTools {
this.jxltEngine = jexlEngine.createJxltEngine(false);
}
- public JexlTools(final JexlEngine jexlEngine, final JxltEngine jxltEngine)
{
- this.jexlEngine = jexlEngine;
- this.jxltEngine = jxltEngine;
- }
-
public boolean isExpressionValid(final String expression) {
boolean result;
try {
diff --git
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/TemplateUtils.java
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/TemplateUtils.java
index 42d9dcdf89..a17f5a310f 100644
---
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/TemplateUtils.java
+++
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/TemplateUtils.java
@@ -161,22 +161,22 @@ public class TemplateUtils {
fill(realmMember, template, jexlContext);
-
Optional.ofNullable(template.getUManager()).flatMap(userDAO::findById).ifPresent(uManager
-> {
+
Optional.ofNullable(template.getuManager()).flatMap(userDAO::findById).ifPresent(uManager
-> {
switch (realmMember) {
case AnyTO arm ->
- arm.setUManager(uManager.getKey());
+ arm.setuManager(uManager.getKey());
case AnyCR arm ->
- arm.setGManager(uManager.getKey());
+ arm.setgManager(uManager.getKey());
default -> {
}
}
});
-
Optional.ofNullable(template.getGManager()).flatMap(groupDAO::findById).ifPresent(gManager
-> {
+
Optional.ofNullable(template.getgManager()).flatMap(groupDAO::findById).ifPresent(gManager
-> {
switch (realmMember) {
case AnyTO arm ->
- arm.setUManager(gManager.getKey());
+ arm.setuManager(gManager.getKey());
case AnyCR arm ->
- arm.setGManager(gManager.getKey());
+ arm.setgManager(gManager.getKey());
default -> {
}
}
diff --git
a/core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/AbstractTest.java
b/core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/AbstractTest.java
index f923b6d3f0..f246b7c583 100644
---
a/core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/AbstractTest.java
+++
b/core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/AbstractTest.java
@@ -21,7 +21,6 @@ package org.apache.syncope.core.provisioning.api;
import java.util.Map;
import org.apache.commons.jexl3.JexlBuilder;
import org.apache.commons.jexl3.JexlEngine;
-import org.apache.commons.jexl3.introspection.JexlPermissions;
import org.apache.syncope.core.provisioning.api.jexl.EmptyClassLoader;
import org.apache.syncope.core.provisioning.api.jexl.JexlTools;
import org.apache.syncope.core.provisioning.api.jexl.SyncopeJexlFunctions;
@@ -40,7 +39,7 @@ public class AbstractTest {
protected JexlTools jexlTools() {
JexlEngine jexlEngine = new JexlBuilder().
loader(new EmptyClassLoader()).
- permissions(JexlPermissions.RESTRICTED.compose("java.time.*",
"org.apache.syncope.*")).
+ permissions(JexlTools.DEFAULT_PERMISSIONS).
namespaces(Map.of("syncope", new SyncopeJexlFunctions())).
cache(512).
silent(false).
diff --git
a/core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/jexl/JexlUtilsTest.java
b/core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/jexl/JexlToolsTest.java
similarity index 99%
rename from
core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/jexl/JexlUtilsTest.java
rename to
core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/jexl/JexlToolsTest.java
index 39cae5985f..f4bcbed020 100644
---
a/core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/jexl/JexlUtilsTest.java
+++
b/core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/jexl/JexlToolsTest.java
@@ -49,7 +49,7 @@ import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.springframework.test.util.ReflectionTestUtils;
-public class JexlUtilsTest extends AbstractTest {
+class JexlToolsTest extends AbstractTest {
@Mock
private JexlContext context;
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultMappingManager.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultMappingManager.java
index 7986348794..103b660d75 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultMappingManager.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultMappingManager.java
@@ -760,11 +760,11 @@ public class DefaultMappingManager implements
MappingManager {
: null;
String managerValue = null;
- if (ref.getUManager() != null && uMappingTO != null) {
- managerValue = getManagerValue(resource,
provision, ref.getUManager());
+ if (ref.getuManager() != null && uMappingTO != null) {
+ managerValue = getManagerValue(resource,
provision, ref.getuManager());
}
- if (ref.getGManager() != null && gMappingTO != null) {
- managerValue = getManagerValue(resource,
provision, ref.getGManager());
+ if (ref.getgManager() != null && gMappingTO != null) {
+ managerValue = getManagerValue(resource,
provision, ref.getgManager());
}
if (StringUtils.isNotBlank(managerValue)) {
@@ -1090,11 +1090,11 @@ public class DefaultMappingManager implements
MappingManager {
}
case "uManager" -> {
- anyTO.setUManager(values.getFirst().toString());
+ anyTO.setuManager(values.getFirst().toString());
}
case "gManager" -> {
- anyTO.setGManager(values.getFirst().toString());
+ anyTO.setgManager(values.getFirst().toString());
}
default -> {
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ProvisioningContext.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ProvisioningContext.java
index 6f654dc635..71c4442684 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ProvisioningContext.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ProvisioningContext.java
@@ -24,7 +24,6 @@ import java.util.function.Function;
import java.util.stream.Collectors;
import org.apache.commons.jexl3.JexlBuilder;
import org.apache.commons.jexl3.JexlEngine;
-import org.apache.commons.jexl3.introspection.JexlPermissions;
import org.apache.syncope.common.keymaster.client.api.ConfParamOps;
import org.apache.syncope.core.persistence.api.DomainHolder;
import org.apache.syncope.core.persistence.api.EncryptorManager;
@@ -200,7 +199,7 @@ public class ProvisioningContext {
public JexlTools jexlTools(final List<JexlFunctions> jexlFunctions) {
JexlEngine jexlEngine = new JexlBuilder().
loader(new EmptyClassLoader()).
- permissions(JexlPermissions.RESTRICTED.compose("java.time.*",
"org.apache.syncope.*")).
+ permissions(JexlTools.DEFAULT_PERMISSIONS).
namespaces(jexlFunctions.stream().
collect(Collectors.toMap(JexlFunctions::getNamespace,
Function.identity()))).
cache(512).
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyDataBinder.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyDataBinder.java
index 75d2c9c8d3..52cebf434d 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyDataBinder.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyDataBinder.java
@@ -102,8 +102,8 @@ abstract class AnyDataBinder extends AttributableDataBinder
{
anyTO.setRealm(any.getRealm().getFullPath());
-
Optional.ofNullable(any.getUManager()).map(User::getKey).ifPresent(anyTO::setUManager);
-
Optional.ofNullable(any.getGManager()).map(Group::getKey).ifPresent(anyTO::setGManager);
+
Optional.ofNullable(any.getuManager()).map(User::getKey).ifPresent(anyTO::setuManager);
+
Optional.ofNullable(any.getgManager()).map(Group::getKey).ifPresent(anyTO::setgManager);
anyTO.getAuxClasses().addAll(any.getAuxClasses().stream().map(AnyTypeClass::getKey).toList());
@@ -420,38 +420,38 @@ abstract class AnyDataBinder extends
AttributableDataBinder {
// 0. manager
PropagationByResource<String> managerPropByRes = new
PropagationByResource<>();
- if (anyUR.getUManager() != null) {
- if (anyUR.getUManager().getValue() == null) {
- if (any.getUManager() != null) {
- any.setUManager(null);
+ if (anyUR.getuManager() != null) {
+ if (anyUR.getuManager().getValue() == null) {
+ if (any.getuManager() != null) {
+ any.setuManager(null);
managerPropByRes.addAll(ResourceOperation.UPDATE,
anyUtils.dao().findAllResourceKeys(any.getKey()));
}
} else {
- User manager =
userDAO.findById(anyUR.getUManager().getValue()).orElse(null);
+ User manager =
userDAO.findById(anyUR.getuManager().getValue()).orElse(null);
if (manager == null) {
LOG.debug("Unable to find user manager for {} {} by key
{}",
- any.getKey(), anyUtils.anyTypeKind(),
anyUR.getUManager().getValue());
- any.setUManager(null);
+ any.getKey(), anyUtils.anyTypeKind(),
anyUR.getuManager().getValue());
+ any.setuManager(null);
} else {
- any.setUManager(manager);
+ any.setuManager(manager);
managerPropByRes.addAll(ResourceOperation.UPDATE,
anyUtils.dao().findAllResourceKeys(any.getKey()));
}
}
}
- if (anyUR.getGManager() != null) {
- if (anyUR.getGManager().getValue() == null) {
- if (any.getGManager() != null) {
- any.setGManager(null);
+ if (anyUR.getgManager() != null) {
+ if (anyUR.getgManager().getValue() == null) {
+ if (any.getgManager() != null) {
+ any.setgManager(null);
managerPropByRes.addAll(ResourceOperation.UPDATE,
anyUtils.dao().findAllResourceKeys(any.getKey()));
}
} else {
- Group manager =
groupDAO.findById(anyUR.getGManager().getValue()).orElse(null);
+ Group manager =
groupDAO.findById(anyUR.getgManager().getValue()).orElse(null);
if (manager == null) {
LOG.debug("Unable to find group manager for {} {} by key
{}",
- any.getKey(), anyUtils.anyTypeKind(),
anyUR.getGManager().getValue());
- any.setGManager(null);
+ any.getKey(), anyUtils.anyTypeKind(),
anyUR.getgManager().getValue());
+ any.setgManager(null);
} else {
- any.setGManager(manager);
+ any.setgManager(manager);
managerPropByRes.addAll(ResourceOperation.UPDATE,
anyUtils.dao().findAllResourceKeys(any.getKey()));
}
}
@@ -643,15 +643,13 @@ abstract class AnyDataBinder extends
AttributableDataBinder {
// 0. manager
// owner
- if (anyCR.getUManager() != null) {
- userDAO.findById(anyCR.getUManager()).ifPresentOrElse(
- any::setUManager,
- () -> LOG.warn("Ignoring invalid user specified as
manager: {}", anyCR.getUManager()));
+ if (anyCR.getuManager() != null) {
+
userDAO.findById(anyCR.getuManager()).ifPresentOrElse(any::setuManager,
+ () -> LOG.warn("Ignoring invalid user specified as
manager: {}", anyCR.getuManager()));
}
- if (anyCR.getGManager() != null) {
- groupDAO.findById(anyCR.getGManager()).ifPresentOrElse(
- any::setGManager,
- () -> LOG.warn("Ignoring invalid group specified as
manager: {}", anyCR.getGManager()));
+ if (anyCR.getgManager() != null) {
+
groupDAO.findById(anyCR.getgManager()).ifPresentOrElse(any::setgManager,
+ () -> LOG.warn("Ignoring invalid group specified as
manager: {}", anyCR.getgManager()));
}
// 1. aux classes
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
index 47fb8d6fa3..4a3a088a66 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
@@ -236,10 +236,10 @@ public abstract class AbstractPullResultHandler
}
result.setName(getName(req));
- Optional<String> uManager = Optional.ofNullable(req.getUManager());
- req.setUManager(null);
- Optional<String> gManager = Optional.ofNullable(req.getGManager());
- req.setGManager(null);
+ Optional<String> uManager = Optional.ofNullable(req.getuManager());
+ req.setuManager(null);
+ Optional<String> gManager = Optional.ofNullable(req.getgManager());
+ req.setgManager(null);
AnyTO created = doCreate(req, delta);
output = created;
@@ -353,14 +353,14 @@ public abstract class AbstractPullResultHandler
action.beforeUpdate(profile, delta, before, req);
}
- Optional.ofNullable(req.getUManager()).ifPresent(patch ->
uManagers.put(
+ Optional.ofNullable(req.getuManager()).ifPresent(patch ->
uManagers.put(
before.getKey(),
Optional.ofNullable(patch.getValue())));
- req.setUManager(null);
- Optional.ofNullable(req.getGManager()).ifPresent(patch ->
gManagers.put(
+ req.setuManager(null);
+ Optional.ofNullable(req.getgManager()).ifPresent(patch ->
gManagers.put(
before.getKey(),
Optional.ofNullable(patch.getValue())));
- req.setGManager(null);
+ req.setgManager(null);
req = doUpdate(before, req, delta, result);
AnyTO updated = AnyOperations.patch(before, req);
@@ -1002,8 +1002,8 @@ public abstract class AbstractPullResultHandler
manager,
profile.getTask().getResource(),
profile.getConnector()).
- ifPresent(match -> any.setUManager((User)
match.getAny())),
- () -> any.setUManager(null));
+ ifPresent(match -> any.setuManager((User)
match.getAny())),
+ () -> any.setuManager(null));
anyUtils().dao().save(any);
});
@@ -1017,8 +1017,8 @@ public abstract class AbstractPullResultHandler
manager,
profile.getTask().getResource(),
profile.getConnector()).
- ifPresent(match -> any.setGManager((Group)
match.getAny())),
- () -> any.setGManager(null));
+ ifPresent(match -> any.setgManager((Group)
match.getAny())),
+ () -> any.setgManager(null));
anyUtils().dao().save(any);
});
diff --git
a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/JexlToolsTest.java
b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/JexlToolsTest.java
new file mode 100644
index 0000000000..63bc485498
--- /dev/null
+++
b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/JexlToolsTest.java
@@ -0,0 +1,96 @@
+/*
+ * 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.
+ */
+package org.apache.syncope.core.provisioning.java;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.Map;
+import org.apache.commons.jexl3.JexlContext;
+import org.apache.commons.jexl3.MapContext;
+import org.apache.syncope.common.lib.to.MembershipTO;
+import org.apache.syncope.common.lib.to.UserTO;
+import org.apache.syncope.core.persistence.api.entity.EntityFactory;
+import org.apache.syncope.core.persistence.api.entity.group.Group;
+import org.apache.syncope.core.persistence.api.entity.user.UMembership;
+import org.apache.syncope.core.persistence.api.entity.user.User;
+import org.apache.syncope.core.provisioning.api.jexl.JexlContextBuilder;
+import org.apache.syncope.core.provisioning.api.jexl.JexlTools;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+class JexlToolsTest extends AbstractTest {
+
+ @Autowired
+ private EntityFactory entityFactory;
+
+ @Autowired
+ private JexlTools jexlTools;
+
+ @Test
+ void permissionFields() {
+ UserTO userTO = new UserTO();
+ userTO.setUsername("username1");
+ userTO.setPassword("userPassword1");
+
+ JexlContext ctx = new JexlContextBuilder().fields(userTO).build();
+
+ assertEquals("username1/", jexlTools.evaluateExpression("username +
'/' + password", ctx));
+ }
+
+ @Test
+ void permissionTemplate() {
+ UserTO userTO = new UserTO();
+ userTO.setUsername("username1");
+ userTO.setPassword("userPassword1");
+ userTO.getMemberships().add(new
MembershipTO.Builder("groupKey").groupName("groupName").build());
+
+ assertEquals(
+ "I am username1, my password is ''; my group is groupName",
+ jexlTools.evaluateTemplate(
+ "I am ${user.username}, my password is
'${user.password}'; "
+ + "my group is ${user.memberships[0].groupName}",
+ new MapContext(Map.of("user", userTO))));
+
+ User user = entityFactory.newEntity(User.class);
+ user.setUsername("username1");
+ user.setPassword("password1");
+
+ Group group = entityFactory.newEntity(Group.class);
+ group.setName("groupName");
+ UMembership membership = entityFactory.newEntity(UMembership.class);
+ membership.setLeftEnd(user);
+ membership.setRightEnd(group);
+ user.add(membership);
+
+ User manager = entityFactory.newEntity(User.class);
+ manager.setUsername("usernameM1");
+ manager.setPassword("passwordM1");
+ user.setuManager(manager);
+
+ assertEquals(
+ "I am username1, my password is ''; "
+ + "my manager is usernameM1, their password is ''; "
+ + "my group is groupName",
+ jexlTools.evaluateTemplate(
+ "I am ${user.username}, my password is
'${user.password}'; "
+ + "my manager is ${user.uManager.username}, their
password is '${user.uManager.password}'; "
+ + "my group is ${user.memberships[0].rightEnd.name}",
+ new MapContext(Map.of("user", user))));
+ }
+}
diff --git
a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/notification/DefaultNotificationManagerTest.java
b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/notification/DefaultNotificationManagerTest.java
index 954650764d..3e456e6e7a 100644
---
a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/notification/DefaultNotificationManagerTest.java
+++
b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/notification/DefaultNotificationManagerTest.java
@@ -35,7 +35,6 @@ import java.util.Optional;
import org.apache.commons.jexl3.JexlBuilder;
import org.apache.commons.jexl3.JexlEngine;
import org.apache.commons.jexl3.MapContext;
-import org.apache.commons.jexl3.introspection.JexlPermissions;
import org.apache.syncope.common.keymaster.client.api.ConfParamOps;
import org.apache.syncope.common.lib.Attr;
import org.apache.syncope.common.lib.SyncopeConstants;
@@ -140,7 +139,7 @@ public class DefaultNotificationManagerTest {
void init() {
JexlEngine jexlEngine = new JexlBuilder().
loader(new EmptyClassLoader()).
- permissions(JexlPermissions.RESTRICTED.compose("java.time.*",
"org.apache.syncope.*")).
+ permissions(JexlTools.DEFAULT_PERMISSIONS).
namespaces(Map.of("syncope", new SyncopeJexlFunctions())).
cache(512).
silent(false).
diff --git
a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
index 6b59cc2bda..bd147b88ed 100644
---
a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
+++
b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
@@ -122,8 +122,8 @@ public class ElasticsearchUtils {
builder.put("lastChangeContext", any.getLastChangeContext());
builder.put("status", any.getStatus());
builder.put("auxClasses",
any.getAuxClasses().stream().map(AnyTypeClass::getKey).toList());
- Optional.ofNullable(any.getUManager()).ifPresent(um ->
builder.put("uManager", um.getKey()));
- Optional.ofNullable(any.getGManager()).ifPresent(gm ->
builder.put("gManager", gm.getKey()));
+ Optional.ofNullable(any.getuManager()).ifPresent(um ->
builder.put("uManager", um.getKey()));
+ Optional.ofNullable(any.getgManager()).ifPresent(gm ->
builder.put("gManager", gm.getKey()));
switch (any) {
case AnyObject anyObject -> {
diff --git
a/ext/opensearch/client-opensearch/src/main/java/org/apache/syncope/ext/opensearch/client/OpenSearchUtils.java
b/ext/opensearch/client-opensearch/src/main/java/org/apache/syncope/ext/opensearch/client/OpenSearchUtils.java
index b206a4e363..11b0dc28e5 100644
---
a/ext/opensearch/client-opensearch/src/main/java/org/apache/syncope/ext/opensearch/client/OpenSearchUtils.java
+++
b/ext/opensearch/client-opensearch/src/main/java/org/apache/syncope/ext/opensearch/client/OpenSearchUtils.java
@@ -122,8 +122,8 @@ public class OpenSearchUtils {
builder.put("lastChangeContext", any.getLastChangeContext());
builder.put("status", any.getStatus());
builder.put("auxClasses",
any.getAuxClasses().stream().map(AnyTypeClass::getKey).toList());
- Optional.ofNullable(any.getUManager()).ifPresent(um ->
builder.put("uManager", um.getKey()));
- Optional.ofNullable(any.getGManager()).ifPresent(gm ->
builder.put("gManager", gm.getKey()));
+ Optional.ofNullable(any.getuManager()).ifPresent(um ->
builder.put("uManager", um.getKey()));
+ Optional.ofNullable(any.getgManager()).ifPresent(gm ->
builder.put("gManager", gm.getKey()));
switch (any) {
case AnyObject anyObject -> {
diff --git
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java
index de03f3ed79..177dd7ecc2 100644
---
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java
+++
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java
@@ -114,7 +114,7 @@ public class GroupITCase extends AbstractITCase {
public void create() {
// create group managed by f779c0d4-633b-4be5-8f57-32eb478a3ca5
GroupCR groupCR = getSample("lastGroup");
- groupCR.setGManager("f779c0d4-633b-4be5-8f57-32eb478a3ca5");
+ groupCR.setgManager("f779c0d4-633b-4be5-8f57-32eb478a3ca5");
GroupTO groupTO = createGroup(groupCR).getEntity();
assertNotNull(groupTO);
@@ -133,9 +133,9 @@ public class GroupITCase extends AbstractITCase {
// remove group manager
GroupUR groupUR = new GroupUR();
groupUR.setKey(groupTO.getKey());
- groupUR.setGManager(new
StringReplacePatchItem.Builder().operation(PatchOperation.DELETE).build());
+ groupUR.setgManager(new
StringReplacePatchItem.Builder().operation(PatchOperation.DELETE).build());
- assertNull(updateGroup(groupUR).getEntity().getGManager());
+ assertNull(updateGroup(groupUR).getEntity().getgManager());
}
@Test
diff --git
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ManagerITCase.java
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ManagerITCase.java
index 498eced672..3c8779c5d9 100644
---
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ManagerITCase.java
+++
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ManagerITCase.java
@@ -134,10 +134,10 @@ public class ManagerITCase extends AbstractITCase {
assertNotNull(manager);
GroupCR groupCR = GroupITCase.getSample("uManagerTestGroup");
- groupCR.setUManager(manager.getKey());
+ groupCR.setuManager(manager.getKey());
GroupTO group = createGroup(groupCR).getEntity();
assertNotNull(group);
- assertEquals(manager.getKey(), group.getUManager());
+ assertEquals(manager.getKey(), group.getuManager());
UserCR managedCR =
UserITCase.getUniqueSample("[email protected]");
managedCR.getMemberships().add(new
MembershipTO.Builder(group.getKey()).build());
@@ -178,9 +178,9 @@ public class ManagerITCase extends AbstractITCase {
assertNotNull(manager);
UserCR managedCR =
UserITCase.getUniqueSample("[email protected]");
- managedCR.setGManager(group.getKey());
+ managedCR.setgManager(group.getKey());
UserTO managed = createUser(managedCR).getEntity();
- assertEquals(group.getKey(), managed.getGManager());
+ assertEquals(group.getKey(), managed.getgManager());
// check
check(
diff --git
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
index e93d93a76d..b4cdf44164 100644
---
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
+++
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
@@ -474,8 +474,8 @@ public class PullTaskITCase extends AbstractTaskITCase {
assertEquals("testLDAPGroup", groupTO.getName());
assertTrue(groupTO.getLastChangeContext().contains("Task " +
task.getKey()));
assertEquals("true",
groupTO.getPlainAttr("show").orElseThrow().getValues().getFirst());
- assertEquals(matchingUsers.getResult().getFirst().getKey(),
groupTO.getUManager());
- assertNull(groupTO.getGManager());
+ assertEquals(matchingUsers.getResult().getFirst().getKey(),
groupTO.getuManager());
+ assertNull(groupTO.getgManager());
// SYNCOPE-1343, set value title to null on LDAP
ConnObject userConnObject = RESOURCE_SERVICE.readConnObject(
RESOURCE_NAME_LDAP, AnyTypeKind.USER.name(),
matchingUsers.getResult().getFirst().getKey());
diff --git
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java
index d00db37e8b..227bd80520 100644
---
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java
+++
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java
@@ -1947,10 +1947,10 @@ public class UserIssuesITCase extends AbstractITCase {
UserCR userCR =
UserITCase.getUniqueSample("[email protected]");
userCR.getResources().add(RESOURCE_NAME_TESTDB);
userCR.setPassword("Password123!");
- userCR.setUManager(USER_SERVICE.read("puccini").getKey());
+ userCR.setuManager(USER_SERVICE.read("puccini").getKey());
ProvisioningResult<UserTO> pr = createUser(userCR);
assertEquals(ExecStatus.SUCCESS,
pr.getPropagationStatuses().getFirst().getStatus());
- assertNotNull(pr.getEntity().getUManager());
+ assertNotNull(pr.getEntity().getuManager());
// 2. pull from resource-testdb
PullTaskTO pullTaskTO = new PullTaskTO();
pullTaskTO.setPerformCreate(true);
@@ -1963,17 +1963,17 @@ public class UserIssuesITCase extends AbstractITCase {
.build(), pullTaskTO);
// user manager should be kept
UserTO updatedUser = USER_SERVICE.read(pr.getEntity().getKey());
- assertNotNull(updatedUser.getUManager());
- assertEquals(USER_SERVICE.read("puccini").getKey(),
updatedUser.getUManager());
+ assertNotNull(updatedUser.getuManager());
+ assertEquals(USER_SERVICE.read("puccini").getKey(),
updatedUser.getuManager());
// perform the same check on a group
GroupCR groupCR = GroupITCase.getSample("issue1965grp");
groupCR.getResources().add(RESOURCE_NAME_LDAP);
- groupCR.setGManager(GROUP_SERVICE.read("managingDirector").getKey());
+ groupCR.setgManager(GROUP_SERVICE.read("managingDirector").getKey());
ProvisioningResult<GroupTO> prGrp = createGroup(groupCR);
assertEquals(ExecStatus.SUCCESS,
prGrp.getPropagationStatuses().getFirst().getStatus());
- assertNotNull(prGrp.getEntity().getGManager());
- assertEquals(GROUP_SERVICE.read("managingDirector").getKey(),
prGrp.getEntity().getGManager());
+ assertNotNull(prGrp.getEntity().getgManager());
+ assertEquals(GROUP_SERVICE.read("managingDirector").getKey(),
prGrp.getEntity().getgManager());
// 2. pull from resource-ldap
pullTaskTO = new PullTaskTO();
@@ -1988,7 +1988,7 @@ public class UserIssuesITCase extends AbstractITCase {
.build(), pullTaskTO);
// group manager should be kept
GroupTO updatedGrp = GROUP_SERVICE.read(prGrp.getEntity().getKey());
- assertNotNull(updatedGrp.getGManager());
- assertEquals(GROUP_SERVICE.read("managingDirector").getKey(),
updatedGrp.getGManager());
+ assertNotNull(updatedGrp.getgManager());
+ assertEquals(GROUP_SERVICE.read("managingDirector").getKey(),
updatedGrp.getgManager());
}
}