Commit 5032c231 authored by Dustin Jenkins's avatar Dustin Jenkins
Browse files

Story 1734: Added user list GET call.

parent c3711484
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -71,6 +71,7 @@ package ca.nrc.cadc.ac.server;
import java.security.AccessControlException;
import java.security.Principal;
import java.util.Collection;
import java.util.Map;

import ca.nrc.cadc.ac.User;
import ca.nrc.cadc.ac.UserAlreadyExistsException;
@@ -90,7 +91,7 @@ public interface UserPersistence<T extends Principal>
     * @throws TransientException If an temporary, unexpected problem occurred.
     * @throws AccessControlException If the operation is not permitted.
     */
    Collection<String> getUserNames()
    Map<String, String> getUsers()
            throws TransientException, AccessControlException;
    
    /**
+32 −25
Original line number Diff line number Diff line
@@ -418,49 +418,54 @@ public class LdapUserDAO<T extends Principal> extends LdapDAO
    }

    /**
     * Get all group names.
     * Get all users.  This will query the main tree only, and will return the
     * user name as the map's key, with the user's full name as the value.
     *
     * @return A collection of strings
     * @return A map of string keys to string values.
     * @throws TransientException If an temporary, unexpected problem occurred.
     */
    public Collection<String> getUserNames()
    public Map<String, String> getUsers()
            throws TransientException
    {
        final Map<String, String> users = new HashMap<String, String>();

        try
        {
            Filter filter = Filter.createPresenceFilter(LDAP_COMMON_NAME);
            String[] attributes = new String[]{LDAP_COMMON_NAME,
            final Filter filter = Filter.createPresenceFilter(LDAP_COMMON_NAME);
            final String[] attributes = new String[]{LDAP_COMMON_NAME,
                                                     LDAP_FIRST_NAME,
                                                     LDAP_LAST_NAME,
                                                     LDAP_NSACCOUNTLOCK};

            SearchRequest searchRequest =
                    new SearchRequest(config.getGroupsDN(),
            final SearchRequest searchRequest =
                    new SearchRequest(config.getUsersDN(),
                                      SearchScope.SUB, filter, attributes);

            SearchResult searchResult = null;
            try
            {
                searchResult = getConnection().search(searchRequest);
            }
            catch (LDAPSearchException e)
            {
                if (e.getResultCode() == ResultCode.NO_SUCH_OBJECT)
                {
                    logger.debug("Could not find groups root", e);
                    throw new IllegalStateException("Could not find groups root");
                }
            }
                final SearchResult searchResult =
                        getConnection().search(searchRequest);

                LdapDAO.checkLdapResult(searchResult.getResultCode());
            List<String> groupNames = new ArrayList<String>();
                for (SearchResultEntry next : searchResult.getSearchEntries())
                {
                    if (!next.hasAttribute(LDAP_NSACCOUNTLOCK))
                    {
                    groupNames.add(next.getAttributeValue(LDAP_COMMON_NAME));
                        users.put(next.getAttributeValue(LDAP_COMMON_NAME),
                                  next.getAttributeValue(LDAP_FIRST_NAME)
                                  + " "
                                  + next.getAttributeValue(LDAP_LAST_NAME));
                    }
                }
            }
            catch (LDAPSearchException e)
            {
                if (e.getResultCode() == ResultCode.NO_SUCH_OBJECT)
                {
                    final String message = "Could not find users root";
                    logger.debug(message, e);
                    throw new IllegalStateException(message);
                }
            }

            return groupNames;
        }
        catch (LDAPException e1)
        {
@@ -469,6 +474,8 @@ public class LdapUserDAO<T extends Principal> extends LdapDAO
            throw new IllegalStateException("Unexpected exception: " + e1
                    .getMatchedDN(), e1);
        }

        return users;
    }

    /**
+4 −4
Original line number Diff line number Diff line
@@ -73,12 +73,13 @@ import ca.nrc.cadc.ac.UserAlreadyExistsException;
import ca.nrc.cadc.ac.UserNotFoundException;
import ca.nrc.cadc.ac.UserRequest;
import ca.nrc.cadc.ac.server.UserPersistence;
import ca.nrc.cadc.auth.HttpPrincipal;
import ca.nrc.cadc.net.TransientException;
import com.unboundid.ldap.sdk.DN;
import java.security.AccessControlException;
import java.security.Principal;
import java.util.Collection;
import java.util.Map;

import org.apache.log4j.Logger;

public class LdapUserPersistence<T extends Principal>
@@ -99,15 +100,14 @@ public class LdapUserPersistence<T extends Principal>
        }
    }
    
    public Collection<String> getUserNames()
    public Map<String, String> getUsers()
        throws TransientException, AccessControlException
    {
        LdapUserDAO<T> userDAO = null;
        try
        {
            userDAO = new LdapUserDAO<T>(config);
            Collection<String> ret = userDAO.getUserNames();
            return ret;
            return userDAO.getUsers();
        }
        finally
        {
+1 −1
Original line number Diff line number Diff line
@@ -90,7 +90,7 @@ public class GetUsersAction extends UsersAction
    {
        final UserPersistence userPersistence = getUserPersistence();

        writeUsers(userPersistence.getUserNames());
        writeUsers(userPersistence.getUsers());
        return null;
    }
}
+4 −4
Original line number Diff line number Diff line
@@ -75,7 +75,7 @@ import java.security.AccessControlException;
import java.security.Principal;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
import java.util.Collection;
import java.util.Map;

import javax.security.auth.Subject;
import javax.servlet.http.HttpServletResponse;
@@ -274,11 +274,11 @@ public abstract class UsersAction
    }

    /**
     * Write out a list of users as this Action's specified content type.
     * Write out a Map of users as this Action's specified content type.
     *
     * @param users         The Collection of user entries.
     * @param users         The Map of user IDs to names.
     */
    protected final void writeUsers(final Collection<String> users)
    protected final void writeUsers(final Map<String, String> users)
            throws IOException
    {
        response.setContentType(acceptedContentType);
Loading