Yair Zaslavsky has uploaded a new change for review. Change subject: aaa: Introducing format to id of User and Group API entities The following format will be used to represent the value of id in User and Group API entities: ......................................................................
aaa: Introducing format to id of User and Group API entities The following format will be used to represent the value of id in User and Group API entities: id = url_encode ("id=<internal_id>:provider_id=<provider_id>") idnternal_id= the primary key of the user or group as stored in db provider_id = <directory_name>:<id_of_entity_in_directory> directory_name = name of the directory entity_in_directory = id of principal or group Topic: AAA Change-Id: Iaecb5d43945769db82475edde1c7075c1a343c07 Signed-off-by: Yair Zaslavsky <yzasl...@redhat.com> --- M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DbGroup.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DbUser.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAssignedPermissionsResource.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendEntityAssignedPermissionsResourceTest.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupAssignedPermissionsResourceTest.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupResourceTest.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupsResourceTest.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendPermissionResourceTest.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUserAssignedPermissionsResourceTest.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUserResourceTest.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceTest.java M backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GroupMapper.java M backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermissionMapper.java M backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/UserMapper.java A backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/utils/DirectoryEntryIdUtils.java 15 files changed, 153 insertions(+), 29 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/91/26191/1 diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DbGroup.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DbGroup.java index b4cf5ba..b1e770f 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DbGroup.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DbGroup.java @@ -37,7 +37,7 @@ public DbGroup(DirectoryGroup directoryGroup) { externalId = directoryGroup.getId(); - setId(new Guid(directoryGroup.getId().getBytes(), true)); + id = Guid.newGuid(); domain = directoryGroup.getDirectoryName(); name = directoryGroup.getName(); } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DbUser.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DbUser.java index 88e2920..493a343 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DbUser.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DbUser.java @@ -94,7 +94,7 @@ groupNames = ldapUser.getGroup(); role = ""; note = ""; - id = new Guid(externalId.getBytes(), true); + id = Guid.newGuid(); } public DbUser(DirectoryUser directoryUser) { @@ -108,7 +108,7 @@ active = true; role = ""; note = ""; - id = new Guid(externalId.getBytes(), true); + id = Guid.newGuid(); StringBuilder namesBuffer = new StringBuilder(); boolean first = true; diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAssignedPermissionsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAssignedPermissionsResource.java index 2d67dd5..2487588 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAssignedPermissionsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAssignedPermissionsResource.java @@ -19,6 +19,7 @@ import org.ovirt.engine.api.resource.PermissionResource; import org.ovirt.engine.api.restapi.types.GroupMapper; import org.ovirt.engine.api.restapi.types.UserMapper; +import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.PermissionsOperationsParameters; import org.ovirt.engine.core.common.action.VdcActionType; @@ -172,10 +173,10 @@ if (entity.getad_element_id() != null) { if (isUser(user)) { template.setUser(new User()); - template.getUser().setId(entity.getad_element_id().toString()); + template.getUser().setId(DirectoryEntryIdUtils.generateId(entity.getad_element_id().toString(), " ", " ")); } else { template.setGroup(new Group()); - template.getGroup().setId(entity.getad_element_id().toString()); + template.getGroup().setId(DirectoryEntryIdUtils.generateId(entity.getad_element_id().toString(), " ", " ")); } } return map(entity, template); diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendEntityAssignedPermissionsResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendEntityAssignedPermissionsResourceTest.java index 4e743cc..ce34637 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendEntityAssignedPermissionsResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendEntityAssignedPermissionsResourceTest.java @@ -11,6 +11,7 @@ import org.ovirt.engine.api.model.Permission; import org.ovirt.engine.api.model.Role; import org.ovirt.engine.api.model.User; +import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils; import org.ovirt.engine.core.common.action.PermissionsOperationsParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.queries.GetPermissionsForObjectParameters; @@ -74,7 +75,8 @@ "Permission.ad_element_id", "Permission.ObjectId", "Permission.role_id" }, - new Object[] { GUIDS[1], GUIDS[1], targetId, GUIDS[3] }, + new Object[] { GUIDS[1], GUIDS[1], targetId, + GUIDS[3] }, true, true, GUIDS[0], @@ -87,7 +89,7 @@ model.setRole(new Role()); model.getRole().setId(GUIDS[3].toString()); model.setGroup(new Group()); - model.getGroup().setId(GUIDS[1].toString()); + model.getGroup().setId(DirectoryEntryIdUtils.generateId(GUIDS[1].toString(), " ", " ")); Response response = collection.add(model); assertEquals(201, response.getStatus()); assertTrue(response.getEntity() instanceof Permission); @@ -114,7 +116,7 @@ protected Permission getModel() { Permission model = new Permission(); model.setUser(new User()); - model.getUser().setId(GUIDS[1].toString()); + model.getUser().setId(DirectoryEntryIdUtils.generateId(GUIDS[1].toString(), " ", " ")); model.setRole(new Role()); model.getRole().setId(GUIDS[3].toString()); return model; @@ -125,10 +127,10 @@ super.verifyModel(model, index); if (index == 0) { assertTrue(model.isSetUser()); - assertEquals(GUIDS[1].toString(), model.getUser().getId()); + assertEquals(DirectoryEntryIdUtils.generateId(GUIDS[1].toString(), " ", " "), model.getUser().getId()); } else { assertTrue(model.isSetGroup()); - assertEquals(GUIDS[1].toString(), model.getGroup().getId()); + assertEquals(DirectoryEntryIdUtils.generateId(GUIDS[1].toString(), " ", " "), model.getGroup().getId()); } } } diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupAssignedPermissionsResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupAssignedPermissionsResourceTest.java index aeff6ca..c97d6d7 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupAssignedPermissionsResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupAssignedPermissionsResourceTest.java @@ -8,6 +8,7 @@ import org.ovirt.engine.api.model.Group; import org.ovirt.engine.api.model.Permission; import org.ovirt.engine.api.model.Role; +import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; @@ -28,7 +29,7 @@ public void testAddIncompletePermission() throws Exception { Permission model = new Permission(); model.setGroup(new Group()); - model.getGroup().setId(GUIDS[1].toString()); + model.getGroup().setId(DirectoryEntryIdUtils.generateId(GUIDS[1].toString(), " ", " ")); model.setRole(new Role()); model.getRole().setId(GUIDS[3].toString()); @@ -58,7 +59,7 @@ protected void verifyModel(Permission model, int index) { super.verifyModel(model, index); assertTrue(model.isSetGroup()); - assertEquals(GUIDS[1].toString(), model.getGroup().getId()); + assertEquals(DirectoryEntryIdUtils.generateId(GUIDS[1].toString(), " ", " "), model.getGroup().getId()); } @Override diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupResourceTest.java index 1876a87..5d5f492 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupResourceTest.java @@ -4,6 +4,7 @@ import org.junit.Test; import org.ovirt.engine.api.model.Group; +import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils; import org.ovirt.engine.core.common.businessentities.DbGroup; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; @@ -77,7 +78,7 @@ } protected void verifyModel(Group model, int index) { - assertEquals(GUIDS[index].toString(), model.getId()); + assertEquals(DirectoryEntryIdUtils.generateId(GUIDS[index].toString(), DOMAIN, EXTERNAL_IDS[index]), model.getId()); assertEquals(NAMES[index], model.getName()); assertNotNull(model.getDomain()); verifyLinks(model); diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupsResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupsResourceTest.java index 2580190..7551b05 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupsResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendGroupsResourceTest.java @@ -10,6 +10,7 @@ import org.ovirt.engine.api.model.Domain; import org.ovirt.engine.api.model.Fault; import org.ovirt.engine.api.model.Group; +import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils; import org.ovirt.engine.core.aaa.DirectoryGroup; import org.ovirt.engine.core.common.action.DirectoryIdParameters; import org.ovirt.engine.core.common.action.IdParameters; @@ -376,7 +377,7 @@ @Override protected void verifyModel(Group model, int index) { - assertEquals(GUIDS[index].toString(), model.getId()); + assertEquals(DirectoryEntryIdUtils.generateId(GUIDS[index].toString(), DOMAIN, EXTERNAL_IDS[index]), model.getId()); assertEquals(GROUP_NAMES[index], model.getName()); assertNotNull(model.getDomain()); assertEquals(new Guid(DOMAIN.getBytes(), true).toString(), model.getDomain().getId()); diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendPermissionResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendPermissionResourceTest.java index 9e7e021..56d7e06 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendPermissionResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendPermissionResourceTest.java @@ -9,6 +9,7 @@ import org.ovirt.engine.api.model.Cluster; import org.ovirt.engine.api.model.Permission; import org.ovirt.engine.api.model.User; +import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.businessentities.DbUser; import org.ovirt.engine.core.common.businessentities.Permissions; @@ -102,7 +103,7 @@ protected void verifyModel(Permission model, int index) { assertEquals(GUIDS[index].toString(), model.getId()); assertTrue(model.isSetUser()); - assertEquals(GUIDS[1].toString(), model.getUser().getId()); + assertEquals(DirectoryEntryIdUtils.generateId(GUIDS[1].toString(), " ", " "), model.getUser().getId()); assertTrue(model.isSetRole()); assertEquals(GUIDS[2].toString(), model.getRole().getId()); } diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUserAssignedPermissionsResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUserAssignedPermissionsResourceTest.java index f45f579..9589404 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUserAssignedPermissionsResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUserAssignedPermissionsResourceTest.java @@ -8,6 +8,7 @@ import org.ovirt.engine.api.model.Permission; import org.ovirt.engine.api.model.Role; import org.ovirt.engine.api.model.User; +import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; @@ -27,7 +28,7 @@ public void testAddIncompletePermission() throws Exception { Permission model = new Permission(); model.setUser(new User()); - model.getUser().setId(GUIDS[1].toString()); + model.getUser().setId(DirectoryEntryIdUtils.generateId(GUIDS[1].toString(), " ", " ")); model.setRole(new Role()); model.getRole().setId(GUIDS[3].toString()); @@ -87,10 +88,10 @@ super.verifyModel(model, index); if (index == 0) { assertTrue(model.isSetUser()); - assertEquals(GUIDS[1].toString(), model.getUser().getId()); + assertEquals(DirectoryEntryIdUtils.generateId(GUIDS[1].toString(), " ", " "), model.getUser().getId()); } else { assertTrue(model.isSetGroup()); - assertEquals(GUIDS[1].toString(), model.getGroup().getId()); + assertEquals(DirectoryEntryIdUtils.generateId(GUIDS[1].toString(), " ", " "), model.getGroup().getId()); } } } diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUserResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUserResourceTest.java index 684ffe3..3456c24 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUserResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUserResourceTest.java @@ -8,6 +8,7 @@ import org.junit.Test; import org.ovirt.engine.api.model.Group; import org.ovirt.engine.api.model.User; +import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils; import org.ovirt.engine.core.common.businessentities.DbUser; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.NameQueryParameters; @@ -93,7 +94,7 @@ } protected void verifyModel(User model, int index) { - assertEquals(GUIDS[index].toString(), model.getId()); + assertEquals(DirectoryEntryIdUtils.generateId(GUIDS[index].toString(), DOMAIN, EXTERNAL_IDS[index]), model.getId()); assertEquals(NAMES[index], model.getName()); assertNotNull(model.getDomain()); assertTrue(model.isSetGroups()); diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceTest.java index 4d5e181..9ea9824 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceTest.java @@ -12,6 +12,7 @@ import org.ovirt.engine.api.model.Fault; import org.ovirt.engine.api.model.Group; import org.ovirt.engine.api.model.User; +import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils; import org.ovirt.engine.core.aaa.DirectoryUser; import org.ovirt.engine.core.common.action.DirectoryIdParameters; import org.ovirt.engine.core.common.action.IdParameters; @@ -218,7 +219,7 @@ @Override protected void verifyModel(User model, int index) { - assertEquals(GUIDS[index].toString(), model.getId()); + assertEquals(DirectoryEntryIdUtils.generateId(GUIDS[index].toString(), DOMAIN, EXTERNAL_IDS[index]), model.getId()); assertEquals(NAMES[index] + "@" + DOMAIN, model.getUserName()); assertNotNull(model.getDomain()); assertEquals(new Guid(DOMAIN.getBytes(), true).toString(), model.getDomain().getId()); diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GroupMapper.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GroupMapper.java index c0cc1e5..c83c5fb 100644 --- a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GroupMapper.java +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GroupMapper.java @@ -3,6 +3,7 @@ import org.apache.commons.lang.StringUtils; import org.ovirt.engine.api.model.Domain; import org.ovirt.engine.api.model.Group; +import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils; import org.ovirt.engine.api.restapi.utils.GuidUtils; import org.ovirt.engine.api.restapi.utils.MalformedIdException; import org.ovirt.engine.core.aaa.DirectoryGroup; @@ -15,7 +16,7 @@ public static Group map(DbGroup entity, Group template) { Group model = template != null ? template : new Group(); model.setName(entity.getName()); - model.setId(entity.getId().toString()); + model.setId(DirectoryEntryIdUtils.generateId(entity.getId().toString(), entity.getDomain(), entity.getExternalId())); if (!StringUtils.isEmpty(entity.getDomain())) { Domain dom = new Domain(); dom.setId(new Guid(entity.getDomain().getBytes(), true).toString()); @@ -28,7 +29,7 @@ public static Group map(DirectoryGroup entity, Group template) { Group model = template != null ? template : new Group(); model.setName(entity.getName()); - model.setId(entity.getId()); + model.setId(DirectoryEntryIdUtils.generateId("", entity.getDirectoryName(), entity.getId())); if (!StringUtils.isEmpty(entity.getDirectoryName())) { Domain dom = new Domain(); dom.setId(new Guid(entity.getDirectoryName().getBytes(), true).toString()); @@ -46,8 +47,15 @@ if (model.isSetId()) { String id = model.getId(); try { - entity.setId(GuidUtils.asGuid(id)); - entity.setExternalId(entity.getId().toString()); + String internalId = DirectoryEntryIdUtils.getInternalId(id); + String providerId = DirectoryEntryIdUtils.getProviderId(id); + String externalId = DirectoryEntryIdUtils.getIdInDirectory(providerId); + if (internalId.isEmpty()) { + entity.setId(Guid.newGuid()); + } else { + entity.setId(GuidUtils.asGuid(internalId)); + } + entity.setExternalId(externalId); } catch (MalformedIdException exception) { // The identifier won't be a UUID if the group comes from /domains/{domain:id}/groups. diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermissionMapper.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermissionMapper.java index 6ed5373..4b8092b 100644 --- a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermissionMapper.java +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermissionMapper.java @@ -11,6 +11,7 @@ import org.ovirt.engine.api.model.User; import org.ovirt.engine.api.model.VM; import org.ovirt.engine.api.model.VmPool; +import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils; import org.ovirt.engine.api.restapi.utils.GuidUtils; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.businessentities.Permissions; @@ -50,7 +51,7 @@ } if (entity.getad_element_id() != null && (template == null || !template.isSetGroup())) { model.setUser(new User()); - model.getUser().setId(entity.getad_element_id().toString()); + model.getUser().setId(DirectoryEntryIdUtils.generateId(entity.getad_element_id().toString(), " ", " ")); } if (entity.getObjectId() != null) { setObjectId(model, entity); diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/UserMapper.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/UserMapper.java index df0b061..39e7a45 100644 --- a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/UserMapper.java +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/UserMapper.java @@ -5,6 +5,7 @@ import org.ovirt.engine.api.model.Group; import org.ovirt.engine.api.model.Groups; import org.ovirt.engine.api.model.User; +import org.ovirt.engine.api.restapi.utils.DirectoryEntryIdUtils; import org.ovirt.engine.api.restapi.utils.GuidUtils; import org.ovirt.engine.api.restapi.utils.MalformedIdException; import org.ovirt.engine.core.aaa.DirectoryGroup; @@ -19,7 +20,7 @@ User model = template != null ? template : new User(); model.setName(entity.getFirstName()); model.setUserName(entity.getLoginName() + "@" + entity.getDomain()); - model.setId(entity.getId().toString()); + model.setId(DirectoryEntryIdUtils.generateId(entity.getId().toString(), entity.getDomain(), entity.getExternalId())); model.setLastName(entity.getLastName()); model.setEmail(entity.getEmail()); model.setDepartment(entity.getDepartment()); @@ -44,7 +45,7 @@ User model = template != null ? template : new User(); model.setName(entity.getFirstName()); model.setUserName(entity.getName() + "@" + entity.getDirectoryName()); - model.setId(new Guid(entity.getId().getBytes(), true).toString()); + model.setId(DirectoryEntryIdUtils.generateId("", entity.getDirectoryName(), entity.getId())); model.setLastName(entity.getLastName()); model.setEmail(entity.getEmail()); model.setDepartment(entity.getDepartment()); @@ -73,8 +74,15 @@ if (model.isSetId()) { String id = model.getId(); try { - entity.setId(GuidUtils.asGuid(id)); - entity.setExternalId(entity.getId().toString()); + String internalId = DirectoryEntryIdUtils.getInternalId(id); + String providerId = DirectoryEntryIdUtils.getProviderId(id); + String externalId = DirectoryEntryIdUtils.getIdInDirectory(providerId); + if (internalId.isEmpty()) { + entity.setId(Guid.newGuid()); + } else { + entity.setId(GuidUtils.asGuid(internalId)); + } + entity.setExternalId(externalId); } catch (MalformedIdException exception) { // The identifier won't be a UUID if the user comes from /domains/{domain:id}/users. diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/utils/DirectoryEntryIdUtils.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/utils/DirectoryEntryIdUtils.java new file mode 100644 index 0000000..3f613c9 --- /dev/null +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/utils/DirectoryEntryIdUtils.java @@ -0,0 +1,97 @@ +package org.ovirt.engine.api.restapi.utils; + +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class DirectoryEntryIdUtils { + + // ID is in formato of "id=<UUID>:provider_name=<string>:provider_id=<string>" + private static final Pattern ID_PATTERN = + Pattern.compile("(id=)([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}):(provider_id=)(.+:.+)"); + + /** + * Gets the internal id part from the id string + * @param id the id string + * @return the internal id part + */ + public static String getInternalId(String id) { + + Matcher matcher = ID_PATTERN.matcher(decode(decode(id))); + if (matcher.matches() && matcher.groupCount() == 4) { + return matcher.group(2); + } + throw new RuntimeException("Error in getting internal id from ID string " + id); + } + + /** + * Gets the provider name part from the id string + * @param id the id string + * @return the provider name part + */ + public static String getProviderId(String id) { + Matcher matcher = ID_PATTERN.matcher(decode(id)); + if (matcher.matches() && matcher.groupCount() == 4) { + return matcher.group(4); + } + throw new RuntimeException("Error in getting provider id from ID string " + id); + } + + private static String decode(String id) { + try { + return URLDecoder.decode(id, "UTF-8"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } + + /** + * Composes an id string based on its components + * @param internalId internal id (UUID) + * @param providerId provider id + * @return id string represnting the provider id + */ + public static String generateId(String internalId, String providerId) { + try { + return URLEncoder.encode(String.format("id=%1$s:provider_id=%2$s", + internalId, + providerId), "UTF-8"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } + + /** + * Generates an id string based on the components + * + * @param internalId + * internal id (UUID) + * @param directory + * name of directory + * @param idInDirectory + * id of entity in directory + */ + public static String generateId(String internalId, String directory, String idInDirectory) { + return generateId(internalId, directory + ":" + idInDirectory); + } + + public static String getDirectory(String providerId) { + String[] parts = providerId.split(":"); + if (parts.length != 2) { + throw new RuntimeException("Format of provider id is <directory>:<id in directory>"); + } + return parts[0]; + } + + public static String getIdInDirectory(String providerId) { + String[] parts = providerId.split(":"); + if (parts.length != 2) { + throw new RuntimeException("Format of provider id is <directory>:<id in directory>"); + } + return parts[1]; + + } + +} -- To view, visit http://gerrit.ovirt.org/26191 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iaecb5d43945769db82475edde1c7075c1a343c07 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