package org.ovirt.engine.core.bll.aaa; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Map; import javax.inject.Inject; import org.ovirt.engine.api.extensions.ExtMap; import org.ovirt.engine.api.extensions.aaa.Authz.PrincipalRecord; import org.ovirt.engine.core.aaa.DirectoryGroup; import org.ovirt.engine.core.aaa.SsoOAuthServiceUtils; import org.ovirt.engine.core.bll.QueriesCommandBase; import org.ovirt.engine.core.common.businessentities.aaa.DbUser; import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; public class GetDirectoryGroupsForUserQuery<P extends VdcQueryParametersBase> extends QueriesCommandBase<P> { @Inject private DirectoryUtils directoryUtils; public GetDirectoryGroupsForUserQuery(P parameters) { super(parameters); } @Override protected void executeQueryCommand() { getQueryReturnValue().setReturnValue( getDirectoryUser(getSessionDataContainer().getUser(getParameters().getSessionId(), false))); } private Collection<DirectoryGroup> getDirectoryUser(DbUser dbUser) { Collection<DirectoryGroup> groups = new ArrayList<>(); Map<String, Object> response = SsoOAuthServiceUtils.findPrincipalsByIds( getSessionDataContainer().getSsoAccessToken(getParameters().getSessionId()), dbUser.getDomain(), dbUser.getNamespace(), Arrays.asList(dbUser.getExternalId()), true, true); Collection<ExtMap> principalRecords = Collections.emptyList(); if (response.containsKey("result")) { principalRecords = (Collection<ExtMap>) response.get("result"); } if (!principalRecords.isEmpty()) { ExtMap principalRecord = principalRecords.iterator().next(); directoryUtils.flatGroups(principalRecord); for (ExtMap group : principalRecord.<Collection<ExtMap>>get(PrincipalRecord.GROUPS, Collections.<ExtMap> emptyList())) { groups.add(directoryUtils.mapGroupRecordToDirectoryGroup(dbUser.getDomain(), group)); } } return groups; } }