diff src/main/java/de/mpiwg/gazetteer/servlet/GetRoleAssignments.java @ 12:c2e2d794847f

new: add config.properties file for gazetteer
author Zoe Hong <zhong@mpiwg-berlin.mpg.de>
date Wed, 30 Sep 2015 13:43:54 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/de/mpiwg/gazetteer/servlet/GetRoleAssignments.java	Wed Sep 30 13:43:54 2015 +0200
@@ -0,0 +1,170 @@
+package de.mpiwg.gazetteer.servlet;
+
+import static edu.harvard.iq.dataverse.util.JsfHelper.JH;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.ejb.EJB;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang.StringUtils;
+import org.primefaces.json.JSONArray;
+import org.primefaces.json.JSONException;
+import org.primefaces.json.JSONObject;
+
+import edu.harvard.iq.dataverse.DataFile;
+import edu.harvard.iq.dataverse.Dataverse;
+import edu.harvard.iq.dataverse.DataverseRoleServiceBean;
+import edu.harvard.iq.dataverse.DvObject;
+import edu.harvard.iq.dataverse.DvObjectServiceBean;
+import edu.harvard.iq.dataverse.RoleAssigneeServiceBean;
+import edu.harvard.iq.dataverse.RoleAssignment;
+import edu.harvard.iq.dataverse.ManagePermissionsPage.RoleAssignmentRow;
+import edu.harvard.iq.dataverse.authorization.AuthenticationRequest;
+import edu.harvard.iq.dataverse.authorization.CredentialsAuthenticationProvider;
+import edu.harvard.iq.dataverse.authorization.Permission;
+import edu.harvard.iq.dataverse.authorization.RoleAssignee;
+import edu.harvard.iq.dataverse.authorization.RoleAssigneeDisplayInfo;
+import edu.harvard.iq.dataverse.authorization.exceptions.AuthenticationFailedException;
+import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser;
+
+
+public class GetRoleAssignments extends AbstractMonographServlet{
+	
+
+	private static final Logger logger = Logger.getLogger(GetRoleAssignments.class.getName());
+    
+	@EJB
+    DvObjectServiceBean dvObjectService;
+	@EJB
+    DataverseRoleServiceBean roleService;
+	@EJB
+    RoleAssigneeServiceBean roleAssigneeService;
+	
+	public List<JSONObject> getRoleAssignments (String datasetId) {
+		
+		List<JSONObject> raList = new ArrayList<JSONObject>();
+				
+		DvObject dvObject = dvObjectService.findDvObject(Long.parseLong(datasetId));
+		
+	    if (dvObject != null && dvObject.getId() != null) {
+	        Set<RoleAssignment> ras = roleService.rolesAssignments(dvObject);
+	        
+	        for (RoleAssignment roleAssignment : ras) {
+	           
+	            RoleAssignee roleAssignee = roleAssigneeService.getRoleAssignee(roleAssignment.getAssigneeIdentifier());
+	            if (roleAssignee != null) {
+	                
+	            	try {
+	                	JSONObject aroleAssignment = new JSONObject();
+						aroleAssignment.put("roleAssignment", roleAssignment);
+						raList.add(aroleAssignment);
+						
+							
+					} catch (JSONException e) {
+						
+						e.printStackTrace();
+					}
+	       
+	            } else {
+	               logger.info("Could not find role assignee based on role assignment id " + roleAssignment.getId());
+	            }
+	           
+	        }
+	    }
+		
+	    return raList;
+	}
+
+	
+	
+	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+		// Set response content type
+		response.setContentType("application/json");
+		JSONObject jsonResponse = new JSONObject();	
+		
+		String user = request.getParameter("user");
+		String password = request.getParameter("password");
+		String datasetId = request.getParameter("datasetId");
+			
+		if(StringUtils.isNotEmpty(user) && StringUtils.isNotEmpty(password)){
+	
+			// authenticate checking. TODO use GetUser.java or something like that to do the authenticate checking.
+			AuthenticationRequest authReq = new AuthenticationRequest();
+	        authReq.putCredential("Username", user);
+	        authReq.putCredential("Password", password);
+	        try {
+		        String credentialsAuthProviderId = "builtin";
+		        this.authUser = authSvc.authenticate(credentialsAuthProviderId, authReq);
+		        System.out.println("User authenticated: " + authUser.getIdentifier()); 
+		    } catch (AuthenticationFailedException ex) {
+		       ex.printStackTrace();
+		       return;
+		    }
+	        if(authUser == null){
+				try {
+					jsonResponse.put("state", "error");
+					jsonResponse.put("error", "User " + user + " no found.");
+				} catch (JSONException e) {
+					
+					e.printStackTrace();
+				}
+			} else {
+		        // get roleAssignments
+				try {
+					jsonResponse.put("state", "ok");
+					
+					List<JSONObject> raJson = getRoleAssignments(datasetId);
+					// raJson contains all roleAssignments in the dataset
+					// find the roleAssignment for the user
+					JSONArray assignments = new JSONArray();
+					
+					
+					for (int i = 0; i < raJson.size(); i++) {
+					
+						RoleAssignment aUser = (RoleAssignment) raJson.get(i).get("roleAssignment");
+							
+						JSONObject assignment = new JSONObject();
+						assignment.put("identifier", aUser.getAssigneeIdentifier());
+						assignment.put("roleName", aUser.getRole().getName());
+						
+						assignments.put(assignment);
+						
+					}
+			
+					jsonResponse.put("roleAssignments", assignments);
+						
+				} catch (JSONException e) {
+			
+					e.printStackTrace();
+				}
+			}   
+			
+		} else {
+			try {
+				jsonResponse.put("state", "error");
+				jsonResponse.put("error", "Request error. Parameters 'user' and 'password' are mandatory");
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+		
+		// ======================
+    
+		
+		java.io.PrintWriter out = response.getWriter();
+		out.print(jsonResponse);
+		out.flush();
+		
+		
+		
+	}
+}