package org.ovirt.engine.core.utils.ipa;
import static org.ovirt.engine.core.utils.kerberos.InstallerConstants.ERROR_PREFIX;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import org.ovirt.engine.core.compat.Guid;
import org.springframework.ldap.core.ContextMapper;
import org.springframework.ldap.core.DirContextAdapter;
public class RHDSUserContextMapper implements ContextMapper {
public static String getGuidFromNsUniqueId(String nsUniqueId) {
// 12345678-12345678-12345678-12345678 -->
// 12345678-1234-5678-1234-567812345678
StringBuilder sb = new StringBuilder();
sb.append(nsUniqueId.substring(0, 13))
.append("-")
.append(nsUniqueId.substring(13, 22))
.append("-")
.append(nsUniqueId.substring(22, 26))
.append(nsUniqueId.substring(27, 35));
return sb.toString();
}
@Override
public Object mapFromContext(Object ctx) {
if (ctx == null) {
return null;
}
DirContextAdapter searchResult = (DirContextAdapter) ctx;
Attributes attributes = searchResult.getAttributes();
if (attributes == null) {
return null;
}
try {
String objectGuid = (String) attributes.get("nsUniqueId").get(0);
return Guid.createGuidFromString(getGuidFromNsUniqueId(objectGuid));
} catch (NamingException e) {
System.err.println(ERROR_PREFIX + "Failed getting user GUID");
return null;
}
}
}