You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ve...@apache.org on 2016/06/17 04:12:02 UTC

[1/3] incubator-ranger git commit: RANGER-1028 : Audit log not created for change of Tag based service name

Repository: incubator-ranger
Updated Branches:
  refs/heads/master 8f77aec59 -> 9fd001cae


RANGER-1028 : Audit log not created for change of Tag based service name

Signed-off-by: Velmurugan Periasamy <ve...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/7e5e9704
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/7e5e9704
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/7e5e9704

Branch: refs/heads/master
Commit: 7e5e9704cb54b4a137de7886acd1324fa5f37910
Parents: 8f77aec
Author: Mehul Parikh <me...@freestoneinfotech.com>
Authored: Mon Jun 13 14:14:55 2016 +0530
Committer: Velmurugan Periasamy <ve...@apache.org>
Committed: Fri Jun 17 00:10:18 2016 -0400

----------------------------------------------------------------------
 .../java/org/apache/ranger/biz/XUserMgr.java    |  5 ++-
 .../RangerAuthFailureHandler.java               |  3 ++
 .../ranger/service/RangerPolicyService.java     | 35 +++++++++++++++++++-
 .../conf.dist/security-applicationContext.xml   |  2 +-
 .../views/reports/OperationDiffDetail.js        | 10 ++++++
 .../scripts/views/users/UserTableLayout.js      | 20 +++++++++--
 .../webapp/templates/common/ErrorView_tmpl.html |  2 +-
 7 files changed, 71 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/7e5e9704/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java b/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
index e897178..ca27580 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
@@ -1053,8 +1053,11 @@ public class XUserMgr extends XUserMgrBase {
 		UserSessionBase session = ContextUtil.getCurrentUserSession();
 		if (session != null) {
 			if (!session.isUserAdmin()) {
-				throw restErrorUtil.create403RESTException("Operation" + " denied. LoggedInUser=" + (session != null ? session.getXXPortalUser().getId() : "Not Logged In")
+				VXResponse vXResponse = new VXResponse();
+				vXResponse.setStatusCode(HttpServletResponse.SC_UNAUTHORIZED);
+				vXResponse.setMsgDesc("Operation" + " denied. LoggedInUser=" + (session != null ? session.getXXPortalUser().getId() : "Not Logged In")
 						+ " ,isn't permitted to perform the action.");
+				throw restErrorUtil.generateRESTException(vXResponse);
 			}
 		} else {
 			VXResponse vXResponse = new VXResponse();

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/7e5e9704/security-admin/src/main/java/org/apache/ranger/security/web/authentication/RangerAuthFailureHandler.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/security/web/authentication/RangerAuthFailureHandler.java b/security-admin/src/main/java/org/apache/ranger/security/web/authentication/RangerAuthFailureHandler.java
index cb4c16a..1859ebc 100644
--- a/security-admin/src/main/java/org/apache/ranger/security/web/authentication/RangerAuthFailureHandler.java
+++ b/security-admin/src/main/java/org/apache/ranger/security/web/authentication/RangerAuthFailureHandler.java
@@ -91,6 +91,9 @@ ExceptionMappingAuthenticationFailureHandler {
 				}else if(msg.contains("Communications link failure")){
 					vXResponse.setStatusCode(HttpServletResponse.SC_UNAUTHORIZED);
 					vXResponse.setMsgDesc("Unable to connect to DB..");
+				}else if(msg.equalsIgnoreCase("User is disabled")){
+					vXResponse.setStatusCode(HttpServletResponse.SC_UNAUTHORIZED);
+					vXResponse.setMsgDesc("The username or password you entered is disable..");
 				}
 			}
 			jsonResp = jsonUtil.writeObjectAsString(vXResponse);

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/7e5e9704/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
index 042c239..4b792de 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
@@ -62,6 +62,8 @@ public class RangerPolicyService extends RangerPolicyServiceBase<XXPolicy, Range
 	public static final String DENY_EXCEPTIONS_CLASS_FIELD_NAME="denyExceptions";
 	public static final String DATAMASK_POLICY_ITEM_CLASS_FIELD_NAME="dataMaskPolicyItems";
 	public static final String ROWFILTER_POLICY_ITEM_CLASS_FIELD_NAME="rowFilterPolicyItems";
+	public static final String IS_ENABLED_CLASS_FIELD_NAME="isEnabled";
+	public static final String IS_AUDIT_ENABLED_CLASS_FIELD_NAME="isAuditEnabled";
 
 	static HashMap<String, VTrxLogAttr> trxLogAttrs = new HashMap<String, VTrxLogAttr>();
 	String actionCreate;
@@ -79,6 +81,7 @@ public class RangerPolicyService extends RangerPolicyServiceBase<XXPolicy, Range
 		trxLogAttrs.put("denyExceptions", new VTrxLogAttr("denyExceptions", "Deny Exceptions", false));
 		trxLogAttrs.put("dataMaskPolicyItems", new VTrxLogAttr("dataMaskPolicyItems", "Masked Policy Items", false));
 		trxLogAttrs.put("rowFilterPolicyItems", new VTrxLogAttr("rowFilterPolicyItems", "Row level filter Policy Items", false));
+		trxLogAttrs.put("isAuditEnabled", new VTrxLogAttr("isAuditEnabled", "Audit Status", false));
 	}
 	
 	public RangerPolicyService() {
@@ -203,7 +206,10 @@ public class RangerPolicyService extends RangerPolicyServiceBase<XXPolicy, Range
 				value = processDataMaskPolicyItemsForTrxLog(field.get(vObj));
 			} else if (fieldName.equalsIgnoreCase(ROWFILTER_POLICY_ITEM_CLASS_FIELD_NAME)){
 				value = processRowFilterPolicyItemForTrxLog(field.get(vObj));
-			} 
+			} else if (fieldName.equalsIgnoreCase(IS_ENABLED_CLASS_FIELD_NAME)){
+				value = String.valueOf(processIsEnabledClassFieldNameForTrxLog(field.get(vObj)));
+			
+			}
 			else {
 				value = "" + field.get(vObj);
 			}
