Yair Zaslavsky has uploaded a new change for review.

Change subject: aaa: Fix add users
......................................................................

aaa: Fix add users

Topic: AAA
Change-Id: Ie0384bab5abb6b8e1b1c9d1582bc630ea012cd4f
Signed-off-by: Yair Zaslavsky <yzasl...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/QueryData.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/GetDirectoryGroupByIdQuery.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/GetDirectoryUserByIdQuery.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/DirectoryIdQueryParameters.java
D 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/DirectorySearchParameters.java
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/ResourceConstants.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupsResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainUsersResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendUsersResource.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupResourceTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResourceTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/aaa/BackendUsersResourceTest.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/AdElementListModel.java
15 files changed, 134 insertions(+), 121 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/99/31499/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/QueryData.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/QueryData.java
index 9bebaeb..907c0d4 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/QueryData.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/QueryData.java
@@ -1,18 +1,24 @@
 package org.ovirt.engine.core.bll;
 
 public class QueryData {
-    public QueryData(String query, long date, String domain) {
+    public QueryData(String query, long date, String authz, String namespace) {
         this.query = query;
         this.date = date;
-        this.domain = domain;
+        this.authz = authz;
+        this.namespace = namespace;
     }
 
     private final String query;
     private final long date;
-    private final String domain;
+    private final String authz;
+    private final String namespace;
 
-    public String getDomain() {
-        return domain;
+    public String getAuthz() {
+        return authz;
+    }
+
+    public String getNamespace() {
+        return namespace;
     }
 
     public String getQuery() {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java
index 0266395..21d7932 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java
@@ -7,6 +7,7 @@
 import java.util.HashMap;
 import java.util.List;
 
+import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.core.aaa.AuthenticationProfileRepository;
 import org.ovirt.engine.core.aaa.DirectoryGroup;
 import org.ovirt.engine.core.aaa.DirectoryUser;
@@ -33,7 +34,6 @@
 import org.ovirt.engine.core.common.config.ConfigValues;
 import 
org.ovirt.engine.core.common.errors.SearchEngineIllegalCharacterException;
 import org.ovirt.engine.core.common.errors.SqlInjectionException;
-import org.ovirt.engine.core.common.queries.DirectorySearchParameters;
 import org.ovirt.engine.core.common.queries.SearchParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
@@ -180,24 +180,17 @@
         if (data == null) {
             return Collections.emptyList();
         }
-
-        ExtensionProxy authz = 
EngineExtensionsManager.getInstance().getExtensionByName(data.getDomain());
-        DirectorySearchParameters directorySearchParams = 
(DirectorySearchParameters) getParameters();
-        List<String> namespaces = 
Arrays.asList(directorySearchParams.getNamespace());
-        if (directorySearchParams.getNamespace() == null) {
-            HashMap<String, List<String>> namespacesMap =
-                    runInternalQuery(VdcQueryType.GetAvailableNamespaces, new 
VdcQueryParametersBase()).getReturnValue();
-            namespaces = namespacesMap.get(data.getDomain());
-        }
+        ExtensionProxy authz = 
EngineExtensionsManager.getInstance().getExtensionByName(data.getAuthz());
 
         List<DirectoryUser> results = new ArrayList<>();
-        for (String namespace : namespaces) {
+        for (String namespace : getNamespaces(data)) {
             results.addAll(DirectoryUtils.findDirectoryUsersByQuery(authz,
                     namespace,
                     data.getQuery()));
         }
         return results;
     }
+
 
     private List<DirectoryGroup> searchDirectoryGroups() {
         // Parse the query:
@@ -206,22 +199,27 @@
             return Collections.emptyList();
         }
 
-        ExtensionProxy authz = 
EngineExtensionsManager.getInstance().getExtensionByName(data.getDomain());
-        DirectorySearchParameters directorySearchParams = 
(DirectorySearchParameters) getParameters();
-        List<String> namespaces = 
Arrays.asList(directorySearchParams.getNamespace());
-        if (directorySearchParams.getNamespace() == null) {
-            HashMap<String, List<String>> namespacesMap =
-                    runInternalQuery(VdcQueryType.GetAvailableNamespaces, new 
VdcQueryParametersBase()).getReturnValue();
-            namespaces = namespacesMap.get(data.getDomain());
-        }
+        ExtensionProxy authz = 
EngineExtensionsManager.getInstance().getExtensionByName(data.getAuthz());
 
         List<DirectoryGroup> results = new ArrayList<>();
-        for (String namespace : namespaces) {
+        for (String namespace : getNamespaces(data)) {
             results.addAll(DirectoryUtils.findDirectoryGroupsByQuery(authz,
                     namespace,
                     data.getQuery()));
         }
         return results;
+    }
+
+    private List<String> getNamespaces(QueryData data) {
+        List<String> namespaces = null;
+        if (StringUtils.isNotEmpty(data.getNamespace())) {
+            namespaces = Arrays.asList(data.getNamespace());
+        } else {
+            HashMap<String, List<String>> namespacesMap =
+                    runInternalQuery(VdcQueryType.GetAvailableNamespaces, new 
VdcQueryParametersBase()).getReturnValue();
+            namespaces = namespacesMap.get(data.getAuthz());
+        }
+        return namespaces;
     }
 
     private List<DbUser> searchDbUsers() {
@@ -338,7 +336,8 @@
             // search text.
             if (!isExistsValue || IsFromYesterday) {
                 
log.debugFormat("ResourceManager::searchBusinessObjects(''{0}'') - entered", 
searchText);
-                String queryDomain = null;
+                String queryAuthz = null;
+                String queryNamespace = null;
                 ISyntaxChecker curSyntaxChecker;
                 String[] splitted = searchText.split("[:@ ]");
                 final String objectName = splitted[0].toUpperCase();
@@ -347,11 +346,13 @@
                         || (SearchObjects.AD_GROUP_OBJ_NAME.equals(objectName))
                         || 
(SearchObjects.AD_GROUP_PLU_OBJ_NAME.equals(objectName))) {
                     if (searchText.indexOf('@') > 0 && splitted.length > 1) {
-                        queryDomain = splitted[1];
+                        queryAuthz = splitted[1];
+                        queryNamespace = splitted[2];
                         searchText = searchText.substring(0, 
searchText.indexOf('@'))
-                                + 
searchText.substring(searchText.indexOf(':'));
+                                + searchText.substring(searchText.indexOf(':', 
searchText.indexOf(':') + 1));
                     } else {
-                        queryDomain = getDefaultDomain();
+                        queryAuthz = getDefaultAuthz();
+                        queryNamespace = null;
                     }
                     curSyntaxChecker = 
SyntaxCheckerFactory.createADSyntaxChecker(Config
                             
.<String>getValue(ConfigValues.AuthenticationMethod));
@@ -397,7 +398,7 @@
                 data =
                         new 
QueryData(curSyntaxChecker.generateQueryFromSyntaxContainer(searchObj, isSafe),
                                 DateTime.getNow().getTime(),
-                                queryDomain);
+                                queryAuthz, queryNamespace);
                 // when looking for tags , the query contains all parent 
children tag id's
                 // statically, therefore , in order to reflect changes in the 
parent tree
                 // we should not rely on the cached query in such case and 
have to build the
@@ -418,7 +419,7 @@
         return data;
     }
 
-    protected String getDefaultDomain() {
+    protected String getDefaultAuthz() {
         return 
AuthenticationProfileRepository.getInstance().getProfiles().get(0).getName();
     }
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/GetDirectoryGroupByIdQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/GetDirectoryGroupByIdQuery.java
index 1ed3854..8d84408 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/GetDirectoryGroupByIdQuery.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/GetDirectoryGroupByIdQuery.java
@@ -1,5 +1,6 @@
 package org.ovirt.engine.core.bll.aaa;
 
+import java.util.Arrays;
 import java.util.List;
 
 import org.ovirt.engine.api.extensions.aaa.Authz;
@@ -23,7 +24,7 @@
         if (authz == null) {
             getQueryReturnValue().setSucceeded(false);
         } else {
-            for (String namespace : authz.getContext().<List<String>> 
get(Authz.ContextKeys.AVAILABLE_NAMESPACES)) {
+            for (String namespace : getParameters().constainsNamespace() ? 
Arrays.asList(getParameters().getNamespace()) : 
authz.getContext().<List<String>> get(Authz.ContextKeys.AVAILABLE_NAMESPACES)) {
                 final DirectoryGroup group = 
DirectoryUtils.findDirectoryGroupById(authz, namespace, id, false, false);
                 if (group != null) {
                     getQueryReturnValue().setReturnValue(group);
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/GetDirectoryUserByIdQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/GetDirectoryUserByIdQuery.java
index 6c1a4a2..4c3fde2 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/GetDirectoryUserByIdQuery.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/GetDirectoryUserByIdQuery.java
@@ -1,5 +1,6 @@
 package org.ovirt.engine.core.bll.aaa;
 
+import java.util.Arrays;
 import java.util.List;
 
 import org.ovirt.engine.api.extensions.aaa.Authz;
@@ -23,7 +24,7 @@
         if (authz == null) {
             getQueryReturnValue().setSucceeded(false);
         } else {
-            for (String namespace : authz.getContext().<List<String>> 
get(Authz.ContextKeys.AVAILABLE_NAMESPACES)) {
+            for (String namespace : getParameters().constainsNamespace() ? 
Arrays.asList(getParameters().getNamespace()) : 
authz.getContext().<List<String>> get(Authz.ContextKeys.AVAILABLE_NAMESPACES)) {
                 DirectoryUser user = 
DirectoryUtils.findDirectoryUserById(authz, namespace, id, false, false);
                 if (user != null) {
                     getQueryReturnValue().setReturnValue(user);
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/DirectoryIdQueryParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/DirectoryIdQueryParameters.java
index 8fea853..47d0ecd 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/DirectoryIdQueryParameters.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/DirectoryIdQueryParameters.java
@@ -9,13 +9,19 @@
 
     private String domain;
     private String id;
+    private String namespace;
 
     public DirectoryIdQueryParameters() {
         // Nothing.
     }
 
     public DirectoryIdQueryParameters(String domain, String id) {
+        this(domain, "", id);
+    }
+
+    public DirectoryIdQueryParameters(String domain, String namespace, String 
id) {
         this.domain = domain;
+        this.namespace = namespace;
         this.id = id;
     }
 
@@ -27,11 +33,23 @@
         return domain;
     }
 
+    public void setNamespace(String namespace) {
+        this.namespace = namespace;
+    }
+
     public void setId(String id) {
         this.id = id;
     }
 
+    public String getNamespace() {
+        return namespace;
+    }
+
     public String getId() {
         return id;
     }
+
+    public boolean constainsNamespace() {
+        return namespace != null && !namespace.isEmpty();
+    }
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/DirectorySearchParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/DirectorySearchParameters.java
deleted file mode 100644
index f96e975..0000000
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/DirectorySearchParameters.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.ovirt.engine.core.common.queries;
-
-import org.ovirt.engine.core.common.interfaces.SearchType;
-
-public class DirectorySearchParameters extends SearchParameters {
-
-    /**
-     *
-     */
-    private static final long serialVersionUID = 1831775270159639568L;
-
-    private String namespace;
-
-    public DirectorySearchParameters() {
-        super();
-    }
-
-    public DirectorySearchParameters(String searchPattern, SearchType 
searchType, String namespace) {
-        super(searchPattern, searchType);
-        this.namespace = namespace;
-    }
-
-    public DirectorySearchParameters(String searchPattern, SearchType 
searchType) {
-        this(searchPattern, searchType, null);
-    }
-
-    public DirectorySearchParameters(String searchPattern,
-            SearchType searchType,
-            boolean caseSensitive,
-            String namespace) {
-        super(searchPattern, searchType, caseSensitive);
-        this.namespace = namespace;
-    }
-
-    public String getNamespace() {
-        return namespace;
-    }
-
-
-}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/ResourceConstants.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/ResourceConstants.java
new file mode 100644
index 0000000..9a3f1bf
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/ResourceConstants.java
@@ -0,0 +1,9 @@
+package org.ovirt.engine.api.restapi.resource;
+
+public class ResourceConstants {
+
+    public static final String AAA_GROUPS_SEARCH_TEMPLATE = "ADGROUP@{0}:: ";
+    public static final String AAA_PRINCIPALS_SEARCH_TEMPLATE = "ADUSER@{0}:: 
";
+
+
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupsResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupsResource.java
index 4a0e452..5172802 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupsResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupsResource.java
@@ -11,11 +11,10 @@
 import org.ovirt.engine.api.resource.aaa.DomainGroupResource;
 import org.ovirt.engine.api.resource.aaa.DomainGroupsResource;
 import org.ovirt.engine.api.restapi.resource.AbstractBackendSubResource;
+import org.ovirt.engine.api.restapi.resource.ResourceConstants;
 import org.ovirt.engine.api.restapi.resource.SingleEntityResource;
 import org.ovirt.engine.core.aaa.DirectoryGroup;
 import org.ovirt.engine.core.common.interfaces.SearchType;
-import org.ovirt.engine.core.common.queries.DirectorySearchParameters;
-import org.ovirt.engine.core.common.queries.SearchParameters;
 
 /**
  * This resource corresponds to the groups that exist in a directory 
accessible to the engine. Those groups may or may
@@ -25,7 +24,7 @@
 public class BackendDomainGroupsResource
         extends AbstractBackendSubResource<Group, DirectoryGroup>
         implements DomainGroupsResource {
-    private static final String SEARCH_TEMPLATE = "ADGROUP@{0}: ";
+    private static final String SEARCH_TEMPLATE = 
ResourceConstants.AAA_GROUPS_SEARCH_TEMPLATE;
 
     private BackendDomainResource parent;
 
@@ -40,11 +39,6 @@
 
     public BackendDomainResource getParent() {
         return parent;
-    }
-
-    @Override
-    protected SearchParameters createSearchParameters(SearchType searchType, 
String constraint) {
-        return new DirectorySearchParameters(constraint, searchType);
     }
 
     public Domain getDirectory() {
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainUsersResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainUsersResource.java
index a4b4652..e055594 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainUsersResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainUsersResource.java
@@ -11,11 +11,10 @@
 import org.ovirt.engine.api.resource.aaa.DomainUserResource;
 import org.ovirt.engine.api.resource.aaa.DomainUsersResource;
 import org.ovirt.engine.api.restapi.resource.AbstractBackendSubResource;
+import org.ovirt.engine.api.restapi.resource.ResourceConstants;
 import org.ovirt.engine.api.restapi.resource.SingleEntityResource;
 import org.ovirt.engine.core.aaa.DirectoryUser;
 import org.ovirt.engine.core.common.interfaces.SearchType;
-import org.ovirt.engine.core.common.queries.DirectorySearchParameters;
-import org.ovirt.engine.core.common.queries.SearchParameters;
 
 /**
  * This resource corresponds to the users that exist in a directory accessible
@@ -27,7 +26,7 @@
        extends AbstractBackendSubResource<User, DirectoryUser>
        implements DomainUsersResource {
 
-    private static final String SEARCH_TEMPLATE = "ADUSER@{0}: ";
+    private static final String SEARCH_TEMPLATE = 
ResourceConstants.AAA_PRINCIPALS_SEARCH_TEMPLATE;
 
     private BackendDomainResource parent;
 
@@ -46,11 +45,6 @@
 
     public Domain getDirectory() {
         return parent.getDirectory();
-    }
-
-    @Override
-    protected SearchParameters createSearchParameters(SearchType searchType, 
String constraint) {
-        return new DirectorySearchParameters(constraint, searchType);
     }
 
     @Override
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResource.java
index 6936fc0..75939bf 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResource.java
@@ -14,7 +14,9 @@
 import org.ovirt.engine.api.resource.aaa.GroupResource;
 import org.ovirt.engine.api.resource.aaa.GroupsResource;
 import org.ovirt.engine.api.restapi.resource.AbstractBackendCollectionResource;
+import org.ovirt.engine.api.restapi.resource.ResourceConstants;
 import org.ovirt.engine.api.restapi.resource.SingleEntityResource;
+import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils;
 import org.ovirt.engine.core.aaa.DirectoryGroup;
 import org.ovirt.engine.core.common.action.AddGroupParameters;
 import org.ovirt.engine.core.common.action.IdParameters;
@@ -45,8 +47,7 @@
      * This search pattern is used when searching for the directory group that 
will be added to the database when the
      * {@code add} operation is performed.
      */
-    private static final String DIRECTORY_GROUP_SEARCH_TEMPLATE = 
"ADGROUP@{0}: ";
-
+    private static final String DIRECTORY_GROUP_SEARCH_TEMPLATE = 
ResourceConstants.AAA_GROUPS_SEARCH_TEMPLATE;
     public BackendGroupsResource() {
         super(Group.class, DbGroup.class, SUB_COLLECTIONS);
     }
@@ -181,18 +182,15 @@
     private DirectoryGroup findDirectoryGroup(String directoryName, Group 
groupModel) {
         // Try to find a group that matches the identifier contained in the 
model:
         if (groupModel.isSetId()) {
-            String groupId = groupModel.getId();
+            String groupId = DirectoryEntryIdUtils.decode(groupModel.getId());
             return getEntity(
                 DirectoryGroup.class,
                 VdcQueryType.GetDirectoryGroupById,
-                new DirectoryIdQueryParameters(directoryName, groupId),
+                    new DirectoryIdQueryParameters(directoryName, 
groupModel.getNamespace(), groupId),
                 groupId,
                 true
             );
-        }
-
-        // Try to find a group that matches the name contained in the model:
-        if (groupModel.isSetName()) {
+        } else if (groupModel.isSetName()) {
             String groupName = groupModel.getName();
             if (groupName.startsWith(directoryName + "/")) {
                 int lastSlash = groupName.lastIndexOf("/");
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendUsersResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendUsersResource.java
index 422501c..e81476d 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendUsersResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendUsersResource.java
@@ -16,13 +16,16 @@
 import org.ovirt.engine.api.resource.aaa.UserResource;
 import org.ovirt.engine.api.resource.aaa.UsersResource;
 import org.ovirt.engine.api.restapi.resource.AbstractBackendCollectionResource;
+import org.ovirt.engine.api.restapi.resource.ResourceConstants;
 import org.ovirt.engine.api.restapi.resource.SingleEntityResource;
+import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils;
 import org.ovirt.engine.core.aaa.DirectoryUser;
 import org.ovirt.engine.core.common.action.AddUserParameters;
 import org.ovirt.engine.core.common.action.IdParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.businessentities.aaa.DbUser;
 import org.ovirt.engine.core.common.interfaces.SearchType;
+import org.ovirt.engine.core.common.queries.DirectoryIdQueryParameters;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
@@ -48,7 +51,7 @@
      * will be added to the database when the {@code add} operation is
      * performed.
      */
-    private static final String DIRECTORY_USER_SEARCH_TEMPLATE = "ADUSER@{0}: 
";
+    private static final String DIRECTORY_USER_SEARCH_TEMPLATE = 
ResourceConstants.AAA_PRINCIPALS_SEARCH_TEMPLATE;
 
     private BackendDomainResource parent;
 
@@ -111,7 +114,7 @@
      * @param domain the name of the directory where the search will be
      *     performed
      */
-    private String getDirectoryUserSearchPattern(String username, String 
domain) {
+    private String getDirectoryUserSearchPattern(String username, String 
namespace, String domain) {
         String constraint = QueryHelper.getConstraint(getUriInfo(), 
DbUser.class, false);
         final StringBuilder sb = new StringBuilder(128);
 
@@ -119,7 +122,8 @@
                   parent!=null?
                         parent.getDirectory().getName()
                         :
-                        domain));
+                        domain,
+                  namespace != null ? namespace : ""));
 
         sb.append(StringUtils.isEmpty(constraint) ?
                         "allnames=" + username
@@ -179,11 +183,7 @@
             validateParameters(user, "domain.id|name");
         }
         String domain = getDomain(user);
-        DirectoryUser directoryUser = getEntity(
-            DirectoryUser.class,
-            SearchType.DirectoryUser,
-            getDirectoryUserSearchPattern(user.getUserName(), domain)
-        );
+        DirectoryUser directoryUser = findDirectoryUser(domain, user);
         if (directoryUser == null) {
             return Response.status(Status.BAD_REQUEST)
                     .entity("No such user: " + user.getUserName() + " in 
domain " + domain)
@@ -197,4 +197,36 @@
     private boolean isNameContainsDomain(User user) {
         return ((user.getUserName().contains("@")) && 
(user.getUserName().indexOf('@') != user.getUserName().length() - 1));
     }
+
+    /**
+     * Find the directory user that corresponds to the given model.
+     *
+     * @param directoryName
+     *            the name of the directory where to perform the search
+     * @param groupModel
+     *            the group model
+     * @return the requested directory group or {@code null} if no such group 
exists
+     */
+    private DirectoryUser findDirectoryUser(String directoryName, User user) {
+        DirectoryUser result = null;
+        if (user.isSetId()) {
+            String userId = DirectoryEntryIdUtils.decode(user.getId());
+            result = getEntity(
+                    DirectoryUser.class,
+                    VdcQueryType.GetDirectoryUserById,
+                    new DirectoryIdQueryParameters(directoryName, 
user.getNamespace(), userId),
+                    userId,
+                    true);
+        } else {
+            if (user.isSetUserName()) {
+                result = getEntity(
+                        DirectoryUser.class,
+                        SearchType.DirectoryUser,
+                        getDirectoryUserSearchPattern(user.getUserName(), 
user.getNamespace(), directoryName));
+
+            }
+
+        }
+        return result;
+    }
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupResourceTest.java
index 18d3bf4..cb33f25 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupResourceTest.java
@@ -2,16 +2,14 @@
 
 import static org.easymock.EasyMock.expect;
 
-import java.nio.charset.Charset;
-
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.UriInfo;
-import javax.xml.bind.DatatypeConverter;
 
 import org.junit.Test;
 import org.ovirt.engine.api.model.Domain;
 import org.ovirt.engine.api.model.Group;
 import org.ovirt.engine.api.restapi.resource.AbstractBackendSubResourceTest;
+import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils;
 import org.ovirt.engine.core.aaa.DirectoryGroup;
 import org.ovirt.engine.core.common.queries.DirectoryIdQueryParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
@@ -70,8 +68,8 @@
         setUpGetEntityExpectations(
             VdcQueryType.GetDirectoryGroupById,
             DirectoryIdQueryParameters.class,
-            new String[] { "Domain", "Id" },
-                new Object[] { DOMAIN, new 
String(DatatypeConverter.parseHexBinary(EXTERNAL_IDS[index]), 
Charset.forName("UTF-8"))
+                new String[] { "Domain", "Namespace", "Id" },
+                new Object[] { DOMAIN, "", 
DirectoryEntryIdUtils.decode(EXTERNAL_IDS[index])
                          },
             notFound? null: getEntity(index)
         );
@@ -79,7 +77,7 @@
 
     @Override
     protected DirectoryGroup getEntity(int index) {
-        return new DirectoryGroup(DOMAIN, NAMESPACE, new 
String(DatatypeConverter.parseHexBinary(EXTERNAL_IDS[index]), 
Charset.forName("UTF-8")), NAMES[index]);
+        return new DirectoryGroup(DOMAIN, NAMESPACE, EXTERNAL_IDS[index], 
NAMES[index]);
     }
 }
 
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResourceTest.java
index e1ba5ea..de832c4 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResourceTest.java
@@ -11,6 +11,7 @@
 import org.ovirt.engine.api.model.Fault;
 import org.ovirt.engine.api.model.Group;
 import 
org.ovirt.engine.api.restapi.resource.AbstractBackendCollectionResourceTest;
+import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils;
 import org.ovirt.engine.core.aaa.DirectoryGroup;
 import org.ovirt.engine.core.common.action.AddGroupParameters;
 import org.ovirt.engine.core.common.action.IdParameters;
@@ -203,7 +204,7 @@
     public void testAddGroupWithExplicitDirectoryName() throws Exception {
         setUriInfo(setUpBasicUriExpectations());
         setUpGetEntityExpectations(
-            "ADGROUP@" + DOMAIN + ": allnames=" + NAMES[0],
+            "ADGROUP@" + DOMAIN + ":: allnames=" + NAMES[0],
             SearchType.DirectoryGroup,
             getDirectoryGroup(0)
         );
@@ -242,7 +243,7 @@
     public void testAddGroupWithImplicitDirectoryName() throws Exception {
         setUriInfo(setUpBasicUriExpectations());
         setUpGetEntityExpectations(
-            "ADGROUP@" + DOMAIN + ": allnames=" + NAMES[0],
+            "ADGROUP@" + DOMAIN + ":: allnames=" + NAMES[0],
             SearchType.DirectoryGroup,
             getDirectoryGroup(0)
         );
@@ -301,7 +302,7 @@
             VdcQueryType.GetDirectoryGroupById,
             DirectoryIdQueryParameters.class,
             new String[] { "Domain", "Id" },
-            new Object[] { DOMAIN, EXTERNAL_IDS[0] },
+            new Object[] { DOMAIN, 
DirectoryEntryIdUtils.decode(EXTERNAL_IDS[0]) },
             getDirectoryGroup(0)
         );
         setUpCreationExpectations(
@@ -340,7 +341,7 @@
             VdcQueryType.GetDirectoryGroupById,
             DirectoryIdQueryParameters.class,
             new String[] { "Domain", "Id" },
-            new Object[] { DOMAIN, NON_EXISTANT_EXTERNAL_ID },
+                new Object[] { DOMAIN, 
DirectoryEntryIdUtils.decode(NON_EXISTANT_EXTERNAL_ID) },
             null
         );
         control.replay();
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/aaa/BackendUsersResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/aaa/BackendUsersResourceTest.java
index 8051409..854827c 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/aaa/BackendUsersResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/aaa/BackendUsersResourceTest.java
@@ -128,7 +128,7 @@
 
     @Test
     public void testAddUser_2() throws Exception {
-        setUpAddUserExpectations("ADUSER@" + DOMAIN + ": allnames=" + 
NAMES[0]);
+        setUpAddUserExpectations("ADUSER@" + DOMAIN + ":: allnames=" + 
NAMES[0]);
         User model = new User();
         Domain domain = new Domain();
         domain.setName(DOMAIN);
@@ -140,7 +140,7 @@
 
     @Test
     public void testAddUser_3() throws Exception {
-        setUpAddUserExpectations("ADUSER@" + DOMAIN + ": allnames=" + 
NAMES[0]+"@"+ DOMAIN);
+        setUpAddUserExpectations("ADUSER@" + DOMAIN + ":: allnames=" + 
NAMES[0]+"@"+ DOMAIN);
         User model = new User();
         model.setUserName(NAMES[0]+"@"+DOMAIN);
 
@@ -155,7 +155,7 @@
                 new String[] { },
                 new Object[] { },
                 setUpDomains());
-        setUpAddUserExpectations("ADUSER@" + DOMAIN + ": allnames=" + 
NAMES[0]);
+        setUpAddUserExpectations("ADUSER@" + DOMAIN + ":: allnames=" + 
NAMES[0]);
         User model = new User();
         model.setUserName(NAMES[0]);
         Domain domain = new Domain();
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/AdElementListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/AdElementListModel.java
index af2a590..a280b28 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/AdElementListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/AdElementListModel.java
@@ -15,7 +15,7 @@
 import org.ovirt.engine.core.common.businessentities.Role;
 import org.ovirt.engine.core.common.businessentities.aaa.DbUser;
 import org.ovirt.engine.core.common.interfaces.SearchType;
-import org.ovirt.engine.core.common.queries.DirectorySearchParameters;
+import org.ovirt.engine.core.common.queries.SearchParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.core.compat.StringHelper;
@@ -379,13 +379,13 @@
     protected void findGroups(String searchString, AsyncQuery query) {
         Frontend.getInstance()
                 .runQuery(VdcQueryType.Search,
-                        new DirectorySearchParameters("ADGROUP@" + 
((ProfileEntry) getProfile().getSelectedItem()).getAuthz() + ": " + 
searchString, SearchType.DirectoryGroup, getNamespace().getSelectedItem()), 
query); //$NON-NLS-1$ //$NON-NLS-2$
+                        new SearchParameters("ADGROUP@" + ((ProfileEntry) 
getProfile().getSelectedItem()).getAuthz() + ":" + 
getNamespace().getSelectedItem() + ": " + searchString, 
SearchType.DirectoryGroup), query); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
     }
 
     protected void findUsers(String searchString, AsyncQuery query) {
         Frontend.getInstance()
                 .runQuery(VdcQueryType.Search,
-                        new DirectorySearchParameters("ADUSER@" + 
((ProfileEntry) getProfile().getSelectedItem()).getAuthz() + ": " + 
searchString, SearchType.DirectoryUser, getNamespace().getSelectedItem()), 
query); //$NON-NLS-1$ //$NON-NLS-2$
+                        new SearchParameters("ADUSER@" + ((ProfileEntry) 
getProfile().getSelectedItem()).getAuthz() + ":" + 
getNamespace().getSelectedItem() + ": " + searchString, 
SearchType.DirectoryUser), query); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
     }
 
     protected void onUserAndAdGroupsLoaded(AdElementListModel 
adElementListModel)


-- 
To view, visit http://gerrit.ovirt.org/31499
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie0384bab5abb6b8e1b1c9d1582bc630ea012cd4f
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Yair Zaslavsky <yzasl...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to