view 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 source

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();
		
		
		
	}
}