@@ -270,6 +276,10 @@ public class RangerPolicyService extends RangerPolicyServiceBase<XXPolicy, Range
 					if (oldPolicy != null) {
 						oldValue = processRowFilterPolicyItemForTrxLog(oldPolicy.getRowFilterPolicyItems());
 					}
+				}else if (fieldName.equalsIgnoreCase(IS_ENABLED_CLASS_FIELD_NAME)) {
+					if (oldPolicy != null) {
+						oldValue = String.valueOf(processIsEnabledClassFieldNameForTrxLog(oldPolicy.getIsEnabled()));
+					}
 				}
 				if (oldValue == null || value.equalsIgnoreCase(oldValue)) {
 					return null;
@@ -318,7 +328,24 @@ public class RangerPolicyService extends RangerPolicyServiceBase<XXPolicy, Range
 					if(compareTwoRowFilterPolicyItemList(value, oldValue)) {
 						return null;
 					}
+				} else if (fieldName.equalsIgnoreCase(IS_ENABLED_CLASS_FIELD_NAME)) {
+					if (oldPolicy != null) {
+					    oldValue=processPolicyNameForTrxLog(String.valueOf(oldPolicy.getIsEnabled()));
+					}
+				} else if (fieldName.equalsIgnoreCase(IS_AUDIT_ENABLED_CLASS_FIELD_NAME)) {
+					if (oldPolicy != null) {
+					    oldValue=processPolicyNameForTrxLog(String.valueOf(oldPolicy.getIsAuditEnabled()));
+					}
+				} else if (fieldName.equalsIgnoreCase(IS_ENABLED_CLASS_FIELD_NAME)) {
+					if(compareTwoPolicyName(value, oldValue)) {
+					    return null;
+					}
+				} else if (fieldName.equalsIgnoreCase(IS_AUDIT_ENABLED_CLASS_FIELD_NAME)) {
+					if(compareTwoPolicyName(value, oldValue)) {
+						return null;
+					}
 				}
+
 				xTrxLog.setPreviousValue(oldValue);
 				xTrxLog.setNewValue(value);
 			}
@@ -503,6 +530,12 @@ public class RangerPolicyService extends RangerPolicyServiceBase<XXPolicy, Range
 		}
 		return ret;
 	}
