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 <[email protected]>
---
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 <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches