Skip to content

Commit

Permalink
Beginning of user list api endpoint for #3614
Browse files Browse the repository at this point in the history
  • Loading branch information
raprasad committed May 31, 2017
1 parent d824580 commit f08788e
Show file tree
Hide file tree
Showing 2 changed files with 152 additions and 0 deletions.
110 changes: 110 additions & 0 deletions src/main/java/edu/harvard/iq/dataverse/UserServiceBean.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,20 @@
package edu.harvard.iq.dataverse;

import com.google.gson.Gson;
import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser;
import edu.harvard.iq.dataverse.search.IndexServiceBean;
import java.util.HashSet;
import java.util.List;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Named;
import javax.json.Json;
import javax.json.JsonArrayBuilder;
import javax.json.JsonObjectBuilder;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

@Stateless
@Named
Expand All @@ -34,5 +41,108 @@ public AuthenticatedUser save( AuthenticatedUser user ) {

return user;
}


/**
*
* @param searchKey
* @param sortKey
* @param resultLimit
* @return
*/
public JsonObjectBuilder getUserListAsJSON(String searchKey, String sortKey, Integer resultLimit) {
System.out.println("getUserListAsJSON 1");

List<Object[]> userResults = getUserList(searchKey, sortKey, resultLimit);

System.out.println("getUserListAsJSON 2");

if ((userResults==null)||(userResults.isEmpty())){
return null;
}

/*
u.id, u.useridentifier,";
qstr += " u.lastname, u.firstname, u.email,";
qstr += " u.affiliation, u.superuser,";
qstr += " u.position, u.modificationtime";
qstr += " FROM authenticateduser u";
*/
JsonArrayBuilder jsonArray = Json.createArrayBuilder();
for (Object[] result : userResults) {
JsonObjectBuilder jsonData = Json.createObjectBuilder();
jsonData.add("id", (int)result[0])
.add("userIdentifier", (String)result[1])
.add("lastName", (String)result[2])
.add("firstName", (String)result[3])
.add("email", (String)result[4]);
//jsonData.add("affiliation", (boolean)result[5]);
//jsonData.add("superuser", (boolean)result[6]);
jsonArray.add(jsonData);
}

JsonObjectBuilder jsonUserData = Json.createObjectBuilder();
jsonUserData.add("userCount", userResults.size())
.add("users", jsonArray);


System.out.println("getUserListAsJSON 3: " + userResults.size());


return jsonUserData;


}


/**
*
* @param searchKey
* @param sortKey
* @param resultLimit
* @return
*/
public List<Object[]> getUserList(String searchKey, String sortKey, Integer resultLimit) {

if ((sortKey == null) || (sortKey.isEmpty())){
sortKey = "u.username";
}else{
sortKey = "u." + sortKey;
}

if ((resultLimit == null)||(resultLimit < 25)){
resultLimit = 25;
}

if ((searchKey==null)||(searchKey.isEmpty())){
searchKey = "";
}


String qstr = "SELECT u.id, u.useridentifier,";
qstr += " u.lastname, u.firstname, u.email,";
qstr += " u.affiliation, u.superuser,";
qstr += " u.position, u.modificationtime";
qstr += " FROM authenticateduser u";
/*qstr += " WHERE u.useridentifier ILIKE ':searchKey%'";
qstr += " OR u.firstname ILIKE ':searchKey%'";
qstr += " OR u.lastname ILIKE ':searchKey%'";*/
qstr += " ORDER BY u.useridentifier";
qstr += " LIMIT " + resultLimit;

System.out.println("--------------\n\n" + qstr);

Query nativeQuery = em.createNativeQuery(qstr);
//nativeQuery.setParameter("searchKey", searchKey);
//nativeQuery.setParameter(2, searchKey);
//nativeQuery.setParameter(3, searchKey);
//nativeQuery.setParameter(4, sortKey);

System.out.println("--------------\n\n" + nativeQuery.toString());


return nativeQuery.getResultList();

}

}
42 changes: 42 additions & 0 deletions src/main/java/edu/harvard/iq/dataverse/api/Admin.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@
import edu.harvard.iq.dataverse.DataFile;
import edu.harvard.iq.dataverse.Dataset;
import edu.harvard.iq.dataverse.Dataverse;
import edu.harvard.iq.dataverse.DataverseSession;
import edu.harvard.iq.dataverse.DvObject;
import edu.harvard.iq.dataverse.EMailValidator;
import edu.harvard.iq.dataverse.UserServiceBean;
import edu.harvard.iq.dataverse.actionlogging.ActionLogRecord;
import edu.harvard.iq.dataverse.api.dto.RoleDTO;
import edu.harvard.iq.dataverse.authorization.AuthenticatedUserDisplayInfo;
Expand Down Expand Up @@ -57,6 +59,7 @@
import edu.harvard.iq.dataverse.authorization.users.User;
import edu.harvard.iq.dataverse.dataset.DatasetThumbnail;
import edu.harvard.iq.dataverse.dataset.DatasetUtil;
import javax.inject.Inject;
import javax.ws.rs.QueryParam;
/**
* Where the secure, setup API calls live.
Expand All @@ -74,6 +77,13 @@ public class Admin extends AbstractApiBean {
ShibServiceBean shibService;
@EJB
AuthTestDataServiceBean authTestDataService;
@EJB
UserServiceBean userService;

// Make the session available
@Inject
DataverseSession session;


@Path("settings")
@GET
Expand Down Expand Up @@ -291,7 +301,39 @@ public Response listAuthenticatedUsers() {
return ok(userArray);
}


@GET
@Path("list-users")
@Produces({"application/json"})
public Response filterAuthenticatedUsers(@QueryParam("searchTerm") String userIdentifier) {
System.out.println("_YE_OLDE_QUERY_COUNTER_");

boolean DEBUG_MODE = true;


AuthenticatedUser authUser = null;

if (DEBUG_MODE==true){ // DEBUG: use userIdentifier

//return ok("hello! (debug)");

} else if ((session.getUser() != null)&&(session.getUser().isAuthenticated()) && (session.getUser().isSuperuser())){

authUser = (AuthenticatedUser)session.getUser();

}else{
return error(Response.Status.FORBIDDEN, "forbidden, please leave");

}

JsonObjectBuilder userList = userService.getUserListAsJSON(null, null, 25);
if (userList == null){
return ok("no users found!");
}
return ok(userList);
}


/**
* @todo Make this support creation of BuiltInUsers.
*
Expand Down

0 comments on commit f08788e

Please sign in to comment.