keycloak-aplcache
Changes
core/src/main/java/org/keycloak/representations/idm/UserFederationProviderFactoryRepresentation.java 46(+46 -0)
core/src/main/java/org/keycloak/representations/idm/UserFederationProviderRepresentation.java 9(+9 -0)
forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/users.js 76(+73 -3)
forms/common-themes/src/main/resources/theme/admin/base/resources/partials/federated-ldap.html 12(+12 -0)
forms/common-themes/src/main/resources/theme/admin/base/resources/partials/user-federation.html 2(+1 -1)
Details
diff --git a/core/src/main/java/org/keycloak/representations/idm/UserFederationProviderFactoryRepresentation.java b/core/src/main/java/org/keycloak/representations/idm/UserFederationProviderFactoryRepresentation.java
new file mode 100755
index 0000000..359c37c
--- /dev/null
+++ b/core/src/main/java/org/keycloak/representations/idm/UserFederationProviderFactoryRepresentation.java
@@ -0,0 +1,46 @@
+package org.keycloak.representations.idm;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author <a href="mailto:bburke@redhat.com">Bill Burke</a>
+ */
+public class UserFederationProviderFactoryRepresentation {
+
+ private String id;
+ private List<String> options;
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public List<String> getOptions() {
+ return options;
+ }
+
+ public void setOptions(List<String> options) {
+ this.options = options;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ UserFederationProviderFactoryRepresentation that = (UserFederationProviderFactoryRepresentation) o;
+
+ if (!id.equals(that.id)) return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ return id.hashCode();
+ }
+}
diff --git a/core/src/main/java/org/keycloak/representations/idm/UserFederationProviderRepresentation.java b/core/src/main/java/org/keycloak/representations/idm/UserFederationProviderRepresentation.java
index 76541f9..19f1d0c 100755
--- a/core/src/main/java/org/keycloak/representations/idm/UserFederationProviderRepresentation.java
+++ b/core/src/main/java/org/keycloak/representations/idm/UserFederationProviderRepresentation.java
@@ -8,6 +8,7 @@ import java.util.Map;
public class UserFederationProviderRepresentation {
private String id;
+ private String displayName;
private String providerName;
private Map<String, String> config;
private int priority;
@@ -20,6 +21,14 @@ public class UserFederationProviderRepresentation {
this.id = id;
}
+ public String getDisplayName() {
+ return displayName;
+ }
+
+ public void setDisplayName(String displayName) {
+ this.displayName = displayName;
+ }
+
public String getProviderName() {
return providerName;
}
diff --git a/forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/users.js b/forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/users.js
index 73b476f..034d52b 100755
--- a/forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/users.js
+++ b/forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/users.js
@@ -346,14 +346,82 @@ module.controller('UserFederationCtrl', function($scope, $location, realm, UserF
});
-module.controller('GenericUserFederationCtrl', function($scope, realm, provider, UserFederationProviders, UserFederationInstances, Notifications, Dialog) {
+module.controller('GenericUserFederationCtrl', function($scope, $location, Notifications, Dialog, realm, provider, providerFactory, UserFederationInstances) {
console.log('GenericUserFederationCtrl');
- console.log("provider: " + provider.providerName);
+ $scope.provider = angular.copy(provider);
+ $scope.create = !provider.providerName;
+
+ if ($scope.create) {
+ $scope.provider.providerName = providerFactory.id;
+ $scope.provider.config = {};
+ $scope.provider.priority = 0;
+ }
+
+ $scope.realm = realm;
+
+
+ $scope.changed = false;
+
+ $scope.$watch('provider', function() {
+ if (!angular.equals($scope.provider, provider)) {
+ $scope.changed = true;
+ }
+
+ }, true);
+
+ $scope.save = function() {
+ $scope.changed = false;
+ if ($scope.create) {
+ UserFederationInstances.save({realm: realm.realm}, $scope.provider, function () {
+ $scope.changed = false;
+ $location.url("/realms/" + realm.realm + "/user-federation");
+ Notifications.success("The provider has been created.");
+ });
+ } else {
+ UserFederationInstances.update({realm: realm.realm,
+ provider: provider.id
+ },
+ $scope.provider, function () {
+ $scope.changed = false;
+ $location.url("/realms/" + realm.realm + "/user-federation");
+ Notifications.success("The provider has been updated.");
+ });
+
+ }
+ };
+
+ $scope.reset = function() {
+ $scope.provider = angular.copy(provider);
+ if ($scope.create) {
+ $scope.provider.providerName = providerFactory.id;
+ $scope.provider.config = {};
+ $scope.provider.priority = 0;
+ }
+ $scope.changed = false;
+ };
+
+ $scope.cancel = function() {
+ $location.url("/realms/" + realm.realm + "/user-federation");
+ };
+
+ $scope.remove = function() {
+ Dialog.confirmDelete($scope.provider.id, 'provider', function() {
+ $scope.provider.$remove({
+ realm : realm.realm,
+ provider : $scope.provider.id
+ }, function() {
+ $location.url("/realms/" + realm.realm + "/user-federation");
+ Notifications.success("The provider has been deleted.");
+ });
+ });
+ };
+
});
+
module.controller('LDAPCtrl', function($scope, $location, Notifications, Dialog, realm, provider, UserFederationInstances, RealmLDAPConnectionTester) {
console.log('LDAPCtrl');
@@ -363,6 +431,7 @@ module.controller('LDAPCtrl', function($scope, $location, Notifications, Dialog,
if ($scope.create) {
$scope.provider.providerName = "ldap";
$scope.provider.config = {};
+ $scope.provider.priority = 0;
}
$scope.ldapVendors = [
@@ -382,7 +451,7 @@ module.controller('LDAPCtrl', function($scope, $location, Notifications, Dialog,
$scope.lastVendor = $scope.provider.config.vendor;
- $scope.$watch('realm', function() {
+ $scope.$watch('provider', function() {
if (!angular.equals($scope.provider, provider)) {
$scope.changed = true;
}
@@ -427,6 +496,7 @@ module.controller('LDAPCtrl', function($scope, $location, Notifications, Dialog,
if ($scope.create) {
$scope.provider.providerName = "ldap";
$scope.provider.config = {};
+ $scope.provider.priority = 0;
}
$scope.changed = false;
$scope.lastVendor = $scope.provider.config.vendor;
diff --git a/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/federated-ldap.html b/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/federated-ldap.html
index c4f1d7b..edcf141 100755
--- a/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/federated-ldap.html
+++ b/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/federated-ldap.html
@@ -16,6 +16,18 @@
<fieldset>
<legend><span class="text">Required Settings</span></legend>
<div class="form-group clearfix">
+ <label class="col-sm-2 control-label" for="consoleDisplayName">Console display name </label>
+ <div class="col-sm-4">
+ <input class="form-control" id="consoleDisplayName" type="text" ng-model="provider.displayName" placeholder="defaults to id">
+ </div>
+ </div>
+ <div class="form-group clearfix">
+ <label class="col-sm-2 control-label" for="priority">Priority </label>
+ <div class="col-sm-4">
+ <input class="form-control" id="priority" type="text" ng-model="provider.priority">
+ </div>
+ </div>
+ <div class="form-group clearfix">
<label class="col-sm-2 control-label" for="vendor">Vendor</label>
<div class="col-sm-4">
<div class="select-kc">
diff --git a/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/user-federation.html b/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/user-federation.html
index d56ec17..352f526 100755
--- a/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/user-federation.html
+++ b/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/user-federation.html
@@ -34,7 +34,7 @@
</thead>
<tbody>
<tr ng-repeat="instance in instances">
- <td><a href="#/realms/{{realm.realm}}/user-federation/providers/{{instance.providerName}}/{{instance.id}}">{{instance.id}}</a></td>
+ <td><a href="#/realms/{{realm.realm}}/user-federation/providers/{{instance.providerName}}/{{instance.id}}">{{instance.displayName}}</a></td>
<td>{{instance.providerName|capitalize}}</td>
<td>{{instance.priority}}</td>
</tr>
diff --git a/model/api/src/main/java/org/keycloak/models/entities/UserFederationProviderEntity.java b/model/api/src/main/java/org/keycloak/models/entities/UserFederationProviderEntity.java
index 5e39d9d..6d3916e 100755
--- a/model/api/src/main/java/org/keycloak/models/entities/UserFederationProviderEntity.java
+++ b/model/api/src/main/java/org/keycloak/models/entities/UserFederationProviderEntity.java
@@ -11,6 +11,7 @@ public class UserFederationProviderEntity {
protected String providerName;
protected Map<String, String> config;
protected int priority;
+ protected String displayName;
public String getId() {
@@ -44,4 +45,12 @@ public class UserFederationProviderEntity {
public void setPriority(int priority) {
this.priority = priority;
}
+
+ public String getDisplayName() {
+ return displayName;
+ }
+
+ public void setDisplayName(String displayName) {
+ this.displayName = displayName;
+ }
}
diff --git a/model/api/src/main/java/org/keycloak/models/RealmModel.java b/model/api/src/main/java/org/keycloak/models/RealmModel.java
index aee3119..36b14b7 100755
--- a/model/api/src/main/java/org/keycloak/models/RealmModel.java
+++ b/model/api/src/main/java/org/keycloak/models/RealmModel.java
@@ -167,7 +167,7 @@ public interface RealmModel extends RoleContainerModel {
List<UserFederationProviderModel> getUserFederationProviders();
- UserFederationProviderModel addUserFederationProvider(String providerName, Map<String, String> config, int priority);
+ UserFederationProviderModel addUserFederationProvider(String providerName, Map<String, String> config, int priority, String displayName);
void updateUserFederationProvider(UserFederationProviderModel provider);
void removeUserFederationProvider(UserFederationProviderModel provider);
void setUserFederationProviders(List<UserFederationProviderModel> providers);
diff --git a/model/api/src/main/java/org/keycloak/models/UserFederationProviderModel.java b/model/api/src/main/java/org/keycloak/models/UserFederationProviderModel.java
index a682c54..2542b90 100755
--- a/model/api/src/main/java/org/keycloak/models/UserFederationProviderModel.java
+++ b/model/api/src/main/java/org/keycloak/models/UserFederationProviderModel.java
@@ -13,15 +13,18 @@ public class UserFederationProviderModel {
private String providerName;
private Map<String, String> config = new HashMap<String, String>();
private int priority;
+ private String displayName;
public UserFederationProviderModel() {};
- public UserFederationProviderModel(String id, String providerName, Map<String, String> config, int priority) {
+ public UserFederationProviderModel(String id, String providerName, Map<String, String> config, int priority, String displayName) {
this.id = id;
this.providerName = providerName;
if (config != null) {
this.config.putAll(config);
}
+ this.priority = priority;
+ this.displayName = displayName;
}
public String getId() {
@@ -51,4 +54,12 @@ public class UserFederationProviderModel {
public void setPriority(int priority) {
this.priority = priority;
}
+
+ public String getDisplayName() {
+ return displayName;
+ }
+
+ public void setDisplayName(String displayName) {
+ this.displayName = displayName;
+ }
}
diff --git a/model/api/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java b/model/api/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java
index 714ee8d..21765a3 100755
--- a/model/api/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java
+++ b/model/api/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java
@@ -276,6 +276,7 @@ public class ModelToRepresentation {
rep.setConfig(model.getConfig());
rep.setProviderName(model.getProviderName());
rep.setPriority(model.getPriority());
+ rep.setDisplayName(model.getDisplayName());
return rep;
}
}
diff --git a/model/api/src/main/java/org/keycloak/models/utils/RepresentationToModel.java b/model/api/src/main/java/org/keycloak/models/utils/RepresentationToModel.java
index 06c6630..4df881c 100755
--- a/model/api/src/main/java/org/keycloak/models/utils/RepresentationToModel.java
+++ b/model/api/src/main/java/org/keycloak/models/utils/RepresentationToModel.java
@@ -320,7 +320,7 @@ public class RepresentationToModel {
for (UserFederationProviderRepresentation representation : providers) {
UserFederationProviderModel model = new UserFederationProviderModel(representation.getId(), representation.getProviderName(),
- representation.getConfig(), representation.getPriority());
+ representation.getConfig(), representation.getPriority(), representation.getDisplayName());
result.add(model);
}
return result;
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmAdapter.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmAdapter.java
index b0281dc..6639208 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmAdapter.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmAdapter.java
@@ -618,9 +618,9 @@ public class RealmAdapter implements RealmModel {
}
@Override
- public UserFederationProviderModel addUserFederationProvider(String providerName, Map<String, String> config, int priority) {
+ public UserFederationProviderModel addUserFederationProvider(String providerName, Map<String, String> config, int priority, String displayName) {
getDelegateForUpdate();
- return updated.addUserFederationProvider(providerName, config, priority);
+ return updated.addUserFederationProvider(providerName, config, priority, displayName);
}
@Override
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/UserFederationProviderEntity.java b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/UserFederationProviderEntity.java
index d4a40c2..42863bf 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/UserFederationProviderEntity.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/UserFederationProviderEntity.java
@@ -41,6 +41,9 @@ public class UserFederationProviderEntity {
@CollectionTable(name="USER_FEDERATION_CONFIG")
private Map<String, String> config;
+ @Column(name="DISPLAY_NAME")
+ private String displayName;
+
public String getId() {
return id;
}
@@ -81,5 +84,11 @@ public class UserFederationProviderEntity {
this.config = config;
}
+ public String getDisplayName() {
+ return displayName;
+ }
+ public void setDisplayName(String displayName) {
+ this.displayName = displayName;
+ }
}
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java b/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
index ee94cf1..bc57ef1 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
@@ -746,14 +746,14 @@ public class RealmAdapter implements RealmModel {
});
List<UserFederationProviderModel> result = new ArrayList<UserFederationProviderModel>();
for (UserFederationProviderEntity entity : copy) {
- result.add(new UserFederationProviderModel(entity.getId(), entity.getProviderName(), entity.getConfig(), entity.getPriority()));
+ result.add(new UserFederationProviderModel(entity.getId(), entity.getProviderName(), entity.getConfig(), entity.getPriority(), entity.getDisplayName()));
}
return result;
}
@Override
- public UserFederationProviderModel addUserFederationProvider(String providerName, Map<String, String> config, int priority) {
+ public UserFederationProviderModel addUserFederationProvider(String providerName, Map<String, String> config, int priority, String displayName) {
String id = KeycloakModelUtils.generateId();
UserFederationProviderEntity entity = new UserFederationProviderEntity();
entity.setId(id);
@@ -761,10 +761,14 @@ public class RealmAdapter implements RealmModel {
entity.setProviderName(providerName);
entity.setConfig(config);
entity.setPriority(priority);
+ if (displayName == null) {
+ displayName = id;
+ }
+ entity.setDisplayName(displayName);
em.persist(entity);
realm.getUserFederationProviders().add(entity);
em.flush();
- return new UserFederationProviderModel(entity.getId(), providerName, config, priority);
+ return new UserFederationProviderModel(entity.getId(), providerName, config, priority, displayName);
}
@Override
@@ -785,6 +789,10 @@ public class RealmAdapter implements RealmModel {
while (it.hasNext()) {
UserFederationProviderEntity entity = it.next();
if (entity.getId().equals(model.getId())) {
+ String displayName = model.getDisplayName();
+ if (displayName != null) {
+ entity.setDisplayName(model.getDisplayName());
+ }
entity.setConfig(model.getConfig());
entity.setPriority(model.getPriority());
entity.setProviderName(model.getProviderName());
@@ -807,6 +815,10 @@ public class RealmAdapter implements RealmModel {
entity.setPriority(model.getPriority());
entity.setProviderName(model.getProviderName());
entity.setPriority(model.getPriority());
+ String displayName = model.getDisplayName();
+ if (displayName != null) {
+ entity.setDisplayName(model.getDisplayName());
+ }
found = true;
break;
}
@@ -829,7 +841,7 @@ public class RealmAdapter implements RealmModel {
if (!found) add.add(model);
}
- for (UserFederationProviderModel model : providers) {
+ for (UserFederationProviderModel model : add) {
UserFederationProviderEntity entity = new UserFederationProviderEntity();
if (model.getId() != null) entity.setId(model.getId());
else entity.setId(KeycloakModelUtils.generateId());
@@ -837,6 +849,10 @@ public class RealmAdapter implements RealmModel {
entity.setPriority(model.getPriority());
entity.setProviderName(model.getProviderName());
entity.setPriority(model.getPriority());
+ String displayName = model.getDisplayName();
+ if (displayName == null) {
+ entity.setDisplayName(entity.getId());
+ }
em.persist(entity);
realm.getUserFederationProviders().add(entity);
diff --git a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RealmAdapter.java b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RealmAdapter.java
index 351ea6b..f42365e 100755
--- a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RealmAdapter.java
+++ b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RealmAdapter.java
@@ -795,16 +795,19 @@ public class RealmAdapter extends AbstractMongoAdapter<MongoRealmEntity> impleme
}
@Override
- public UserFederationProviderModel addUserFederationProvider(String providerName, Map<String, String> config, int priority) {
+ public UserFederationProviderModel addUserFederationProvider(String providerName, Map<String, String> config, int priority, String displayName) {
UserFederationProviderEntity entity = new UserFederationProviderEntity();
entity.setId(KeycloakModelUtils.generateId());
entity.setPriority(priority);
entity.setProviderName(providerName);
entity.setConfig(config);
+ if (displayName == null) {
+ displayName = entity.getId();
+ }
realm.getUserFederationProviders().add(entity);
updateRealm();
- return new UserFederationProviderModel(entity.getId(), providerName, config, priority);
+ return new UserFederationProviderModel(entity.getId(), providerName, config, priority, displayName);
}
@Override
@@ -828,6 +831,10 @@ public class RealmAdapter extends AbstractMongoAdapter<MongoRealmEntity> impleme
entity.setProviderName(model.getProviderName());
entity.setConfig(model.getConfig());
entity.setPriority(model.getPriority());
+ String displayName = model.getDisplayName();
+ if (displayName != null) {
+ entity.setDisplayName(model.getDisplayName());
+ }
}
}
updateRealm();
@@ -851,7 +858,7 @@ public class RealmAdapter extends AbstractMongoAdapter<MongoRealmEntity> impleme
});
List<UserFederationProviderModel> result = new LinkedList<UserFederationProviderModel>();
for (UserFederationProviderEntity entity : copy) {
- result.add(new UserFederationProviderModel(entity.getId(), entity.getProviderName(), entity.getConfig(), entity.getPriority()));
+ result.add(new UserFederationProviderModel(entity.getId(), entity.getProviderName(), entity.getConfig(), entity.getPriority(), entity.getDisplayName()));
}
return result;
@@ -867,6 +874,10 @@ public class RealmAdapter extends AbstractMongoAdapter<MongoRealmEntity> impleme
entity.setProviderName(model.getProviderName());
entity.setConfig(model.getConfig());
entity.setPriority(model.getPriority());
+ String displayName = model.getDisplayName();
+ if (displayName == null) {
+ entity.setDisplayName(entity.getId());
+ }
entities.add(entity);
}
diff --git a/services/src/main/java/org/keycloak/services/resources/admin/UserFederationResource.java b/services/src/main/java/org/keycloak/services/resources/admin/UserFederationResource.java
index 4ceef1c..7e7a0b2 100755
--- a/services/src/main/java/org/keycloak/services/resources/admin/UserFederationResource.java
+++ b/services/src/main/java/org/keycloak/services/resources/admin/UserFederationResource.java
@@ -121,7 +121,11 @@ public class UserFederationResource {
public Response createProvider(UserFederationProviderRepresentation rep) {
logger.info("createProvider");
auth.requireManage();
- UserFederationProviderModel model = realm.addUserFederationProvider(rep.getProviderName(), rep.getConfig(), rep.getPriority());
+ String displayName = rep.getDisplayName();
+ if (displayName != null && displayName.trim().equals("")) {
+ displayName = null;
+ }
+ UserFederationProviderModel model = realm.addUserFederationProvider(rep.getProviderName(), rep.getConfig(), rep.getPriority(), displayName);
return Response.created(uriInfo.getAbsolutePathBuilder().path(model.getId()).build()).build();
}
@@ -137,7 +141,11 @@ public class UserFederationResource {
public void updateProvider(@PathParam("id") String id, UserFederationProviderRepresentation rep) {
logger.info("updateProvider");
auth.requireManage();
- UserFederationProviderModel model = new UserFederationProviderModel(id, rep.getProviderName(), rep.getConfig(), rep.getPriority());
+ String displayName = rep.getDisplayName();
+ if (displayName != null && displayName.trim().equals("")) {
+ displayName = null;
+ }
+ UserFederationProviderModel model = new UserFederationProviderModel(id, rep.getProviderName(), rep.getConfig(), rep.getPriority(), displayName);
realm.updateUserFederationProvider(model);
}
@@ -170,7 +178,7 @@ public class UserFederationResource {
public void deleteProvider(@PathParam("id") String id) {
logger.info("deleteProvider");
auth.requireManage();
- UserFederationProviderModel model = new UserFederationProviderModel(id, null, null, -1);
+ UserFederationProviderModel model = new UserFederationProviderModel(id, null, null, -1, null);
realm.removeUserFederationProvider(model);
}
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/FederationProvidersIntegrationTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/FederationProvidersIntegrationTest.java
index ba16262..0dbb947 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/FederationProvidersIntegrationTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/FederationProvidersIntegrationTest.java
@@ -64,7 +64,7 @@ public class FederationProvidersIntegrationTest {
- appRealm.addUserFederationProvider(LDAPFederationProviderFactory.PROVIDER_NAME, ldapConfig, 0);
+ appRealm.addUserFederationProvider(LDAPFederationProviderFactory.PROVIDER_NAME, ldapConfig, 0, null);
// Configure LDAP
ldapRule.getEmbeddedServer().setupLdapInRealm(appRealm);