diff --git a/security-admin/src/main/java/javax/ws/rs/core/NoContentException.java b/security-admin/src/main/java/javax/ws/rs/core/NoContentException.java
index b9366122d5..2a85d5877e 100644
--- a/security-admin/src/main/java/javax/ws/rs/core/NoContentException.java
+++ b/security-admin/src/main/java/javax/ws/rs/core/NoContentException.java
@@ -1,4 +1,3 @@
-
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -7,9 +6,9 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
diff --git a/security-admin/src/main/java/org/apache/ranger/AccessAuditsService.java b/security-admin/src/main/java/org/apache/ranger/AccessAuditsService.java
index de1feed55c..9b3a7a3764 100644
--- a/security-admin/src/main/java/org/apache/ranger/AccessAuditsService.java
+++ b/security-admin/src/main/java/org/apache/ranger/AccessAuditsService.java
@@ -30,83 +30,60 @@
import org.apache.ranger.plugin.store.EmbeddedServiceDefsUtil;
import org.springframework.beans.factory.annotation.Autowired;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
public class AccessAuditsService {
- protected List sortFields = new ArrayList();
- protected List searchFields;
+ protected List sortFields = new ArrayList<>();
+ protected List searchFields = new ArrayList<>();
+
@Autowired
- protected
- RESTErrorUtil restErrorUtil;
+ protected RESTErrorUtil restErrorUtil;
+
@Autowired
- protected
- RangerDaoManager daoManager;
+ protected RangerDaoManager daoManager;
public AccessAuditsService() {
- searchFields = new ArrayList();
- searchFields.add(new SearchField("id", "id",
- SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField("accessType", "access",
- SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField("aclEnforcer", "enforcer",
- SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField("agentId", "agent",
- SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField("repoName", "repo",
- SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField("sessionId", "sess",
- SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField("requestUser", "reqUser",
- SearchField.DATA_TYPE.STR_LIST, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField("excludeUser", "exlUser",
- SearchField.DATA_TYPE.STR_LIST, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField("requestData", "reqData", SearchField.DATA_TYPE.STRING,
- SearchField.SEARCH_TYPE.PARTIAL));
- searchFields.add(new SearchField("resourcePath", "resource", SearchField.DATA_TYPE.STRING,
- SearchField.SEARCH_TYPE.PARTIAL));
- searchFields.add(new SearchField("clientIP", "cliIP",
- SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
-
- searchFields.add(new SearchField("auditType", "logType",
- SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField("accessResult", "result",
- SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField("id", "id", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField("accessType", "access", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField("aclEnforcer", "enforcer", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField("agentId", "agent", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField("repoName", "repo", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField("sessionId", "sess", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField("requestUser", "reqUser", SearchField.DATA_TYPE.STR_LIST, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField("excludeUser", "exlUser", SearchField.DATA_TYPE.STR_LIST, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField("requestData", "reqData", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL));
+ searchFields.add(new SearchField("resourcePath", "resource", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL));
+ searchFields.add(new SearchField("clientIP", "cliIP", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+
+ searchFields.add(new SearchField("auditType", "logType", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField("accessResult", "result", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
// searchFields.add(new SearchField("assetId", "obj.assetId",
// SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField("policyId", "policy",
- SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField("repoType", "repoType",
- SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField("policyId", "policy", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField("repoType", "repoType", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
/* Note; search fields starting with '-' denotes exclude conditions,
* it should be handled manually if audit destination does not support the same.
* solr support this way while cloudwatch does not.
*/
- searchFields.add(new SearchField("-repoType", "-repoType",
- SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField("-requestUser", "-reqUser",
- SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField("resourceType", "resType",
- SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField("reason", "reason",
- SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField("action", "action",
- SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
-
- searchFields.add(new SearchField("startDate", "evtTime",
- SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.GREATER_EQUAL_THAN));
- searchFields.add(new SearchField("endDate", "evtTime", SearchField.DATA_TYPE.DATE,
- SearchField.SEARCH_TYPE.LESS_EQUAL_THAN));
+ searchFields.add(new SearchField("-repoType", "-repoType", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField("-requestUser", "-reqUser", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField("resourceType", "resType", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField("reason", "reason", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField("action", "action", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+
+ searchFields.add(new SearchField("startDate", "evtTime", SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.GREATER_EQUAL_THAN));
+ searchFields.add(new SearchField("endDate", "evtTime", SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.LESS_EQUAL_THAN));
searchFields.add(new SearchField("tags", "tags", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL));
- searchFields.add(new SearchField("cluster", "cluster",
- SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField("zoneName", "zoneName",
- SearchField.DATA_TYPE.STR_LIST, SearchField.SEARCH_TYPE.FULL));
- searchFields.add(new SearchField("agentHost", "agentHost",
- SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL));
-
- sortFields.add(new SortField("eventTime", "evtTime", true,
- SortField.SORT_ORDER.DESC));
+ searchFields.add(new SearchField("cluster", "cluster", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField("zoneName", "zoneName", SearchField.DATA_TYPE.STR_LIST, SearchField.SEARCH_TYPE.FULL));
+ searchFields.add(new SearchField("agentHost", "agentHost", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL));
+
+ sortFields.add(new SortField("eventTime", "evtTime", true, SortField.SORT_ORDER.DESC));
sortFields.add(new SortField("policyId", "policy", false, SORT_ORDER.ASC));
sortFields.add(new SortField("requestUser", "reqUser", false, SORT_ORDER.ASC));
sortFields.add(new SortField("resourceType", "resType", false, SORT_ORDER.ASC));
@@ -120,13 +97,16 @@ public AccessAuditsService() {
protected void updateUserExclusion(Map paramList) {
String val = (String) paramList.get("excludeServiceUser");
- if (val != null && Boolean.valueOf(val.trim())) {
+ if (val != null && Boolean.parseBoolean(val.trim())) {
// add param to negate requestUsers which will be added as filter query
List excludeUsersList = getExcludeUsersList();
+
if (CollectionUtils.isNotEmpty(excludeUsersList)) {
Object oldUserExclusions = paramList.get("-requestUser");
- if (oldUserExclusions instanceof Collection && (!((Collection>)oldUserExclusions).isEmpty())) {
- excludeUsersList.addAll((Collection)oldUserExclusions);
+
+ if (oldUserExclusions instanceof Collection && (!((Collection>) oldUserExclusions).isEmpty())) {
+ excludeUsersList.addAll((Collection) oldUserExclusions);
+
paramList.put("-requestUser", excludeUsersList);
} else {
paramList.put("-requestUser", excludeUsersList);
@@ -137,32 +117,38 @@ protected void updateUserExclusion(Map paramList) {
private List getExcludeUsersList() {
//for excluding serviceUsers using existing property in ranger-admin-site
- List excludeUsersList = new ArrayList(getServiceUserList());
+ List excludeUsersList = new ArrayList<>(getServiceUserList());
//for excluding additional users using new property in ranger-admin-site
- String additionalExcludeUsers = PropertiesUtil.getProperty("ranger.accesslogs.exclude.users.list");
- List additionalExcludeUsersList = null;
+ String additionalExcludeUsers = PropertiesUtil.getProperty("ranger.accesslogs.exclude.users.list");
+ List additionalExcludeUsersList;
+
if (StringUtils.isNotBlank(additionalExcludeUsers)) {
additionalExcludeUsersList = new ArrayList<>(Arrays.asList(StringUtils.split(additionalExcludeUsers, ",")));
+
for (String serviceUser : additionalExcludeUsersList) {
if (StringUtils.isNotBlank(serviceUser) && !excludeUsersList.contains(serviceUser.trim())) {
excludeUsersList.add(serviceUser);
}
}
}
+
return excludeUsersList;
}
private List getServiceUserList() {
- String components = EmbeddedServiceDefsUtil.DEFAULT_BOOTSTRAP_SERVICEDEF_LIST;
- List serviceUsersList = new ArrayList();
- List componentNames = Arrays.asList(StringUtils.split(components,","));
- for(String componentName : componentNames) {
- String serviceUser = PropertiesUtil.getProperty("ranger.plugins."+componentName+".serviceuser");
- if(StringUtils.isNotBlank(serviceUser)) {
+ String components = EmbeddedServiceDefsUtil.DEFAULT_BOOTSTRAP_SERVICEDEF_LIST;
+ List serviceUsersList = new ArrayList<>();
+ String[] componentNames = StringUtils.split(components, ",");
+
+ for (String componentName : componentNames) {
+ String serviceUser = PropertiesUtil.getProperty("ranger.plugins." + componentName + ".serviceuser");
+
+ if (StringUtils.isNotBlank(serviceUser)) {
serviceUsersList.add(serviceUser);
}
}
+
return serviceUsersList;
}
}
diff --git a/security-admin/src/main/java/org/apache/ranger/amazon/cloudwatch/CloudWatchAccessAuditsService.java b/security-admin/src/main/java/org/apache/ranger/amazon/cloudwatch/CloudWatchAccessAuditsService.java
index 06a21a3c23..41d7121dd7 100644
--- a/security-admin/src/main/java/org/apache/ranger/amazon/cloudwatch/CloudWatchAccessAuditsService.java
+++ b/security-admin/src/main/java/org/apache/ranger/amazon/cloudwatch/CloudWatchAccessAuditsService.java
@@ -19,11 +19,8 @@
package org.apache.ranger.amazon.cloudwatch;
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
+import com.amazonaws.services.logs.AWSLogs;
+import com.amazonaws.services.logs.model.FilteredLogEvent;
import org.apache.commons.collections.CollectionUtils;
import org.apache.ranger.audit.model.AuthzAuditEvent;
import org.apache.ranger.audit.provider.MiscUtil;
@@ -43,257 +40,253 @@
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
-import com.amazonaws.services.logs.AWSLogs;
-import com.amazonaws.services.logs.model.FilteredLogEvent;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
@Service
@Scope("singleton")
public class CloudWatchAccessAuditsService extends org.apache.ranger.AccessAuditsService {
- private static final Logger LOGGER = LoggerFactory.getLogger(CloudWatchAccessAuditsService.class);
-
- @Autowired
- CloudWatchMgr cloudWatchMgr;
-
- @Autowired
- CloudWatchUtil cloudWatchUtil;
-
- @Autowired
- JSONUtil jsonUtil;
-
- public VXAccessAuditList searchXAccessAudits(SearchCriteria searchCriteria) {
-
- final boolean hiveQueryVisibility = PropertiesUtil.getBooleanProperty("ranger.audit.hive.query.visibility", true);
- AWSLogs client = cloudWatchMgr.getClient();
- if (client == null) {
- LOGGER.warn("CloudWatch client is null, so not running the query.");
- throw restErrorUtil.createRESTException("Error connecting to cloudwatch", MessageEnums.ERROR_SYSTEM);
- }
-
- List xAccessAuditList = new ArrayList();
- Map paramList = searchCriteria.getParamList();
- updateUserExclusion(paramList);
-
- List result;
- try {
- result = cloudWatchUtil.searchResources(client, searchCriteria, searchFields, sortFields);
- } catch (Exception e) {
- LOGGER.warn(String.format("CloudWatch query failed: %s", e.getMessage()));
- throw restErrorUtil.createRESTException("Error querying search engine", MessageEnums.ERROR_SYSTEM);
- }
-
- VXAccessAuditList returnList = new VXAccessAuditList();
- if (result != null && CollectionUtils.isNotEmpty(result)) {
- int recordCount = 0;
- int endIndex = result.size() - 1;
- endIndex = endIndex - searchCriteria.getStartIndex() < 0 ? endIndex : endIndex - searchCriteria.getStartIndex();
- for (int index = endIndex; recordCount < searchCriteria.getMaxRows() && index >=0 ; index--) {
- FilteredLogEvent event = result.get(index);
- AuthzAuditEvent auditEvent = null;
- try {
- auditEvent = MiscUtil.fromJson(event.getMessage(), AuthzAuditEvent.class);
- } catch (Exception ex) {
- LOGGER.error("Error while parsing json data" , ex);
- }
- VXAccessAudit vXAccessAudit = populateViewBean(auditEvent);
- if (vXAccessAudit != null) {
- String serviceType = vXAccessAudit.getServiceType();
- boolean isHive = "hive".equalsIgnoreCase(serviceType);
- if (!hiveQueryVisibility && isHive) {
- vXAccessAudit.setRequestData(null);
- } else if (isHive) {
- String accessType = vXAccessAudit.getAccessType();
- if ("grant".equalsIgnoreCase(accessType) || "revoke".equalsIgnoreCase(accessType)) {
- String requestData = vXAccessAudit.getRequestData();
- if (requestData != null) {
- try {
- vXAccessAudit.setRequestData(java.net.URLDecoder.decode(requestData, "UTF-8"));
- } catch (UnsupportedEncodingException e) {
- LOGGER.warn("Error while encoding request data: " + requestData, e);
- }
- } else {
- LOGGER.warn("Error in request data of audit from cloudwatch. AuditData: "+ vXAccessAudit.toString());
- }
- }
- }
- }
- xAccessAuditList.add(vXAccessAudit);
- recordCount++;
- }
- returnList.setResultSize(result.size());
- returnList.setTotalCount(result.size());
- }
-
- returnList.setPageSize(searchCriteria.getMaxRows());
- returnList.setStartIndex(searchCriteria.getStartIndex());
- returnList.setVXAccessAudits(xAccessAuditList);
- return returnList;
- }
-
- public void setRestErrorUtil(RESTErrorUtil restErrorUtil) {
- this.restErrorUtil = restErrorUtil;
- }
-
- public VXLong getXAccessAuditSearchCount(SearchCriteria searchCriteria) {
- long count = 100;
- VXLong vXLong = new VXLong();
- vXLong.setValue(count);
- return vXLong;
- }
-
- private VXAccessAudit populateViewBean(AuthzAuditEvent auditEvent) {
- VXAccessAudit accessAudit = new VXAccessAudit();
-
- Object value = null;
- if(LOGGER.isDebugEnabled()) {
- LOGGER.debug("doc=" + auditEvent.toString());
- }
-
- value = auditEvent.getEventId();
- if (value != null) {
- accessAudit.setId((long) value.hashCode());
- accessAudit.setEventId(value.toString());
- }
-
- value = auditEvent.getClusterName();
- if (value != null) {
- accessAudit.setClusterName(value.toString());
- }
-
- value = auditEvent.getZoneName();
- if (value != null) {
- accessAudit.setZoneName(value.toString());
- }
-
- value = auditEvent.getAgentHostname();
- if (value != null) {
- accessAudit.setAgentHost(value.toString());
- }
-
- value = auditEvent.getPolicyVersion();
- if (value != null) {
- accessAudit.setPolicyVersion(MiscUtil.toLong(value));
- }
-
- value = auditEvent.getAccessType();
- if (value != null) {
- accessAudit.setAccessType(value.toString());
- }
-
- value = auditEvent.getAclEnforcer();
- if (value != null) {
- accessAudit.setAclEnforcer(value.toString());
- }
-
- value = auditEvent.getAgentId();
- if (value != null) {
- accessAudit.setAgentId(value.toString());
- }
-
- value = auditEvent.getRepositoryName();
- if (value != null) {
- accessAudit.setRepoName(value.toString());
- XXService xxService = daoManager.getXXService().findByName(accessAudit.getRepoName());
-
- if(xxService != null) {
- accessAudit.setRepoDisplayName(xxService.getDisplayName());
- }
- }
-
- value = auditEvent.getSessionId();
- if (value != null) {
- accessAudit.setSessionId(value.toString());
- }
-
- value = auditEvent.getUser();
- if (value != null) {
- accessAudit.setRequestUser(value.toString());
- }
-
- value = auditEvent.getRequestData();
- if (value != null) {
- accessAudit.setRequestData(value.toString());
- }
- value = auditEvent.getResourcePath();
- if (value != null) {
- accessAudit.setResourcePath(value.toString());
- }
-
- value = auditEvent.getClientIP();
- if (value != null) {
- accessAudit.setClientIP(value.toString());
- }
-
- value = auditEvent.getAccessResult();
- if (value != null) {
- accessAudit.setAccessResult(MiscUtil.toInt(value));
- }
-
- value = auditEvent.getPolicyId();
- if (value != null) {
- accessAudit.setPolicyId(MiscUtil.toLong(value));
- }
-
- value = auditEvent.getRepositoryType();
- if (value != null) {
- accessAudit.setRepoType(MiscUtil.toInt(value));
- XXServiceDef xServiceDef = daoManager.getXXServiceDef().getById((long) accessAudit.getRepoType());
- if (xServiceDef != null) {
- accessAudit.setServiceType(xServiceDef.getName());
- accessAudit.setServiceTypeDisplayName(xServiceDef.getDisplayName());
- }
- }
-
- value = auditEvent.getResourceType();
- if (value != null) {
- accessAudit.setResourceType(value.toString());
- }
-
- value = auditEvent.getResultReason();
- if (value != null) {
- accessAudit.setResultReason(value.toString());
- }
-
- value = auditEvent.getAction();
- if (value != null) {
- accessAudit.setAction(value.toString());
- }
-
- value = auditEvent.getEventTime();
- if (value != null) {
- accessAudit.setEventTime(MiscUtil.toLocalDate(value));
- }
-
- value = auditEvent.getSeqNum();
- if (value != null) {
- accessAudit.setSequenceNumber(MiscUtil.toLong(value));
- }
-
- value = auditEvent.getEventCount();
- if (value != null) {
- accessAudit.setEventCount(MiscUtil.toLong(value));
- }
-
- value = auditEvent.getEventDurationMS();
- if (value != null) {
- accessAudit.setEventDuration(MiscUtil.toLong(value));
- }
-
- value = auditEvent.getTags();
- if (value != null) {
- accessAudit.setTags(value.toString());
- }
-
- value = auditEvent.getDatasets();
- if (value != null) {
- accessAudit.setDatasets(value.toString());
- }
-
- value = auditEvent.getProjects();
- if (value != null) {
- accessAudit.setProjects(value.toString());
- }
-
- return accessAudit;
- }
-
-}
\ No newline at end of file
+ private static final Logger LOGGER = LoggerFactory.getLogger(CloudWatchAccessAuditsService.class);
+
+ @Autowired
+ CloudWatchMgr cloudWatchMgr;
+
+ @Autowired
+ CloudWatchUtil cloudWatchUtil;
+
+ @Autowired
+ JSONUtil jsonUtil;
+
+ public VXAccessAuditList searchXAccessAudits(SearchCriteria searchCriteria) {
+ final boolean hiveQueryVisibility = PropertiesUtil.getBooleanProperty("ranger.audit.hive.query.visibility", true);
+ AWSLogs client = cloudWatchMgr.getClient();
+
+ if (client == null) {
+ LOGGER.warn("CloudWatch client is null, so not running the query.");
+
+ throw restErrorUtil.createRESTException("Error connecting to cloudwatch", MessageEnums.ERROR_SYSTEM);
+ }
+
+ List xAccessAuditList = new ArrayList<>();
+ Map paramList = searchCriteria.getParamList();
+
+ updateUserExclusion(paramList);
+
+ List result;
+
+ try {
+ result = cloudWatchUtil.searchResources(client, searchCriteria, searchFields, sortFields);
+ } catch (Exception e) {
+ LOGGER.warn("CloudWatch query failed: {}", e.getMessage());
+
+ throw restErrorUtil.createRESTException("Error querying search engine", MessageEnums.ERROR_SYSTEM);
+ }
+
+ VXAccessAuditList returnList = new VXAccessAuditList();
+
+ if (CollectionUtils.isNotEmpty(result)) {
+ int recordCount = 0;
+ int endIndex = result.size() - 1;
+
+ endIndex = endIndex - searchCriteria.getStartIndex() < 0 ? endIndex : endIndex - searchCriteria.getStartIndex();
+
+ for (int index = endIndex; recordCount < searchCriteria.getMaxRows() && index >= 0; index--) {
+ FilteredLogEvent event = result.get(index);
+ AuthzAuditEvent auditEvent = null;
+
+ try {
+ auditEvent = MiscUtil.fromJson(event.getMessage(), AuthzAuditEvent.class);
+ } catch (Exception ex) {
+ LOGGER.error("Error while parsing json data", ex);
+ }
+
+ VXAccessAudit vXAccessAudit = populateViewBean(auditEvent);
+ String serviceType = vXAccessAudit.getServiceType();
+ boolean isHive = "hive".equalsIgnoreCase(serviceType);
+
+ if (!hiveQueryVisibility && isHive) {
+ vXAccessAudit.setRequestData(null);
+ } else if (isHive) {
+ String accessType = vXAccessAudit.getAccessType();
+
+ if ("grant".equalsIgnoreCase(accessType) || "revoke".equalsIgnoreCase(accessType)) {
+ String requestData = vXAccessAudit.getRequestData();
+
+ if (requestData != null) {
+ try {
+ vXAccessAudit.setRequestData(java.net.URLDecoder.decode(requestData, "UTF-8"));
+ } catch (UnsupportedEncodingException e) {
+ LOGGER.warn("Error while encoding request data:{}", requestData, e);
+ }
+ } else {
+ LOGGER.warn("Error in request data of audit from cloudwatch. AuditData:{} ", vXAccessAudit);
+ }
+ }
+ }
+
+ xAccessAuditList.add(vXAccessAudit);
+
+ recordCount++;
+ }
+
+ returnList.setResultSize(result.size());
+ returnList.setTotalCount(result.size());
+ }
+
+ returnList.setPageSize(searchCriteria.getMaxRows());
+ returnList.setStartIndex(searchCriteria.getStartIndex());
+ returnList.setVXAccessAudits(xAccessAuditList);
+
+ return returnList;
+ }
+
+ public void setRestErrorUtil(RESTErrorUtil restErrorUtil) {
+ this.restErrorUtil = restErrorUtil;
+ }
+
+ public VXLong getXAccessAuditSearchCount(SearchCriteria searchCriteria) {
+ long count = 100;
+ VXLong vXLong = new VXLong();
+
+ vXLong.setValue(count);
+
+ return vXLong;
+ }
+
+ private VXAccessAudit populateViewBean(AuthzAuditEvent auditEvent) {
+ LOGGER.debug("doc= {}", auditEvent);
+
+ VXAccessAudit accessAudit = new VXAccessAudit();
+ Object value;
+
+ value = auditEvent.getEventId();
+ if (value != null) {
+ accessAudit.setId((long) value.hashCode());
+ accessAudit.setEventId(value.toString());
+ }
+
+ value = auditEvent.getClusterName();
+ if (value != null) {
+ accessAudit.setClusterName(value.toString());
+ }
+
+ value = auditEvent.getZoneName();
+ if (value != null) {
+ accessAudit.setZoneName(value.toString());
+ }
+
+ value = auditEvent.getAgentHostname();
+ if (value != null) {
+ accessAudit.setAgentHost(value.toString());
+ }
+
+ value = auditEvent.getPolicyVersion();
+ if (value != null) {
+ accessAudit.setPolicyVersion(MiscUtil.toLong(value));
+ }
+
+ value = auditEvent.getAccessType();
+ if (value != null) {
+ accessAudit.setAccessType(value.toString());
+ }
+
+ value = auditEvent.getAclEnforcer();
+ if (value != null) {
+ accessAudit.setAclEnforcer(value.toString());
+ }
+
+ value = auditEvent.getAgentId();
+ if (value != null) {
+ accessAudit.setAgentId(value.toString());
+ }
+
+ value = auditEvent.getRepositoryName();
+ if (value != null) {
+ accessAudit.setRepoName(value.toString());
+
+ XXService xxService = daoManager.getXXService().findByName(accessAudit.getRepoName());
+
+ if (xxService != null) {
+ accessAudit.setRepoDisplayName(xxService.getDisplayName());
+ }
+ }
+
+ value = auditEvent.getSessionId();
+ if (value != null) {
+ accessAudit.setSessionId(value.toString());
+ }
+
+ value = auditEvent.getUser();
+ if (value != null) {
+ accessAudit.setRequestUser(value.toString());
+ }
+
+ value = auditEvent.getRequestData();
+ if (value != null) {
+ accessAudit.setRequestData(value.toString());
+ }
+ value = auditEvent.getResourcePath();
+ if (value != null) {
+ accessAudit.setResourcePath(value.toString());
+ }
+
+ value = auditEvent.getClientIP();
+ if (value != null) {
+ accessAudit.setClientIP(value.toString());
+ }
+
+ accessAudit.setAccessResult(auditEvent.getAccessResult());
+ accessAudit.setPolicyId(auditEvent.getPolicyId());
+ accessAudit.setRepoType(auditEvent.getRepositoryType());
+
+ XXServiceDef xServiceDef = daoManager.getXXServiceDef().getById((long) accessAudit.getRepoType());
+
+ if (xServiceDef != null) {
+ accessAudit.setServiceType(xServiceDef.getName());
+ accessAudit.setServiceTypeDisplayName(xServiceDef.getDisplayName());
+ }
+
+ value = auditEvent.getResourceType();
+ if (value != null) {
+ accessAudit.setResourceType(value.toString());
+ }
+
+ value = auditEvent.getResultReason();
+ if (value != null) {
+ accessAudit.setResultReason(value.toString());
+ }
+
+ value = auditEvent.getAction();
+ if (value != null) {
+ accessAudit.setAction(value.toString());
+ }
+
+ value = auditEvent.getEventTime();
+ if (value != null) {
+ accessAudit.setEventTime(MiscUtil.toLocalDate(value));
+ }
+
+ accessAudit.setSequenceNumber(auditEvent.getSeqNum());
+ accessAudit.setEventCount(auditEvent.getEventCount());
+ accessAudit.setEventDuration(auditEvent.getEventDurationMS());
+
+ value = auditEvent.getTags();
+ if (value != null) {
+ accessAudit.setTags(value.toString());
+ }
+
+ value = auditEvent.getDatasets();
+ if (value != null) {
+ accessAudit.setDatasets(value.toString());
+ }
+
+ value = auditEvent.getProjects();
+ if (value != null) {
+ accessAudit.setProjects(value.toString());
+ }
+
+ return accessAudit;
+ }
+}
diff --git a/security-admin/src/main/java/org/apache/ranger/amazon/cloudwatch/CloudWatchMgr.java b/security-admin/src/main/java/org/apache/ranger/amazon/cloudwatch/CloudWatchMgr.java
index 4dcc6b2b88..ba08c6f404 100644
--- a/security-admin/src/main/java/org/apache/ranger/amazon/cloudwatch/CloudWatchMgr.java
+++ b/security-admin/src/main/java/org/apache/ranger/amazon/cloudwatch/CloudWatchMgr.java
@@ -19,60 +19,65 @@
package org.apache.ranger.amazon.cloudwatch;
-import static org.apache.ranger.audit.destination.AmazonCloudWatchAuditDestination.CONFIG_PREFIX;
-import static org.apache.ranger.audit.destination.AmazonCloudWatchAuditDestination.PROP_REGION;
-
+import com.amazonaws.services.logs.AWSLogs;
+import com.amazonaws.services.logs.AWSLogsClientBuilder;
import org.apache.commons.lang.StringUtils;
import org.apache.ranger.common.PropertiesUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
-import com.amazonaws.services.logs.AWSLogs;
-import com.amazonaws.services.logs.AWSLogsClientBuilder;
+import static org.apache.ranger.audit.destination.AmazonCloudWatchAuditDestination.CONFIG_PREFIX;
+import static org.apache.ranger.audit.destination.AmazonCloudWatchAuditDestination.PROP_REGION;
/**
* This class initializes the CloudWatch client
- *
*/
@Component
public class CloudWatchMgr {
+ private static final Logger LOGGER = LoggerFactory.getLogger(CloudWatchMgr.class);
+
+ private AWSLogs client;
+ private String regionName;
+
+ public AWSLogs getClient() {
+ AWSLogs me = client;
+
+ if (me == null) {
+ me = connect();
+ }
+
+ return me;
+ }
+
+ synchronized AWSLogs connect() {
+ AWSLogs me = client;
+
+ if (me == null) {
+ synchronized (CloudWatchMgr.class) {
+ me = client;
- private static final Logger LOGGER = LoggerFactory.getLogger(CloudWatchMgr.class);
+ if (me == null) {
+ try {
+ me = newClient();
+ client = me;
+ } catch (Throwable t) {
+ LOGGER.error("Can't connect to CloudWatch region:{} ", regionName, t);
+ }
+ }
+ }
+ }
- private AWSLogs client = null;
- private String regionName;
+ return me;
+ }
- synchronized void connect() {
- if (client == null) {
- synchronized (CloudWatchMgr.class) {
- if (client == null) {
- regionName = PropertiesUtil.getProperty(CONFIG_PREFIX + "." + PROP_REGION);
- try {
- client = newClient();
- } catch (Throwable t) {
- LOGGER.error("Can't connect to CloudWatch region: " + regionName, t);
- }
- }
- }
- }
- }
+ private AWSLogs newClient() {
+ regionName = PropertiesUtil.getProperty(CONFIG_PREFIX + "." + PROP_REGION);
- public AWSLogs getClient() {
- if (client == null) {
- synchronized (CloudWatchMgr.class) {
- if (client == null) {
- connect();
- }
- }
- }
- return client;
- }
+ if (StringUtils.isBlank(regionName)) {
+ return AWSLogsClientBuilder.standard().build();
+ }
- private AWSLogs newClient() {
- if (StringUtils.isBlank(regionName)) {
- return AWSLogsClientBuilder.standard().build();
- }
- return AWSLogsClientBuilder.standard().withRegion(regionName).build();
- }
+ return AWSLogsClientBuilder.standard().withRegion(regionName).build();
+ }
}
diff --git a/security-admin/src/main/java/org/apache/ranger/amazon/cloudwatch/CloudWatchUtil.java b/security-admin/src/main/java/org/apache/ranger/amazon/cloudwatch/CloudWatchUtil.java
index b7d3cad97b..473498dc1d 100644
--- a/security-admin/src/main/java/org/apache/ranger/amazon/cloudwatch/CloudWatchUtil.java
+++ b/security-admin/src/main/java/org/apache/ranger/amazon/cloudwatch/CloudWatchUtil.java
@@ -19,241 +19,267 @@
package org.apache.ranger.amazon.cloudwatch;
-import static org.apache.ranger.audit.destination.AmazonCloudWatchAuditDestination.CONFIG_PREFIX;
-import static org.apache.ranger.audit.destination.AmazonCloudWatchAuditDestination.PROP_LOG_GROUP_NAME;
-import static org.apache.ranger.audit.destination.AmazonCloudWatchAuditDestination.PROP_LOG_STREAM_PREFIX;
-
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-import java.util.TimeZone;
-
+import com.amazonaws.services.logs.AWSLogs;
+import com.amazonaws.services.logs.model.FilterLogEventsRequest;
+import com.amazonaws.services.logs.model.FilterLogEventsResult;
+import com.amazonaws.services.logs.model.FilteredLogEvent;
import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang.time.DateUtils;
import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.time.DateUtils;
import org.apache.ranger.common.PropertiesUtil;
import org.apache.ranger.common.SearchCriteria;
import org.apache.ranger.common.SearchField;
import org.apache.ranger.common.SearchField.SEARCH_TYPE;
import org.apache.ranger.common.SortField;
-import org.apache.ranger.common.StringUtil;
import org.apache.solr.client.solrj.util.ClientUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-import com.amazonaws.services.logs.AWSLogs;
-import com.amazonaws.services.logs.model.FilterLogEventsRequest;
-import com.amazonaws.services.logs.model.FilterLogEventsResult;
-import com.amazonaws.services.logs.model.FilteredLogEvent;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.TimeZone;
+
+import static org.apache.ranger.audit.destination.AmazonCloudWatchAuditDestination.CONFIG_PREFIX;
+import static org.apache.ranger.audit.destination.AmazonCloudWatchAuditDestination.PROP_LOG_GROUP_NAME;
+import static org.apache.ranger.audit.destination.AmazonCloudWatchAuditDestination.PROP_LOG_STREAM_PREFIX;
@Component
public class CloudWatchUtil {
- private static final Logger LOGGER = LoggerFactory.getLogger(CloudWatchUtil.class);
-
- @Autowired
- StringUtil stringUtil;
-
- String dateFormateStr = "yyyy-MM-dd'T'HH:mm:ss'Z'";
- SimpleDateFormat dateFormat = new SimpleDateFormat(dateFormateStr);
- private String logGroupName;
- private String logStreamPrefix;
-
- public CloudWatchUtil() {
- logGroupName = PropertiesUtil.getProperty(CONFIG_PREFIX + "." + PROP_LOG_GROUP_NAME, "ranger_audits");
- logStreamPrefix = PropertiesUtil.getProperty(CONFIG_PREFIX + "." + PROP_LOG_STREAM_PREFIX, "");
- String timeZone = PropertiesUtil.getProperty("ranger.cloudwatch.timezone");
- if (timeZone != null) {
- LOGGER.info("Setting timezone to " + timeZone);
- try {
- dateFormat.setTimeZone(TimeZone.getTimeZone(timeZone));
- } catch (Throwable t) {
- LOGGER.error("Error setting timezone. TimeZone = " + timeZone);
- }
- }
- }
-
- public List searchResources(AWSLogs client, SearchCriteria searchCriteria,
- List searchFields, List sortFieldList) {
- List result = new ArrayList();
- try {
- String nextToken = null;
- FilterLogEventsRequest filterLogEventsRequest = getFilterLogEventsRequest(client, searchCriteria, searchFields);
- boolean done = false;
- //TODO: Improve response time
- //This approach is slow as cloudwatch doesn't provide timestamp based sorting in descending order
- do {
- if (nextToken != null) {
- filterLogEventsRequest = filterLogEventsRequest.withNextToken(nextToken);
- }
-
- FilterLogEventsResult response = client.filterLogEvents(filterLogEventsRequest);
- if (response != null) {
- if (CollectionUtils.isNotEmpty(response.getEvents())) {
- //To handle outofmemory issue, max 10k records are stored in the list
- if (result.size() > 10000) {
- result.clear();
- }
- result.addAll(response.getEvents());
- } else {
- done = true;
- break;
- }
- // check if token is the same
- if (response.getNextToken().equals(nextToken)) {
- done = true;
- break;
- }
- // save new token
- nextToken = response.getNextToken();
- if (nextToken == null) {
- done = true;
- break;
- }
- }
- } while (!done);
- LOGGER.info("Successfully got CloudWatch log events!");
- } catch (Exception e) {
- LOGGER.error("Error searching records from CloudWatch", e);
- }
- return result;
- }
-
- public FilterLogEventsRequest getFilterLogEventsRequest(AWSLogs client, SearchCriteria searchCriteria,
- List searchFields) {
- FilterLogEventsRequest filterLogEventsRequest = null;
- StringBuilder filterPattern = new StringBuilder("");
- Date fromDate = null;
- Date toDate = null;
-
- if (searchCriteria.getParamList() != null) {
- List filterExpr = new ArrayList();
-
- for (SearchField searchField : searchFields) {
- Object paramValue = searchCriteria.getParamValue(searchField.getClientFieldName());
- if (paramValue == null || paramValue.toString().isEmpty()) {
- continue;
- }
-
- String fieldName = searchField.getFieldName();
- if (searchField.getDataType() == SearchField.DATA_TYPE.DATE) {
- if (!(paramValue instanceof Date)) {
- LOGGER.error("Search field is not a Java Date Object, paramValue = " + paramValue);
- } else {
- if (searchField.getSearchType() == SEARCH_TYPE.GREATER_EQUAL_THAN || searchField.getSearchType() == SEARCH_TYPE.GREATER_THAN) {
- fromDate = (Date) paramValue;
- } else if (searchField.getSearchType() == SEARCH_TYPE.LESS_EQUAL_THAN || searchField.getSearchType() == SEARCH_TYPE.LESS_THAN) {
- toDate = (Date) paramValue;
- }
- }
- } else if (paramValue instanceof Collection) {
- String fq = orList(fieldName, (Collection>) paramValue);
- if (StringUtils.isNotBlank(fq)) {
- filterExpr.add(fq);
- }
- } else {
- String fq = null;
- if (searchField.getSearchType() == SEARCH_TYPE.PARTIAL) {
- fq = setFieldForPartialSearch(fieldName, paramValue);
- } else {
- fq = setField(fieldName, paramValue);
- }
- if (StringUtils.isNotBlank(fq)) {
- filterExpr.add(fq);
- }
- }
- }
-
- if (fromDate == null) {
- fromDate = DateUtils.truncate(new Date(), Calendar.DAY_OF_MONTH);
- }
- if (toDate == null) {
- Date today = DateUtils.truncate(new Date(), Calendar.DAY_OF_MONTH);
- toDate = DateUtils.addDays(today, 1);
- }
-
- // Syntax : { ($.user.id = 1) && ($.users[0].email = "user@example.com") }
- if (CollectionUtils.isNotEmpty(filterExpr)) {
- String strExpr = "";
- int count = -1;
- for (String fq : filterExpr) {
- count++;
- if (count > 0) {
- strExpr += " &&";
- }
- strExpr = strExpr.concat("(" + fq + ")");
- }
- if (strExpr.endsWith("&&")) {
- strExpr = strExpr.substring(0, strExpr.length() - 3);
- }
- if (StringUtils.isNotBlank(strExpr)) {
- filterPattern.append("{" + strExpr + "}");
- }
- }
- }
-
- if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("filterExpression for cloudwatch request " + filterPattern.toString());
- }
-
- // Add FilterPattern which will only fetch logs required
- filterLogEventsRequest = new FilterLogEventsRequest()
- .withLogGroupName(logGroupName)
- .withStartTime(fromDate.getTime())
- .withEndTime(toDate.getTime())
- .withFilterPattern(filterPattern.toString());
-
- if (StringUtils.isNotBlank(logStreamPrefix)) {
- filterLogEventsRequest.setLogStreamNamePrefix(logStreamPrefix);
- }
-
- return filterLogEventsRequest;
- }
-
- //Syntax { $.user.email = "user@example.com" || $.coordinates[0][1] = nonmatch && $.actions[2] = nomatch }
- private String orList(String fieldName, Collection> valueList) {
- if (valueList == null || valueList.isEmpty()) {
- return null;
- }
- String expr = "";
- int count = -1;
- for (Object value : valueList) {
- count++;
- if (count > 0) {
- expr += " || ";
- }
- expr += setField(fieldName, value);
- }
- return expr;
- }
-
- private String setField(String fieldName, Object value) {
- if (value == null || StringUtils.isBlank(value.toString())) {
- return null;
- }
- if (value instanceof Integer || value instanceof Long) {
- if (fieldName.startsWith("-")) {
- fieldName = fieldName.substring(1);
- return "$." + fieldName + " != " + ClientUtils.escapeQueryChars(value.toString().trim().toLowerCase());
- }
- return "$." + fieldName + " = " + ClientUtils.escapeQueryChars(value.toString().trim().toLowerCase());
- }
- if (fieldName.startsWith("-")) {
- fieldName = fieldName.substring(1);
- return "$." + fieldName + " != \"" + ClientUtils.escapeQueryChars(value.toString().trim().toLowerCase()) + "\"";
- }
- return "$." + fieldName + " = \"" + ClientUtils.escapeQueryChars(value.toString().trim().toLowerCase()) + "\"";
- }
-
- private String setFieldForPartialSearch(String fieldName, Object value) {
- if (value == null || StringUtils.isBlank(value.toString())) {
- return null;
- }
- return "$." + fieldName + "= \"*" + ClientUtils.escapeQueryChars(value.toString().trim().toLowerCase()) + "*\"";
- }
+ private static final Logger LOGGER = LoggerFactory.getLogger(CloudWatchUtil.class);
+
+ final String dateFormateStr = "yyyy-MM-dd'T'HH:mm:ss'Z'";
+ final SimpleDateFormat dateFormat = new SimpleDateFormat(dateFormateStr);
+
+ private final String logGroupName;
+ private final String logStreamPrefix;
+
+ public CloudWatchUtil() {
+ logGroupName = PropertiesUtil.getProperty(CONFIG_PREFIX + "." + PROP_LOG_GROUP_NAME, "ranger_audits");
+ logStreamPrefix = PropertiesUtil.getProperty(CONFIG_PREFIX + "." + PROP_LOG_STREAM_PREFIX, "");
+
+ String timeZone = PropertiesUtil.getProperty("ranger.cloudwatch.timezone");
+
+ if (timeZone != null) {
+ LOGGER.info("Setting timezone to {}", timeZone);
+
+ try {
+ dateFormat.setTimeZone(TimeZone.getTimeZone(timeZone));
+ } catch (Throwable t) {
+ LOGGER.error("Error setting timezone. TimeZone ={} ", timeZone);
+ }
+ }
+ }
+
+ public List searchResources(AWSLogs client, SearchCriteria searchCriteria, List searchFields, List sortFieldList) {
+ List result = new ArrayList<>();
+
+ try {
+ String nextToken = null;
+ FilterLogEventsRequest filterLogEventsRequest = getFilterLogEventsRequest(client, searchCriteria, searchFields);
+ boolean done = false;
+
+ //TODO: Improve response time
+ //This approach is slow as cloudwatch doesn't provide timestamp based sorting in descending order
+ do {
+ if (nextToken != null) {
+ filterLogEventsRequest = filterLogEventsRequest.withNextToken(nextToken);
+ }
+
+ FilterLogEventsResult response = client.filterLogEvents(filterLogEventsRequest);
+
+ if (response != null) {
+ if (CollectionUtils.isNotEmpty(response.getEvents())) {
+ //To handle outofmemory issue, max 10k records are stored in the list
+ if (result.size() > 10000) {
+ result.clear();
+ }
+
+ result.addAll(response.getEvents());
+ } else {
+ done = true;
+ break;
+ }
+
+ // check if token is the same
+ if (response.getNextToken().equals(nextToken)) {
+ done = true;
+ break;
+ }
+
+ // save new token
+ nextToken = response.getNextToken();
+
+ if (nextToken == null) {
+ done = true;
+ break;
+ }
+ }
+ }
+ while (!done);
+
+ LOGGER.info("Successfully got CloudWatch log events!");
+ } catch (Exception e) {
+ LOGGER.error("Error searching records from CloudWatch", e);
+ }
+
+ return result;
+ }
+
+ public FilterLogEventsRequest getFilterLogEventsRequest(AWSLogs client, SearchCriteria searchCriteria, List searchFields) {
+ StringBuilder filterPattern = new StringBuilder();
+ Date fromDate = null;
+ Date toDate = null;
+
+ if (searchCriteria.getParamList() != null) {
+ List filterExpr = new ArrayList<>();
+
+ for (SearchField searchField : searchFields) {
+ Object paramValue = searchCriteria.getParamValue(searchField.getClientFieldName());
+
+ if (paramValue == null || paramValue.toString().isEmpty()) {
+ continue;
+ }
+
+ String fieldName = searchField.getFieldName();
+
+ if (searchField.getDataType() == SearchField.DATA_TYPE.DATE) {
+ if (!(paramValue instanceof Date)) {
+ LOGGER.error("Search field is not a Java Date Object, paramValue = {}", paramValue);
+ } else {
+ if (searchField.getSearchType() == SEARCH_TYPE.GREATER_EQUAL_THAN || searchField.getSearchType() == SEARCH_TYPE.GREATER_THAN) {
+ fromDate = (Date) paramValue;
+ } else if (searchField.getSearchType() == SEARCH_TYPE.LESS_EQUAL_THAN || searchField.getSearchType() == SEARCH_TYPE.LESS_THAN) {
+ toDate = (Date) paramValue;
+ }
+ }
+ } else if (paramValue instanceof Collection) {
+ String fq = orList(fieldName, (Collection>) paramValue);
+
+ if (StringUtils.isNotBlank(fq)) {
+ filterExpr.add(fq);
+ }
+ } else {
+ String fq;
+
+ if (searchField.getSearchType() == SEARCH_TYPE.PARTIAL) {
+ fq = setFieldForPartialSearch(fieldName, paramValue);
+ } else {
+ fq = setField(fieldName, paramValue);
+ }
+
+ if (StringUtils.isNotBlank(fq)) {
+ filterExpr.add(fq);
+ }
+ }
+ }
+
+ if (fromDate == null) {
+ fromDate = DateUtils.truncate(new Date(), Calendar.DAY_OF_MONTH);
+ }
+
+ if (toDate == null) {
+ Date today = DateUtils.truncate(new Date(), Calendar.DAY_OF_MONTH);
+
+ toDate = DateUtils.addDays(today, 1);
+ }
+
+ // Syntax : { ($.user.id = 1) && ($.users[0].email = "user@example.com") }
+ if (CollectionUtils.isNotEmpty(filterExpr)) {
+ String strExpr = "";
+ int count = -1;
+
+ for (String fq : filterExpr) {
+ count++;
+
+ if (count > 0) {
+ strExpr += " &&";
+ }
+
+ strExpr = strExpr.concat("(" + fq + ")");
+ }
+
+ if (strExpr.endsWith("&&")) {
+ strExpr = strExpr.substring(0, strExpr.length() - 3);
+ }
+
+ if (StringUtils.isNotBlank(strExpr)) {
+ filterPattern.append("{").append(strExpr).append("}");
+ }
+ }
+ }
+
+ LOGGER.debug("filterExpression for cloudwatch request {}", filterPattern);
+
+ // Add FilterPattern which will only fetch logs required
+ FilterLogEventsRequest filterLogEventsRequest = new FilterLogEventsRequest()
+ .withLogGroupName(logGroupName)
+ .withStartTime(fromDate.getTime())
+ .withEndTime(toDate.getTime())
+ .withFilterPattern(filterPattern.toString());
+
+ if (StringUtils.isNotBlank(logStreamPrefix)) {
+ filterLogEventsRequest.setLogStreamNamePrefix(logStreamPrefix);
+ }
+
+ return filterLogEventsRequest;
+ }
+
+ //Syntax { $.user.email = "user@example.com" || $.coordinates[0][1] = nonmatch && $.actions[2] = nomatch }
+ private String orList(String fieldName, Collection> valueList) {
+ if (valueList == null || valueList.isEmpty()) {
+ return null;
+ }
+
+ String expr = "";
+ int count = -1;
+
+ for (Object value : valueList) {
+ count++;
+
+ if (count > 0) {
+ expr += " || ";
+ }
+
+ expr += setField(fieldName, value);
+ }
+
+ return expr;
+ }
+
+ private String setField(String fieldName, Object value) {
+ if (value == null || StringUtils.isBlank(value.toString())) {
+ return null;
+ }
+
+ if (value instanceof Integer || value instanceof Long) {
+ if (fieldName.startsWith("-")) {
+ fieldName = fieldName.substring(1);
+
+ return "$." + fieldName + " != " + ClientUtils.escapeQueryChars(value.toString().trim().toLowerCase());
+ }
+
+ return "$." + fieldName + " = " + ClientUtils.escapeQueryChars(value.toString().trim().toLowerCase());
+ }
+
+ if (fieldName.startsWith("-")) {
+ fieldName = fieldName.substring(1);
+
+ return "$." + fieldName + " != \"" + ClientUtils.escapeQueryChars(value.toString().trim().toLowerCase()) + "\"";
+ }
+
+ return "$." + fieldName + " = \"" + ClientUtils.escapeQueryChars(value.toString().trim().toLowerCase()) + "\"";
+ }
+
+ private String setFieldForPartialSearch(String fieldName, Object value) {
+ if (value == null || StringUtils.isBlank(value.toString())) {
+ return null;
+ }
+ return "$." + fieldName + "= \"*" + ClientUtils.escapeQueryChars(value.toString().trim().toLowerCase()) + "*\"";
+ }
}
diff --git a/security-admin/src/main/java/org/apache/ranger/authentication/unix/jaas/RoleUserAuthorityGranter.java b/security-admin/src/main/java/org/apache/ranger/authentication/unix/jaas/RoleUserAuthorityGranter.java
index b10ac1bf13..6f6404fecd 100644
--- a/security-admin/src/main/java/org/apache/ranger/authentication/unix/jaas/RoleUserAuthorityGranter.java
+++ b/security-admin/src/main/java/org/apache/ranger/authentication/unix/jaas/RoleUserAuthorityGranter.java
@@ -17,24 +17,22 @@
* under the License.
*/
- package org.apache.ranger.authentication.unix.jaas;
+package org.apache.ranger.authentication.unix.jaas;
+
+import org.springframework.security.authentication.jaas.AuthorityGranter;
import java.security.Principal;
import java.util.Collections;
import java.util.Set;
-import org.springframework.security.authentication.jaas.AuthorityGranter;
-
public class RoleUserAuthorityGranter implements AuthorityGranter {
-
- @Override
- public Set grant(Principal principal) {
- if (principal instanceof UnixGroupPrincipal) {
- Collections.singleton(principal.getName());
- }
- else {
- Collections.singleton("ROLE_USER");
- }
- return null;
- }
+ @Override
+ public Set grant(Principal principal) {
+ if (principal instanceof UnixGroupPrincipal) {
+ Collections.singleton(principal.getName());
+ } else {
+ Collections.singleton("ROLE_USER");
+ }
+ return null;
+ }
}
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/AssetMgr.java b/security-admin/src/main/java/org/apache/ranger/biz/AssetMgr.java
index 620d1e6193..4d55598883 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/AssetMgr.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/AssetMgr.java
@@ -17,24 +17,7 @@
* under the License.
*/
- package org.apache.ranger.biz;
-
-import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import javax.annotation.PostConstruct;
-import javax.naming.InvalidNameException;
-import javax.naming.ldap.LdapName;
-import javax.naming.ldap.Rdn;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+package org.apache.ranger.biz;
import org.apache.commons.lang.StringUtils;
import org.apache.ranger.amazon.cloudwatch.CloudWatchAccessAuditsService;
@@ -60,1078 +43,654 @@
import org.apache.ranger.plugin.util.RangerPluginCapability;
import org.apache.ranger.plugin.util.RangerRESTUtils;
import org.apache.ranger.plugin.util.SearchFilter;
-import org.apache.ranger.service.*;
+import org.apache.ranger.service.RangerPluginInfoService;
+import org.apache.ranger.service.RangerTrxLogV2Service;
+import org.apache.ranger.service.XAccessAuditService;
+import org.apache.ranger.service.XAuditMapService;
+import org.apache.ranger.service.XGroupService;
+import org.apache.ranger.service.XPermMapService;
+import org.apache.ranger.service.XPolicyService;
+import org.apache.ranger.service.XUgsyncAuditInfoService;
+import org.apache.ranger.service.XUserService;
import org.apache.ranger.solr.SolrAccessAuditsService;
import org.apache.ranger.util.RestUtil;
-import org.apache.ranger.view.*;
+import org.apache.ranger.view.VXAccessAuditList;
+import org.apache.ranger.view.VXAsset;
+import org.apache.ranger.view.VXAuditMap;
+import org.apache.ranger.view.VXGroup;
+import org.apache.ranger.view.VXGroupList;
+import org.apache.ranger.view.VXPermMap;
+import org.apache.ranger.view.VXPolicyExportAuditList;
+import org.apache.ranger.view.VXResource;
+import org.apache.ranger.view.VXTrxLog;
+import org.apache.ranger.view.VXTrxLogList;
+import org.apache.ranger.view.VXTrxLogV2;
import org.apache.ranger.view.VXTrxLogV2.AttributeChangeInfo;
import org.apache.ranger.view.VXTrxLogV2.ObjectChangeInfo;
+import org.apache.ranger.view.VXUgsyncAuditInfoList;
+import org.apache.ranger.view.VXUser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
+import javax.annotation.PostConstruct;
+import javax.naming.InvalidNameException;
+import javax.naming.ldap.LdapName;
+import javax.naming.ldap.Rdn;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
@Component
public class AssetMgr extends AssetMgrBase {
- private static final String PROP_RANGER_LOG_SC_NOT_MODIFIED = "ranger.log.SC_NOT_MODIFIED";
- private static final String PROP_PLUGIN_ACTIVITY_AUDIT_NOT_MODIFIED = "ranger.plugin.activity.audit.not.modified";
- private static final String PROP_PLUGIN_ACTIVITY_AUDIT_COMMIT_INLINE = "ranger.plugin.activity.audit.commit.inline";
+ private static final Logger logger = LoggerFactory.getLogger(AssetMgr.class);
+
+ private static final String PROP_RANGER_LOG_SC_NOT_MODIFIED = "ranger.log.SC_NOT_MODIFIED";
+ private static final String PROP_PLUGIN_ACTIVITY_AUDIT_NOT_MODIFIED = "ranger.plugin.activity.audit.not.modified";
+ private static final String PROP_PLUGIN_ACTIVITY_AUDIT_COMMIT_INLINE = "ranger.plugin.activity.audit.commit.inline";
+ private static final String adminCapabilities = Long.toHexString(new RangerPluginCapability().getPluginCapabilities());
+
+ @Autowired
+ XPermMapService xPermMapService;
+
+ @Autowired
+ XAuditMapService xAuditMapService;
+
+ @Autowired
+ JSONUtil jsonUtil;
- @Autowired
- XPermMapService xPermMapService;
+ @Autowired
+ RangerBizUtil msBizUtil;
- @Autowired
- XAuditMapService xAuditMapService;
+ @Autowired
+ StringUtil stringUtil;
- @Autowired
- JSONUtil jsonUtil;
+ @Autowired
+ RangerDaoManager rangerDaoManager;
- @Autowired
- RangerBizUtil msBizUtil;
+ @Autowired
+ XUserService xUserService;
- @Autowired
- StringUtil stringUtil;
+ @Autowired
+ RangerBizUtil xaBizUtil;
- @Autowired
- RangerDaoManager rangerDaoManager;
+ @Autowired
+ RangerTrxLogV2Service xTrxLogService;
- @Autowired
- XUserService xUserService;
+ @Autowired
+ XAccessAuditService xAccessAuditService;
- @Autowired
- RangerBizUtil xaBizUtil;
+ @Autowired
+ XGroupService xGroupService;
- @Autowired
- RangerTrxLogV2Service xTrxLogService;
+ @Autowired
+ XUserMgr xUserMgr;
- @Autowired
- XAccessAuditService xAccessAuditService;
+ @Autowired
+ SolrAccessAuditsService solrAccessAuditsService;
- @Autowired
- XGroupService xGroupService;
-
- @Autowired
- XUserMgr xUserMgr;
+ @Autowired
+ ElasticSearchAccessAuditsService elasticSearchAccessAuditsService;
- @Autowired
- SolrAccessAuditsService solrAccessAuditsService;
+ @Autowired
+ CloudWatchAccessAuditsService cloudWatchAccessAuditsService;
- @Autowired
- ElasticSearchAccessAuditsService elasticSearchAccessAuditsService;
+ @Autowired
+ XPolicyService xPolicyService;
- @Autowired
- CloudWatchAccessAuditsService cloudWatchAccessAuditsService;
+ @Autowired
+ RangerTransactionSynchronizationAdapter transactionSynchronizationAdapter;
- @Autowired
- XPolicyService xPolicyService;
+ @Autowired
+ RangerPluginInfoService pluginInfoService;
- @Autowired
- RangerTransactionSynchronizationAdapter transactionSynchronizationAdapter;
+ @Autowired
+ XUgsyncAuditInfoService xUgsyncAuditInfoService;
- @Autowired
- RangerPluginInfoService pluginInfoService;
+ @Autowired
+ ServiceMgr serviceMgr;
- @Autowired
- XUgsyncAuditInfoService xUgsyncAuditInfoService;
+ boolean rangerLogNotModified;
+ boolean pluginActivityAuditLogNotModified;
+ boolean pluginActivityAuditCommitInline;
- @Autowired
- ServiceMgr serviceMgr;
-
- boolean rangerLogNotModified = false;
- boolean pluginActivityAuditLogNotModified = false;
- boolean pluginActivityAuditCommitInline = false;
-
- private static final Logger logger = LoggerFactory.getLogger(AssetMgr.class);
-
- private static final String adminCapabilities = Long.toHexString(new RangerPluginCapability().getPluginCapabilities());
-
- @PostConstruct
- public void init() {
- logger.info("==> AssetMgr.init()");
-
- rangerLogNotModified = RangerAdminConfig.getInstance().getBoolean(PROP_RANGER_LOG_SC_NOT_MODIFIED, false);
- pluginActivityAuditLogNotModified = RangerAdminConfig.getInstance().getBoolean(PROP_PLUGIN_ACTIVITY_AUDIT_NOT_MODIFIED, false);
- pluginActivityAuditCommitInline = RangerAdminConfig.getInstance().getBoolean(PROP_PLUGIN_ACTIVITY_AUDIT_COMMIT_INLINE, false);
-
- logger.info("{}={}", PROP_RANGER_LOG_SC_NOT_MODIFIED, rangerLogNotModified);
- logger.info("{}={}", PROP_PLUGIN_ACTIVITY_AUDIT_NOT_MODIFIED, pluginActivityAuditLogNotModified);
- logger.info("{}={}", PROP_PLUGIN_ACTIVITY_AUDIT_COMMIT_INLINE, pluginActivityAuditCommitInline);
-
- logger.info("<== AssetMgr.init()");
- }
-
- public String getLatestRepoPolicy(VXAsset xAsset, List xResourceList, Long updatedTime,
- X509Certificate[] certchain, boolean httpEnabled, String epoch,
- String ipAddress, boolean isSecure, String count, String agentId) {
- if(xAsset == null) {
- logger.error("Requested repository not found");
- throw restErrorUtil.createRESTException("No Data Found.",
- MessageEnums.DATA_NOT_FOUND);
- }
- if (xResourceList == null) {
- logger.error("ResourceList is found");
- throw restErrorUtil.createRESTException("No Data Found.",
- MessageEnums.DATA_NOT_FOUND);
- }
- if(xAsset.getActiveStatus() == RangerCommonEnums.ACT_STATUS_DISABLED) {
- logger.error("Requested repository is disabled");
- throw restErrorUtil.createRESTException("Unauthorized access.",
- MessageEnums.OPER_NO_EXPORT);
- }
-
- HashMap updatedRepo = new HashMap();
- updatedRepo.put("repository_name", xAsset.getName());
-
- XXPolicyExportAudit policyExportAudit = new XXPolicyExportAudit();
- policyExportAudit.setRepositoryName(xAsset.getName());
-
- if (agentId != null && !agentId.isEmpty()) {
- policyExportAudit.setAgentId(agentId);
- }
-
- policyExportAudit.setClientIP(ipAddress);
-
- if (epoch != null && !epoch.trim().isEmpty() && !"null".equalsIgnoreCase(epoch)) {
- policyExportAudit.setRequestedEpoch(Long.parseLong(epoch));
- } else {
- policyExportAudit.setRequestedEpoch(0L);
- }
-
- if (!httpEnabled) {
- if (!isSecure) {
- policyExportAudit
- .setHttpRetCode(HttpServletResponse.SC_BAD_REQUEST);
- createPolicyAudit(policyExportAudit);
-
- throw restErrorUtil.createRESTException("Unauthorized access -"
- + " only https allowed",
- MessageEnums.OPER_NOT_ALLOWED_FOR_ENTITY);
- }
-
- if (certchain == null || certchain.length == 0) {
-
- policyExportAudit
- .setHttpRetCode(HttpServletResponse.SC_BAD_REQUEST);
- createPolicyAudit(policyExportAudit);
-
- throw restErrorUtil.createRESTException("Unauthorized access -"
- + " unable to get client certificate",
- MessageEnums.OPER_NOT_ALLOWED_FOR_ENTITY);
- }
- }
-
- Long policyCount = restErrorUtil.parseLong(count, "Invalid value for "
- + "policyCount", MessageEnums.INVALID_INPUT_DATA, null,
- "policyCount");
-
- String commonName = null;
-
- if (certchain != null) {
- X509Certificate clientCert = certchain[0];
- String dn = clientCert.getSubjectX500Principal().getName();
-
- try {
- LdapName ln = new LdapName(dn);
- for (Rdn rdn : ln.getRdns()) {
- if ("CN".equalsIgnoreCase(rdn.getType())) {
- commonName = rdn.getValue() + "";
- break;
- }
- }
- if (commonName == null) {
- policyExportAudit
- .setHttpRetCode(HttpServletResponse.SC_BAD_REQUEST);
- createPolicyAudit(policyExportAudit);
-
- throw restErrorUtil.createRESTException(
- "Unauthorized access - Unable to find Common Name from ["
- + dn + "]",
- MessageEnums.OPER_NOT_ALLOWED_FOR_ENTITY);
- }
- } catch (InvalidNameException e) {
- policyExportAudit
- .setHttpRetCode(HttpServletResponse.SC_BAD_REQUEST);
- createPolicyAudit(policyExportAudit);
-
- logger.error("Invalid Common Name.", e);
- throw restErrorUtil.createRESTException(
- "Unauthorized access - Invalid Common Name",
- MessageEnums.OPER_NOT_ALLOWED_FOR_ENTITY);
- }
- }
-
- if (policyCount == null) {
- policyCount = 0L;
- }
-
- if (commonName != null) {
- String config = xAsset.getConfig();
- Map configMap = jsonUtil.jsonToMap(config);
- String cnFromConfig = configMap.get("commonNameForCertificate");
-
- if (cnFromConfig == null
- || !commonName.equalsIgnoreCase(cnFromConfig)) {
- policyExportAudit
- .setHttpRetCode(HttpServletResponse.SC_BAD_REQUEST);
- createPolicyAudit(policyExportAudit);
-
- throw restErrorUtil.createRESTException(
- "Unauthorized access. expected [" + cnFromConfig
- + "], found [" + commonName + "]",
- MessageEnums.OPER_NOT_ALLOWED_FOR_ENTITY);
- }
- }
-
- long epochTime = epoch != null ? Long.parseLong(epoch) : 0;
-
- if(epochTime == updatedTime) {
- int resourceListSz = xResourceList.size();
-
- if (policyCount == resourceListSz) {
- policyExportAudit
- .setHttpRetCode(HttpServletResponse.SC_NOT_MODIFIED);
- createPolicyAudit(policyExportAudit);
-
- throw restErrorUtil.createRESTException(
- HttpServletResponse.SC_NOT_MODIFIED,
- "No change since last update", false);
- }
- }
-
- List> resourceList = new ArrayList>();
-
- // HDFS Repository
- if (xAsset.getAssetType() == AppConstants.ASSET_HDFS) {
- for (VXResource xResource : xResourceList) {
- HashMap resourceMap = new HashMap();
- resourceMap.put("id", xResource.getId());
- resourceMap.put("resource", xResource.getName());
- resourceMap.put("isRecursive",
- getBooleanValue(xResource.getIsRecursive()));
- resourceMap.put("policyStatus", RangerCommonEnums
- .getLabelFor_ActiveStatus(xResource
- .getResourceStatus()));
- // resourceMap.put("isEncrypt",
- // AKAConstants.getLabelFor_BooleanValue(xResource.getIsEncrypt()));
- populatePermMap(xResource, resourceMap, AppConstants.ASSET_HDFS);
- List xAuditMaps = xResource.getAuditList();
- if (xAuditMaps.size() != 0) {
- resourceMap.put("audit", 1);
- } else {
- resourceMap.put("audit", 0);
- }
-
- resourceList.add(resourceMap);
- }
- } else if (xAsset.getAssetType() == AppConstants.ASSET_HIVE) {
- for (VXResource xResource : xResourceList) {
- HashMap resourceMap = new HashMap();
- resourceMap.put("id", xResource.getId());
- resourceMap.put("database_name", xResource.getDatabases());
- resourceMap.put("policyStatus", RangerCommonEnums
- .getLabelFor_ActiveStatus(xResource
- .getResourceStatus()));
- resourceMap.put("tablePolicyType", AppConstants
- .getLabelFor_PolicyType(xResource.getTableType()));
- resourceMap.put("columnPolicyType", AppConstants
- .getLabelFor_PolicyType(xResource.getColumnType()));
- int resourceType = xResource.getResourceType();
- if (resourceType == AppConstants.RESOURCE_UDF) {
- resourceMap.put("udf_name", xResource.getUdfs());
- } else if (resourceType == AppConstants.RESOURCE_COLUMN) {
- resourceMap.put("table_name", xResource.getTables());
- resourceMap.put("column_name", xResource.getColumns());
- } else if (resourceType == AppConstants.RESOURCE_TABLE) {
- resourceMap.put("table_name", xResource.getTables());
- }
-
- populatePermMap(xResource, resourceMap, AppConstants.ASSET_HIVE);
-
- List xAuditMaps = xResource.getAuditList();
- if (xAuditMaps.size() != 0) {
- resourceMap.put("audit", 1);
- } else {
- resourceMap.put("audit", 0);
- }
- resourceList.add(resourceMap);
- }
- }
-
- else if (xAsset.getAssetType() == AppConstants.ASSET_HBASE) {
- for (VXResource xResource : xResourceList) {
- HashMap resourceMap = new HashMap();
-
- resourceMap.put("id", xResource.getId());
- resourceMap.put("table_name", xResource.getTables());
- resourceMap.put("column_name", xResource.getColumns());
- resourceMap.put("column_families",
- xResource.getColumnFamilies());
- resourceMap.put("policyStatus", RangerCommonEnums
- .getLabelFor_ActiveStatus(xResource
- .getResourceStatus()));
- if (xResource.getIsEncrypt() == 1) {
- resourceMap.put("encrypt", 1);
- } else {
- resourceMap.put("encrypt", 0);
- }
- // resourceMap.put("isEncrypt",
- // AKAConstants.getLabelFor_BooleanValue(xResource.getIsEncrypt()));
- populatePermMap(xResource, resourceMap, AppConstants.ASSET_HBASE);
- List xAuditMaps = xResource.getAuditList();
- if (xAuditMaps.size() != 0) {
- resourceMap.put("audit", 1);
- } else {
- resourceMap.put("audit", 0);
- }
- resourceList.add(resourceMap);
- }
- }
- else if (xAsset.getAssetType() == AppConstants.ASSET_KNOX) {
- for (VXResource xResource : xResourceList) {
- HashMap resourceMap = new HashMap();
-
- resourceMap.put("id", xResource.getId());
- resourceMap.put("topology_name", xResource.getTopologies());
- resourceMap.put("service_name", xResource.getServices());
- resourceMap.put("policyStatus", RangerCommonEnums
- .getLabelFor_ActiveStatus(xResource
- .getResourceStatus()));
- if (xResource.getIsEncrypt() == 1) {
- resourceMap.put("encrypt", 1);
- } else {
- resourceMap.put("encrypt", 0);
- }
- // resourceMap.put("isEncrypt",
- // AKAConstants.getLabelFor_BooleanValue(xResource.getIsEncrypt()));
- populatePermMap(xResource, resourceMap, AppConstants.ASSET_KNOX);
- List xAuditMaps = xResource.getAuditList();
- if (xAuditMaps.size() != 0) {
- resourceMap.put("audit", 1);
- } else {
- resourceMap.put("audit", 0);
- }
- resourceList.add(resourceMap);
- }
-
+ @PostConstruct
+ public void init() {
+ logger.info("==> AssetMgr.init()");
+
+ rangerLogNotModified = RangerAdminConfig.getInstance().getBoolean(PROP_RANGER_LOG_SC_NOT_MODIFIED, false);
+ pluginActivityAuditLogNotModified = RangerAdminConfig.getInstance().getBoolean(PROP_PLUGIN_ACTIVITY_AUDIT_NOT_MODIFIED, false);
+ pluginActivityAuditCommitInline = RangerAdminConfig.getInstance().getBoolean(PROP_PLUGIN_ACTIVITY_AUDIT_COMMIT_INLINE, false);
+
+ logger.info("{}={}", PROP_RANGER_LOG_SC_NOT_MODIFIED, rangerLogNotModified);
+ logger.info("{}={}", PROP_PLUGIN_ACTIVITY_AUDIT_NOT_MODIFIED, pluginActivityAuditLogNotModified);
+ logger.info("{}={}", PROP_PLUGIN_ACTIVITY_AUDIT_COMMIT_INLINE, pluginActivityAuditCommitInline);
+
+ logger.info("<== AssetMgr.init()");
+ }
+
+ public String getLatestRepoPolicy(VXAsset xAsset, List xResourceList, Long updatedTime, X509Certificate[] certchain, boolean httpEnabled, String epoch, String ipAddress, boolean isSecure, String count, String agentId) {
+ if (xAsset == null) {
+ logger.error("Requested repository not found");
+
+ throw restErrorUtil.createRESTException("No Data Found.", MessageEnums.DATA_NOT_FOUND);
}
- else if (xAsset.getAssetType() == AppConstants.ASSET_STORM) {
- for (VXResource xResource : xResourceList) {
- HashMap resourceMap = new HashMap();
-
- resourceMap.put("id", xResource.getId());
- resourceMap.put("topology_name", xResource.getTopologies());
- resourceMap.put("policyStatus", RangerCommonEnums
- .getLabelFor_ActiveStatus(xResource
- .getResourceStatus()));
- if (xResource.getIsEncrypt() == 1) {
- resourceMap.put("encrypt", 1);
- } else {
- resourceMap.put("encrypt", 0);
- }
- populatePermMap(xResource, resourceMap, AppConstants.ASSET_STORM);
- List xAuditMaps = xResource.getAuditList();
- if (xAuditMaps.size() != 0) {
- resourceMap.put("audit", 1);
- } else {
- resourceMap.put("audit", 0);
- }
- resourceList.add(resourceMap);
+
+ if (xResourceList == null) {
+ logger.error("ResourceList is found");
+
+ throw restErrorUtil.createRESTException("No Data Found.", MessageEnums.DATA_NOT_FOUND);
+ }
+
+ if (xAsset.getActiveStatus() == RangerCommonEnums.ACT_STATUS_DISABLED) {
+ logger.error("Requested repository is disabled");
+
+ throw restErrorUtil.createRESTException("Unauthorized access.", MessageEnums.OPER_NO_EXPORT);
+ }
+
+ HashMap updatedRepo = new HashMap<>();
+
+ updatedRepo.put("repository_name", xAsset.getName());
+
+ XXPolicyExportAudit policyExportAudit = new XXPolicyExportAudit();
+
+ policyExportAudit.setRepositoryName(xAsset.getName());
+
+ if (agentId != null && !agentId.isEmpty()) {
+ policyExportAudit.setAgentId(agentId);
+ }
+
+ policyExportAudit.setClientIP(ipAddress);
+
+ if (epoch != null && !epoch.trim().isEmpty() && !"null".equalsIgnoreCase(epoch)) {
+ policyExportAudit.setRequestedEpoch(Long.parseLong(epoch));
+ } else {
+ policyExportAudit.setRequestedEpoch(0L);
+ }
+
+ if (!httpEnabled) {
+ if (!isSecure) {
+ policyExportAudit.setHttpRetCode(HttpServletResponse.SC_BAD_REQUEST);
+
+ createPolicyAudit(policyExportAudit);
+
+ throw restErrorUtil.createRESTException("Unauthorized access - only https allowed", MessageEnums.OPER_NOT_ALLOWED_FOR_ENTITY);
+ }
+
+ if (certchain == null || certchain.length == 0) {
+ policyExportAudit.setHttpRetCode(HttpServletResponse.SC_BAD_REQUEST);
+
+ createPolicyAudit(policyExportAudit);
+
+ throw restErrorUtil.createRESTException("Unauthorized access - unable to get client certificate", MessageEnums.OPER_NOT_ALLOWED_FOR_ENTITY);
+ }
+ }
+
+ Long policyCount = restErrorUtil.parseLong(count, "Invalid value for policyCount", MessageEnums.INVALID_INPUT_DATA, null, "policyCount");
+ String commonName = null;
+
+ if (certchain != null) {
+ X509Certificate clientCert = certchain[0];
+ String dn = clientCert.getSubjectX500Principal().getName();
+
+ try {
+ LdapName ln = new LdapName(dn);
+
+ for (Rdn rdn : ln.getRdns()) {
+ if ("CN".equalsIgnoreCase(rdn.getType())) {
+ commonName = rdn.getValue() + "";
+ break;
+ }
+ }
+
+ if (commonName == null) {
+ policyExportAudit.setHttpRetCode(HttpServletResponse.SC_BAD_REQUEST);
+
+ createPolicyAudit(policyExportAudit);
+
+ throw restErrorUtil.createRESTException("Unauthorized access - Unable to find Common Name from [" + dn + "]", MessageEnums.OPER_NOT_ALLOWED_FOR_ENTITY);
}
- } else {
- policyExportAudit
- .setHttpRetCode(HttpServletResponse.SC_BAD_REQUEST);
- createPolicyAudit(policyExportAudit);
- throw restErrorUtil.createRESTException(
- "The operation isn't yet supported for the repository",
- MessageEnums.OPER_NOT_ALLOWED_FOR_ENTITY);
- }
-
- policyCount = Long.valueOf(resourceList.size());
- updatedRepo.put("last_updated", updatedTime);
- updatedRepo.put("policyCount", policyCount);
- updatedRepo.put("acl", resourceList);
-
- String updatedPolicyStr = jsonUtil.readMapToString(updatedRepo);
-
-// File file = null;
-// try {
-// file = jsonUtil.writeMapToFile(updatedRepo, repository);
-// } catch (JsonGenerationException e) {
-// logger.error("Error exporting policies for repository : "
-// + repository, e);
-// } catch (JsonMappingException e) {
-// logger.error("Error exporting policies for repository : "
-// + repository, e);
-// } catch (IOException e) {
-// logger.error("Error exporting policies for repository : "
-// + repository, e);
-// }
-
- policyExportAudit
- .setHttpRetCode(HttpServletResponse.SC_OK);
- createPolicyAudit(policyExportAudit);
-
- return updatedPolicyStr;
- }
- @SuppressWarnings("unchecked")
- private HashMap populatePermMap(VXResource xResource,
- HashMap resourceMap, int assetType) {
- List xPermMapList = xResource.getPermMapList();
-
- Set groupList = new HashSet();
- for (VXPermMap xPermMap : xPermMapList) {
- groupList.add(xPermMap.getId());
- }
-
- List> sortedPermMapGroupList = new ArrayList>();
-
- // Loop for adding group perms
- for (VXPermMap xPermMap : xPermMapList) {
- String groupKey = xPermMap.getPermGroup();
- if (groupKey != null) {
- boolean found = false;
- for (HashMap sortedPermMap : sortedPermMapGroupList) {
- if (sortedPermMap.containsValue(groupKey)) {
- found = true;
-
- Long groupId = xPermMap.getGroupId();
- Long userId = xPermMap.getUserId();
-
- if (groupId != null) {
- Set groups = (Set) sortedPermMap.get("groups");
-
- if(groups != null) {
- groups.add(xPermMap.getGroupName());
- sortedPermMap.put("groups", groups);
- }
- } else if (userId != null) {
- Set users = (Set) sortedPermMap.get("users");
-
- if (users != null) {
- users.add(xPermMap.getUserName());
- sortedPermMap.put("users", users);
- }
- }
-
- Set access = (Set) sortedPermMap
- .get("access");
- String perm = AppConstants
- .getLabelFor_XAPermType(xPermMap.getPermType());
- access.add(perm);
- sortedPermMap.put("access", access);
- }
- }
- if (!found) {
- HashMap sortedPermMap = new HashMap();
- sortedPermMap.put("groupKey", xPermMap.getPermGroup());
-
- Set permSet = new HashSet();
- String perm = AppConstants.getLabelFor_XAPermType(xPermMap
- .getPermType());
- permSet.add(perm);
-
- sortedPermMap.put("access", permSet);
-
- if(assetType == AppConstants.ASSET_KNOX) {
- String[] ipAddrList = new String[0];
- if(xPermMap.getIpAddress() != null) {
- ipAddrList = xPermMap.getIpAddress().split(",");
- sortedPermMap.put("ipAddress", ipAddrList);
- } else
- sortedPermMap.put("ipAddress",ipAddrList);
- }
-
- Long groupId = xPermMap.getGroupId();
- Long userId = xPermMap.getUserId();
-
- if (groupId != null) {
- Set groupSet = new HashSet();
- String group = xPermMap.getGroupName();
- groupSet.add(group);
- sortedPermMap.put("groups", groupSet);
- } else if (userId != null) {
- Set userSet = new HashSet();
- String user = xPermMap.getUserName();
- userSet.add(user);
- sortedPermMap.put("users", userSet);
- }
-
- sortedPermMapGroupList.add(sortedPermMap);
- }
- }
- }
-
- for (HashMap sortedPermMap : sortedPermMapGroupList) {
- sortedPermMap.remove("groupKey");
- }
-
- for (HashMap sortedPermMap : sortedPermMapGroupList) {
- sortedPermMap.remove("groupKey");
- }
-
- resourceMap.put("permission", sortedPermMapGroupList);
- return resourceMap;
- }
-
- private String getBooleanValue(int elementValue) {
- if (elementValue == 1) {
- return "1"; // BOOL_TRUE
- }
- return "0"; // BOOL_FALSE
- }
-
- public void UpdateDefaultPolicyUserAndPerm(VXResource vXResource,
- String userName) {
- if (userName != null && !userName.isEmpty()) {
- XXUser xxUser = rangerDaoManager.getXXUser().findByUserName(userName);
- VXUser vXUser;
- if (xxUser != null) {
- vXUser = xUserService.populateViewBean(xxUser);
- } else {
- vXUser = new VXUser();
- vXUser.setName(userName);
- // FIXME hack : unnecessary.
- vXUser.setDescription(userName);
- vXUser = xUserService.createResource(vXUser);
- }
- // fetch old permission and consider only one permission for default
- // policy
- List xxPermMapList = rangerDaoManager.getXXPermMap()
- .findByResourceId(vXResource.getId());
- VXPermMap vXPermMap = null;
- if (xxPermMapList != null && xxPermMapList.size() != 0) {
- vXPermMap = xPermMapService.populateViewBean(xxPermMapList
- .get(0));
- }
-
- if (vXPermMap == null) {
- // create new permission
- vXPermMap = new VXPermMap();
- vXPermMap.setUserId(vXUser.getId());
- vXPermMap.setResourceId(vXResource.getId());
- } else {
- // update old permission after updating userid
- vXPermMap.setUserId(vXUser.getId());
- xPermMapService.updateResource(vXPermMap);
- }
-
- }
-
- }
-
- public void createPolicyAudit(final XXPolicyExportAudit xXPolicyExportAudit) {
- final Runnable commitWork;
- if (xXPolicyExportAudit.getHttpRetCode() == HttpServletResponse.SC_NOT_MODIFIED) {
- if (!rangerLogNotModified) {
- logger.debug("Not logging HttpServletResponse. SC_NOT_MODIFIED. To enable, set configuration: {}=true", PROP_RANGER_LOG_SC_NOT_MODIFIED);
-
- commitWork = null;
- } else {
- // Create PolicyExportAudit record after transaction is completed. If it is created in-line here
- // then the TransactionManager will roll-back the changes because the HTTP return code is
- // HttpServletResponse.SC_NOT_MODIFIED
- commitWork = new Runnable() {
- @Override
- public void run() {
- rangerDaoManager.getXXPolicyExportAudit().create(xXPolicyExportAudit);
- }
- };
- }
- } else {
- commitWork = new Runnable() {
- @Override
- public void run() {
- rangerDaoManager.getXXPolicyExportAudit().create(xXPolicyExportAudit);
- }
- };
- }
-
- if (commitWork != null) {
- if (pluginActivityAuditCommitInline) {
- transactionSynchronizationAdapter.executeOnTransactionCompletion(commitWork);
- } else {
- transactionSynchronizationAdapter.executeAsyncOnTransactionComplete(commitWork);
- }
- }
- }
-
- public void createPluginInfo(String serviceName, String pluginId, HttpServletRequest request, int entityType, Long downloadedVersion, Long lastKnownVersion, long lastActivationTime, int httpCode, String clusterName, String pluginCapabilities) {
- RangerRESTUtils restUtils = new RangerRESTUtils();
-
- final String ipAddress = getRemoteAddress(request);
- final String appType = restUtils.getAppIdFromPluginId(pluginId);
-
- String tmpHostName = null;
- if (StringUtils.isNotBlank(pluginId)) {
- tmpHostName = restUtils.getHostnameFromPluginId(pluginId, serviceName);
- }
- if (StringUtils.isBlank(tmpHostName) && request != null) {
- tmpHostName = request.getRemoteHost();
- }
-
- final String hostName = (StringUtils.isBlank(tmpHostName)) ? ipAddress : tmpHostName;
-
- RangerPluginInfo pluginSvcVersionInfo = new RangerPluginInfo();
-
- pluginSvcVersionInfo.setServiceName(serviceName);
- pluginSvcVersionInfo.setAppType(appType);
- pluginSvcVersionInfo.setHostName(hostName);
- pluginSvcVersionInfo.setIpAddress(ipAddress);
- pluginSvcVersionInfo.setPluginCapabilities(StringUtils.isEmpty(pluginCapabilities) ? RangerPluginCapability.getBaseRangerCapabilities() : pluginCapabilities);
-
- switch (entityType) {
- case RangerPluginInfo.ENTITY_TYPE_POLICIES:
- pluginSvcVersionInfo.setPolicyActiveVersion(lastKnownVersion);
- pluginSvcVersionInfo.setPolicyActivationTime(lastActivationTime);
- pluginSvcVersionInfo.setPolicyDownloadedVersion(downloadedVersion);
- pluginSvcVersionInfo.setPolicyDownloadTime(new Date().getTime());
- break;
- case RangerPluginInfo.ENTITY_TYPE_TAGS:
- pluginSvcVersionInfo.setTagActiveVersion(lastKnownVersion);
- pluginSvcVersionInfo.setTagActivationTime(lastActivationTime);
- pluginSvcVersionInfo.setTagDownloadedVersion(downloadedVersion);
- pluginSvcVersionInfo.setTagDownloadTime(new Date().getTime());
- break;
- case RangerPluginInfo.ENTITY_TYPE_ROLES:
- pluginSvcVersionInfo.setRoleActiveVersion(lastKnownVersion);
- pluginSvcVersionInfo.setRoleActivationTime(lastActivationTime);
- pluginSvcVersionInfo.setRoleDownloadedVersion(downloadedVersion);
- pluginSvcVersionInfo.setRoleDownloadTime(new Date().getTime());
- break;
- case RangerPluginInfo.ENTITY_TYPE_USERSTORE:
- pluginSvcVersionInfo.setUserStoreActiveVersion(lastKnownVersion);
- pluginSvcVersionInfo.setUserStoreActivationTime(lastActivationTime);
- pluginSvcVersionInfo.setUserStoreDownloadedVersion(downloadedVersion);
- pluginSvcVersionInfo.setUserStoreDownloadTime(new Date().getTime());
- break;
- case RangerPluginInfo.ENTITY_TYPE_GDS:
- pluginSvcVersionInfo.setGdsActiveVersion(lastKnownVersion);
- pluginSvcVersionInfo.setGdsActivationTime(lastActivationTime);
- pluginSvcVersionInfo.setGdsDownloadedVersion(downloadedVersion);
- pluginSvcVersionInfo.setGdsDownloadTime(new Date().getTime());
- break;
- }
-
- createOrUpdatePluginInfo(pluginSvcVersionInfo, entityType , httpCode, clusterName);
- }
-
- private void createOrUpdatePluginInfo(final RangerPluginInfo pluginInfo, int entityType, final int httpCode, String clusterName) {
-
- if (logger.isDebugEnabled()) {
- logger.debug("==> createOrUpdatePluginInfo(pluginInfo = " + pluginInfo + ", isPolicyDownloadRequest = " + isPolicyDownloadRequest(entityType) + ", httpCode = " + httpCode + ")");
- }
-
- final boolean isTagVersionResetNeeded;
- final Runnable commitWork;
-
- if (httpCode == HttpServletResponse.SC_NOT_MODIFIED) {
- if (!pluginActivityAuditLogNotModified) {
- logger.debug("Not logging HttpServletResponse. SC_NOT_MODIFIED. To enable, set configuration: {}=true", PROP_PLUGIN_ACTIVITY_AUDIT_NOT_MODIFIED);
-
- commitWork = null;
- } else {
- // Create or update PluginInfo record after transaction is completed. If it is created in-line here
- // then the TransactionManager will roll-back the changes because the HTTP return code is
- // HttpServletResponse.SC_NOT_MODIFIED
-
- switch (entityType) {
- case RangerPluginInfo.ENTITY_TYPE_POLICIES:
- isTagVersionResetNeeded = rangerDaoManager.getXXService().findAssociatedTagService(pluginInfo.getServiceName()) == null;
- break;
- case RangerPluginInfo.ENTITY_TYPE_TAGS:
- case RangerPluginInfo.ENTITY_TYPE_ROLES:
- case RangerPluginInfo.ENTITY_TYPE_USERSTORE:
- case RangerPluginInfo.ENTITY_TYPE_GDS:
- default:
- isTagVersionResetNeeded = false;
- break;
- }
-
- commitWork = new Runnable() {
- @Override
- public void run() {
- doCreateOrUpdateXXPluginInfo(pluginInfo, entityType, isTagVersionResetNeeded, clusterName);
- }
- };
- }
- } else if (httpCode == HttpServletResponse.SC_NOT_FOUND) {
- if ((isPolicyDownloadRequest(entityType) && (pluginInfo.getPolicyActiveVersion() == null || pluginInfo.getPolicyActiveVersion() == -1))
- || (isTagDownloadRequest(entityType) && (pluginInfo.getTagActiveVersion() == null || pluginInfo.getTagActiveVersion() == -1))
- || (isRoleDownloadRequest(entityType) && (pluginInfo.getRoleActiveVersion() == null || pluginInfo.getRoleActiveVersion() == -1))
- || (isUserStoreDownloadRequest(entityType) && (pluginInfo.getUserStoreActiveVersion() == null || pluginInfo.getUserStoreActiveVersion() == -1))
- || (isGdsDownloadRequest(entityType) && (pluginInfo.getGdsActiveVersion() == null || pluginInfo.getGdsActiveVersion() == -1))) {
- commitWork = new Runnable() {
- @Override
- public void run() {
- doDeleteXXPluginInfo(pluginInfo);
- }
- };
- } else {
- commitWork = new Runnable() {
- @Override
- public void run() {
- doCreateOrUpdateXXPluginInfo(pluginInfo, entityType, false, clusterName);
- }
- };
- }
- } else {
- isTagVersionResetNeeded = false;
-
- commitWork = new Runnable() {
- @Override
- public void run() {
- doCreateOrUpdateXXPluginInfo(pluginInfo, entityType, isTagVersionResetNeeded, clusterName);
- }
- };
- }
-
- if (commitWork != null) {
- if (pluginActivityAuditCommitInline) {
- transactionSynchronizationAdapter.executeOnTransactionCompletion(commitWork);
- } else {
- transactionSynchronizationAdapter.executeAsyncOnTransactionComplete(commitWork);
- }
- }
-
- if (logger.isDebugEnabled()) {
- logger.debug("<== createOrUpdatePluginInfo(pluginInfo = " + pluginInfo + ", isPolicyDownloadRequest = " + isPolicyDownloadRequest(entityType) + ", httpCode = " + httpCode + ")");
- }
-
- }
-
- private XXPluginInfo doCreateOrUpdateXXPluginInfo(RangerPluginInfo pluginInfo, int entityType, final boolean isTagVersionResetNeeded, String clusterName) {
- XXPluginInfo ret = null;
- Map infoMap = null;
-
- if (StringUtils.isNotBlank(pluginInfo.getServiceName())) {
-
- XXPluginInfo xObj = rangerDaoManager.getXXPluginInfo().find(pluginInfo.getServiceName(),
- pluginInfo.getHostName(), pluginInfo.getAppType());
-
- if (xObj == null) {
- infoMap = pluginInfo.getInfo();
- if(!stringUtil.isEmpty(clusterName) && infoMap != null ) {
- infoMap.put(SearchFilter.CLUSTER_NAME, clusterName);
- pluginInfo.setInfo(infoMap);
- }
- // ranger-admin is restarted, plugin contains latest versions and no earlier record for this plug-in client
- if (isPolicyDownloadRequest(entityType)) {
- if (pluginInfo.getPolicyDownloadedVersion() != null && pluginInfo.getPolicyDownloadedVersion().equals(pluginInfo.getPolicyActiveVersion())) {
- // This is our best guess of when policies may have been downloaded
- pluginInfo.setPolicyDownloadTime(pluginInfo.getPolicyActivationTime());
- }
- } else if (isTagDownloadRequest(entityType)) {
- if (pluginInfo.getTagDownloadedVersion() != null && pluginInfo.getTagDownloadedVersion().equals(pluginInfo.getTagActiveVersion())) {
- // This is our best guess of when tags may have been downloaded
- pluginInfo.setTagDownloadTime(pluginInfo.getTagActivationTime());
- }
- } else if (isRoleDownloadRequest(entityType)) {
- if (pluginInfo.getRoleDownloadTime() != null && pluginInfo.getRoleDownloadedVersion().equals(pluginInfo.getRoleActiveVersion())) {
- // This is our best guess of when role may have been downloaded
- pluginInfo.setRoleDownloadTime(pluginInfo.getRoleActivationTime());
- }
- } else if (isUserStoreDownloadRequest(entityType)) {
- if (pluginInfo.getUserStoreDownloadTime() != null && pluginInfo.getUserStoreDownloadedVersion().equals(pluginInfo.getUserStoreActiveVersion())) {
- // This is our best guess of when users and groups may have been downloaded
- pluginInfo.setUserStoreDownloadTime(pluginInfo.getUserStoreActivationTime());
- }
- } else if (isGdsDownloadRequest(entityType)) {
- if (pluginInfo.getGdsDownloadTime() != null && pluginInfo.getGdsDownloadedVersion().equals(pluginInfo.getGdsActiveVersion())) {
- // This is our best guess of when GDS info may have been downloaded
- pluginInfo.setGdsDownloadTime(pluginInfo.getGdsActivationTime());
- }
- }
-
- pluginInfo.setAdminCapabilities(adminCapabilities);
-
- xObj = pluginInfoService.populateDBObject(pluginInfo);
-
- if (logger.isDebugEnabled()) {
- logger.debug("Creating RangerPluginInfo record for service-version");
- }
- ret = rangerDaoManager.getXXPluginInfo().create(xObj);
- } else {
- boolean needsUpdating = false;
-
- RangerPluginInfo dbObj = pluginInfoService.populateViewObject(xObj);
-
- infoMap = dbObj.getInfo();
- if (infoMap != null && !stringUtil.isEmpty(clusterName)) {
- if(!stringUtil.isEmpty(infoMap.get(SearchFilter.CLUSTER_NAME)) && !stringUtil.equals(infoMap.get(SearchFilter.CLUSTER_NAME) , clusterName) ) {
- infoMap.put(SearchFilter.CLUSTER_NAME, clusterName);
- needsUpdating = true;
- }
- }
- if (!dbObj.getIpAddress().equals(pluginInfo.getIpAddress())) {
- dbObj.setIpAddress(pluginInfo.getIpAddress());
- needsUpdating = true;
- }
- if (isPolicyDownloadRequest(entityType)) {
- if (dbObj.getPolicyDownloadedVersion() == null || !dbObj.getPolicyDownloadedVersion().equals(pluginInfo.getPolicyDownloadedVersion())) {
- dbObj.setPolicyDownloadedVersion(pluginInfo.getPolicyDownloadedVersion());
- dbObj.setPolicyDownloadTime(pluginInfo.getPolicyDownloadTime());
- needsUpdating = true;
- }
- Long lastKnownPolicyVersion = pluginInfo.getPolicyActiveVersion();
- Long lastPolicyActivationTime = pluginInfo.getPolicyActivationTime();
- String lastPluginCapabilityVector = pluginInfo.getPluginCapabilities();
-
- if (lastKnownPolicyVersion != null && lastKnownPolicyVersion == -1) {
- // First download request after plug-in's policy-refresher starts
- dbObj.setPolicyDownloadTime(pluginInfo.getPolicyDownloadTime());
- needsUpdating = true;
- }
- if (lastKnownPolicyVersion != null && lastKnownPolicyVersion > 0 && (dbObj.getPolicyActiveVersion() == null || !dbObj.getPolicyActiveVersion().equals(lastKnownPolicyVersion))) {
- dbObj.setPolicyActiveVersion(lastKnownPolicyVersion);
- needsUpdating = true;
- }
- if (lastPolicyActivationTime != null && lastPolicyActivationTime > 0 && (dbObj.getPolicyActivationTime() == null || !dbObj.getPolicyActivationTime().equals(lastPolicyActivationTime))) {
- dbObj.setPolicyActivationTime(lastPolicyActivationTime);
- needsUpdating = true;
- }
- if (lastPluginCapabilityVector != null && (dbObj.getPluginCapabilities() == null || !dbObj.getPluginCapabilities().equals(lastPluginCapabilityVector))) {
- dbObj.setPluginCapabilities(lastPluginCapabilityVector);
- needsUpdating = true;
- }
- if (dbObj.getAdminCapabilities() == null || !dbObj.getAdminCapabilities().equals(adminCapabilities)) {
- dbObj.setAdminCapabilities(adminCapabilities);
- needsUpdating = true;
- }
- } else if (isTagDownloadRequest(entityType)){
- if (dbObj.getTagDownloadedVersion() == null || !dbObj.getTagDownloadedVersion().equals(pluginInfo.getTagDownloadedVersion())) {
- // First download for tags after tag-service is associated with resource-service
- dbObj.setTagDownloadedVersion(pluginInfo.getTagDownloadedVersion());
- dbObj.setTagDownloadTime(pluginInfo.getTagDownloadTime());
- needsUpdating = true;
- }
-
- Long lastKnownTagVersion = pluginInfo.getTagActiveVersion();
- Long lastTagActivationTime = pluginInfo.getTagActivationTime();
-
- if (lastKnownTagVersion != null && lastKnownTagVersion == -1) {
- // First download request after plug-in's tag-refresher restarts
- dbObj.setTagDownloadTime(pluginInfo.getTagDownloadTime());
- needsUpdating = true;
- }
- if (lastKnownTagVersion != null && lastKnownTagVersion > 0 && (dbObj.getTagActiveVersion() == null || !dbObj.getTagActiveVersion().equals(lastKnownTagVersion))) {
- dbObj.setTagActiveVersion(lastKnownTagVersion);
- needsUpdating = true;
- }
-
- if (lastTagActivationTime != null && lastTagActivationTime > 0 && (dbObj.getTagActivationTime() == null || !dbObj.getTagActivationTime().equals(lastTagActivationTime))) {
- dbObj.setTagActivationTime(lastTagActivationTime);
- needsUpdating = true;
- }
- } else if (isRoleDownloadRequest(entityType)){
- if (dbObj.getRoleDownloadedVersion() == null || !dbObj.getRoleDownloadedVersion().equals(pluginInfo.getRoleDownloadedVersion())) {
- dbObj.setRoleDownloadedVersion(pluginInfo.getRoleDownloadedVersion());
- dbObj.setRoleDownloadTime(pluginInfo.getRoleDownloadTime());
- needsUpdating = true;
- }
-
- Long lastKnownRoleVersion = pluginInfo.getRoleActiveVersion();
- Long lastRoleActivationTime = pluginInfo.getRoleActivationTime();
-
- if (lastKnownRoleVersion != null && lastKnownRoleVersion == -1) {
- dbObj.setRoleDownloadTime(pluginInfo.getRoleDownloadTime());
- needsUpdating = true;
- }
-
- if (lastKnownRoleVersion != null && lastKnownRoleVersion > 0 && (dbObj.getRoleActiveVersion() == null || !dbObj.getRoleActiveVersion().equals(lastKnownRoleVersion))) {
- dbObj.setRoleActiveVersion(lastKnownRoleVersion);
- needsUpdating = true;
- }
-
- if (lastRoleActivationTime != null && lastRoleActivationTime > 0 && (dbObj.getRoleActivationTime() == null || !dbObj.getRoleActivationTime().equals(lastRoleActivationTime))) {
- dbObj.setRoleActivationTime(lastRoleActivationTime);
- needsUpdating = true;
- }
- } else if (isUserStoreDownloadRequest(entityType)) {
- if (dbObj.getUserStoreDownloadedVersion() == null || !dbObj.getUserStoreDownloadedVersion().equals(pluginInfo.getUserStoreDownloadedVersion())) {
- dbObj.setUserStoreDownloadedVersion(pluginInfo.getUserStoreDownloadedVersion());
- dbObj.setUserStoreDownloadTime(pluginInfo.getUserStoreDownloadTime());
- needsUpdating = true;
- }
-
- Long lastKnownUserStoreVersion = pluginInfo.getUserStoreActiveVersion();
- Long lastUserStoreActivationTime = pluginInfo.getUserStoreActivationTime();
-
- if (lastKnownUserStoreVersion != null && lastKnownUserStoreVersion == -1) {
- dbObj.setUserStoreDownloadTime(pluginInfo.getUserStoreDownloadTime());
- needsUpdating = true;
- }
-
- if (lastKnownUserStoreVersion != null && lastKnownUserStoreVersion > 0 && (dbObj.getUserStoreActiveVersion() == null || !dbObj.getUserStoreActiveVersion().equals(lastKnownUserStoreVersion))) {
- dbObj.setUserStoreActiveVersion(lastKnownUserStoreVersion);
- needsUpdating = true;
- }
-
- if (lastUserStoreActivationTime != null && lastUserStoreActivationTime > 0 && (dbObj.getUserStoreActivationTime() == null || !dbObj.getUserStoreActivationTime().equals(lastUserStoreActivationTime))) {
- dbObj.setUserStoreActivationTime(lastUserStoreActivationTime);
- needsUpdating = true;
- }
- } else if (isGdsDownloadRequest(entityType)) {
- if (dbObj.getGdsDownloadedVersion() == null || !dbObj.getGdsDownloadedVersion().equals(pluginInfo.getGdsDownloadedVersion())) {
- dbObj.setGdsDownloadedVersion(pluginInfo.getGdsDownloadedVersion());
- dbObj.setGdsDownloadTime(pluginInfo.getGdsDownloadTime());
- needsUpdating = true;
- }
-
- Long lastKnownGdsVersion = pluginInfo.getGdsActiveVersion();
- Long lastGdsActivationTime = pluginInfo.getGdsActivationTime();
-
- if (lastKnownGdsVersion != null && lastKnownGdsVersion == -1) {
- dbObj.setGdsDownloadTime(pluginInfo.getGdsDownloadTime());
- needsUpdating = true;
- }
-
- if (lastKnownGdsVersion != null && lastKnownGdsVersion > 0 && (dbObj.getGdsActiveVersion() == null || !dbObj.getGdsActiveVersion().equals(lastKnownGdsVersion))) {
- dbObj.setGdsActiveVersion(lastKnownGdsVersion);
- needsUpdating = true;
- }
-
- if (lastGdsActivationTime != null && lastGdsActivationTime > 0 && (dbObj.getGdsActivationTime() == null || !dbObj.getGdsActivationTime().equals(lastGdsActivationTime))) {
- dbObj.setGdsActivationTime(lastGdsActivationTime);
- needsUpdating = true;
- }
- }
-
- if (isTagVersionResetNeeded) {
- dbObj.setTagDownloadedVersion(null);
- dbObj.setTagDownloadTime(null);
- dbObj.setTagActiveVersion(null);
- dbObj.setTagActivationTime(null);
- needsUpdating = true;
- }
-
- if (needsUpdating) {
- if (logger.isDebugEnabled()) {
- logger.debug("Updating XXPluginInfo record for service-version");
- }
- xObj = pluginInfoService.populateDBObject(dbObj);
-
- ret = rangerDaoManager.getXXPluginInfo().update(xObj);
- }
- }
- } else {
- logger.error("Invalid parameters: pluginInfo=" + pluginInfo + ")");
- }
-
- return ret;
- }
-
- private void doDeleteXXPluginInfo(RangerPluginInfo pluginInfo) {
- XXPluginInfo xObj = rangerDaoManager.getXXPluginInfo().find(pluginInfo.getServiceName(),
- pluginInfo.getHostName(), pluginInfo.getAppType());
- if (xObj != null) {
- rangerDaoManager.getXXPluginInfo().remove(xObj.getId());
- }
- }
-
- private String getRemoteAddress(final HttpServletRequest request) {
- String ret = null;
-
- if (request != null) {
- String xForwardedAddress = request.getHeader("X-Forwarded-For");
- if (StringUtils.isNotBlank(xForwardedAddress)) {
- String[] forwardedAddresses = xForwardedAddress.split(",");
- if (forwardedAddresses.length > 0) {
- // Use first one. Hope it is the IP of the originating client
- ret = forwardedAddresses[0].trim();
- }
- }
- if (ret == null) {
- ret = request.getRemoteAddr();
- }
- }
- return ret;
- }
-
- public VXTrxLogList getReportLogs(SearchCriteria searchCriteria) {
- if (xaBizUtil.isAdmin() || xaBizUtil.isKeyAdmin() || xaBizUtil.isAuditAdmin() || xaBizUtil.isAuditKeyAdmin()) {
- if (searchCriteria == null) {
- searchCriteria = new SearchCriteria();
- }
-
- if (searchCriteria.getParamList() != null
- && !searchCriteria.getParamList().isEmpty()) {
- int clientTimeOffsetInMinute = RestUtil.getClientTimeOffset();
- Date temp = null;
- DateUtil dateUtil = new DateUtil();
- if (searchCriteria.getParamList().containsKey("startDate")) {
- temp = (Date) searchCriteria.getParamList().get(
- "startDate");
- temp = dateUtil.getDateFromGivenDate(temp, 0, 0, 0, 0);
- temp = dateUtil.addTimeOffset(temp, clientTimeOffsetInMinute);
- searchCriteria.getParamList().put("startDate", temp);
- }
- if (searchCriteria.getParamList().containsKey("endDate")) {
- temp = (Date) searchCriteria.getParamList().get(
- "endDate");
- temp = dateUtil.getDateFromGivenDate(temp, 0, 23, 59, 59);
- temp = dateUtil.addTimeOffset(temp, clientTimeOffsetInMinute);
- searchCriteria.getParamList().put("endDate", temp);
- }
- if (searchCriteria.getParamList().containsKey("owner")) {
- XXPortalUser xXPortalUser = rangerDaoManager.getXXPortalUser().findByLoginId(
- (searchCriteria.getParamList().get("owner").toString()));
- if(xXPortalUser != null) {
- searchCriteria.getParamList().put("owner", xXPortalUser.getId());
- } else {
- searchCriteria.getParamList().put("owner", 0);
- }
-
- }
- }
-
-
-
- searchCriteria.setGetCount(true);
-
- PList vXTrxLogsV2 = xTrxLogService.searchTrxLogs(searchCriteria);
- List vxTrxLogs = vXTrxLogsV2.getList().stream().map(VXTrxLogV2::toVXTrxLog).collect(Collectors.toList());
- VXTrxLogList ret = new VXTrxLogList(validateXXTrxLogList(vxTrxLogs));
-
- ret.setStartIndex(vXTrxLogsV2.getStartIndex());
- ret.setPageSize(vXTrxLogsV2.getPageSize());
- ret.setTotalCount(vXTrxLogsV2.getTotalCount());
- ret.setResultSize(vXTrxLogsV2.getResultSize());
- ret.setSortBy(vXTrxLogsV2.getSortBy());
- ret.setSortType(vXTrxLogsV2.getSortType());
-
- return ret;
+ } catch (InvalidNameException e) {
+ policyExportAudit.setHttpRetCode(HttpServletResponse.SC_BAD_REQUEST);
+
+ createPolicyAudit(policyExportAudit);
+
+ logger.error("Invalid Common Name.", e);
+
+ throw restErrorUtil.createRESTException("Unauthorized access - Invalid Common Name", MessageEnums.OPER_NOT_ALLOWED_FOR_ENTITY);
+ }
+ }
+
+ if (policyCount == null) {
+ policyCount = 0L;
+ }
+
+ if (commonName != null) {
+ String config = xAsset.getConfig();
+ Map configMap = jsonUtil.jsonToMap(config);
+ String cnFromConfig = configMap.get("commonNameForCertificate");
+
+ if (!commonName.equalsIgnoreCase(cnFromConfig)) {
+ policyExportAudit.setHttpRetCode(HttpServletResponse.SC_BAD_REQUEST);
+
+ createPolicyAudit(policyExportAudit);
+
+ throw restErrorUtil.createRESTException("Unauthorized access. expected [" + cnFromConfig + "], found [" + commonName + "]", MessageEnums.OPER_NOT_ALLOWED_FOR_ENTITY);
+ }
+ }
+
+ long epochTime = epoch != null ? Long.parseLong(epoch) : 0;
+
+ if (epochTime == updatedTime) {
+ int resourceListSz = xResourceList.size();
+
+ if (policyCount == resourceListSz) {
+ policyExportAudit.setHttpRetCode(HttpServletResponse.SC_NOT_MODIFIED);
+
+ createPolicyAudit(policyExportAudit);
+
+ throw restErrorUtil.createRESTException(HttpServletResponse.SC_NOT_MODIFIED, "No change since last update", false);
+ }
+ }
+
+ List> resourceList = new ArrayList<>();
+
+ // HDFS Repository
+ if (xAsset.getAssetType() == AppConstants.ASSET_HDFS) {
+ for (VXResource xResource : xResourceList) {
+ HashMap resourceMap = new HashMap<>();
+
+ resourceMap.put("id", xResource.getId());
+ resourceMap.put("resource", xResource.getName());
+ resourceMap.put("isRecursive", getBooleanValue(xResource.getIsRecursive()));
+ resourceMap.put("policyStatus", RangerCommonEnums.getLabelFor_ActiveStatus(xResource.getResourceStatus()));
+ // resourceMap.put("isEncrypt", AKAConstants.getLabelFor_BooleanValue(xResource.getIsEncrypt()));
+ populatePermMap(xResource, resourceMap, AppConstants.ASSET_HDFS);
+
+ List xAuditMaps = xResource.getAuditList();
+
+ if (!xAuditMaps.isEmpty()) {
+ resourceMap.put("audit", 1);
+ } else {
+ resourceMap.put("audit", 0);
+ }
+
+ resourceList.add(resourceMap);
+ }
+ } else if (xAsset.getAssetType() == AppConstants.ASSET_HIVE) {
+ for (VXResource xResource : xResourceList) {
+ HashMap resourceMap = new HashMap<>();
+
+ resourceMap.put("id", xResource.getId());
+ resourceMap.put("database_name", xResource.getDatabases());
+ resourceMap.put("policyStatus", RangerCommonEnums.getLabelFor_ActiveStatus(xResource.getResourceStatus()));
+ resourceMap.put("tablePolicyType", AppConstants.getLabelFor_PolicyType(xResource.getTableType()));
+ resourceMap.put("columnPolicyType", AppConstants.getLabelFor_PolicyType(xResource.getColumnType()));
+
+ int resourceType = xResource.getResourceType();
+
+ if (resourceType == AppConstants.RESOURCE_UDF) {
+ resourceMap.put("udf_name", xResource.getUdfs());
+ } else if (resourceType == AppConstants.RESOURCE_COLUMN) {
+ resourceMap.put("table_name", xResource.getTables());
+ resourceMap.put("column_name", xResource.getColumns());
+ } else if (resourceType == AppConstants.RESOURCE_TABLE) {
+ resourceMap.put("table_name", xResource.getTables());
+ }
+
+ populatePermMap(xResource, resourceMap, AppConstants.ASSET_HIVE);
+
+ List xAuditMaps = xResource.getAuditList();
+
+ if (!xAuditMaps.isEmpty()) {
+ resourceMap.put("audit", 1);
} else {
- throw restErrorUtil.create403RESTException("Permission Denied !");
- }
- }
+ resourceMap.put("audit", 0);
+ }
- public VXAccessAuditList getAccessLogs(SearchCriteria searchCriteria) {
+ resourceList.add(resourceMap);
+ }
+ } else if (xAsset.getAssetType() == AppConstants.ASSET_HBASE) {
+ for (VXResource xResource : xResourceList) {
+ HashMap resourceMap = new HashMap<>();
+
+ resourceMap.put("id", xResource.getId());
+ resourceMap.put("table_name", xResource.getTables());
+ resourceMap.put("column_name", xResource.getColumns());
+ resourceMap.put("column_families", xResource.getColumnFamilies());
+ resourceMap.put("policyStatus", RangerCommonEnums.getLabelFor_ActiveStatus(xResource.getResourceStatus()));
+
+ if (xResource.getIsEncrypt() == 1) {
+ resourceMap.put("encrypt", 1);
+ } else {
+ resourceMap.put("encrypt", 0);
+ }
+ // resourceMap.put("isEncrypt", AKAConstants.getLabelFor_BooleanValue(xResource.getIsEncrypt()));
+ populatePermMap(xResource, resourceMap, AppConstants.ASSET_HBASE);
+
+ List xAuditMaps = xResource.getAuditList();
+
+ if (!xAuditMaps.isEmpty()) {
+ resourceMap.put("audit", 1);
+ } else {
+ resourceMap.put("audit", 0);
+ }
+
+ resourceList.add(resourceMap);
+ }
+ } else if (xAsset.getAssetType() == AppConstants.ASSET_KNOX) {
+ for (VXResource xResource : xResourceList) {
+ HashMap resourceMap = new HashMap<>();
+
+ resourceMap.put("id", xResource.getId());
+ resourceMap.put("topology_name", xResource.getTopologies());
+ resourceMap.put("service_name", xResource.getServices());
+ resourceMap.put("policyStatus", RangerCommonEnums.getLabelFor_ActiveStatus(xResource.getResourceStatus()));
+
+ if (xResource.getIsEncrypt() == 1) {
+ resourceMap.put("encrypt", 1);
+ } else {
+ resourceMap.put("encrypt", 0);
+ }
+
+ // resourceMap.put("isEncrypt", AKAConstants.getLabelFor_BooleanValue(xResource.getIsEncrypt()));
+ populatePermMap(xResource, resourceMap, AppConstants.ASSET_KNOX);
+
+ List xAuditMaps = xResource.getAuditList();
+
+ if (!xAuditMaps.isEmpty()) {
+ resourceMap.put("audit", 1);
+ } else {
+ resourceMap.put("audit", 0);
+ }
+
+ resourceList.add(resourceMap);
+ }
+ } else if (xAsset.getAssetType() == AppConstants.ASSET_STORM) {
+ for (VXResource xResource : xResourceList) {
+ HashMap resourceMap = new HashMap<>();
+
+ resourceMap.put("id", xResource.getId());
+ resourceMap.put("topology_name", xResource.getTopologies());
+ resourceMap.put("policyStatus", RangerCommonEnums.getLabelFor_ActiveStatus(xResource.getResourceStatus()));
+
+ if (xResource.getIsEncrypt() == 1) {
+ resourceMap.put("encrypt", 1);
+ } else {
+ resourceMap.put("encrypt", 0);
+ }
+
+ populatePermMap(xResource, resourceMap, AppConstants.ASSET_STORM);
+
+ List xAuditMaps = xResource.getAuditList();
+
+ if (!xAuditMaps.isEmpty()) {
+ resourceMap.put("audit", 1);
+ } else {
+ resourceMap.put("audit", 0);
+ }
+
+ resourceList.add(resourceMap);
+ }
+ } else {
+ policyExportAudit.setHttpRetCode(HttpServletResponse.SC_BAD_REQUEST);
+
+ createPolicyAudit(policyExportAudit);
+
+ throw restErrorUtil.createRESTException("The operation isn't yet supported for the repository", MessageEnums.OPER_NOT_ALLOWED_FOR_ENTITY);
+ }
+
+ policyCount = (long) resourceList.size();
+
+ updatedRepo.put("last_updated", updatedTime);
+ updatedRepo.put("policyCount", policyCount);
+ updatedRepo.put("acl", resourceList);
+
+ String updatedPolicyStr = jsonUtil.readMapToString(updatedRepo);
+
+ // File file = null;
+ // try {
+ // file = jsonUtil.writeMapToFile(updatedRepo, repository);
+ // } catch (JsonGenerationException e) {
+ // logger.error("Error exporting policies for repository : {}", repository, e);
+ // } catch (JsonMappingException e) {
+ // logger.error("Error exporting policies for repository : {}", repository, e);
+ // } catch (IOException e) {
+ // logger.error("Error exporting policies for repository : {}", repository, e);
+ // }
+
+ policyExportAudit.setHttpRetCode(HttpServletResponse.SC_OK);
+
+ createPolicyAudit(policyExportAudit);
+
+ return updatedPolicyStr;
+ }
+
+ public void updateDefaultPolicyUserAndPerm(VXResource vXResource, String userName) {
+ if (userName != null && !userName.isEmpty()) {
+ XXUser xxUser = rangerDaoManager.getXXUser().findByUserName(userName);
+ VXUser vXUser;
+
+ if (xxUser != null) {
+ vXUser = xUserService.populateViewBean(xxUser);
+ } else {
+ vXUser = new VXUser();
+
+ vXUser.setName(userName);
+ // FIXME hack : unnecessary.
+ vXUser.setDescription(userName);
+
+ vXUser = xUserService.createResource(vXUser);
+ }
+
+ // fetch old permission and consider only one permission for default policy
+ List xxPermMapList = rangerDaoManager.getXXPermMap().findByResourceId(vXResource.getId());
+ VXPermMap vXPermMap = null;
+
+ if (xxPermMapList != null && !xxPermMapList.isEmpty()) {
+ vXPermMap = xPermMapService.populateViewBean(xxPermMapList.get(0));
+ }
+
+ if (vXPermMap == null) {
+ // create new permission
+ vXPermMap = new VXPermMap();
+
+ vXPermMap.setUserId(vXUser.getId());
+ vXPermMap.setResourceId(vXResource.getId());
+ } else {
+ // update old permission after updating userid
+ vXPermMap.setUserId(vXUser.getId());
+
+ xPermMapService.updateResource(vXPermMap);
+ }
+ }
+ }
+
+ public void createPolicyAudit(final XXPolicyExportAudit xXPolicyExportAudit) {
+ final Runnable commitWork;
+
+ if (xXPolicyExportAudit.getHttpRetCode() == HttpServletResponse.SC_NOT_MODIFIED) {
+ if (!rangerLogNotModified) {
+ logger.debug("Not logging HttpServletResponse. SC_NOT_MODIFIED. To enable, set configuration: {}=true", PROP_RANGER_LOG_SC_NOT_MODIFIED);
+
+ commitWork = null;
+ } else {
+ // Create PolicyExportAudit record after transaction is completed. If it is created in-line here
+ // then the TransactionManager will roll-back the changes because the HTTP return code is
+ // HttpServletResponse.SC_NOT_MODIFIED
+ commitWork = () -> rangerDaoManager.getXXPolicyExportAudit().create(xXPolicyExportAudit);
+ }
+ } else {
+ commitWork = () -> rangerDaoManager.getXXPolicyExportAudit().create(xXPolicyExportAudit);
+ }
+
+ if (commitWork != null) {
+ if (pluginActivityAuditCommitInline) {
+ transactionSynchronizationAdapter.executeOnTransactionCompletion(commitWork);
+ } else {
+ transactionSynchronizationAdapter.executeAsyncOnTransactionComplete(commitWork);
+ }
+ }
+ }
+
+ public void createPluginInfo(String serviceName, String pluginId, HttpServletRequest request, int entityType, Long downloadedVersion, Long lastKnownVersion, long lastActivationTime, int httpCode, String clusterName, String pluginCapabilities) {
+ RangerRESTUtils restUtils = new RangerRESTUtils();
+ final String ipAddress = getRemoteAddress(request);
+ final String appType = restUtils.getAppIdFromPluginId(pluginId);
+ String tmpHostName = null;
+
+ if (StringUtils.isNotBlank(pluginId)) {
+ tmpHostName = restUtils.getHostnameFromPluginId(pluginId, serviceName);
+ }
+
+ if (StringUtils.isBlank(tmpHostName) && request != null) {
+ tmpHostName = request.getRemoteHost();
+ }
+
+ final String hostName = (StringUtils.isBlank(tmpHostName)) ? ipAddress : tmpHostName;
+
+ RangerPluginInfo pluginSvcVersionInfo = new RangerPluginInfo();
+
+ pluginSvcVersionInfo.setServiceName(serviceName);
+ pluginSvcVersionInfo.setAppType(appType);
+ pluginSvcVersionInfo.setHostName(hostName);
+ pluginSvcVersionInfo.setIpAddress(ipAddress);
+ pluginSvcVersionInfo.setPluginCapabilities(StringUtils.isEmpty(pluginCapabilities) ? RangerPluginCapability.getBaseRangerCapabilities() : pluginCapabilities);
+
+ switch (entityType) {
+ case RangerPluginInfo.ENTITY_TYPE_POLICIES:
+ pluginSvcVersionInfo.setPolicyActiveVersion(lastKnownVersion);
+ pluginSvcVersionInfo.setPolicyActivationTime(lastActivationTime);
+ pluginSvcVersionInfo.setPolicyDownloadedVersion(downloadedVersion);
+ pluginSvcVersionInfo.setPolicyDownloadTime(new Date().getTime());
+ break;
+ case RangerPluginInfo.ENTITY_TYPE_TAGS:
+ pluginSvcVersionInfo.setTagActiveVersion(lastKnownVersion);
+ pluginSvcVersionInfo.setTagActivationTime(lastActivationTime);
+ pluginSvcVersionInfo.setTagDownloadedVersion(downloadedVersion);
+ pluginSvcVersionInfo.setTagDownloadTime(new Date().getTime());
+ break;
+ case RangerPluginInfo.ENTITY_TYPE_ROLES:
+ pluginSvcVersionInfo.setRoleActiveVersion(lastKnownVersion);
+ pluginSvcVersionInfo.setRoleActivationTime(lastActivationTime);
+ pluginSvcVersionInfo.setRoleDownloadedVersion(downloadedVersion);
+ pluginSvcVersionInfo.setRoleDownloadTime(new Date().getTime());
+ break;
+ case RangerPluginInfo.ENTITY_TYPE_USERSTORE:
+ pluginSvcVersionInfo.setUserStoreActiveVersion(lastKnownVersion);
+ pluginSvcVersionInfo.setUserStoreActivationTime(lastActivationTime);
+ pluginSvcVersionInfo.setUserStoreDownloadedVersion(downloadedVersion);
+ pluginSvcVersionInfo.setUserStoreDownloadTime(new Date().getTime());
+ break;
+ case RangerPluginInfo.ENTITY_TYPE_GDS:
+ pluginSvcVersionInfo.setGdsActiveVersion(lastKnownVersion);
+ pluginSvcVersionInfo.setGdsActivationTime(lastActivationTime);
+ pluginSvcVersionInfo.setGdsDownloadedVersion(downloadedVersion);
+ pluginSvcVersionInfo.setGdsDownloadTime(new Date().getTime());
+ break;
+ }
+
+ createOrUpdatePluginInfo(pluginSvcVersionInfo, entityType, httpCode, clusterName);
+ }
+
+ public VXTrxLogList getReportLogs(SearchCriteria searchCriteria) {
+ if (xaBizUtil.isAdmin() || xaBizUtil.isKeyAdmin() || xaBizUtil.isAuditAdmin() || xaBizUtil.isAuditKeyAdmin()) {
+ if (searchCriteria == null) {
+ searchCriteria = new SearchCriteria();
+ }
+
+ if (searchCriteria.getParamList() != null && !searchCriteria.getParamList().isEmpty()) {
+ int clientTimeOffsetInMinute = RestUtil.getClientTimeOffset();
+ DateUtil dateUtil = new DateUtil();
+
+ if (searchCriteria.getParamList().containsKey("startDate")) {
+ Date temp = (Date) searchCriteria.getParamList().get("startDate");
+
+ temp = dateUtil.getDateFromGivenDate(temp, 0, 0, 0, 0);
+ temp = dateUtil.addTimeOffset(temp, clientTimeOffsetInMinute);
+
+ searchCriteria.getParamList().put("startDate", temp);
+ }
+
+ if (searchCriteria.getParamList().containsKey("endDate")) {
+ Date temp = (Date) searchCriteria.getParamList().get("endDate");
+
+ temp = dateUtil.getDateFromGivenDate(temp, 0, 23, 59, 59);
+ temp = dateUtil.addTimeOffset(temp, clientTimeOffsetInMinute);
+
+ searchCriteria.getParamList().put("endDate", temp);
+ }
+
+ if (searchCriteria.getParamList().containsKey("owner")) {
+ XXPortalUser xXPortalUser = rangerDaoManager.getXXPortalUser().findByLoginId((searchCriteria.getParamList().get("owner").toString()));
+
+ if (xXPortalUser != null) {
+ searchCriteria.getParamList().put("owner", xXPortalUser.getId());
+ } else {
+ searchCriteria.getParamList().put("owner", 0);
+ }
+ }
+ }
+
+ searchCriteria.setGetCount(true);
+
+ PList vXTrxLogsV2 = xTrxLogService.searchTrxLogs(searchCriteria);
+ List vxTrxLogs = vXTrxLogsV2.getList().stream().map(VXTrxLogV2::toVXTrxLog).collect(Collectors.toList());
+ VXTrxLogList ret = new VXTrxLogList(validateXXTrxLogList(vxTrxLogs));
+
+ ret.setStartIndex(vXTrxLogsV2.getStartIndex());
+ ret.setPageSize(vXTrxLogsV2.getPageSize());
+ ret.setTotalCount(vXTrxLogsV2.getTotalCount());
+ ret.setResultSize(vXTrxLogsV2.getResultSize());
+ ret.setSortBy(vXTrxLogsV2.getSortBy());
+ ret.setSortType(vXTrxLogsV2.getSortType());
+
+ return ret;
+ } else {
+ throw restErrorUtil.create403RESTException("Permission Denied !");
+ }
+ }
+
+ public VXAccessAuditList getAccessLogs(SearchCriteria searchCriteria) {
if (searchCriteria == null) {
searchCriteria = new SearchCriteria();
}
- if (searchCriteria.getParamList() != null
- && !searchCriteria.getParamList().isEmpty()) {
- int clientTimeOffsetInMinute = RestUtil.getClientTimeOffset();
- Date temp = null;
- DateUtil dateUtil = new DateUtil();
+
+ if (searchCriteria.getParamList() != null && !searchCriteria.getParamList().isEmpty()) {
+ int clientTimeOffsetInMinute = RestUtil.getClientTimeOffset();
+ DateUtil dateUtil = new DateUtil();
+
if (searchCriteria.getParamList().containsKey("startDate")) {
- temp = (Date) searchCriteria.getParamList().get(
- "startDate");
+ Date temp = (Date) searchCriteria.getParamList().get("startDate");
+
temp = dateUtil.getDateFromGivenDate(temp, 0, 0, 0, 0);
temp = dateUtil.addTimeOffset(temp, clientTimeOffsetInMinute);
+
searchCriteria.getParamList().put("startDate", temp);
}
+
if (searchCriteria.getParamList().containsKey("endDate")) {
- temp = (Date) searchCriteria.getParamList().get(
- "endDate");
+ Date temp = (Date) searchCriteria.getParamList().get("endDate");
+
temp = dateUtil.getDateFromGivenDate(temp, 0, 23, 59, 59);
temp = dateUtil.addTimeOffset(temp, clientTimeOffsetInMinute);
+
searchCriteria.getParamList().put("endDate", temp);
}
-
}
+
if (searchCriteria.getSortType() == null) {
searchCriteria.setSortType("desc");
} else if (!"asc".equalsIgnoreCase(searchCriteria.getSortType()) && !"desc".equalsIgnoreCase(searchCriteria.getSortType())) {
@@ -1139,33 +698,32 @@ public VXAccessAuditList getAccessLogs(SearchCriteria searchCriteria) {
}
if (!xaBizUtil.isAdmin()) {
- Long userId = xaBizUtil.getXUserId();
- List userZones = rangerDaoManager.getXXSecurityZoneDao().findZoneNamesByUserId(userId);
- Set zoneNameSet = new HashSet(userZones);
-
- VXGroupList groupList = xUserMgr.getXUserGroups(userId);
- for (VXGroup group : groupList.getList()) {
- List userGroupZones = rangerDaoManager.getXXSecurityZoneDao().findZoneNamesByGroupId(group.getId());
- for (String zoneName : userGroupZones) {
- zoneNameSet.add(zoneName);
- }
- }
-
- List zoneNameList = (List) searchCriteria.getParamValue("zoneName");
-
- if ((zoneNameList == null || zoneNameList.isEmpty())) {
- if (!zoneNameSet.isEmpty()) {
- searchCriteria.getParamList().put("zoneName", new ArrayList(zoneNameSet));
- } else {
- searchCriteria.getParamList().put("zoneName", null);
- }
- } else if (!zoneNameList.isEmpty() && !zoneNameSet.isEmpty()) {
- for (String znName : zoneNameList) {
- if (!serviceMgr.isZoneAdmin(znName) && !serviceMgr.isZoneAuditor(znName)) {
- throw restErrorUtil.createRESTException(HttpServletResponse.SC_FORBIDDEN, "User is not the zone admin or zone auditor of zone " + znName, true);
- }
- }
- }
+ Long userId = xaBizUtil.getXUserId();
+ List userZones = rangerDaoManager.getXXSecurityZoneDao().findZoneNamesByUserId(userId);
+ Set zoneNameSet = new HashSet<>(userZones);
+ VXGroupList groupList = xUserMgr.getXUserGroups(userId);
+
+ for (VXGroup group : groupList.getList()) {
+ List userGroupZones = rangerDaoManager.getXXSecurityZoneDao().findZoneNamesByGroupId(group.getId());
+
+ zoneNameSet.addAll(userGroupZones);
+ }
+
+ List zoneNameList = (List) searchCriteria.getParamValue("zoneName");
+
+ if ((zoneNameList == null || zoneNameList.isEmpty())) {
+ if (!zoneNameSet.isEmpty()) {
+ searchCriteria.getParamList().put("zoneName", new ArrayList<>(zoneNameSet));
+ } else {
+ searchCriteria.getParamList().put("zoneName", null);
+ }
+ } else if (!zoneNameSet.isEmpty()) {
+ for (String znName : zoneNameList) {
+ if (!serviceMgr.isZoneAdmin(znName) && !serviceMgr.isZoneAuditor(znName)) {
+ throw restErrorUtil.createRESTException(HttpServletResponse.SC_FORBIDDEN, "User is not the zone admin or zone auditor of zone " + znName, true);
+ }
+ }
+ }
}
if (RangerBizUtil.AUDIT_STORE_SOLR.equalsIgnoreCase(xaBizUtil.getAuditDBType())) {
@@ -1179,199 +737,670 @@ public VXAccessAuditList getAccessLogs(SearchCriteria searchCriteria) {
}
}
- public VXTrxLogList getTransactionReport(String transactionId) {
- List trxLogsV2 = xTrxLogService.findByTransactionId(transactionId);
- List trxLogs = new ArrayList<>();
- long nextLogId = 1;
-
- for (VXTrxLogV2 trxLogV2 : trxLogsV2) {
- ObjectChangeInfo objChangeInfo = trxLogV2.getChangeInfo();
-
- if (objChangeInfo == null || CollectionUtils.isEmpty(objChangeInfo.getAttributes())) {
- VXTrxLog trxLog = VXTrxLogV2.toVXTrxLog(trxLogV2);
-
- trxLog.setId(nextLogId++);
-
- trxLogs.add(trxLog);
- } else {
- for (AttributeChangeInfo attrChangeInfo : objChangeInfo.getAttributes()) {
- VXTrxLog trxLog = VXTrxLogV2.toVXTrxLog(trxLogV2);
-
- trxLog.setId(nextLogId++);
- trxLog.setAttributeName(attrChangeInfo.getAttributeName());
- trxLog.setPreviousValue(attrChangeInfo.getOldValue());
- trxLog.setNewValue(attrChangeInfo.getNewValue());
-
- trxLogs.add(trxLog);
- }
- }
- }
-
- return new VXTrxLogList(validateXXTrxLogList(trxLogs));
- }
-
- public List validateXXTrxLogList(List xTrxLogList) {
- List vXTrxLogs = new ArrayList();
-
- for (VXTrxLog vXTrxLog : xTrxLogList) {
- if(vXTrxLog.getPreviousValue() == null || "null".equalsIgnoreCase(vXTrxLog.getPreviousValue())) {
- vXTrxLog.setPreviousValue("");
- }
- if(vXTrxLog.getNewValue() == null || "null".equalsIgnoreCase(vXTrxLog.getNewValue())) {
- vXTrxLog.setNewValue("");
- }
- if(vXTrxLog.getAttributeName() != null && "Password".equalsIgnoreCase(vXTrxLog.getAttributeName())) {
- vXTrxLog.setPreviousValue("*********");
- vXTrxLog.setNewValue("***********");
- }
- if(vXTrxLog.getAttributeName() != null && "Connection Configurations".equalsIgnoreCase(vXTrxLog.getAttributeName())) {
- if(vXTrxLog.getPreviousValue() != null && vXTrxLog.getPreviousValue().contains("password")) {
- String tempPreviousStr = vXTrxLog.getPreviousValue();
- String tempPreviousArr[] = vXTrxLog.getPreviousValue().split(",");
- for (String tempPrevious : tempPreviousArr) {
- if(tempPrevious.contains("{\"password") && tempPrevious.contains("}")) {
- vXTrxLog.setPreviousValue(tempPreviousStr.replace(tempPrevious,"{\"password\":\"*****\"}"));
- break;
- } else if(tempPrevious.contains("{\"password")) {
- vXTrxLog.setPreviousValue(tempPreviousStr.replace(tempPrevious, "{\"password\":\"*****\""));
- break;
- } else if(tempPrevious.contains("\"password") && tempPrevious.contains("}")) {
- vXTrxLog.setPreviousValue(tempPreviousStr.replace(tempPrevious, "\"password\":\"******\"}"));
- break;
- } else if(tempPrevious.contains("\"password")) {
- vXTrxLog.setPreviousValue(tempPreviousStr.replace(tempPrevious, "\"password\":\"******\""));
- break;
- }
- }
- }
- if(vXTrxLog.getNewValue() != null && vXTrxLog.getNewValue().contains("password")) {
- String tempNewStr = vXTrxLog.getNewValue();
- String tempNewArr[] = vXTrxLog.getNewValue().split(",");
- for (String tempNew : tempNewArr) {
- if(tempNew.contains("{\"password") && tempNew.contains("}")) {
- vXTrxLog.setNewValue(tempNewStr.replace(tempNew, "{\"password\":\"*****\"}"));
- break;
- } else if(tempNew.contains("{\"password")) {
- vXTrxLog.setNewValue(tempNewStr.replace(tempNew, "{\"password\":\"*****\""));
- break;
- } else if(tempNew.contains("\"password") && tempNew.contains("}")) {
- vXTrxLog.setNewValue(tempNewStr.replace(tempNew, "\"password\":\"******\"}"));
- break;
- } else if(tempNew.contains("\"password")) {
- vXTrxLog.setNewValue(tempNewStr.replace(tempNew, "\"password\":\"******\""));
- break;
- }
- }
- }
- }
-
- vXTrxLogs.add(vXTrxLog);
- }
- return vXTrxLogs;
- }
- /*
- * (non-Javadoc)
- *
- * @see
- * org.apache.ranger.biz.AssetMgrBase#searchXPolicyExportAudits(org.apache.ranger.
- * common.SearchCriteria)
- */
- @Override
- public VXPolicyExportAuditList searchXPolicyExportAudits(
- SearchCriteria searchCriteria) {
-
- if (searchCriteria == null) {
- searchCriteria = new SearchCriteria();
- }
-
- if (searchCriteria.getParamList() != null
- && !searchCriteria.getParamList().isEmpty()) {
-
- int clientTimeOffsetInMinute = RestUtil.getClientTimeOffset();
- Date temp = null;
- DateUtil dateUtil = new DateUtil();
+ public VXTrxLogList getTransactionReport(String transactionId) {
+ List trxLogsV2 = xTrxLogService.findByTransactionId(transactionId);
+ List trxLogs = new ArrayList<>();
+ long nextLogId = 1;
+
+ for (VXTrxLogV2 trxLogV2 : trxLogsV2) {
+ ObjectChangeInfo objChangeInfo = trxLogV2.getChangeInfo();
+
+ if (objChangeInfo == null || CollectionUtils.isEmpty(objChangeInfo.getAttributes())) {
+ VXTrxLog trxLog = VXTrxLogV2.toVXTrxLog(trxLogV2);
+
+ trxLog.setId(nextLogId++);
+
+ trxLogs.add(trxLog);
+ } else {
+ for (AttributeChangeInfo attrChangeInfo : objChangeInfo.getAttributes()) {
+ VXTrxLog trxLog = VXTrxLogV2.toVXTrxLog(trxLogV2);
+
+ trxLog.setId(nextLogId++);
+ trxLog.setAttributeName(attrChangeInfo.getAttributeName());
+ trxLog.setPreviousValue(attrChangeInfo.getOldValue());
+ trxLog.setNewValue(attrChangeInfo.getNewValue());
+
+ trxLogs.add(trxLog);
+ }
+ }
+ }
+
+ return new VXTrxLogList(validateXXTrxLogList(trxLogs));
+ }
+
+ public List validateXXTrxLogList(List xTrxLogList) {
+ List vXTrxLogs = new ArrayList<>();
+
+ for (VXTrxLog vXTrxLog : xTrxLogList) {
+ if (vXTrxLog.getPreviousValue() == null || "null".equalsIgnoreCase(vXTrxLog.getPreviousValue())) {
+ vXTrxLog.setPreviousValue("");
+ }
+
+ if (vXTrxLog.getNewValue() == null || "null".equalsIgnoreCase(vXTrxLog.getNewValue())) {
+ vXTrxLog.setNewValue("");
+ }
+
+ if (vXTrxLog.getAttributeName() != null && "Password".equalsIgnoreCase(vXTrxLog.getAttributeName())) {
+ vXTrxLog.setPreviousValue("*********");
+ vXTrxLog.setNewValue("***********");
+ }
+
+ if (vXTrxLog.getAttributeName() != null && "Connection Configurations".equalsIgnoreCase(vXTrxLog.getAttributeName())) {
+ if (vXTrxLog.getPreviousValue() != null && vXTrxLog.getPreviousValue().contains("password")) {
+ String tempPreviousStr = vXTrxLog.getPreviousValue();
+ String[] tempPreviousArr = vXTrxLog.getPreviousValue().split(",");
+
+ for (String tempPrevious : tempPreviousArr) {
+ if (tempPrevious.contains("{\"password") && tempPrevious.contains("}")) {
+ vXTrxLog.setPreviousValue(tempPreviousStr.replace(tempPrevious, "{\"password\":\"*****\"}"));
+ break;
+ } else if (tempPrevious.contains("{\"password")) {
+ vXTrxLog.setPreviousValue(tempPreviousStr.replace(tempPrevious, "{\"password\":\"*****\""));
+ break;
+ } else if (tempPrevious.contains("\"password") && tempPrevious.contains("}")) {
+ vXTrxLog.setPreviousValue(tempPreviousStr.replace(tempPrevious, "\"password\":\"******\"}"));
+ break;
+ } else if (tempPrevious.contains("\"password")) {
+ vXTrxLog.setPreviousValue(tempPreviousStr.replace(tempPrevious, "\"password\":\"******\""));
+ break;
+ }
+ }
+ }
+
+ if (vXTrxLog.getNewValue() != null && vXTrxLog.getNewValue().contains("password")) {
+ String tempNewStr = vXTrxLog.getNewValue();
+ String[] tempNewArr = vXTrxLog.getNewValue().split(",");
+
+ for (String tempNew : tempNewArr) {
+ if (tempNew.contains("{\"password") && tempNew.contains("}")) {
+ vXTrxLog.setNewValue(tempNewStr.replace(tempNew, "{\"password\":\"*****\"}"));
+ break;
+ } else if (tempNew.contains("{\"password")) {
+ vXTrxLog.setNewValue(tempNewStr.replace(tempNew, "{\"password\":\"*****\""));
+ break;
+ } else if (tempNew.contains("\"password") && tempNew.contains("}")) {
+ vXTrxLog.setNewValue(tempNewStr.replace(tempNew, "\"password\":\"******\"}"));
+ break;
+ } else if (tempNew.contains("\"password")) {
+ vXTrxLog.setNewValue(tempNewStr.replace(tempNew, "\"password\":\"******\""));
+ break;
+ }
+ }
+ }
+ }
+
+ vXTrxLogs.add(vXTrxLog);
+ }
+
+ return vXTrxLogs;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.ranger.biz.AssetMgrBase#searchXPolicyExportAudits(org.apache.ranger.
+ * common.SearchCriteria)
+ */
+ @Override
+ public VXPolicyExportAuditList searchXPolicyExportAudits(SearchCriteria searchCriteria) {
+ if (searchCriteria == null) {
+ searchCriteria = new SearchCriteria();
+ }
+
+ if (searchCriteria.getParamList() != null && !searchCriteria.getParamList().isEmpty()) {
+ int clientTimeOffsetInMinute = RestUtil.getClientTimeOffset();
+ DateUtil dateUtil = new DateUtil();
+
if (searchCriteria.getParamList().containsKey("startDate")) {
- temp = (Date) searchCriteria.getParamList().get(
- "startDate");
+ Date temp = (Date) searchCriteria.getParamList().get("startDate");
+
temp = dateUtil.getDateFromGivenDate(temp, 0, 0, 0, 0);
temp = dateUtil.addTimeOffset(temp, clientTimeOffsetInMinute);
+
searchCriteria.getParamList().put("startDate", temp);
}
if (searchCriteria.getParamList().containsKey("endDate")) {
- temp = (Date) searchCriteria.getParamList().get(
- "endDate");
+ Date temp = (Date) searchCriteria.getParamList().get("endDate");
+
temp = dateUtil.getDateFromGivenDate(temp, 0, 23, 59, 59);
temp = dateUtil.addTimeOffset(temp, clientTimeOffsetInMinute);
+
searchCriteria.getParamList().put("endDate", temp);
}
}
+
return xPolicyExportAuditService.searchXPolicyExportAudits(searchCriteria);
}
- public VXUgsyncAuditInfoList getUgsyncAudits(SearchCriteria searchCriteria) {
- if (!msBizUtil.hasModuleAccess(RangerConstants.MODULE_AUDIT)) {
- throw restErrorUtil.createRESTException(HttpServletResponse.SC_FORBIDDEN, "User is not having permissions on the "+RangerConstants.MODULE_AUDIT+" module.", true);
- }
- if (searchCriteria == null) {
- searchCriteria = new SearchCriteria();
- }
- if (searchCriteria.getParamList() != null
- && !searchCriteria.getParamList().isEmpty()) {
- int clientTimeOffsetInMinute = RestUtil.getClientTimeOffset();
- Date temp = null;
- DateUtil dateUtil = new DateUtil();
- if (searchCriteria.getParamList().containsKey("startDate")) {
- temp = (Date) searchCriteria.getParamList().get(
- "startDate");
- temp = dateUtil.getDateFromGivenDate(temp, 0, 0, 0, 0);
- temp = dateUtil.addTimeOffset(temp, clientTimeOffsetInMinute);
- searchCriteria.getParamList().put("startDate", temp);
- }
- if (searchCriteria.getParamList().containsKey("endDate")) {
- temp = (Date) searchCriteria.getParamList().get(
- "endDate");
- temp = dateUtil.getDateFromGivenDate(temp, 0, 23, 59, 59);
- temp = dateUtil.addTimeOffset(temp, clientTimeOffsetInMinute);
- searchCriteria.getParamList().put("endDate", temp);
- }
-
- }
- if (searchCriteria.getSortType() == null) {
- searchCriteria.setSortType("desc");
- } else if (!"asc".equalsIgnoreCase(searchCriteria.getSortType()) && !"desc".equalsIgnoreCase(searchCriteria.getSortType())) {
- searchCriteria.setSortType("desc");
- }
- return xUgsyncAuditInfoService.searchXUgsyncAuditInfoList(searchCriteria);
- }
-
- public VXUgsyncAuditInfoList getUgsyncAuditsBySyncSource(String syncSource) {
- if (!msBizUtil.hasModuleAccess(RangerConstants.MODULE_AUDIT)) {
- throw restErrorUtil.createRESTException(HttpServletResponse.SC_FORBIDDEN, "User is not having permissions on the "+RangerConstants.MODULE_AUDIT+" module.", true);
- }
- if(syncSource!=null && !syncSource.trim().isEmpty()){
- return xUgsyncAuditInfoService.searchXUgsyncAuditInfoBySyncSource(syncSource);
- }else{
- throw restErrorUtil.createRESTException("Please provide a valid syncSource", MessageEnums.INVALID_INPUT_DATA);
- }
- }
-
- private boolean isPolicyDownloadRequest(int entityType) {
- return entityType == RangerPluginInfo.ENTITY_TYPE_POLICIES;
- }
-
- private boolean isTagDownloadRequest(int entityType) {
- return entityType == RangerPluginInfo.ENTITY_TYPE_TAGS;
- }
-
- private boolean isRoleDownloadRequest(int entityType) {
- return entityType == RangerPluginInfo.ENTITY_TYPE_ROLES;
- }
-
- private boolean isUserStoreDownloadRequest(int entityType) {
- return entityType == RangerPluginInfo.ENTITY_TYPE_USERSTORE;
- }
-
- private boolean isGdsDownloadRequest(int entityType) {
- return entityType == RangerPluginInfo.ENTITY_TYPE_GDS;
- }
+ public VXUgsyncAuditInfoList getUgsyncAudits(SearchCriteria searchCriteria) {
+ if (!msBizUtil.hasModuleAccess(RangerConstants.MODULE_AUDIT)) {
+ throw restErrorUtil.createRESTException(HttpServletResponse.SC_FORBIDDEN, "User is not having permissions on the " + RangerConstants.MODULE_AUDIT + " module.", true);
+ }
+
+ if (searchCriteria == null) {
+ searchCriteria = new SearchCriteria();
+ }
+
+ if (searchCriteria.getParamList() != null && !searchCriteria.getParamList().isEmpty()) {
+ int clientTimeOffsetInMinute = RestUtil.getClientTimeOffset();
+ DateUtil dateUtil = new DateUtil();
+ if (searchCriteria.getParamList().containsKey("startDate")) {
+ Date temp = (Date) searchCriteria.getParamList().get("startDate");
+
+ temp = dateUtil.getDateFromGivenDate(temp, 0, 0, 0, 0);
+ temp = dateUtil.addTimeOffset(temp, clientTimeOffsetInMinute);
+
+ searchCriteria.getParamList().put("startDate", temp);
+ }
+ if (searchCriteria.getParamList().containsKey("endDate")) {
+ Date temp = (Date) searchCriteria.getParamList().get("endDate");
+
+ temp = dateUtil.getDateFromGivenDate(temp, 0, 23, 59, 59);
+ temp = dateUtil.addTimeOffset(temp, clientTimeOffsetInMinute);
+
+ searchCriteria.getParamList().put("endDate", temp);
+ }
+ }
+
+ if (searchCriteria.getSortType() == null) {
+ searchCriteria.setSortType("desc");
+ } else if (!"asc".equalsIgnoreCase(searchCriteria.getSortType()) && !"desc".equalsIgnoreCase(searchCriteria.getSortType())) {
+ searchCriteria.setSortType("desc");
+ }
+
+ return xUgsyncAuditInfoService.searchXUgsyncAuditInfoList(searchCriteria);
+ }
+
+ public VXUgsyncAuditInfoList getUgsyncAuditsBySyncSource(String syncSource) {
+ if (!msBizUtil.hasModuleAccess(RangerConstants.MODULE_AUDIT)) {
+ throw restErrorUtil.createRESTException(HttpServletResponse.SC_FORBIDDEN, "User is not having permissions on the " + RangerConstants.MODULE_AUDIT + " module.", true);
+ }
+
+ if (syncSource != null && !syncSource.trim().isEmpty()) {
+ return xUgsyncAuditInfoService.searchXUgsyncAuditInfoBySyncSource(syncSource);
+ } else {
+ throw restErrorUtil.createRESTException("Please provide a valid syncSource", MessageEnums.INVALID_INPUT_DATA);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private HashMap populatePermMap(VXResource xResource, HashMap resourceMap, int assetType) {
+ List xPermMapList = xResource.getPermMapList();
+ Set groupList = new HashSet<>();
+
+ for (VXPermMap xPermMap : xPermMapList) {
+ groupList.add(xPermMap.getId());
+ }
+
+ List> sortedPermMapGroupList = new ArrayList<>();
+
+ // Loop for adding group perms
+ for (VXPermMap xPermMap : xPermMapList) {
+ String groupKey = xPermMap.getPermGroup();
+
+ if (groupKey != null) {
+ boolean found = false;
+
+ for (HashMap sortedPermMap : sortedPermMapGroupList) {
+ if (sortedPermMap.containsValue(groupKey)) {
+ found = true;
+
+ Long groupId = xPermMap.getGroupId();
+ Long userId = xPermMap.getUserId();
+
+ if (groupId != null) {
+ Set groups = (Set) sortedPermMap.get("groups");
+
+ if (groups != null) {
+ groups.add(xPermMap.getGroupName());
+
+ sortedPermMap.put("groups", groups);
+ }
+ } else if (userId != null) {
+ Set users = (Set) sortedPermMap.get("users");
+
+ if (users != null) {
+ users.add(xPermMap.getUserName());
+
+ sortedPermMap.put("users", users);
+ }
+ }
+
+ Set access = (Set) sortedPermMap.get("access");
+ String perm = AppConstants.getLabelFor_XAPermType(xPermMap.getPermType());
+
+ access.add(perm);
+
+ sortedPermMap.put("access", access);
+ }
+ }
+ if (!found) {
+ HashMap sortedPermMap = new HashMap<>();
+
+ sortedPermMap.put("groupKey", xPermMap.getPermGroup());
+
+ Set permSet = new HashSet<>();
+ String perm = AppConstants.getLabelFor_XAPermType(xPermMap.getPermType());
+
+ permSet.add(perm);
+
+ sortedPermMap.put("access", permSet);
+
+ if (assetType == AppConstants.ASSET_KNOX) {
+ String[] ipAddrList = new String[0];
+
+ if (xPermMap.getIpAddress() != null) {
+ ipAddrList = xPermMap.getIpAddress().split(",");
+
+ sortedPermMap.put("ipAddress", ipAddrList);
+ } else {
+ sortedPermMap.put("ipAddress", ipAddrList);
+ }
+ }
+
+ Long groupId = xPermMap.getGroupId();
+ Long userId = xPermMap.getUserId();
+
+ if (groupId != null) {
+ Set groupSet = new HashSet<>();
+ String group = xPermMap.getGroupName();
+
+ groupSet.add(group);
+
+ sortedPermMap.put("groups", groupSet);
+ } else if (userId != null) {
+ Set userSet = new HashSet<>();
+ String user = xPermMap.getUserName();
+
+ userSet.add(user);
+
+ sortedPermMap.put("users", userSet);
+ }
+
+ sortedPermMapGroupList.add(sortedPermMap);
+ }
+ }
+ }
+
+ for (HashMap sortedPermMap : sortedPermMapGroupList) {
+ sortedPermMap.remove("groupKey");
+ }
+
+ for (HashMap sortedPermMap : sortedPermMapGroupList) {
+ sortedPermMap.remove("groupKey");
+ }
+
+ resourceMap.put("permission", sortedPermMapGroupList);
+
+ return resourceMap;
+ }
+
+ private String getBooleanValue(int elementValue) {
+ if (elementValue == 1) {
+ return "1"; // BOOL_TRUE
+ }
+
+ return "0"; // BOOL_FALSE
+ }
+
+ private void createOrUpdatePluginInfo(final RangerPluginInfo pluginInfo, int entityType, final int httpCode, String clusterName) {
+ logger.debug("==> createOrUpdatePluginInfo(pluginInfo = {}, isPolicyDownloadRequest = {}, httpCode = {})", pluginInfo, isPolicyDownloadRequest(entityType), httpCode);
+
+ final boolean isTagVersionResetNeeded;
+ final Runnable commitWork;
+
+ if (httpCode == HttpServletResponse.SC_NOT_MODIFIED) {
+ if (!pluginActivityAuditLogNotModified) {
+ logger.debug("Not logging HttpServletResponse. SC_NOT_MODIFIED. To enable, set configuration: {}=true", PROP_PLUGIN_ACTIVITY_AUDIT_NOT_MODIFIED);
+
+ commitWork = null;
+ } else {
+ // Create or update PluginInfo record after transaction is completed. If it is created in-line here
+ // then the TransactionManager will roll-back the changes because the HTTP return code is
+ // HttpServletResponse.SC_NOT_MODIFIED
+
+ switch (entityType) {
+ case RangerPluginInfo.ENTITY_TYPE_POLICIES:
+ isTagVersionResetNeeded = rangerDaoManager.getXXService().findAssociatedTagService(pluginInfo.getServiceName()) == null;
+ break;
+ case RangerPluginInfo.ENTITY_TYPE_TAGS:
+ case RangerPluginInfo.ENTITY_TYPE_ROLES:
+ case RangerPluginInfo.ENTITY_TYPE_USERSTORE:
+ case RangerPluginInfo.ENTITY_TYPE_GDS:
+ default:
+ isTagVersionResetNeeded = false;
+ break;
+ }
+
+ commitWork = () -> doCreateOrUpdateXXPluginInfo(pluginInfo, entityType, isTagVersionResetNeeded, clusterName);
+ }
+ } else if (httpCode == HttpServletResponse.SC_NOT_FOUND) {
+ if ((isPolicyDownloadRequest(entityType) && (pluginInfo.getPolicyActiveVersion() == null || pluginInfo.getPolicyActiveVersion() == -1))
+ || (isTagDownloadRequest(entityType) && (pluginInfo.getTagActiveVersion() == null || pluginInfo.getTagActiveVersion() == -1))
+ || (isRoleDownloadRequest(entityType) && (pluginInfo.getRoleActiveVersion() == null || pluginInfo.getRoleActiveVersion() == -1))
+ || (isUserStoreDownloadRequest(entityType) && (pluginInfo.getUserStoreActiveVersion() == null || pluginInfo.getUserStoreActiveVersion() == -1))
+ || (isGdsDownloadRequest(entityType) && (pluginInfo.getGdsActiveVersion() == null || pluginInfo.getGdsActiveVersion() == -1))) {
+ commitWork = () -> doDeleteXXPluginInfo(pluginInfo);
+ } else {
+ commitWork = () -> doCreateOrUpdateXXPluginInfo(pluginInfo, entityType, false, clusterName);
+ }
+ } else {
+ isTagVersionResetNeeded = false;
+
+ commitWork = () -> doCreateOrUpdateXXPluginInfo(pluginInfo, entityType, isTagVersionResetNeeded, clusterName);
+ }
+
+ if (commitWork != null) {
+ if (pluginActivityAuditCommitInline) {
+ transactionSynchronizationAdapter.executeOnTransactionCompletion(commitWork);
+ } else {
+ transactionSynchronizationAdapter.executeAsyncOnTransactionComplete(commitWork);
+ }
+ }
+
+ logger.debug("<== createOrUpdatePluginInfo(pluginInfo = {}, isPolicyDownloadRequest = {}, httpCode = {})", pluginInfo, isPolicyDownloadRequest(entityType), httpCode);
+ }
+
+ private XXPluginInfo doCreateOrUpdateXXPluginInfo(RangerPluginInfo pluginInfo, int entityType, final boolean isTagVersionResetNeeded, String clusterName) {
+ XXPluginInfo ret = null;
+
+ if (StringUtils.isNotBlank(pluginInfo.getServiceName())) {
+ XXPluginInfo xObj = rangerDaoManager.getXXPluginInfo().find(pluginInfo.getServiceName(), pluginInfo.getHostName(), pluginInfo.getAppType());
+
+ if (xObj == null) {
+ Map infoMap = pluginInfo.getInfo();
+
+ if (!stringUtil.isEmpty(clusterName) && infoMap != null) {
+ infoMap.put(SearchFilter.CLUSTER_NAME, clusterName);
+
+ pluginInfo.setInfo(infoMap);
+ }
+
+ // ranger-admin is restarted, plugin contains latest versions and no earlier record for this plug-in client
+ if (isPolicyDownloadRequest(entityType)) {
+ if (pluginInfo.getPolicyDownloadedVersion() != null && pluginInfo.getPolicyDownloadedVersion().equals(pluginInfo.getPolicyActiveVersion())) {
+ // This is our best guess of when policies may have been downloaded
+ pluginInfo.setPolicyDownloadTime(pluginInfo.getPolicyActivationTime());
+ }
+ } else if (isTagDownloadRequest(entityType)) {
+ if (pluginInfo.getTagDownloadedVersion() != null && pluginInfo.getTagDownloadedVersion().equals(pluginInfo.getTagActiveVersion())) {
+ // This is our best guess of when tags may have been downloaded
+ pluginInfo.setTagDownloadTime(pluginInfo.getTagActivationTime());
+ }
+ } else if (isRoleDownloadRequest(entityType)) {
+ if (pluginInfo.getRoleDownloadTime() != null && pluginInfo.getRoleDownloadedVersion().equals(pluginInfo.getRoleActiveVersion())) {
+ // This is our best guess of when role may have been downloaded
+ pluginInfo.setRoleDownloadTime(pluginInfo.getRoleActivationTime());
+ }
+ } else if (isUserStoreDownloadRequest(entityType)) {
+ if (pluginInfo.getUserStoreDownloadTime() != null && pluginInfo.getUserStoreDownloadedVersion().equals(pluginInfo.getUserStoreActiveVersion())) {
+ // This is our best guess of when users and groups may have been downloaded
+ pluginInfo.setUserStoreDownloadTime(pluginInfo.getUserStoreActivationTime());
+ }
+ } else if (isGdsDownloadRequest(entityType)) {
+ if (pluginInfo.getGdsDownloadTime() != null && pluginInfo.getGdsDownloadedVersion().equals(pluginInfo.getGdsActiveVersion())) {
+ // This is our best guess of when GDS info may have been downloaded
+ pluginInfo.setGdsDownloadTime(pluginInfo.getGdsActivationTime());
+ }
+ }
+
+ pluginInfo.setAdminCapabilities(adminCapabilities);
+
+ xObj = pluginInfoService.populateDBObject(pluginInfo);
+
+ logger.debug("Creating RangerPluginInfo record for service-version");
+
+ ret = rangerDaoManager.getXXPluginInfo().create(xObj);
+ } else {
+ boolean needsUpdating = false;
+ RangerPluginInfo dbObj = pluginInfoService.populateViewObject(xObj);
+ Map infoMap = dbObj.getInfo();
+
+ if (infoMap != null && !stringUtil.isEmpty(clusterName)) {
+ if (!stringUtil.isEmpty(infoMap.get(SearchFilter.CLUSTER_NAME)) && !stringUtil.equals(infoMap.get(SearchFilter.CLUSTER_NAME), clusterName)) {
+ infoMap.put(SearchFilter.CLUSTER_NAME, clusterName);
+
+ needsUpdating = true;
+ }
+ }
+
+ if (!dbObj.getIpAddress().equals(pluginInfo.getIpAddress())) {
+ dbObj.setIpAddress(pluginInfo.getIpAddress());
+
+ needsUpdating = true;
+ }
+
+ if (isPolicyDownloadRequest(entityType)) {
+ if (dbObj.getPolicyDownloadedVersion() == null || !dbObj.getPolicyDownloadedVersion().equals(pluginInfo.getPolicyDownloadedVersion())) {
+ dbObj.setPolicyDownloadedVersion(pluginInfo.getPolicyDownloadedVersion());
+ dbObj.setPolicyDownloadTime(pluginInfo.getPolicyDownloadTime());
+
+ needsUpdating = true;
+ }
+
+ Long lastKnownPolicyVersion = pluginInfo.getPolicyActiveVersion();
+ Long lastPolicyActivationTime = pluginInfo.getPolicyActivationTime();
+ String lastPluginCapabilityVector = pluginInfo.getPluginCapabilities();
+
+ if (lastKnownPolicyVersion != null && lastKnownPolicyVersion == -1) {
+ // First download request after plug-in's policy-refresher starts
+ dbObj.setPolicyDownloadTime(pluginInfo.getPolicyDownloadTime());
+
+ needsUpdating = true;
+ }
+
+ if (lastKnownPolicyVersion != null && lastKnownPolicyVersion > 0 && (dbObj.getPolicyActiveVersion() == null || !dbObj.getPolicyActiveVersion().equals(lastKnownPolicyVersion))) {
+ dbObj.setPolicyActiveVersion(lastKnownPolicyVersion);
+
+ needsUpdating = true;
+ }
+
+ if (lastPolicyActivationTime != null && lastPolicyActivationTime > 0 && (dbObj.getPolicyActivationTime() == null || !dbObj.getPolicyActivationTime().equals(lastPolicyActivationTime))) {
+ dbObj.setPolicyActivationTime(lastPolicyActivationTime);
+
+ needsUpdating = true;
+ }
+
+ if (lastPluginCapabilityVector != null && (dbObj.getPluginCapabilities() == null || !dbObj.getPluginCapabilities().equals(lastPluginCapabilityVector))) {
+ dbObj.setPluginCapabilities(lastPluginCapabilityVector);
+
+ needsUpdating = true;
+ }
+
+ if (dbObj.getAdminCapabilities() == null || !dbObj.getAdminCapabilities().equals(adminCapabilities)) {
+ dbObj.setAdminCapabilities(adminCapabilities);
+
+ needsUpdating = true;
+ }
+ } else if (isTagDownloadRequest(entityType)) {
+ if (dbObj.getTagDownloadedVersion() == null || !dbObj.getTagDownloadedVersion().equals(pluginInfo.getTagDownloadedVersion())) {
+ // First download for tags after tag-service is associated with resource-service
+ dbObj.setTagDownloadedVersion(pluginInfo.getTagDownloadedVersion());
+ dbObj.setTagDownloadTime(pluginInfo.getTagDownloadTime());
+
+ needsUpdating = true;
+ }
+
+ Long lastKnownTagVersion = pluginInfo.getTagActiveVersion();
+ Long lastTagActivationTime = pluginInfo.getTagActivationTime();
+
+ if (lastKnownTagVersion != null && lastKnownTagVersion == -1) {
+ // First download request after plug-in's tag-refresher restarts
+ dbObj.setTagDownloadTime(pluginInfo.getTagDownloadTime());
+
+ needsUpdating = true;
+ }
+
+ if (lastKnownTagVersion != null && lastKnownTagVersion > 0 && (dbObj.getTagActiveVersion() == null || !dbObj.getTagActiveVersion().equals(lastKnownTagVersion))) {
+ dbObj.setTagActiveVersion(lastKnownTagVersion);
+
+ needsUpdating = true;
+ }
+
+ if (lastTagActivationTime != null && lastTagActivationTime > 0 && (dbObj.getTagActivationTime() == null || !dbObj.getTagActivationTime().equals(lastTagActivationTime))) {
+ dbObj.setTagActivationTime(lastTagActivationTime);
+
+ needsUpdating = true;
+ }
+ } else if (isRoleDownloadRequest(entityType)) {
+ if (dbObj.getRoleDownloadedVersion() == null || !dbObj.getRoleDownloadedVersion().equals(pluginInfo.getRoleDownloadedVersion())) {
+ dbObj.setRoleDownloadedVersion(pluginInfo.getRoleDownloadedVersion());
+ dbObj.setRoleDownloadTime(pluginInfo.getRoleDownloadTime());
+
+ needsUpdating = true;
+ }
+
+ Long lastKnownRoleVersion = pluginInfo.getRoleActiveVersion();
+ Long lastRoleActivationTime = pluginInfo.getRoleActivationTime();
+
+ if (lastKnownRoleVersion != null && lastKnownRoleVersion == -1) {
+ dbObj.setRoleDownloadTime(pluginInfo.getRoleDownloadTime());
+
+ needsUpdating = true;
+ }
+
+ if (lastKnownRoleVersion != null && lastKnownRoleVersion > 0 && (dbObj.getRoleActiveVersion() == null || !dbObj.getRoleActiveVersion().equals(lastKnownRoleVersion))) {
+ dbObj.setRoleActiveVersion(lastKnownRoleVersion);
+
+ needsUpdating = true;
+ }
+
+ if (lastRoleActivationTime != null && lastRoleActivationTime > 0 && (dbObj.getRoleActivationTime() == null || !dbObj.getRoleActivationTime().equals(lastRoleActivationTime))) {
+ dbObj.setRoleActivationTime(lastRoleActivationTime);
+
+ needsUpdating = true;
+ }
+ } else if (isUserStoreDownloadRequest(entityType)) {
+ if (dbObj.getUserStoreDownloadedVersion() == null || !dbObj.getUserStoreDownloadedVersion().equals(pluginInfo.getUserStoreDownloadedVersion())) {
+ dbObj.setUserStoreDownloadedVersion(pluginInfo.getUserStoreDownloadedVersion());
+ dbObj.setUserStoreDownloadTime(pluginInfo.getUserStoreDownloadTime());
+
+ needsUpdating = true;
+ }
+
+ Long lastKnownUserStoreVersion = pluginInfo.getUserStoreActiveVersion();
+ Long lastUserStoreActivationTime = pluginInfo.getUserStoreActivationTime();
+
+ if (lastKnownUserStoreVersion != null && lastKnownUserStoreVersion == -1) {
+ dbObj.setUserStoreDownloadTime(pluginInfo.getUserStoreDownloadTime());
+
+ needsUpdating = true;
+ }
+
+ if (lastKnownUserStoreVersion != null && lastKnownUserStoreVersion > 0 && (dbObj.getUserStoreActiveVersion() == null || !dbObj.getUserStoreActiveVersion().equals(lastKnownUserStoreVersion))) {
+ dbObj.setUserStoreActiveVersion(lastKnownUserStoreVersion);
+
+ needsUpdating = true;
+ }
+
+ if (lastUserStoreActivationTime != null && lastUserStoreActivationTime > 0 && (dbObj.getUserStoreActivationTime() == null || !dbObj.getUserStoreActivationTime().equals(lastUserStoreActivationTime))) {
+ dbObj.setUserStoreActivationTime(lastUserStoreActivationTime);
+
+ needsUpdating = true;
+ }
+ } else if (isGdsDownloadRequest(entityType)) {
+ if (dbObj.getGdsDownloadedVersion() == null || !dbObj.getGdsDownloadedVersion().equals(pluginInfo.getGdsDownloadedVersion())) {
+ dbObj.setGdsDownloadedVersion(pluginInfo.getGdsDownloadedVersion());
+ dbObj.setGdsDownloadTime(pluginInfo.getGdsDownloadTime());
+
+ needsUpdating = true;
+ }
+
+ Long lastKnownGdsVersion = pluginInfo.getGdsActiveVersion();
+ Long lastGdsActivationTime = pluginInfo.getGdsActivationTime();
+
+ if (lastKnownGdsVersion != null && lastKnownGdsVersion == -1) {
+ dbObj.setGdsDownloadTime(pluginInfo.getGdsDownloadTime());
+
+ needsUpdating = true;
+ }
+
+ if (lastKnownGdsVersion != null && lastKnownGdsVersion > 0 && (dbObj.getGdsActiveVersion() == null || !dbObj.getGdsActiveVersion().equals(lastKnownGdsVersion))) {
+ dbObj.setGdsActiveVersion(lastKnownGdsVersion);
+
+ needsUpdating = true;
+ }
+
+ if (lastGdsActivationTime != null && lastGdsActivationTime > 0 && (dbObj.getGdsActivationTime() == null || !dbObj.getGdsActivationTime().equals(lastGdsActivationTime))) {
+ dbObj.setGdsActivationTime(lastGdsActivationTime);
+
+ needsUpdating = true;
+ }
+ }
+
+ if (isTagVersionResetNeeded) {
+ dbObj.setTagDownloadedVersion(null);
+ dbObj.setTagDownloadTime(null);
+ dbObj.setTagActiveVersion(null);
+ dbObj.setTagActivationTime(null);
+
+ needsUpdating = true;
+ }
+
+ if (needsUpdating) {
+ logger.debug("Updating XXPluginInfo record for service-version");
+
+ xObj = pluginInfoService.populateDBObject(dbObj);
+
+ ret = rangerDaoManager.getXXPluginInfo().update(xObj);
+ }
+ }
+ } else {
+ logger.error("Invalid parameters: pluginInfo={})", pluginInfo);
+ }
+
+ return ret;
+ }
+
+ private void doDeleteXXPluginInfo(RangerPluginInfo pluginInfo) {
+ XXPluginInfo xObj = rangerDaoManager.getXXPluginInfo().find(pluginInfo.getServiceName(), pluginInfo.getHostName(), pluginInfo.getAppType());
+
+ if (xObj != null) {
+ rangerDaoManager.getXXPluginInfo().remove(xObj.getId());
+ }
+ }
+
+ private String getRemoteAddress(final HttpServletRequest request) {
+ String ret = null;
+
+ if (request != null) {
+ String xForwardedAddress = request.getHeader("X-Forwarded-For");
+
+ if (StringUtils.isNotBlank(xForwardedAddress)) {
+ String[] forwardedAddresses = xForwardedAddress.split(",");
+
+ if (forwardedAddresses.length > 0) {
+ // Use first one. Hope it is the IP of the originating client
+ ret = forwardedAddresses[0].trim();
+ }
+ }
+
+ if (ret == null) {
+ ret = request.getRemoteAddr();
+ }
+ }
+
+ return ret;
+ }
+
+ private boolean isPolicyDownloadRequest(int entityType) {
+ return entityType == RangerPluginInfo.ENTITY_TYPE_POLICIES;
+ }
+
+ private boolean isTagDownloadRequest(int entityType) {
+ return entityType == RangerPluginInfo.ENTITY_TYPE_TAGS;
+ }
+
+ private boolean isRoleDownloadRequest(int entityType) {
+ return entityType == RangerPluginInfo.ENTITY_TYPE_ROLES;
+ }
+
+ private boolean isUserStoreDownloadRequest(int entityType) {
+ return entityType == RangerPluginInfo.ENTITY_TYPE_USERSTORE;
+ }
+
+ private boolean isGdsDownloadRequest(int entityType) {
+ return entityType == RangerPluginInfo.ENTITY_TYPE_GDS;
+ }
}
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/AssetMgrBase.java b/security-admin/src/main/java/org/apache/ranger/biz/AssetMgrBase.java
index 840bb38214..50f6676908 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/AssetMgrBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/AssetMgrBase.java
@@ -17,7 +17,7 @@
* under the License.
*/
- package org.apache.ranger.biz;
+package org.apache.ranger.biz;
import org.apache.ranger.common.MessageEnums;
import org.apache.ranger.common.RESTErrorUtil;
@@ -33,83 +33,79 @@
import org.springframework.beans.factory.annotation.Autowired;
public class AssetMgrBase {
+ @Autowired
+ RESTErrorUtil restErrorUtil;
- @Autowired
- RESTErrorUtil restErrorUtil;
-
- @Autowired
- XResourceService xResourceService;
-
- @Autowired
- XCredentialStoreService xCredentialStoreService;
-
- @Autowired
- XPolicyExportAuditService xPolicyExportAuditService;
-
- public VXCredentialStore getXCredentialStore(Long id){
- return (VXCredentialStore)xCredentialStoreService.readResource(id);
- }
-
- public VXCredentialStore createXCredentialStore(VXCredentialStore vXCredentialStore){
- vXCredentialStore = (VXCredentialStore)xCredentialStoreService.createResource(vXCredentialStore);
- return vXCredentialStore;
- }
-
- public VXCredentialStore updateXCredentialStore(VXCredentialStore vXCredentialStore) {
- vXCredentialStore = (VXCredentialStore)xCredentialStoreService.updateResource(vXCredentialStore);
- return vXCredentialStore;
- }
-
- public void deleteXCredentialStore(Long id, boolean force) {
- if (force) {
- xCredentialStoreService.deleteResource(id);
- } else {
- throw restErrorUtil.createRESTException(
- "serverMsg.modelMgrBaseDeleteModel",
- MessageEnums.OPER_NOT_ALLOWED_FOR_ENTITY);
- }
- }
-
- public VXCredentialStoreList searchXCredentialStores(SearchCriteria searchCriteria) {
- return xCredentialStoreService.searchXCredentialStores(searchCriteria);
- }
-
- public VXLong getXCredentialStoreSearchCount(SearchCriteria searchCriteria) {
- return xCredentialStoreService.getSearchCount(searchCriteria,
- xCredentialStoreService.searchFields);
- }
-
- public VXPolicyExportAudit getXPolicyExportAudit(Long id){
- return (VXPolicyExportAudit)xPolicyExportAuditService.readResource(id);
- }
-
- public VXPolicyExportAudit createXPolicyExportAudit(VXPolicyExportAudit vXPolicyExportAudit){
- vXPolicyExportAudit = (VXPolicyExportAudit)xPolicyExportAuditService.createResource(vXPolicyExportAudit);
- return vXPolicyExportAudit;
- }
-
- public VXPolicyExportAudit updateXPolicyExportAudit(VXPolicyExportAudit vXPolicyExportAudit) {
- vXPolicyExportAudit = (VXPolicyExportAudit)xPolicyExportAuditService.updateResource(vXPolicyExportAudit);
- return vXPolicyExportAudit;
- }
-
- public void deleteXPolicyExportAudit(Long id, boolean force) {
- if (force) {
- xPolicyExportAuditService.deleteResource(id);
- } else {
- throw restErrorUtil.createRESTException(
- "serverMsg.modelMgrBaseDeleteModel",
- MessageEnums.OPER_NOT_ALLOWED_FOR_ENTITY);
- }
- }
-
- public VXPolicyExportAuditList searchXPolicyExportAudits(SearchCriteria searchCriteria) {
- return xPolicyExportAuditService.searchXPolicyExportAudits(searchCriteria);
- }
-
- public VXLong getXPolicyExportAuditSearchCount(SearchCriteria searchCriteria) {
- return xPolicyExportAuditService.getSearchCount(searchCriteria,
- xPolicyExportAuditService.searchFields);
- }
+ @Autowired
+ XResourceService xResourceService;
+ @Autowired
+ XCredentialStoreService xCredentialStoreService;
+
+ @Autowired
+ XPolicyExportAuditService xPolicyExportAuditService;
+
+ public VXCredentialStore getXCredentialStore(Long id) {
+ return xCredentialStoreService.readResource(id);
+ }
+
+ public VXCredentialStore createXCredentialStore(VXCredentialStore vXCredentialStore) {
+ vXCredentialStore = xCredentialStoreService.createResource(vXCredentialStore);
+
+ return vXCredentialStore;
+ }
+
+ public VXCredentialStore updateXCredentialStore(VXCredentialStore vXCredentialStore) {
+ vXCredentialStore = xCredentialStoreService.updateResource(vXCredentialStore);
+
+ return vXCredentialStore;
+ }
+
+ public void deleteXCredentialStore(Long id, boolean force) {
+ if (force) {
+ xCredentialStoreService.deleteResource(id);
+ } else {
+ throw restErrorUtil.createRESTException("serverMsg.modelMgrBaseDeleteModel", MessageEnums.OPER_NOT_ALLOWED_FOR_ENTITY);
+ }
+ }
+
+ public VXCredentialStoreList searchXCredentialStores(SearchCriteria searchCriteria) {
+ return xCredentialStoreService.searchXCredentialStores(searchCriteria);
+ }
+
+ public VXLong getXCredentialStoreSearchCount(SearchCriteria searchCriteria) {
+ return xCredentialStoreService.getSearchCount(searchCriteria, xCredentialStoreService.searchFields);
+ }
+
+ public VXPolicyExportAudit getXPolicyExportAudit(Long id) {
+ return xPolicyExportAuditService.readResource(id);
+ }
+
+ public VXPolicyExportAudit createXPolicyExportAudit(VXPolicyExportAudit vXPolicyExportAudit) {
+ vXPolicyExportAudit = xPolicyExportAuditService.createResource(vXPolicyExportAudit);
+
+ return vXPolicyExportAudit;
+ }
+
+ public VXPolicyExportAudit updateXPolicyExportAudit(VXPolicyExportAudit vXPolicyExportAudit) {
+ vXPolicyExportAudit = xPolicyExportAuditService.updateResource(vXPolicyExportAudit);
+
+ return vXPolicyExportAudit;
+ }
+
+ public void deleteXPolicyExportAudit(Long id, boolean force) {
+ if (force) {
+ xPolicyExportAuditService.deleteResource(id);
+ } else {
+ throw restErrorUtil.createRESTException("serverMsg.modelMgrBaseDeleteModel", MessageEnums.OPER_NOT_ALLOWED_FOR_ENTITY);
+ }
+ }
+
+ public VXPolicyExportAuditList searchXPolicyExportAudits(SearchCriteria searchCriteria) {
+ return xPolicyExportAuditService.searchXPolicyExportAudits(searchCriteria);
+ }
+
+ public VXLong getXPolicyExportAuditSearchCount(SearchCriteria searchCriteria) {
+ return xPolicyExportAuditService.getSearchCount(searchCriteria, xPolicyExportAuditService.searchFields);
+ }
}
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/BaseMgr.java b/security-admin/src/main/java/org/apache/ranger/biz/BaseMgr.java
index 5cc6436f92..369958c68d 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/BaseMgr.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/BaseMgr.java
@@ -17,7 +17,7 @@
* under the License.
*/
- /**
+/**
*
*/
package org.apache.ranger.biz;
@@ -44,37 +44,31 @@ public abstract class BaseMgr {
RESTErrorUtil restErrorUtil;
public RangerDaoManager getDaoManager() {
- return daoManager;
+ return daoManager;
}
- public void deleteEntity(BaseDao extends XXDBBase> baseDao, Long id,
- String entityName) {
- XXDBBase entity = baseDao.getById(id);
- if (entity != null) {
- try {
- baseDao.remove(id);
- } catch (Exception e) {
- logger.error("Error deleting " + entityName + ". Id=" + id, e);
- throw restErrorUtil.createRESTException("This " + entityName
- + " can't be deleted",
- MessageEnums.OPER_NOT_ALLOWED_FOR_STATE, id, null, ""
- + id + ", error=" + e.getMessage());
- }
- } else {
- // Return without error
- logger.info("Delete ignored for non-existent " + entityName
- + " id=" + id);
- }
+ public void deleteEntity(BaseDao extends XXDBBase> baseDao, Long id, String entityName) {
+ XXDBBase entity = baseDao.getById(id);
+
+ if (entity != null) {
+ try {
+ baseDao.remove(id);
+ } catch (Exception e) {
+ logger.error("Error deleting {}. Id={}", entityName, id, e);
+
+ throw restErrorUtil.createRESTException("This " + entityName + " can't be deleted", MessageEnums.OPER_NOT_ALLOWED_FOR_STATE, id, null, id + ", error=" + e.getMessage());
+ }
+ } else {
+ // Return without error
+ logger.info("Delete ignored for non-existent {} id={}", entityName, id);
+ }
}
/**
* @param objectClassType
*/
protected void validateClassType(int objectClassType) {
- // objectClassType
- restErrorUtil.validateMinMax(objectClassType, 1,
- RangerConstants.ClassTypes_MAX, "Invalid classType", null,
- "objectClassType");
+ // objectClassType
+ restErrorUtil.validateMinMax(objectClassType, 1, RangerConstants.ClassTypes_MAX, "Invalid classType", null, "objectClassType");
}
-
}
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java b/security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java
index 11983a2727..7916f08188 100755
--- a/security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java
@@ -19,15 +19,45 @@
package org.apache.ranger.biz;
-import org.apache.http.HttpStatus;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
+import org.apache.http.HttpStatus;
import org.apache.ranger.biz.ServiceDBStore.REMOVE_REF_TYPE;
-import org.apache.ranger.common.*;
+import org.apache.ranger.common.GUIDUtil;
+import org.apache.ranger.common.MessageEnums;
+import org.apache.ranger.common.RESTErrorUtil;
+import org.apache.ranger.common.RangerConstants;
+import org.apache.ranger.common.ServiceGdsInfoCache;
import org.apache.ranger.common.db.RangerTransactionSynchronizationAdapter;
-import org.apache.ranger.db.*;
-import org.apache.ranger.entity.*;
-import org.apache.ranger.plugin.model.RangerGds.*;
+import org.apache.ranger.db.RangerDaoManager;
+import org.apache.ranger.db.XXGdsDataShareDao;
+import org.apache.ranger.db.XXGdsDataShareInDatasetDao;
+import org.apache.ranger.db.XXGdsDatasetDao;
+import org.apache.ranger.db.XXGdsDatasetInProjectDao;
+import org.apache.ranger.db.XXGdsProjectDao;
+import org.apache.ranger.db.XXServiceDao;
+import org.apache.ranger.entity.XXGdsDataShare;
+import org.apache.ranger.entity.XXGdsDataShareInDataset;
+import org.apache.ranger.entity.XXGdsDataset;
+import org.apache.ranger.entity.XXGdsDatasetInProject;
+import org.apache.ranger.entity.XXGdsDatasetPolicyMap;
+import org.apache.ranger.entity.XXGdsProject;
+import org.apache.ranger.entity.XXGdsProjectPolicyMap;
+import org.apache.ranger.entity.XXSecurityZone;
+import org.apache.ranger.entity.XXService;
+import org.apache.ranger.plugin.model.RangerGds.DataShareInDatasetSummary;
+import org.apache.ranger.plugin.model.RangerGds.DataShareSummary;
+import org.apache.ranger.plugin.model.RangerGds.DatasetSummary;
+import org.apache.ranger.plugin.model.RangerGds.GdsPermission;
+import org.apache.ranger.plugin.model.RangerGds.GdsShareStatus;
+import org.apache.ranger.plugin.model.RangerGds.RangerDataShare;
+import org.apache.ranger.plugin.model.RangerGds.RangerDataShareInDataset;
+import org.apache.ranger.plugin.model.RangerGds.RangerDataset;
+import org.apache.ranger.plugin.model.RangerGds.RangerDatasetInProject;
+import org.apache.ranger.plugin.model.RangerGds.RangerGdsBaseModelObject;
+import org.apache.ranger.plugin.model.RangerGds.RangerGdsObjectACL;
+import org.apache.ranger.plugin.model.RangerGds.RangerProject;
+import org.apache.ranger.plugin.model.RangerGds.RangerSharedResource;
import org.apache.ranger.plugin.model.RangerPolicy;
import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyItem;
import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyResource;
@@ -36,11 +66,23 @@
import org.apache.ranger.plugin.store.AbstractGdsStore;
import org.apache.ranger.plugin.store.PList;
import org.apache.ranger.plugin.store.ServiceStore;
-import org.apache.ranger.plugin.util.*;
-import org.apache.ranger.service.*;
+import org.apache.ranger.plugin.util.SearchFilter;
+import org.apache.ranger.plugin.util.ServiceGdsInfo;
+import org.apache.ranger.service.RangerGdsDataShareInDatasetService;
+import org.apache.ranger.service.RangerGdsDataShareService;
+import org.apache.ranger.service.RangerGdsDatasetInProjectService;
+import org.apache.ranger.service.RangerGdsDatasetService;
+import org.apache.ranger.service.RangerGdsProjectService;
+import org.apache.ranger.service.RangerGdsSharedResourceService;
+import org.apache.ranger.service.RangerServiceService;
import org.apache.ranger.validation.RangerGdsValidationDBProvider;
import org.apache.ranger.validation.RangerGdsValidator;
-import org.apache.ranger.view.RangerGdsVList.*;
+import org.apache.ranger.view.RangerGdsVList.RangerDataShareInDatasetList;
+import org.apache.ranger.view.RangerGdsVList.RangerDataShareList;
+import org.apache.ranger.view.RangerGdsVList.RangerDatasetInProjectList;
+import org.apache.ranger.view.RangerGdsVList.RangerDatasetList;
+import org.apache.ranger.view.RangerGdsVList.RangerProjectList;
+import org.apache.ranger.view.RangerGdsVList.RangerSharedResourceList;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -48,21 +90,30 @@
import javax.annotation.PostConstruct;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
import static org.apache.ranger.db.XXGlobalStateDao.RANGER_GLOBAL_STATE_NAME_GDS;
import static org.apache.ranger.plugin.store.EmbeddedServiceDefsUtil.EMBEDDED_SERVICEDEF_GDS_NAME;
-
@Component
public class GdsDBStore extends AbstractGdsStore {
private static final Logger LOG = LoggerFactory.getLogger(GdsDBStore.class);
public static final String RESOURCE_NAME_DATASET_ID = "dataset-id";
public static final String RESOURCE_NAME_PROJECT_ID = "project-id";
-
public static final String NOT_AUTHORIZED_FOR_DATASET_POLICIES = "User is not authorized to manage policies for this dataset";
public static final String NOT_AUTHORIZED_TO_VIEW_DATASET_POLICIES = "User is not authorized to view policies for this dataset";
public static final String NOT_AUTHORIZED_FOR_PROJECT_POLICIES = "User is not authorized to manage policies for this dataset";
@@ -121,13 +172,9 @@ public class GdsDBStore extends AbstractGdsStore {
@PostConstruct
public void initStore() {
- if (LOG.isDebugEnabled()) {
- LOG.debug("==> GdsInMemoryStore.initStore()");
- }
+ LOG.debug("==> GdsInMemoryStore.initStore()");
- if (LOG.isDebugEnabled()) {
- LOG.debug("<== GdsInMemoryStore.initStore()");
- }
+ LOG.debug("<== GdsInMemoryStore.initStore()");
}
@Override
@@ -290,9 +337,9 @@ public PList getDatasetNames(SearchFilter filter) {
public PList searchDatasets(SearchFilter filter) {
LOG.debug("==> searchDatasets({})", filter);
- if (filter.getParam(SearchFilter.CREATED_BY) != null) {
- setUserId(filter, SearchFilter.CREATED_BY);
- }
+ if (filter.getParam(SearchFilter.CREATED_BY) != null) {
+ setUserId(filter, SearchFilter.CREATED_BY);
+ }
PList ret = getUnscrubbedDatasets(filter);
GdsPermission gdsPermission = getGdsPermissionFromFilter(filter);
@@ -308,135 +355,6 @@ public PList searchDatasets(SearchFilter filter) {
return ret;
}
- @Override
- public RangerPolicy addDatasetPolicy(Long datasetId, RangerPolicy policy) throws Exception {
- LOG.debug("==> addDatasetPolicy({}, {})", datasetId, policy);
-
- RangerDataset dataset = datasetService.read(datasetId);
-
- if (!validator.hasPermission(dataset.getAcl(), GdsPermission.POLICY_ADMIN)) {
- throw restErrorUtil.create403RESTException(NOT_AUTHORIZED_FOR_DATASET_POLICIES);
- }
-
- prepareDatasetPolicy(dataset, policy);
-
- RangerPolicy ret = svcStore.createPolicy(policy);
-
- daoMgr.getXXGdsDatasetPolicyMap().create(new XXGdsDatasetPolicyMap(datasetId, ret.getId()));
-
- updateGdsVersionForDataset(datasetId);
-
- LOG.debug("<== addDatasetPolicy({}, {}): ret={}", datasetId, policy, ret);
-
- return ret;
- }
-
- @Override
- public RangerPolicy updateDatasetPolicy(Long datasetId, RangerPolicy policy) throws Exception {
- LOG.debug("==> updateDatasetPolicy({}, {})", datasetId, policy);
-
- RangerDataset dataset = datasetService.read(datasetId);
-
- if (!validator.hasPermission(dataset.getAcl(), GdsPermission.POLICY_ADMIN)) {
- throw restErrorUtil.create403RESTException(NOT_AUTHORIZED_FOR_DATASET_POLICIES);
- }
-
- XXGdsDatasetPolicyMap existing = daoMgr.getXXGdsDatasetPolicyMap().getDatasetPolicyMap(datasetId, policy.getId());
-
- if (existing == null) {
- throw new Exception("no policy exists: datasetId=" + datasetId + ", policyId=" + policy.getId());
- }
-
- prepareDatasetPolicy(dataset, policy);
-
- RangerPolicy ret = svcStore.updatePolicy(policy);
-
- updateGdsVersionForDataset(datasetId);
-
- LOG.debug("<== updateDatasetPolicy({}, {}): ret={}", datasetId, policy, ret);
-
- return ret;
- }
-
- @Override
- public void deleteDatasetPolicy(Long datasetId, Long policyId) throws Exception {
- LOG.debug("==> deleteDatasetPolicy({}, {})", datasetId, policyId);
-
- RangerDataset dataset = datasetService.read(datasetId);
-
- if (!validator.hasPermission(dataset.getAcl(), GdsPermission.POLICY_ADMIN)) {
- throw restErrorUtil.create403RESTException(NOT_AUTHORIZED_FOR_DATASET_POLICIES);
- }
-
- XXGdsDatasetPolicyMap existing = daoMgr.getXXGdsDatasetPolicyMap().getDatasetPolicyMap(datasetId, policyId);
-
- if (existing == null) {
- throw new Exception("no policy exists: datasetId=" + datasetId + ", policyId=" + policyId);
- }
-
- RangerPolicy policy = svcStore.getPolicy(policyId);
-
- daoMgr.getXXGdsDatasetPolicyMap().remove(existing);
- svcStore.deletePolicy(policy);
-
- updateGdsVersionForDataset(datasetId);
-
- LOG.debug("<== deleteDatasetPolicy({}, {})", datasetId, policyId);
- }
-
- @Override
- public void deleteDatasetPolicies(Long datasetId) throws Exception {
- LOG.debug("==> deleteDatasetPolicies({})", datasetId);
-
- RangerDataset dataset = datasetService.read(datasetId);
-
- deleteDatasetPolicies(dataset);
-
- updateGdsVersionForDataset(datasetId);
-
- LOG.debug("<== deleteDatasetPolicy({})", datasetId);
- }
-
- @Override
- public RangerPolicy getDatasetPolicy(Long datasetId, Long policyId) throws Exception {
- LOG.debug("==> getDatasetPolicy({}, {})", datasetId, policyId);
-
- RangerDataset dataset = datasetService.read(datasetId);
-
- if (!validator.hasPermission(dataset.getAcl(), GdsPermission.AUDIT)) {
- throw restErrorUtil.create403RESTException(NOT_AUTHORIZED_TO_VIEW_DATASET_POLICIES);
- }
-
- XXGdsDatasetPolicyMap existing = daoMgr.getXXGdsDatasetPolicyMap().getDatasetPolicyMap(datasetId, policyId);
-
- if (existing == null) {
- throw new Exception("no policy exists: datasetId=" + datasetId + ", policyId=" + policyId);
- }
-
- RangerPolicy ret = svcStore.getPolicy(policyId);
-
- LOG.debug("<== getDatasetPolicy({}, {}): ret={}", datasetId, policyId, ret);
-
- return ret;
- }
-
- @Override
- public List getDatasetPolicies(Long datasetId) throws Exception {
- LOG.debug("==> getDatasetPolicies({})", datasetId);
-
- RangerDataset dataset = datasetService.read(datasetId);
-
- if (!validator.hasPermission(dataset.getAcl(), GdsPermission.AUDIT)) {
- throw restErrorUtil.create403RESTException(NOT_AUTHORIZED_TO_VIEW_DATASET_POLICIES);
- }
-
- List ret = getPolicies(daoMgr.getXXGdsDatasetPolicyMap().getDatasetPolicyIds(datasetId));
-
- LOG.debug("<== getDatasetPolicies({}): ret={}", datasetId, ret);
-
- return ret;
- }
-
@Override
public RangerProject createProject(RangerProject project) {
LOG.debug("==> createProject({})", project);
@@ -513,7 +431,7 @@ public void deleteProject(Long projectId, boolean forceDelete) throws Exception
try {
existing = projectService.read(projectId);
- } catch(Exception excp) {
+ } catch (Exception excp) {
// ignore
}
@@ -611,253 +529,123 @@ public PList searchProjects(SearchFilter filter) {
}
@Override
- public RangerPolicy addProjectPolicy(Long projectId, RangerPolicy policy) throws Exception {
- LOG.debug("==> addProjectPolicy({}, {})", projectId, policy);
+ public RangerDataShare createDataShare(RangerDataShare dataShare) {
+ LOG.debug("==> createDataShare({})", dataShare);
- RangerProject project = projectService.read(projectId);
+ dataShare.setName(StringUtils.trim(dataShare.getName()));
- if (!validator.hasPermission(project.getAcl(), GdsPermission.POLICY_ADMIN)) {
- throw restErrorUtil.create403RESTException(NOT_AUTHORIZED_FOR_PROJECT_POLICIES);
+ validator.validateCreate(dataShare);
+
+ if (StringUtils.isBlank(dataShare.getGuid())) {
+ dataShare.setGuid(guidUtil.genGUID());
}
- prepareProjectPolicy(project, policy);
+ if (dataShare.getAcl() == null) {
+ dataShare.setAcl(new RangerGdsObjectACL());
+ }
- RangerPolicy ret = svcStore.createPolicy(policy);
+ addCreatorAsAclAdmin(dataShare.getAcl());
- daoMgr.getXXGdsProjectPolicyMap().create(new XXGdsProjectPolicyMap(projectId, ret.getId()));
+ RangerDataShare ret = dataShareService.create(dataShare);
- updateGdsVersionForProject(project.getId());
+ dataShareService.onObjectChange(ret, null, RangerServiceService.OPERATION_CREATE_CONTEXT);
- LOG.debug("<== addProjectPolicy({}, {}): ret={}", projectId, policy, ret);
+ updateGdsVersion();
+
+ LOG.debug("<== createDataShare({}): ret={}", dataShare, ret);
return ret;
}
@Override
- public RangerPolicy updateProjectPolicy(Long projectId, RangerPolicy policy) throws Exception {
- LOG.debug("==> updateProjectPolicy({}, {})", projectId, policy);
+ public RangerDataShare updateDataShare(RangerDataShare dataShare) {
+ LOG.debug("==> updateDataShare({})", dataShare);
- RangerProject project = projectService.read(projectId);
+ RangerDataShare existing = null;
- if (!validator.hasPermission(project.getAcl(), GdsPermission.POLICY_ADMIN)) {
- throw restErrorUtil.create403RESTException(NOT_AUTHORIZED_FOR_PROJECT_POLICIES);
+ try {
+ existing = dataShareService.read(dataShare.getId());
+ } catch (Exception excp) {
+ // ignore
}
- XXGdsProjectPolicyMap existing = daoMgr.getXXGdsProjectPolicyMap().getProjectPolicyMap(projectId, policy.getId());
+ dataShare.setName(StringUtils.trim(dataShare.getName()));
- if (existing == null) {
- throw new Exception("no policy exists: projectId=" + projectId + ", policyId=" + policy.getId());
- }
+ validator.validateUpdate(dataShare, existing);
- prepareProjectPolicy(project, policy);
+ copyExistingBaseFields(dataShare, existing);
- RangerPolicy ret = svcStore.updatePolicy(policy);
+ RangerDataShare ret = dataShareService.update(dataShare);
- updateGdsVersionForProject(project.getId());
+ dataShareService.onObjectChange(ret, existing, RangerServiceService.OPERATION_UPDATE_CONTEXT);
- LOG.debug("<== updateProjectPolicy({}, {}): ret={}", projectId, policy, ret);
+ updateGdsVersionForService(dataShare.getService());
+
+ LOG.debug("<== updateDataShare({}): ret={}", dataShare, ret);
return ret;
}
@Override
- public void deleteProjectPolicy(Long projectId, Long policyId) throws Exception {
- LOG.debug("==> deleteProjectPolicy({}, {})", projectId, policyId);
+ public void deleteDataShare(Long dataShareId, boolean forceDelete) {
+ LOG.debug("==> deleteDataShare(dataShareId: {}, forceDelete: {})", dataShareId, forceDelete);
- RangerProject project = projectService.read(projectId);
+ RangerDataShare existing = null;
- if (!validator.hasPermission(project.getAcl(), GdsPermission.POLICY_ADMIN)) {
- throw restErrorUtil.create403RESTException(NOT_AUTHORIZED_FOR_DATASET_POLICIES);
+ try {
+ existing = dataShareService.read(dataShareId);
+ } catch (Exception excp) {
+ // ignore
}
- XXGdsProjectPolicyMap existing = daoMgr.getXXGdsProjectPolicyMap().getProjectPolicyMap(projectId, policyId);
+ validator.validateDelete(dataShareId, existing);
- if (existing == null) {
- throw new Exception("no policy exists: projectId=" + projectId + ", policyId=" + policyId);
- }
+ if (existing != null) {
+ if (forceDelete) {
+ removeDshInDsForDataShare(dataShareId);
+ removeSharedResourcesForDataShare(dataShareId);
+ }
- RangerPolicy policy = svcStore.getPolicy(policyId);
+ dataShareService.delete(existing);
- daoMgr.getXXGdsProjectPolicyMap().remove(existing);
- svcStore.deletePolicy(policy);
+ dataShareService.onObjectChange(null, existing, RangerServiceService.OPERATION_DELETE_CONTEXT);
- updateGdsVersionForProject(project.getId());
+ updateGdsVersionForService(existing.getService());
+ }
- LOG.debug("<== deleteProjectPolicy({}, {})", projectId, policyId);
+ LOG.debug("<== deleteDataShare(dataShareId: {}, forceDelete: {})", dataShareId, forceDelete);
}
@Override
- public void deleteProjectPolicies(Long projectId) throws Exception {
- LOG.debug("==> deleteProjectPolicies({})", projectId);
+ public RangerDataShare getDataShare(Long dataShareId) throws Exception {
+ LOG.debug("==> getDataShare({})", dataShareId);
- RangerProject project = projectService.read(projectId);
+ RangerDataShare ret = dataShareService.read(dataShareId);
- deleteProjectPolicies(project);
+ if (ret != null && !validator.hasPermission(ret.getAcl(), GdsPermission.VIEW)) {
+ throw new Exception("no permission on dataShare id=" + dataShareId);
+ }
- updateGdsVersionForProject(project.getId());
+ LOG.debug("<== getDataShare({}): ret={}", dataShareId, ret);
- LOG.debug("<== deleteProjectPolicy({})", projectId);
+ return ret;
}
@Override
- public RangerPolicy getProjectPolicy(Long projectId, Long policyId) throws Exception {
- LOG.debug("==> getProjectPolicy({}, {})", projectId, policyId);
+ public PList searchDataShares(SearchFilter filter) {
+ LOG.debug("==> searchDataShares({})", filter);
- RangerProject project = projectService.read(projectId);
+ PList ret = getUnscrubbedDataShares(filter);
+ List dataShares = ret.getList();
+ GdsPermission gdsPermission = getGdsPermissionFromFilter(filter);
- if (!validator.hasPermission(project.getAcl(), GdsPermission.AUDIT)) {
- throw restErrorUtil.create403RESTException(NOT_AUTHORIZED_TO_VIEW_PROJECT_POLICIES);
+ for (RangerDataShare dataShare : dataShares) {
+ if (gdsPermission.equals(GdsPermission.LIST)) {
+ scrubDataShareForListing(dataShare);
+ }
}
- XXGdsProjectPolicyMap existing = daoMgr.getXXGdsProjectPolicyMap().getProjectPolicyMap(projectId, policyId);
-
- if (existing == null) {
- throw new Exception("no policy exists: projectId=" + projectId + ", policyId=" + policyId);
- }
-
- RangerPolicy ret = svcStore.getPolicy(policyId);
-
- LOG.debug("<== getProjectPolicy({}, {}): ret={}", projectId, policyId, ret);
-
- return ret;
- }
-
- @Override
- public List getProjectPolicies(Long projectId) throws Exception {
- LOG.debug("==> getProjectPolicies({})", projectId);
-
- RangerProject project = projectService.read(projectId);
-
- if (!validator.hasPermission(project.getAcl(), GdsPermission.AUDIT)) {
- throw restErrorUtil.create403RESTException(NOT_AUTHORIZED_TO_VIEW_PROJECT_POLICIES);
- }
-
- List ret = getPolicies(daoMgr.getXXGdsProjectPolicyMap().getProjectPolicyIds(projectId));
-
- LOG.debug("<== getProjectPolicies({}): ret={}", projectId, ret);
-
- return ret;
- }
-
-
- @Override
- public RangerDataShare createDataShare(RangerDataShare dataShare) {
- LOG.debug("==> createDataShare({})", dataShare);
-
- dataShare.setName(StringUtils.trim(dataShare.getName()));
-
- validator.validateCreate(dataShare);
-
- if (StringUtils.isBlank(dataShare.getGuid())) {
- dataShare.setGuid(guidUtil.genGUID());
- }
-
- if (dataShare.getAcl() == null) {
- dataShare.setAcl(new RangerGdsObjectACL());
- }
-
- addCreatorAsAclAdmin(dataShare.getAcl());
-
- RangerDataShare ret = dataShareService.create(dataShare);
-
- dataShareService.onObjectChange(ret, null, RangerServiceService.OPERATION_CREATE_CONTEXT);
-
- updateGdsVersion();
-
- LOG.debug("<== createDataShare({}): ret={}", dataShare, ret);
-
- return ret;
- }
-
- @Override
- public RangerDataShare updateDataShare(RangerDataShare dataShare) {
- LOG.debug("==> updateDataShare({})", dataShare);
-
- RangerDataShare existing = null;
-
- try {
- existing = dataShareService.read(dataShare.getId());
- } catch (Exception excp) {
- // ignore
- }
-
- dataShare.setName(StringUtils.trim(dataShare.getName()));
-
- validator.validateUpdate(dataShare, existing);
-
- copyExistingBaseFields(dataShare, existing);
-
- RangerDataShare ret = dataShareService.update(dataShare);
-
- dataShareService.onObjectChange(ret, existing, RangerServiceService.OPERATION_UPDATE_CONTEXT);
-
- updateGdsVersionForService(dataShare.getService());
-
- LOG.debug("<== updateDataShare({}): ret={}", dataShare, ret);
-
- return ret;
- }
-
- @Override
- public void deleteDataShare(Long dataShareId, boolean forceDelete) {
- LOG.debug("==> deleteDataShare(dataShareId: {}, forceDelete: {})", dataShareId, forceDelete);
-
- RangerDataShare existing = null;
-
- try {
- existing = dataShareService.read(dataShareId);
- } catch (Exception excp) {
- // ignore
- }
-
- validator.validateDelete(dataShareId, existing);
-
- if (existing != null) {
- if (forceDelete) {
- removeDshInDsForDataShare(dataShareId);
- removeSharedResourcesForDataShare(dataShareId);
- }
-
- dataShareService.delete(existing);
-
- dataShareService.onObjectChange(null, existing, RangerServiceService.OPERATION_DELETE_CONTEXT);
-
- updateGdsVersionForService(existing.getService());
- }
-
- LOG.debug("<== deleteDataShare(dataShareId: {}, forceDelete: {})", dataShareId, forceDelete);
- }
-
- @Override
- public RangerDataShare getDataShare(Long dataShareId) throws Exception {
- LOG.debug("==> getDataShare({})", dataShareId);
-
- RangerDataShare ret = dataShareService.read(dataShareId);
-
- if (ret != null && !validator.hasPermission(ret.getAcl(), GdsPermission.VIEW)) {
- throw new Exception("no permission on dataShare id=" + dataShareId);
- }
-
- LOG.debug("<== getDataShare({}): ret={}", dataShareId, ret);
-
- return ret;
- }
-
- @Override
- public PList searchDataShares(SearchFilter filter) {
- LOG.debug("==> searchDataShares({})", filter);
-
- PList ret = getUnscrubbedDataShares(filter);
- List dataShares = ret.getList();
- GdsPermission gdsPermission = getGdsPermissionFromFilter(filter);
-
- for (RangerDataShare dataShare : dataShares) {
- if (gdsPermission.equals(GdsPermission.LIST)) {
- scrubDataShareForListing(dataShare);
- }
- }
-
- LOG.debug("<== searchDataShares({}): ret={}", filter, ret);
+ LOG.debug("<== searchDataShares({}): ret={}", filter, ret);
return ret;
}
@@ -964,15 +752,15 @@ public RangerSharedResource getSharedResource(Long sharedResourceId) {
public PList searchSharedResources(SearchFilter filter) {
LOG.debug("==> searchSharedResources({})", filter);
- int maxRows = filter.getMaxRows();
+ int maxRows = filter.getMaxRows();
int startIndex = filter.getStartIndex();
final String resourceContains = filter.getParam(SearchFilter.RESOURCE_CONTAINS);
filter.removeParam(SearchFilter.RESOURCE_CONTAINS);
- if (StringUtils.isNotEmpty(resourceContains)) {
- filter.setParam(SearchFilter.RETRIEVE_ALL_PAGES, "true");
- }
+ if (StringUtils.isNotEmpty(resourceContains)) {
+ filter.setParam(SearchFilter.RETRIEVE_ALL_PAGES, "true");
+ }
RangerSharedResourceList result = sharedResourceService.searchSharedResources(filter);
List sharedResources = new ArrayList<>();
@@ -989,12 +777,12 @@ public PList searchSharedResources(SearchFilter filter) {
if (CollectionUtils.isNotEmpty(resources)) {
includeResource = resources.stream().filter(Objects::nonNull)
- .map(RangerPolicyResource::getValues).filter(Objects::nonNull)
- .anyMatch(res -> hasResource(res, resourceContains));
+ .map(RangerPolicyResource::getValues).filter(Objects::nonNull)
+ .anyMatch(res -> hasResource(res, resourceContains));
if (!includeResource && sharedResource.getSubResource() != null && CollectionUtils.isNotEmpty(sharedResource.getSubResource().getValues())) {
includeResource = sharedResource.getSubResource().getValues().stream().filter(Objects::nonNull)
- .anyMatch(value -> value.contains(resourceContains));
+ .anyMatch(value -> value.contains(resourceContains));
}
}
}
@@ -1012,22 +800,6 @@ public PList searchSharedResources(SearchFilter filter) {
return ret;
}
- public List addDataSharesInDataset(List dataSharesInDataset) throws Exception {
- LOG.debug("==> addDataSharesInDataset({})", dataSharesInDataset);
-
- List ret = new ArrayList<>();
-
- validate(dataSharesInDataset);
-
- for (RangerDataShareInDataset dataShareInDataset : dataSharesInDataset) {
- ret.add(createDataShareInDataset(dataShareInDataset));
- }
-
- LOG.debug("<== addDataSharesInDataset({}): ret={}", dataSharesInDataset, ret);
-
- return ret;
- }
-
@Override
public RangerDataShareInDataset addDataShareInDataset(RangerDataShareInDataset dataShareInDataset) throws Exception {
LOG.debug("==> addDataShareInDataset({})", dataShareInDataset);
@@ -1053,168 +825,426 @@ public RangerDataShareInDataset updateDataShareInDataset(RangerDataShareInDatase
dataShareInDataset.setApprover(validator.needApproverUpdate(existing.getStatus(), dataShareInDataset.getStatus()) ? bizUtil.getCurrentUserLoginId() : existing.getApprover());
- RangerDataShareInDataset ret = dataShareInDatasetService.update(dataShareInDataset);
+ RangerDataShareInDataset ret = dataShareInDatasetService.update(dataShareInDataset);
+
+ dataShareInDatasetService.onObjectChange(ret, existing, RangerServiceService.OPERATION_UPDATE_CONTEXT);
+
+ updateGdsVersionForDataset(dataShareInDataset.getDatasetId());
+
+ LOG.debug("<== updateDataShareInDataset({}): ret={}", dataShareInDataset, ret);
+
+ return ret;
+ }
+
+ @Override
+ public void removeDataShareInDataset(Long dataShareInDatasetId) {
+ LOG.debug("==> removeDataShareInDataset({})", dataShareInDatasetId);
+
+ RangerDataShareInDataset existing = dataShareInDatasetService.read(dataShareInDatasetId);
+
+ validator.validateDelete(dataShareInDatasetId, existing);
+
+ dataShareInDatasetService.delete(existing);
+
+ dataShareInDatasetService.onObjectChange(null, existing, RangerServiceService.OPERATION_DELETE_CONTEXT);
+
+ updateGdsVersionForDataset(existing.getDatasetId());
+
+ LOG.debug("<== removeDataShareInDataset({})", dataShareInDatasetId);
+ }
+
+ @Override
+ public RangerDataShareInDataset getDataShareInDataset(Long dataShareInDatasetId) {
+ LOG.debug("==> getDataShareInDataset({})", dataShareInDatasetId);
+
+ RangerDataShareInDataset ret = dataShareInDatasetService.read(dataShareInDatasetId);
+
+ LOG.debug("<== getDataShareInDataset({}): ret={}", dataShareInDatasetId, ret);
+
+ return ret;
+ }
+
+ @Override
+ public PList searchDataShareInDatasets(SearchFilter filter) {
+ LOG.debug("==> searchDataShareInDatasets({})", filter);
+
+ int maxRows = filter.getMaxRows();
+ int startIndex = filter.getStartIndex();
+
+ List dataShareInDatasets = new ArrayList<>();
+ RangerDataShareInDatasetList result = dataShareInDatasetService.searchDataShareInDatasets(filter);
+
+ for (RangerDataShareInDataset dataShareInDataset : result.getList()) {
+ // TODO: enforce RangerSharedResource.acl
+
+ dataShareInDatasets.add(dataShareInDataset);
+ }
+
+ PList ret = getPList(dataShareInDatasets, startIndex, maxRows, result.getSortBy(), result.getSortType());
+
+ LOG.debug("<== searchDataShareInDatasets({}): ret={}", filter, ret);
+
+ return ret;
+ }
+
+ @Override
+ public RangerDatasetInProject addDatasetInProject(RangerDatasetInProject datasetInProject) throws Exception {
+ LOG.debug("==> addDatasetInProject({})", datasetInProject);
+
+ XXGdsDatasetInProjectDao datasetDao = daoMgr.getXXGdsDatasetInProject();
+ XXGdsDatasetInProject existing = datasetDao.findByDatasetIdAndProjectId(datasetInProject.getDatasetId(), datasetInProject.getProjectId());
+
+ if (existing != null) {
+ throw new Exception("dataset '" + datasetInProject.getDatasetId() + "' already shared with project " + datasetInProject.getProjectId() + " - id=" + existing.getId());
+ }
+
+ validator.validateCreate(datasetInProject);
+
+ if (StringUtils.isBlank(datasetInProject.getGuid())) {
+ datasetInProject.setGuid(guidUtil.genGUID());
+ }
+
+ RangerDatasetInProject ret = datasetInProjectService.create(datasetInProject);
+
+ datasetInProjectService.onObjectChange(ret, null, RangerServiceService.OPERATION_CREATE_CONTEXT);
+
+ updateGdsVersionForDataset(datasetInProject.getDatasetId());
+
+ LOG.debug("<== addDatasetInProject({}): ret={}", datasetInProject, ret);
+
+ return ret;
+ }
+
+ @Override
+ public RangerDatasetInProject updateDatasetInProject(RangerDatasetInProject datasetInProject) {
+ LOG.debug("==> updateDatasetInProject({})", datasetInProject);
+
+ RangerDatasetInProject existing = datasetInProjectService.read(datasetInProject.getId());
+
+ validator.validateUpdate(datasetInProject, existing);
+
+ copyExistingBaseFields(datasetInProject, existing);
+
+ datasetInProject.setApprover(validator.needApproverUpdate(existing.getStatus(), datasetInProject.getStatus()) ? bizUtil.getCurrentUserLoginId() : existing.getApprover());
+
+ RangerDatasetInProject ret = datasetInProjectService.update(datasetInProject);
+
+ datasetInProjectService.onObjectChange(ret, existing, RangerServiceService.OPERATION_UPDATE_CONTEXT);
+
+ updateGdsVersionForDataset(datasetInProject.getDatasetId());
+
+ LOG.debug("<== updateDatasetInProject({}): ret={}", datasetInProject, ret);
+
+ return ret;
+ }
+
+ @Override
+ public void removeDatasetInProject(Long datasetInProjectId) {
+ LOG.debug("==> removeDatasetInProject({})", datasetInProjectId);
+
+ RangerDatasetInProject existing = datasetInProjectService.read(datasetInProjectId);
+
+ validator.validateDelete(datasetInProjectId, existing);
+
+ datasetInProjectService.delete(existing);
+
+ datasetInProjectService.onObjectChange(null, existing, RangerServiceService.OPERATION_DELETE_CONTEXT);
+
+ updateGdsVersionForDataset(existing.getDatasetId());
+
+ LOG.debug("<== removeDatasetInProject({})", datasetInProjectId);
+ }
+
+ @Override
+ public RangerDatasetInProject getDatasetInProject(Long datasetInProjectId) {
+ LOG.debug("==> getDatasetInProject({})", datasetInProjectId);
+
+ RangerDatasetInProject ret = datasetInProjectService.read(datasetInProjectId);
+
+ // TODO: enforce RangerDatasetInProject.acl
+
+ LOG.debug("<== getDatasetInProject({}): ret={}", datasetInProjectId, ret);
+
+ return ret;
+ }
+
+ @Override
+ public PList searchDatasetInProjects(SearchFilter filter) {
+ LOG.debug("==> searchDatasetInProjects({})", filter);
+
+ int maxRows = filter.getMaxRows();
+ int startIndex = filter.getStartIndex();
+
+ List datasetInProjects = new ArrayList<>();
+ RangerDatasetInProjectList result = datasetInProjectService.searchDatasetInProjects(filter);
+
+ for (RangerDatasetInProject datasetInProject : result.getList()) {
+ // TODO: enforce RangerDatasetInProject.acl
+
+ datasetInProjects.add(datasetInProject);
+ }
+
+ PList ret = getPList(datasetInProjects, startIndex, maxRows, result.getSortBy(), result.getSortType());
+
+ LOG.debug("<== searchDatasetInProjects({}): ret={}", filter, ret);
+
+ return ret;
+ }
+
+ @Override
+ public RangerPolicy addDatasetPolicy(Long datasetId, RangerPolicy policy) throws Exception {
+ LOG.debug("==> addDatasetPolicy({}, {})", datasetId, policy);
+
+ RangerDataset dataset = datasetService.read(datasetId);
+
+ if (!validator.hasPermission(dataset.getAcl(), GdsPermission.POLICY_ADMIN)) {
+ throw restErrorUtil.create403RESTException(NOT_AUTHORIZED_FOR_DATASET_POLICIES);
+ }
+
+ prepareDatasetPolicy(dataset, policy);
+
+ RangerPolicy ret = svcStore.createPolicy(policy);
+
+ daoMgr.getXXGdsDatasetPolicyMap().create(new XXGdsDatasetPolicyMap(datasetId, ret.getId()));
+
+ updateGdsVersionForDataset(datasetId);
+
+ LOG.debug("<== addDatasetPolicy({}, {}): ret={}", datasetId, policy, ret);
+
+ return ret;
+ }
+
+ @Override
+ public RangerPolicy updateDatasetPolicy(Long datasetId, RangerPolicy policy) throws Exception {
+ LOG.debug("==> updateDatasetPolicy({}, {})", datasetId, policy);
+
+ RangerDataset dataset = datasetService.read(datasetId);
+
+ if (!validator.hasPermission(dataset.getAcl(), GdsPermission.POLICY_ADMIN)) {
+ throw restErrorUtil.create403RESTException(NOT_AUTHORIZED_FOR_DATASET_POLICIES);
+ }
+
+ XXGdsDatasetPolicyMap existing = daoMgr.getXXGdsDatasetPolicyMap().getDatasetPolicyMap(datasetId, policy.getId());
+
+ if (existing == null) {
+ throw new Exception("no policy exists: datasetId=" + datasetId + ", policyId=" + policy.getId());
+ }
+
+ prepareDatasetPolicy(dataset, policy);
+
+ RangerPolicy ret = svcStore.updatePolicy(policy);
+
+ updateGdsVersionForDataset(datasetId);
+
+ LOG.debug("<== updateDatasetPolicy({}, {}): ret={}", datasetId, policy, ret);
+
+ return ret;
+ }
+
+ @Override
+ public void deleteDatasetPolicy(Long datasetId, Long policyId) throws Exception {
+ LOG.debug("==> deleteDatasetPolicy({}, {})", datasetId, policyId);
+
+ RangerDataset dataset = datasetService.read(datasetId);
+
+ if (!validator.hasPermission(dataset.getAcl(), GdsPermission.POLICY_ADMIN)) {
+ throw restErrorUtil.create403RESTException(NOT_AUTHORIZED_FOR_DATASET_POLICIES);
+ }
+
+ XXGdsDatasetPolicyMap existing = daoMgr.getXXGdsDatasetPolicyMap().getDatasetPolicyMap(datasetId, policyId);
+
+ if (existing == null) {
+ throw new Exception("no policy exists: datasetId=" + datasetId + ", policyId=" + policyId);
+ }
+
+ RangerPolicy policy = svcStore.getPolicy(policyId);
+
+ daoMgr.getXXGdsDatasetPolicyMap().remove(existing);
+ svcStore.deletePolicy(policy);
+
+ updateGdsVersionForDataset(datasetId);
+
+ LOG.debug("<== deleteDatasetPolicy({}, {})", datasetId, policyId);
+ }
+
+ @Override
+ public void deleteDatasetPolicies(Long datasetId) throws Exception {
+ LOG.debug("==> deleteDatasetPolicies({})", datasetId);
- dataShareInDatasetService.onObjectChange(ret, existing, RangerServiceService.OPERATION_UPDATE_CONTEXT);
+ RangerDataset dataset = datasetService.read(datasetId);
- updateGdsVersionForDataset(dataShareInDataset.getDatasetId());
+ deleteDatasetPolicies(dataset);
- LOG.debug("<== updateDataShareInDataset({}): ret={}", dataShareInDataset, ret);
+ updateGdsVersionForDataset(datasetId);
- return ret;
+ LOG.debug("<== deleteDatasetPolicy({})", datasetId);
}
@Override
- public void removeDataShareInDataset(Long dataShareInDatasetId) {
- LOG.debug("==> removeDataShareInDataset({})", dataShareInDatasetId);
+ public RangerPolicy getDatasetPolicy(Long datasetId, Long policyId) throws Exception {
+ LOG.debug("==> getDatasetPolicy({}, {})", datasetId, policyId);
- RangerDataShareInDataset existing = dataShareInDatasetService.read(dataShareInDatasetId);
+ RangerDataset dataset = datasetService.read(datasetId);
- validator.validateDelete(dataShareInDatasetId, existing);
+ if (!validator.hasPermission(dataset.getAcl(), GdsPermission.AUDIT)) {
+ throw restErrorUtil.create403RESTException(NOT_AUTHORIZED_TO_VIEW_DATASET_POLICIES);
+ }
- dataShareInDatasetService.delete(existing);
+ XXGdsDatasetPolicyMap existing = daoMgr.getXXGdsDatasetPolicyMap().getDatasetPolicyMap(datasetId, policyId);
- dataShareInDatasetService.onObjectChange(null, existing, RangerServiceService.OPERATION_DELETE_CONTEXT);
+ if (existing == null) {
+ throw new Exception("no policy exists: datasetId=" + datasetId + ", policyId=" + policyId);
+ }
- updateGdsVersionForDataset(existing.getDatasetId());
+ RangerPolicy ret = svcStore.getPolicy(policyId);
- LOG.debug("<== removeDataShareInDataset({})", dataShareInDatasetId);
+ LOG.debug("<== getDatasetPolicy({}, {}): ret={}", datasetId, policyId, ret);
+
+ return ret;
}
@Override
- public RangerDataShareInDataset getDataShareInDataset(Long dataShareInDatasetId) {
- LOG.debug("==> getDataShareInDataset({})", dataShareInDatasetId);
+ public List getDatasetPolicies(Long datasetId) {
+ LOG.debug("==> getDatasetPolicies({})", datasetId);
- RangerDataShareInDataset ret = dataShareInDatasetService.read(dataShareInDatasetId);
+ RangerDataset dataset = datasetService.read(datasetId);
- LOG.debug("<== getDataShareInDataset({}): ret={}", dataShareInDatasetId, ret);
+ if (!validator.hasPermission(dataset.getAcl(), GdsPermission.AUDIT)) {
+ throw restErrorUtil.create403RESTException(NOT_AUTHORIZED_TO_VIEW_DATASET_POLICIES);
+ }
+
+ List ret = getPolicies(daoMgr.getXXGdsDatasetPolicyMap().getDatasetPolicyIds(datasetId));
+
+ LOG.debug("<== getDatasetPolicies({}): ret={}", datasetId, ret);
return ret;
}
@Override
- public PList searchDataShareInDatasets(SearchFilter filter) {
- LOG.debug("==> searchDataShareInDatasets({})", filter);
+ public RangerPolicy addProjectPolicy(Long projectId, RangerPolicy policy) throws Exception {
+ LOG.debug("==> addProjectPolicy({}, {})", projectId, policy);
- int maxRows = filter.getMaxRows();
- int startIndex = filter.getStartIndex();
+ RangerProject project = projectService.read(projectId);
- List dataShareInDatasets = new ArrayList<>();
- RangerDataShareInDatasetList result = dataShareInDatasetService.searchDataShareInDatasets(filter);
+ if (!validator.hasPermission(project.getAcl(), GdsPermission.POLICY_ADMIN)) {
+ throw restErrorUtil.create403RESTException(NOT_AUTHORIZED_FOR_PROJECT_POLICIES);
+ }
- for (RangerDataShareInDataset dataShareInDataset : result.getList()) {
- // TODO: enforce RangerSharedResource.acl
+ prepareProjectPolicy(project, policy);
- dataShareInDatasets.add(dataShareInDataset);
- }
+ RangerPolicy ret = svcStore.createPolicy(policy);
- PList ret = getPList(dataShareInDatasets, startIndex, maxRows, result.getSortBy(), result.getSortType());
+ daoMgr.getXXGdsProjectPolicyMap().create(new XXGdsProjectPolicyMap(projectId, ret.getId()));
- LOG.debug("<== searchDataShareInDatasets({}): ret={}", filter, ret);
+ updateGdsVersionForProject(project.getId());
+
+ LOG.debug("<== addProjectPolicy({}, {}): ret={}", projectId, policy, ret);
return ret;
}
@Override
- public RangerDatasetInProject addDatasetInProject(RangerDatasetInProject datasetInProject) throws Exception {
- LOG.debug("==> addDatasetInProject({})", datasetInProject);
+ public RangerPolicy updateProjectPolicy(Long projectId, RangerPolicy policy) throws Exception {
+ LOG.debug("==> updateProjectPolicy({}, {})", projectId, policy);
- XXGdsDatasetInProjectDao datasetDao = daoMgr.getXXGdsDatasetInProject();
- XXGdsDatasetInProject existing = datasetDao.findByDatasetIdAndProjectId(datasetInProject.getDatasetId(), datasetInProject.getProjectId());
+ RangerProject project = projectService.read(projectId);
- if (existing != null) {
- throw new Exception("dataset '" + datasetInProject.getDatasetId() + "' already shared with project " + datasetInProject.getProjectId() + " - id=" + existing.getId());
+ if (!validator.hasPermission(project.getAcl(), GdsPermission.POLICY_ADMIN)) {
+ throw restErrorUtil.create403RESTException(NOT_AUTHORIZED_FOR_PROJECT_POLICIES);
}
- validator.validateCreate(datasetInProject);
+ XXGdsProjectPolicyMap existing = daoMgr.getXXGdsProjectPolicyMap().getProjectPolicyMap(projectId, policy.getId());
- if (StringUtils.isBlank(datasetInProject.getGuid())) {
- datasetInProject.setGuid(guidUtil.genGUID());
+ if (existing == null) {
+ throw new Exception("no policy exists: projectId=" + projectId + ", policyId=" + policy.getId());
}
- RangerDatasetInProject ret = datasetInProjectService.create(datasetInProject);
+ prepareProjectPolicy(project, policy);
- datasetInProjectService.onObjectChange(ret, null, RangerServiceService.OPERATION_CREATE_CONTEXT);
+ RangerPolicy ret = svcStore.updatePolicy(policy);
- updateGdsVersionForDataset(datasetInProject.getDatasetId());
+ updateGdsVersionForProject(project.getId());
- LOG.debug("<== addDatasetInProject({}): ret={}", datasetInProject, ret);
+ LOG.debug("<== updateProjectPolicy({}, {}): ret={}", projectId, policy, ret);
return ret;
}
@Override
- public RangerDatasetInProject updateDatasetInProject(RangerDatasetInProject datasetInProject) {
- LOG.debug("==> updateDatasetInProject({})", datasetInProject);
-
- RangerDatasetInProject existing = datasetInProjectService.read(datasetInProject.getId());
+ public void deleteProjectPolicy(Long projectId, Long policyId) throws Exception {
+ LOG.debug("==> deleteProjectPolicy({}, {})", projectId, policyId);
- validator.validateUpdate(datasetInProject, existing);
+ RangerProject project = projectService.read(projectId);
- copyExistingBaseFields(datasetInProject, existing);
+ if (!validator.hasPermission(project.getAcl(), GdsPermission.POLICY_ADMIN)) {
+ throw restErrorUtil.create403RESTException(NOT_AUTHORIZED_FOR_DATASET_POLICIES);
+ }
- datasetInProject.setApprover(validator.needApproverUpdate(existing.getStatus(), datasetInProject.getStatus()) ? bizUtil.getCurrentUserLoginId() : existing.getApprover());
+ XXGdsProjectPolicyMap existing = daoMgr.getXXGdsProjectPolicyMap().getProjectPolicyMap(projectId, policyId);
- RangerDatasetInProject ret = datasetInProjectService.update(datasetInProject);
+ if (existing == null) {
+ throw new Exception("no policy exists: projectId=" + projectId + ", policyId=" + policyId);
+ }
- datasetInProjectService.onObjectChange(ret, existing, RangerServiceService.OPERATION_UPDATE_CONTEXT);
+ RangerPolicy policy = svcStore.getPolicy(policyId);
- updateGdsVersionForDataset(datasetInProject.getDatasetId());
+ daoMgr.getXXGdsProjectPolicyMap().remove(existing);
+ svcStore.deletePolicy(policy);
- LOG.debug("<== updateDatasetInProject({}): ret={}", datasetInProject, ret);
+ updateGdsVersionForProject(project.getId());
- return ret;
+ LOG.debug("<== deleteProjectPolicy({}, {})", projectId, policyId);
}
@Override
- public void removeDatasetInProject(Long datasetInProjectId) {
- LOG.debug("==> removeDatasetInProject({})", datasetInProjectId);
-
- RangerDatasetInProject existing = datasetInProjectService.read(datasetInProjectId);
-
- validator.validateDelete(datasetInProjectId, existing);
+ public void deleteProjectPolicies(Long projectId) throws Exception {
+ LOG.debug("==> deleteProjectPolicies({})", projectId);
- datasetInProjectService.delete(existing);
+ RangerProject project = projectService.read(projectId);
- datasetInProjectService.onObjectChange(null, existing, RangerServiceService.OPERATION_DELETE_CONTEXT);
+ deleteProjectPolicies(project);
- updateGdsVersionForDataset(existing.getDatasetId());
+ updateGdsVersionForProject(project.getId());
- LOG.debug("<== removeDatasetInProject({})", datasetInProjectId);
+ LOG.debug("<== deleteProjectPolicy({})", projectId);
}
@Override
- public RangerDatasetInProject getDatasetInProject(Long datasetInProjectId) {
- LOG.debug("==> getDatasetInProject({})", datasetInProjectId);
+ public RangerPolicy getProjectPolicy(Long projectId, Long policyId) throws Exception {
+ LOG.debug("==> getProjectPolicy({}, {})", projectId, policyId);
- RangerDatasetInProject ret = datasetInProjectService.read(datasetInProjectId);
+ RangerProject project = projectService.read(projectId);
- // TODO: enforce RangerDatasetInProject.acl
+ if (!validator.hasPermission(project.getAcl(), GdsPermission.AUDIT)) {
+ throw restErrorUtil.create403RESTException(NOT_AUTHORIZED_TO_VIEW_PROJECT_POLICIES);
+ }
- LOG.debug("<== getDatasetInProject({}): ret={}", datasetInProjectId, ret);
+ XXGdsProjectPolicyMap existing = daoMgr.getXXGdsProjectPolicyMap().getProjectPolicyMap(projectId, policyId);
+
+ if (existing == null) {
+ throw new Exception("no policy exists: projectId=" + projectId + ", policyId=" + policyId);
+ }
+
+ RangerPolicy ret = svcStore.getPolicy(policyId);
+
+ LOG.debug("<== getProjectPolicy({}, {}): ret={}", projectId, policyId, ret);
return ret;
}
@Override
- public PList searchDatasetInProjects(SearchFilter filter) {
- LOG.debug("==> searchDatasetInProjects({})", filter);
-
- int maxRows = filter.getMaxRows();
- int startIndex = filter.getStartIndex();
-
- List datasetInProjects = new ArrayList<>();
- RangerDatasetInProjectList result = datasetInProjectService.searchDatasetInProjects(filter);
+ public List getProjectPolicies(Long projectId) {
+ LOG.debug("==> getProjectPolicies({})", projectId);
- for (RangerDatasetInProject datasetInProject : result.getList()) {
- // TODO: enforce RangerDatasetInProject.acl
+ RangerProject project = projectService.read(projectId);
- datasetInProjects.add(datasetInProject);
+ if (!validator.hasPermission(project.getAcl(), GdsPermission.AUDIT)) {
+ throw restErrorUtil.create403RESTException(NOT_AUTHORIZED_TO_VIEW_PROJECT_POLICIES);
}
- PList ret = getPList(datasetInProjects, startIndex, maxRows, result.getSortBy(), result.getSortType());
+ List ret = getPolicies(daoMgr.getXXGdsProjectPolicyMap().getProjectPolicyIds(projectId));
- LOG.debug("<== searchDatasetInProjects({}): ret={}", filter, ret);
+ LOG.debug("<== getProjectPolicies({}): ret={}", projectId, ret);
return ret;
}
@@ -1311,8 +1341,24 @@ public void onSecurityZoneUpdate(Long zoneId, Collection updatedServices
LOG.debug("<== onSecurityZoneUpdate({}, {}, {})", zoneId, updatedServices, removedServices);
}
- public ServiceGdsInfo getGdsInfoIfUpdated(String serviceName, Long lastKnownVersion) throws Exception {
- LOG.debug("==> GdsDBStore.getGdsInfoIfUpdated({}, {})", serviceName , lastKnownVersion);
+ public List addDataSharesInDataset(List dataSharesInDataset) throws Exception {
+ LOG.debug("==> addDataSharesInDataset({})", dataSharesInDataset);
+
+ List ret = new ArrayList<>();
+
+ validate(dataSharesInDataset);
+
+ for (RangerDataShareInDataset dataShareInDataset : dataSharesInDataset) {
+ ret.add(createDataShareInDataset(dataShareInDataset));
+ }
+
+ LOG.debug("<== addDataSharesInDataset({}): ret={}", dataSharesInDataset, ret);
+
+ return ret;
+ }
+
+ public ServiceGdsInfo getGdsInfoIfUpdated(String serviceName, Long lastKnownVersion) {
+ LOG.debug("==> GdsDBStore.getGdsInfoIfUpdated({}, {})", serviceName, lastKnownVersion);
ServiceGdsInfo latest = serviceGdsInfoCache.get(serviceName);
Long latestVersion = latest != null ? latest.getGdsVersion() : null;
@@ -1323,7 +1369,7 @@ public ServiceGdsInfo getGdsInfoIfUpdated(String serviceName, Long lastKnownVers
return ret;
}
- public PList getDatasetSummary(SearchFilter filter) throws Exception {
+ public PList getDatasetSummary(SearchFilter filter) {
LOG.debug("==> getDatasetSummary({})", filter);
PList datasets = getUnscrubbedDatasets(filter);
@@ -1352,39 +1398,39 @@ public PList getDataShareSummary(SearchFilter filter) {
}
public PList getDshInDsSummary(SearchFilter filter) {
- LOG.debug("==> getDshInDsSummary({})", filter);
+ LOG.debug("==> getDshInDsSummary({})", filter);
- int maxRows = filter.getMaxRows();
- int startIndex = filter.getStartIndex();
+ int maxRows = filter.getMaxRows();
+ int startIndex = filter.getStartIndex();
filter.setParam(SearchFilter.GDS_PERMISSION, GdsPermission.ADMIN.name());
- if (filter.getParam(SearchFilter.CREATED_BY) != null) {
- setUserId(filter, SearchFilter.CREATED_BY);
- }
+ if (filter.getParam(SearchFilter.CREATED_BY) != null) {
+ setUserId(filter, SearchFilter.CREATED_BY);
+ }
- if(filter.getParam(SearchFilter.APPROVER)!= null) {
- setUserId(filter, SearchFilter.APPROVER);
- }
+ if (filter.getParam(SearchFilter.APPROVER) != null) {
+ setUserId(filter, SearchFilter.APPROVER);
+ }
- if (filter.getParam(SearchFilter.SHARE_STATUS) != null) {
- String shareStatus = filter.getParam(SearchFilter.SHARE_STATUS);
- int status = GdsShareStatus.valueOf(shareStatus).ordinal();
+ if (filter.getParam(SearchFilter.SHARE_STATUS) != null) {
+ String shareStatus = filter.getParam(SearchFilter.SHARE_STATUS);
+ int status = GdsShareStatus.valueOf(shareStatus).ordinal();
- filter.setParam(SearchFilter.SHARE_STATUS, Integer.toString(status));
- }
+ filter.setParam(SearchFilter.SHARE_STATUS, Integer.toString(status));
+ }
- List datasets = getUnscrubbedDatasets(filter).getList();
- List dataShares = getUnscrubbedDataShares(filter).getList();
- RangerDataShareInDatasetList dshInDsList = dataShareInDatasetService.searchDataShareInDatasets(filter);
- List dshInDsSummary = getDshInDsSummary(dataShares, datasets, dshInDsList);
+ List datasets = getUnscrubbedDatasets(filter).getList();
+ List dataShares = getUnscrubbedDataShares(filter).getList();
+ RangerDataShareInDatasetList dshInDsList = dataShareInDatasetService.searchDataShareInDatasets(filter);
+ List dshInDsSummary = getDshInDsSummary(dataShares, datasets, dshInDsList);
- PList ret = getPList(dshInDsSummary, startIndex, maxRows, filter.getSortBy(), filter.getSortType());
+ PList ret = getPList(dshInDsSummary, startIndex, maxRows, filter.getSortBy(), filter.getSortType());
- LOG.debug("<== getDshInDsSummary({}): ret={}", filter, ret);
+ LOG.debug("<== getDshInDsSummary({}): ret={}", filter, ret);
- return ret;
- }
+ return ret;
+ }
public void deletePrincipalFromGdsAcl(String principalType, String principalName) {
Map datsetAcls = daoMgr.getXXGdsDataset().getDatasetIdsAndACLs();
@@ -1428,63 +1474,44 @@ public void deletePrincipalFromGdsAcl(String principalType, String principalName
}
}
- private List getDshInDsSummary(List dataShares, List datasets, RangerDataShareInDatasetList dshInDsList) {
- Set ret = new LinkedHashSet<>();
- Map datasetMap = toMap(datasets);
- Map dataShareMap = toMap(dataShares);
+ private List getDshInDsSummary(List dataShares, List datasets, RangerDataShareInDatasetList dshInDsList) {
+ Set ret = new LinkedHashSet<>();
+ Map datasetMap = toMap(datasets);
+ Map dataShareMap = toMap(dataShares);
- for (RangerDataShareInDataset dshInDs : dshInDsList.getList()) {
- RangerDataset dataset = datasetMap.get(dshInDs.getDatasetId());
- RangerDataShare dataShare = dataShareMap.get(dshInDs.getDataShareId());
+ for (RangerDataShareInDataset dshInDs : dshInDsList.getList()) {
+ RangerDataset dataset = datasetMap.get(dshInDs.getDatasetId());
+ RangerDataShare dataShare = dataShareMap.get(dshInDs.getDataShareId());
- if (dataset != null || dataShare != null) {
+ if (dataset != null || dataShare != null) {
if (dataset == null) {
dataset = datasetService.read(dshInDs.getDatasetId());
} else if (dataShare == null) {
dataShare = dataShareService.read(dshInDs.getDataShareId());
}
- ret.add(toDshInDsSummary(dataset, dataShare, dshInDs));
- }
- }
+ ret.add(toDshInDsSummary(dataset, dataShare, dshInDs));
+ }
+ }
- return Collections.unmodifiableList(new ArrayList<>(ret));
- }
+ return Collections.unmodifiableList(new ArrayList<>(ret));
+ }
- private Map toMap(List gdsObjects) {
- return gdsObjects.stream().collect(Collectors.toMap(RangerGdsBaseModelObject::getId, Function.identity()));
- }
+ private Map toMap(List gdsObjects) {
+ return gdsObjects.stream().collect(Collectors.toMap(RangerGdsBaseModelObject::getId, Function.identity()));
+ }
private void updateGdsVersion() {
transactionSynchronizationAdapter.executeOnTransactionCommit(new GlobalVersionUpdater(daoMgr, RANGER_GLOBAL_STATE_NAME_GDS));
}
- private void setUserId(SearchFilter filter, String filterParam) {
- String userName = filter.getParam(filterParam);
- Long userId = daoMgr.getXXPortalUser().findByLoginId(userName).getId();
- filter.setParam(filterParam, Long.toString(userId));
- }
-
- private static class GlobalVersionUpdater implements Runnable {
- final RangerDaoManager daoManager;
- final String stateName;
-
- public GlobalVersionUpdater(RangerDaoManager daoManager, String stateName) {
- this.daoManager = daoManager;
- this.stateName = stateName;
- }
-
- @Override
- public void run() {
- try {
- this.daoManager.getXXGlobalState().onGlobalAppDataChange(stateName);
- } catch (Exception e) {
- LOG.error("Failed to update GlobalState version for state:[{}]", stateName , e);
- }
- }
+ private void setUserId(SearchFilter filter, String filterParam) {
+ String userName = filter.getParam(filterParam);
+ Long userId = daoMgr.getXXPortalUser().findByLoginId(userName).getId();
+ filter.setParam(filterParam, Long.toString(userId));
}
- private List toDatasetSummary(List datasets, GdsPermission gdsPermission) throws Exception {
+ private List toDatasetSummary(List datasets, GdsPermission gdsPermission) {
List ret = new ArrayList<>();
String currentUser = bizUtil.getCurrentUserLoginId();
@@ -1524,9 +1551,9 @@ private List toDatasetSummary(List datasets, GdsP
datasetSummary.setDataShares(dataSharesSummary);
datasetSummary.setTotalResourceCount(dataSharesSummary.stream()
- .map(DataShareInDatasetSummary::getResourceCount)
- .mapToLong(Long::longValue)
- .sum());
+ .map(DataShareInDatasetSummary::getResourceCount)
+ .mapToLong(Long::longValue)
+ .sum());
}
return ret;
@@ -1584,7 +1611,7 @@ private Long getDIPCountForDataset(Long datasetId) {
return datasetInProjectService.getDatasetsInProjectCount(datasetId);
}
- private Map getPrincipalCountForDataset(RangerDataset dataset) throws Exception {
+ private Map getPrincipalCountForDataset(RangerDataset dataset) {
Map ret = new HashMap<>();
Set users = Collections.emptySet();
Set groups = Collections.emptySet();
@@ -1604,9 +1631,9 @@ private Map getPrincipalCountForDataset(RangerDataset da
}
}
- ret.put(PrincipalType.USER, users.size());
+ ret.put(PrincipalType.USER, users.size());
ret.put(PrincipalType.GROUP, groups.size());
- ret.put(PrincipalType.ROLE, roles.size());
+ ret.put(PrincipalType.ROLE, roles.size());
return ret;
}
@@ -1637,7 +1664,6 @@ private Map getAclPrincipalCountForDataset(RangerDataset
return ret;
}
-
private PList getUnscrubbedProjects(SearchFilter filter) {
filter.setParam(SearchFilter.RETRIEVE_ALL_PAGES, "true");
@@ -1724,9 +1750,9 @@ private PList getUnscrubbedDataShares(SearchFilter filter) {
dataSharesToExclude = Collections.emptyList();
}
- GdsPermission gdsPermission = getGdsPermissionFromFilter(filter);
- RangerDataShareList result = dataShareService.searchDataShares(filter);
- List dataShares = new ArrayList<>();
+ GdsPermission gdsPermission = getGdsPermissionFromFilter(filter);
+ RangerDataShareList result = dataShareService.searchDataShares(filter);
+ List dataShares = new ArrayList<>();
for (RangerDataShare dataShare : result.getList()) {
if (dataShare == null) {
@@ -1803,10 +1829,10 @@ private void removeDshInDsForDataShare(Long dataShareId) {
SearchFilter filter = new SearchFilter(SearchFilter.DATA_SHARE_ID, dataShareId.toString());
RangerDataShareInDatasetList dshInDsList = dataShareInDatasetService.searchDataShareInDatasets(filter);
- for(RangerDataShareInDataset dshInDs : dshInDsList.getList()) {
+ for (RangerDataShareInDataset dshInDs : dshInDsList.getList()) {
final boolean dshInDsDeleted = dataShareInDatasetService.delete(dshInDs);
- if(!dshInDsDeleted) {
+ if (!dshInDsDeleted) {
throw restErrorUtil.createRESTException("DataShareInDataset could not be deleted", MessageEnums.ERROR_DELETE_OBJECT, dshInDs.getId(), "DataSHareInDatasetId", null, 500);
}
}
@@ -1919,8 +1945,8 @@ private void removeDIPForDataset(Long datasetId) {
if (!dipDeleted) {
throw restErrorUtil.createRESTException("DatasetInProject could not be deleted",
- MessageEnums.ERROR_DELETE_OBJECT, dip.getId(), "DatasetInProjectId", null,
- HttpStatus.SC_INTERNAL_SERVER_ERROR);
+ MessageEnums.ERROR_DELETE_OBJECT, dip.getId(), "DatasetInProjectId", null,
+ HttpStatus.SC_INTERNAL_SERVER_ERROR);
}
}
}
@@ -1934,8 +1960,8 @@ private void removeDSHIDForDataset(Long datasetId) {
if (!dshidDeleted) {
throw restErrorUtil.createRESTException("DataShareInDataset could not be deleted",
- MessageEnums.ERROR_DELETE_OBJECT, dshid.getId(), "DataShareInDataset", null,
- HttpStatus.SC_INTERNAL_SERVER_ERROR);
+ MessageEnums.ERROR_DELETE_OBJECT, dshid.getId(), "DataShareInDataset", null,
+ HttpStatus.SC_INTERNAL_SERVER_ERROR);
}
}
}
@@ -1949,15 +1975,15 @@ private void removeDIPForProject(Long projectId) {
if (!dipDeleted) {
throw restErrorUtil.createRESTException("DatasetInProject could not be deleted",
- MessageEnums.ERROR_DELETE_OBJECT, dip.getId(), "DatasetInProjectId", null,
- HttpStatus.SC_INTERNAL_SERVER_ERROR);
+ MessageEnums.ERROR_DELETE_OBJECT, dip.getId(), "DatasetInProjectId", null,
+ HttpStatus.SC_INTERNAL_SERVER_ERROR);
}
}
}
private void addCreatorAsAclAdmin(RangerGdsObjectACL acl) {
- String currentUser = bizUtil.getCurrentUserLoginId();
- Map userAcl = acl.getUsers();
+ String currentUser = bizUtil.getCurrentUserLoginId();
+ Map userAcl = acl.getUsers();
if (userAcl == null) {
userAcl = new HashMap<>();
@@ -2059,35 +2085,35 @@ private DataShareInDatasetSummary toDshInDsSummary(RangerDataset dataset, List zoneIds = new HashMap<>();
- DataShareInDatasetSummary summary = new DataShareInDatasetSummary();
-
- summary.setId(dshInDs.getId());
- summary.setGuid(dshInDs.getGuid());
- summary.setCreatedBy(dshInDs.getCreatedBy());
- summary.setCreateTime(dshInDs.getCreateTime());
- summary.setUpdatedBy(dshInDs.getUpdatedBy());
- summary.setUpdateTime(dshInDs.getUpdateTime());
-
- summary.setApprover(dshInDs.getApprover());
- summary.setShareStatus(dshInDs.getStatus());
- summary.setDatasetId(dataset.getId());
- summary.setDatasetName(dataset.getName());
- summary.setDataShareId(dataShare.getId());
- summary.setDataShareName(dataShare.getName());
- if (dataShare.getZone() != null && !dataShare.getZone().isEmpty()) {
- summary.setZoneName(dataShare.getZone());
- summary.setZoneId(getZoneId(dataShare.getZone(),zoneIds));
- }
- summary.setServiceName(dataShare.getService());
- summary.setServiceId(getServiceId(dataShare.getService()));
- summary.setDataShareName(dataShare.getName());
- summary.setResourceCount(sharedResourceService.getResourceCountForDataShare(dataShare.getId()));
-
- return summary;
- }
+ private DataShareInDatasetSummary toDshInDsSummary(RangerDataset dataset, RangerDataShare dataShare,
+ RangerDataShareInDataset dshInDs) {
+ Map zoneIds = new HashMap<>();
+ DataShareInDatasetSummary summary = new DataShareInDatasetSummary();
+
+ summary.setId(dshInDs.getId());
+ summary.setGuid(dshInDs.getGuid());
+ summary.setCreatedBy(dshInDs.getCreatedBy());
+ summary.setCreateTime(dshInDs.getCreateTime());
+ summary.setUpdatedBy(dshInDs.getUpdatedBy());
+ summary.setUpdateTime(dshInDs.getUpdateTime());
+
+ summary.setApprover(dshInDs.getApprover());
+ summary.setShareStatus(dshInDs.getStatus());
+ summary.setDatasetId(dataset.getId());
+ summary.setDatasetName(dataset.getName());
+ summary.setDataShareId(dataShare.getId());
+ summary.setDataShareName(dataShare.getName());
+ if (dataShare.getZone() != null && !dataShare.getZone().isEmpty()) {
+ summary.setZoneName(dataShare.getZone());
+ summary.setZoneId(getZoneId(dataShare.getZone(), zoneIds));
+ }
+ summary.setServiceName(dataShare.getService());
+ summary.setServiceId(getServiceId(dataShare.getService()));
+ summary.setDataShareName(dataShare.getName());
+ summary.setResourceCount(sharedResourceService.getResourceCountForDataShare(dataShare.getId()));
+
+ return summary;
+ }
private Long getServiceId(String serviceName) {
XXService xService = daoMgr.getXXService().findByName(serviceName);
@@ -2116,8 +2142,8 @@ private boolean hasResource(List resources, String resourceValue) {
private void validate(List dataSharesInDataset) throws Exception {
XXGdsDataShareInDatasetDao dshInDsDao = daoMgr.getXXGdsDataShareInDataset();
- if(CollectionUtils.isNotEmpty(dataSharesInDataset)) {
- for(RangerDataShareInDataset dataShareInDataset : dataSharesInDataset) {
+ if (CollectionUtils.isNotEmpty(dataSharesInDataset)) {
+ for (RangerDataShareInDataset dataShareInDataset : dataSharesInDataset) {
XXGdsDataShareInDataset existing = dshInDsDao.findByDataShareIdAndDatasetId(dataShareInDataset.getDataShareId(), dataShareInDataset.getDatasetId());
if (existing != null) {
@@ -2189,7 +2215,7 @@ private List