+	private String processIsEnabledClassFieldNameForTrxLog(Object value){
+		if(value == null)
+			return null;
+		String isEnabled= String.valueOf(value);
+			return isEnabled;
+	}
 
 	private boolean compareTwoDataMaskingPolicyItemList(String value, String oldValue) {
 		if (value == null && oldValue == null) {

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/7e5e9704/security-admin/src/main/resources/conf.dist/security-applicationContext.xml
----------------------------------------------------------------------
diff --git a/security-admin/src/main/resources/conf.dist/security-applicationContext.xml b/security-admin/src/main/resources/conf.dist/security-applicationContext.xml
index 13ddb26..43a0cf5 100644
--- a/security-admin/src/main/resources/conf.dist/security-applicationContext.xml
+++ b/security-admin/src/main/resources/conf.dist/security-applicationContext.xml
@@ -103,7 +103,7 @@ http://www.springframework.org/schema/security/spring-security-oauth2-1.0.xsd">
 	<beans:bean id="userContextFormationFilter" class="org.apache.ranger.security.web.filter.RangerSecurityContextFormationFilter"/>
 
 	<security:jdbc-user-service id="userService" data-source-ref="defaultDataSource"
-			users-by-username-query="select LOGIN_ID,PASSWORD,STATUS from x_portal_user where LOGIN_ID=? and STATUS = 1"
+			users-by-username-query="select LOGIN_ID,PASSWORD,STATUS from x_portal_user where LOGIN_ID=?"
 			group-authorities-by-username-query=""
 			authorities-by-username-query="SELECT usr.LOGIN_ID,usr_role.USER_ROLE FROM x_portal_user usr,x_portal_user_role usr_role
 			WHERE usr.LOGIN_ID=?

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/7e5e9704/security-admin/src/main/webapp/scripts/views/reports/OperationDiffDetail.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/reports/OperationDiffDetail.js b/security-admin/src/main/webapp/scripts/views/reports/OperationDiffDetail.js
index d8db847..07879ea 100644
--- a/security-admin/src/main/webapp/scripts/views/reports/OperationDiffDetail.js
+++ b/security-admin/src/main/webapp/scripts/views/reports/OperationDiffDetail.js
@@ -191,6 +191,16 @@ define(function(require){
 					if(m.get('action') == 'update' || m.get('action') == 'delete')
 						that.previousConnConfig = $.parseJSON(m.get('previousValue'));
 					configModel = m;
+				}else if(m.get('attributeName') == "Service Status"){
+					 var newVal = m.get('newValue'), oldVal = m.get('previousValue');            
+					 if(!_.isUndefined(newVal)){
+					         m.set('newValue', $.parseJSON(newVal) ? XAEnums.ActiveStatus.STATUS_ENABLED.label 
+					                         : XAEnums.ActiveStatus.STATUS_DISABLED.label);
+					 }
+					 if(!_.isUndefined(oldVal)){
+					         m.set('previousValue', $.parseJSON(oldVal) ? XAEnums.ActiveStatus.STATUS_ENABLED.label 
+					                         : XAEnums.ActiveStatus.STATUS_DISABLED.label);
+					 }
 				}
 			});
 			if(configModel)

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/7e5e9704/security-admin/src/main/webapp/scripts/views/users/UserTableLayout.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/users/UserTableLayout.js b/security-admin/src/main/webapp/scripts/views/users/UserTableLayout.js
index a766705..1a5e8c6 100644
--- a/security-admin/src/main/webapp/scripts/views/users/UserTableLayout.js
+++ b/security-admin/src/main/webapp/scripts/views/users/UserTableLayout.js
@@ -154,14 +154,30 @@ define(function(require){
 					success : function(){
 						that.chgFlags = [];
 						clearCache(collection);
-					}
+					},
+					error : function(resp){
+						if(!_.isUndefined(resp) && !_.isUndefined(resp.responseJSON) && !_.isUndefined(resp.responseJSON.msgDesc)){
+							XAUtil.notifyError('Error', resp.responseJSON.msgDesc);
+						}else{
+							XAUtil.notifyError('Error', "Error occunred while updating user");
+						}
+						collection.trigger('error','',resp)
+					},
 				});
 			} else {
 			    collection.setGroupsVisibility(updateReq, {
 					success : function(){
 						that.chgFlags = [];
 						clearCache(collection);
-					}
+					},
+					error : function(resp){
+						if(!_.isUndefined(resp) && !_.isUndefined(resp.responseJSON) && !_.isUndefined(resp.responseJSON.msgDesc)){
+							XAUtil.notifyError('Error', resp.responseJSON.msgDesc);
+						}else{
+							XAUtil.notifyError('Error', "Error occunred while updating user");
+						}
+						collection.trigger('error','',resp)
+					},
                 });
 			}
 		},

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/7e5e9704/security-admin/src/main/webapp/templates/common/ErrorView_tmpl.html
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/templates/common/ErrorView_tmpl.html b/security-admin/src/main/webapp/templates/common/ErrorView_tmpl.html
index e2f03b2..e565903 100644
--- a/security-admin/src/main/webapp/templates/common/ErrorView_tmpl.html
+++ b/security-admin/src/main/webapp/templates/common/ErrorView_tmpl.html
@@ -23,6 +23,6 @@
 		<p>{{moreInfo}}</p>
 
 		<a href="javascript:;" class="btn btn-primary btn-small" data-id="goBack"><i class="icon-long-arrow-left"></i> Go back</a>&nbsp;&nbsp;
-		<a href="#!/policymanager" class="btn btn-small" data-id="home">Home</a>
+		<a href="#!/policymanager/resource" class="btn btn-small" data-id="home">Home</a>
 </div>
 </div>


[3/3] incubator-ranger git commit: RANGER-1024 : Improve implementation of java patch PatchPersmissionModel_J10003 to handle large amount of users

Posted by ve...@apache.org.
RANGER-1024 : Improve implementation of java patch PatchPersmissionModel_J10003 to handle large amount of users

Signed-off-by: Velmurugan Periasamy <ve...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/9fd001ca
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/9fd001ca
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/9fd001ca

Branch: refs/heads/master
Commit: 9fd001cae7b4366cbd59a77146137a7088f4a805
Parents: 07696a7
Author: pradeep agrawal <pr...@freestoneinfotech.com>
Authored: Tue Jun 14 21:34:48 2016 +0530
Committer: Velmurugan Periasamy <ve...@apache.org>
Committed: Fri Jun 17 00:11:47 2016 -0400

----------------------------------------------------------------------
 .../patch/PatchPersmissionModel_J10003.java     | 118 +++++++++++++++++--
 1 file changed, 106 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/9fd001ca/security-admin/src/main/java/org/apache/ranger/patch/PatchPersmissionModel_J10003.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/patch/PatchPersmissionModel_J10003.java b/security-admin/src/main/java/org/apache/ranger/patch/PatchPersmissionModel_J10003.java
index 764bb5d..3a3bed2 100644
--- a/security-admin/src/main/java/org/apache/ranger/patch/PatchPersmissionModel_J10003.java
+++ b/security-admin/src/main/java/org/apache/ranger/patch/PatchPersmissionModel_J10003.java
@@ -17,18 +17,26 @@
 
 package org.apache.ranger.patch;
 
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
+import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 import org.apache.ranger.db.RangerDaoManager;
 import org.apache.ranger.entity.XXPortalUser;
 import org.apache.ranger.service.XPortalUserService;
-
 import org.apache.ranger.biz.XUserMgr;
+import org.apache.ranger.common.RangerConstants;
 import org.apache.ranger.util.CLIUtil;
 import org.apache.ranger.view.VXPortalUser;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
 
 @Component
 public class PatchPersmissionModel_J10003 extends BaseLoader {
@@ -44,9 +52,19 @@ public class PatchPersmissionModel_J10003 extends BaseLoader {
 	@Autowired
 	RangerDaoManager daoManager;
 
+	private static boolean grantAllUsers=false;
+	private static String usersListFileName=null;
+	private final static Charset ENCODING = StandardCharsets.UTF_8;
 	public static void main(String[] args) {
 		logger.info("main()");
 		try {
+			if(args!=null && args.length>0){
+				if(StringUtils.equalsIgnoreCase("ALL", args[0])){
+					grantAllUsers=true;
+				}else if(!StringUtils.isEmpty(args[0])){
+					usersListFileName=args[0];
+				}
+			}
 			PatchPersmissionModel_J10003 loader = (PatchPersmissionModel_J10003) CLIUtil
 					.getBean(PatchPersmissionModel_J10003.class);
 
@@ -75,22 +93,98 @@ public class PatchPersmissionModel_J10003 extends BaseLoader {
 	}
 
 	public void assignPermissionToExistingUsers() {
-		int countUserPermissionUpdated = 1;
-		List<XXPortalUser> allPortalUser = daoManager.getXXPortalUser().findAllXPortalUser();
-		List<VXPortalUser> vPortalUsers = new ArrayList<VXPortalUser>();
-		for (XXPortalUser xPortalUser : allPortalUser) {
-			VXPortalUser vPortalUser = xPortalUserService.populateViewBean(xPortalUser);
-			vPortalUsers.add(vPortalUser);
-			vPortalUser.setUserRoleList(daoManager.getXXPortalUserRole().findXPortalUserRolebyXPortalUserId(vPortalUser.getId()));
-			xUserMgr.assignPermissionToUser(vPortalUser, false);
-			countUserPermissionUpdated += 1;
-			logger.info("Permissions assigned/updated on base of User's Role, UserId [" + xPortalUser.getId() + "]");
+		int countUserPermissionUpdated = 0;
+		Long userCount=daoManager.getXXPortalUser().getAllCount();
+		List<XXPortalUser> xXPortalUsers=null;
+		Long patchModeMaxLimit=Long.valueOf(500L);
+		try{
+			if (userCount!=null && userCount>0){
+				List<String> loginIdList=readUserNamesFromFile(usersListFileName);
+				if(!CollectionUtils.isEmpty(loginIdList)){
+					xXPortalUsers=new ArrayList<XXPortalUser>();
+					XXPortalUser xXPortalUser=null;
+					for(String loginId:loginIdList){
+						try{
+							xXPortalUser=daoManager.getXXPortalUser().findByLoginId(loginId);
+							if(xXPortalUser!=null){
+								xXPortalUsers.add(xXPortalUser);
+							}else{
+								logger.info("User "+loginId+" doesn't exist!");
+							}
+						}catch(Exception ex){
+						}
+					}
+					countUserPermissionUpdated=assignPermissions(xXPortalUsers);
+					logger.info("Permissions assigned to "+countUserPermissionUpdated + " of "+loginIdList.size());
+				}else if(userCount.compareTo(Long.valueOf(patchModeMaxLimit))<0 || grantAllUsers){
+					xXPortalUsers=daoManager.getXXPortalUser().findAllXPortalUser();
+					if(!CollectionUtils.isEmpty(xXPortalUsers)){
+						countUserPermissionUpdated=assignPermissions(xXPortalUsers);
+						logger.info("Permissions assigned to "+countUserPermissionUpdated + " of "+xXPortalUsers.size());
+					}
+				}else{
+					//if total no. of users are more than 500 then process ADMIN and KEY_ADMIN users only to avoid timeout
+					xXPortalUsers=daoManager.getXXPortalUser().findByRole(RangerConstants.ROLE_SYS_ADMIN);
+					if(!CollectionUtils.isEmpty(xXPortalUsers)){
+						countUserPermissionUpdated=assignPermissions(xXPortalUsers);
+						logger.info("Permissions assigned to users having role:"+RangerConstants.ROLE_SYS_ADMIN+". Processed:"+countUserPermissionUpdated + " of total "+xXPortalUsers.size());
+					}
+					xXPortalUsers=daoManager.getXXPortalUser().findByRole(RangerConstants.ROLE_KEY_ADMIN);
+					if(!CollectionUtils.isEmpty(xXPortalUsers)){
+						countUserPermissionUpdated=assignPermissions(xXPortalUsers);
+						logger.info("Permissions assigned to users having role:"+RangerConstants.ROLE_KEY_ADMIN+". Processed:"+countUserPermissionUpdated + " of total "+xXPortalUsers.size());
+					}
+					logger.info("Please execute this patch separately with argument 'ALL' to assign permission to remaining users ");
+	                System.out.println("Please execute this patch separately with argument 'ALL' to assign module permissions to remaining users!!");
+				}
+			}
+		}catch(Exception ex){
 		}
-		logger.info(countUserPermissionUpdated + " permissions were assigned");
 	}
 
 	@Override
 	public void printStats() {
 	}
 
+	private int assignPermissions(List<XXPortalUser> xXPortalUsers){
+		int countUserPermissionUpdated = 0;
+		if(!CollectionUtils.isEmpty(xXPortalUsers)){
+			for (XXPortalUser xPortalUser : xXPortalUsers) {
+				try{
+					if(xPortalUser!=null){
+						VXPortalUser vPortalUser = xPortalUserService.populateViewBean(xPortalUser);
+						if(vPortalUser!=null){
+							vPortalUser.setUserRoleList(daoManager.getXXPortalUserRole().findXPortalUserRolebyXPortalUserId(vPortalUser.getId()));
+							xUserMgr.assignPermissionToUser(vPortalUser, false);
+							countUserPermissionUpdated += 1;
+							logger.info("Permissions assigned/updated on base of User's Role, UserId [" + xPortalUser.getId() + "]");
+						}
+					}
+				}catch(Exception ex){
+				}
+			}
+		}
+		return countUserPermissionUpdated ;
+	}
+
+	private List<String> readUserNamesFromFile(String aFileName) throws IOException {
+		List<String> userNames=new ArrayList<String>();
+		if(!StringUtils.isEmpty(aFileName)){
+			Path path = Paths.get(aFileName);
+			if (Files.exists(path) && Files.isRegularFile(path)) {
+				List<String> fileContents=Files.readAllLines(path, ENCODING);
+				if(fileContents!=null && fileContents.size()>0){
+					for(String line:fileContents){
+						if(!StringUtils.isEmpty(line) && !userNames.contains(line)){
+							try{
+								userNames.add(line.trim());
+							}catch(Exception ex){
+							}
+						}
+					}
+				}
+			}
+		}
+	   return userNames;
+	}
 }


[2/3] incubator-ranger git commit: RANGER-1025 : Policy search REST API implemented in public api V1 is not returning results as expected

Posted by ve...@apache.org.
RANGER-1025 : Policy search REST API implemented in public api V1 is not returning results as expected

Signed-off-by: Velmurugan Periasamy <ve...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/07696a70
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/07696a70
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/07696a70

Branch: refs/heads/master
Commit: 07696a705cea966c4a0b8bfdc85f190e45bc2515
Parents: 7e5e970
Author: pradeep agrawal <pr...@freestoneinfotech.com>
Authored: Mon Jun 13 09:56:13 2016 +0530
Committer: Velmurugan Periasamy <ve...@apache.org>
Committed: Fri Jun 17 00:11:00 2016 -0400

----------------------------------------------------------------------
 .../org/apache/ranger/biz/ServiceDBStore.java   | 10 ++--
 .../apache/ranger/common/RangerSearchUtil.java  |  1 +
 .../org/apache/ranger/common/ServiceUtil.java   | 51 ++++++++++++--------
 .../java/org/apache/ranger/rest/PublicAPIs.java | 17 +++++--
 .../ranger/service/RangerPolicyServiceBase.java |  2 +
 5 files changed, 51 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/07696a70/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
index 739ad05..794de71 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
@@ -3651,7 +3651,7 @@ public class ServiceDBStore extends AbstractServiceStore {
 		if (!CollectionUtils.isEmpty(xPolList)) {
 			for (XXPolicy xXPolicy : xPolList) {
 				if(!processedServices.contains(xXPolicy.getService())){
-					loadRangerPolicies(xXPolicy.getService(),processedServices,policyMap);
+					loadRangerPolicies(xXPolicy.getService(),processedServices,policyMap,searchFilter);
 				}
 			}
 		}
@@ -3670,7 +3670,7 @@ public class ServiceDBStore extends AbstractServiceStore {
 							if(xPol2!=null){
 								if(!processedPolicies.contains(xPol2.getId())){
 									if(!processedServices.contains(xPol2.getService())){
-										loadRangerPolicies(xPol2.getService(),processedServices,policyMap);
+										loadRangerPolicies(xPol2.getService(),processedServices,policyMap,searchFilter);
 									}
 									if(policyMap.containsKey(xPol2.getId())){
 										policyList.add(policyMap.get(xPol2.getId()));
@@ -3688,7 +3688,7 @@ public class ServiceDBStore extends AbstractServiceStore {
 				if(xPol!=null){
 					if(!processedPolicies.contains(xPol.getId())){
 						if(!processedServices.contains(xPol.getService())){
-							loadRangerPolicies(xPol.getService(),processedServices,policyMap);
+							loadRangerPolicies(xPol.getService(),processedServices,policyMap,searchFilter);
 						}
 						if(policyMap.containsKey(xPol.getId())){
 							policyList.add(policyMap.get(xPol.getId()));
@@ -3703,9 +3703,9 @@ public class ServiceDBStore extends AbstractServiceStore {
 		return retList;
 	}
 
-	private void loadRangerPolicies(Long serviceId,Set<Long> processedServices,Map<Long,RangerPolicy> policyMap){
+	private void loadRangerPolicies(Long serviceId,Set<Long> processedServices,Map<Long,RangerPolicy> policyMap,SearchFilter searchFilter){
 		try {
-			List<RangerPolicy> tempPolicyList = getServicePolicies(serviceId,null);
+			List<RangerPolicy> tempPolicyList = getServicePolicies(serviceId,searchFilter);
 			if(!CollectionUtils.isEmpty(tempPolicyList)){
 				for (RangerPolicy rangerPolicy : tempPolicyList) {
 					if(!policyMap.containsKey(rangerPolicy.getId())){

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/07696a70/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java b/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java
index b8f7c88..2ad5795 100644
--- a/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java
+++ b/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java
@@ -136,6 +136,7 @@ public class RangerSearchUtil extends SearchUtil {
 		ret.setParam(SearchFilter.GROUP, request.getParameter("groupName"));
 		ret.setParam(SearchFilter.IS_ENABLED, request.getParameter("isEnabled"));
 		ret.setParam(SearchFilter.IS_RECURSIVE, request.getParameter("isRecursive"));
+		ret.setParam(SearchFilter.POL_RESOURCE, request.getParameter(SearchFilter.POL_RESOURCE));
 		ret.setParam(SearchFilter.RESOURCE_PREFIX + "path", request.getParameter("resourceName"));
 		ret.setParam(SearchFilter.RESOURCE_PREFIX + "database", request.getParameter("databases"));
 		ret.setParam(SearchFilter.RESOURCE_PREFIX + "table", request.getParameter("tables"));

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/07696a70/security-admin/src/main/java/org/apache/ranger/common/ServiceUtil.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/common/ServiceUtil.java b/security-admin/src/main/java/org/apache/ranger/common/ServiceUtil.java
index 0feb5db..5d0551a 100644
--- a/security-admin/src/main/java/org/apache/ranger/common/ServiceUtil.java
+++ b/security-admin/src/main/java/org/apache/ranger/common/ServiceUtil.java
@@ -50,6 +50,7 @@ import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyItemAccess;
 import org.apache.ranger.plugin.model.RangerService;
 import org.apache.ranger.plugin.store.EmbeddedServiceDefsUtil;
 import org.apache.ranger.plugin.util.GrantRevokeRequest;
+import org.apache.ranger.plugin.util.SearchFilter;
 import org.apache.ranger.view.VXAsset;
 import org.apache.ranger.view.VXAuditMap;
 import org.apache.ranger.view.VXDataObject;
@@ -1153,33 +1154,43 @@ public class ServiceUtil {
 	}
 	
 	
-	public VXPolicyList rangerPolicyListToPublic(List<RangerPolicy> rangerPolicyList) {
+	public VXPolicyList rangerPolicyListToPublic(List<RangerPolicy> rangerPolicyList,SearchFilter filter) {
 		
 		RangerService service       = null;
 		List<VXPolicy> vXPolicyList = new ArrayList<VXPolicy>();
 
-		for ( RangerPolicy policy : rangerPolicyList) {
-			try {
-				service = svcStore.getServiceByName(policy.getService());
-			} catch(Exception excp) {
-				throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true);
-			}
-
-			if(service  == null) {
-				throw restErrorUtil.createRESTException(HttpServletResponse.SC_NOT_FOUND, "Not found", true);
-			}
-			
-			VXPolicy vXPolicy = toVXPolicy(policy,service);
-
-			if(vXPolicy != null) {
-				vXPolicyList.add(vXPolicy);
+		VXPolicyList vXPolicyListObj = new VXPolicyList(new ArrayList<VXPolicy>());
+		if(CollectionUtils.isNotEmpty(rangerPolicyList)) {
+			int    totalCount = rangerPolicyList.size();
+			int    startIndex = filter == null ? 0 : filter.getStartIndex();
+			int    pageSize   = filter == null ? totalCount : filter.getMaxRows();
+			int    toIndex    = Math.min(startIndex + pageSize, totalCount);
+			String sortType   = filter == null ? null : filter.getSortType();
+			String sortBy     = filter == null ? null : filter.getSortBy();
+			for(int i = startIndex; i < toIndex; i++) {
+				RangerPolicy policy =rangerPolicyList.get(i);
+				try {
+					service = svcStore.getServiceByName(policy.getService());
+				} catch(Exception excp) {
+					throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true);
+				}
+				if(service  == null) {
+					throw restErrorUtil.createRESTException(HttpServletResponse.SC_NOT_FOUND, "Not found", true);
+				}
+				VXPolicy vXPolicy = toVXPolicy(policy,service);
+				if(vXPolicy != null) {
+					vXPolicyList.add(vXPolicy);
+				}
 			}
+			vXPolicyListObj = new VXPolicyList(vXPolicyList);
+			vXPolicyListObj.setPageSize(pageSize);
+			vXPolicyListObj.setResultSize(vXPolicyList.size());
+			vXPolicyListObj.setStartIndex(startIndex);
+			vXPolicyListObj.setTotalCount(totalCount);
+			vXPolicyListObj.setSortBy(sortBy);
+			vXPolicyListObj.setSortType(sortType);
 		}
-
-		VXPolicyList vXPolicyListObj = new VXPolicyList(vXPolicyList);
-		
 		return vXPolicyListObj;
-		
 	}
 	
 	

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/07696a70/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIs.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIs.java b/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIs.java
index 21fdcd1..1f465d5 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIs.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIs.java
@@ -348,19 +348,26 @@ public class PublicAPIs {
 		}
 
 		SearchFilter filter = searchUtil.getSearchFilterFromLegacyRequest(request, policyService.sortFields);
+		// get all policies from the store; pick the page to return after applying filter
+		int savedStartIndex = filter == null ? 0 : filter.getStartIndex();
+		int savedMaxRows    = filter == null ? Integer.MAX_VALUE : filter.getMaxRows();
 
+		if(filter != null) {
+			filter.setStartIndex(0);
+			filter.setMaxRows(Integer.MAX_VALUE);
+		}
 		List<RangerPolicy> rangerPolicyList = serviceREST.getPolicies(filter);
-		
+		if(filter != null) {
+			filter.setStartIndex(savedStartIndex);
+			filter.setMaxRows(savedMaxRows);
+		}
 		VXPolicyList vXPolicyList = null;
-
 		if (rangerPolicyList != null) {
-			vXPolicyList = serviceUtil.rangerPolicyListToPublic(rangerPolicyList);
+			vXPolicyList = serviceUtil.rangerPolicyListToPublic(rangerPolicyList,filter);
 		}
-		
 		if(logger.isDebugEnabled()) {
 			logger.debug("<== PublicAPIs.searchPolicies(): "  + vXPolicyList );
 		}
-		
 		return vXPolicyList;
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/07696a70/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java
index b7598ea..2649ff3 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java
@@ -49,6 +49,8 @@ public abstract class RangerPolicyServiceBase<T extends XXPolicyBase, V extends
 				"XXService xSvc", "xSvc.id = obj.service"));
 		searchFields
 				.add(new SearchField(SearchFilter.IS_ENABLED, "obj.isEnabled", DATA_TYPE.BOOLEAN, SEARCH_TYPE.FULL));
+		searchFields.add(new SearchField(SearchFilter.IS_RECURSIVE,"xPolRes.isRecursive",DATA_TYPE.BOOLEAN,SEARCH_TYPE.FULL,
+				"XXPolicyResource xPolRes","obj.id=xPolRes.policyId"));
 		searchFields.add(new SearchField(SearchFilter.POLICY_ID, "obj.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
 		searchFields.add(new SearchField(SearchFilter.POLICY_NAME, "obj.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
 		searchFields.add(new SearchField(SearchFilter.GUID, "obj.guid", DATA_TYPE.STRING, SEARCH_TYPE.FULL));