This is an automated email from the ASF dual-hosted git repository. madhan pushed a commit to branch RANGER-3923 in repository https://gitbox.apache.org/repos/asf/ranger.git
commit 569ff2f27a6f6b6bf40f6d3dc226955bad2316cb Merge: 2b307095a be31caf18 Author: Madhan Neethiraj <[email protected]> AuthorDate: Fri Sep 1 20:56:32 2023 -0700 Merge branch 'master' into RANGER-3923 .../ranger/audit/provider/AuditWriterFactory.java | 2 +- .../org/apache/ranger/audit/utils/ORCFileUtil.java | 2 +- .../ranger/plugin/errors/ValidationErrorCode.java | 3 + .../model/validation/RangerPolicyValidator.java | 45 +++- .../ranger/plugin/util/RangerCommonConstants.java | 3 + .../ranger/services/atlas/RangerServiceAtlas.java | 4 +- .../handler/jwt/RangerDefaultJwtAuthHandler.java | 4 +- .../authz/handler/jwt/RangerJwtAuthHandler.java | 22 +- .../optimized/current/ranger_core_db_mysql.sql | 1 + .../optimized/current/ranger_core_db_oracle.sql | 1 + .../optimized/current/ranger_core_db_postgres.sql | 1 + .../current/ranger_core_db_sqlanywhere.sql | 2 + .../optimized/current/ranger_core_db_sqlserver.sql | 1 + .../java/org/apache/ranger/biz/ServiceDBStore.java | 101 +++++---- .../main/java/org/apache/ranger/db/XXGroupDao.java | 67 ++++++ .../main/java/org/apache/ranger/db/XXUserDao.java | 68 +++++- ...lServiceDefForPolicyConditionUpdate_J10060.java | 118 +++++++++++ .../ranger/patch/cliutil/ChangePasswordUtil.java | 57 ++++-- .../java/org/apache/ranger/rest/ServiceREST.java | 16 ++ .../service/RangerServiceDefServiceBase.java | 2 +- .../apache/ranger/service/XGroupServiceBase.java | 18 +- .../apache/ranger/service/XUserServiceBase.java | 18 +- .../main/resources/META-INF/jpa_named_queries.xml | 14 ++ .../react-webapp/src/components/Editable.jsx | 7 - .../webapp/react-webapp/src/utils/XAMessages.js | 8 +- .../main/webapp/react-webapp/src/utils/XAUtils.js | 2 +- .../main/webapp/react-webapp/src/utils/appState.js | 3 + .../main/webapp/react-webapp/src/utils/fetchAPI.js | 6 +- .../src/views/AuditEvent/AccessLogDetail.jsx | 10 +- .../src/views/AuditEvent/AccessLogsTable.jsx | 8 +- .../src/views/AuditEvent/AdminLogs/PolicyLogs.jsx | 8 +- .../src/views/AuditEvent/AdminLogs/UserLogs.jsx | 6 +- .../src/views/Encryption/KeyManager.jsx | 79 +++---- .../src/views/Reports/SearchPolicyTable.jsx | 31 ++- .../src/views/Reports/UserAccessLayout.jsx | 34 +-- .../src/views/SecurityZone/SecurityZoneForm.jsx | 4 +- .../src/views/ServiceManager/ServiceDefinition.jsx | 20 +- .../views/ServiceManager/ServiceViewDetails.jsx | 12 +- .../react-webapp/src/views/SideBar/SideBar.jsx | 32 ++- .../react-webapp/src/views/SideBar/SideBarBody.jsx | 1 + .../users_details/EditUserView.jsx | 51 +++-- .../users_details/UserFormComp.jsx | 10 +- .../users_details/UserListing.jsx | 2 +- .../webapp/react-webapp/src/views/UserProfile.jsx | 78 ++++++- .../org/apache/ranger/audit/TestAuditQueue.java | 227 ++++++++++++++++++++- 45 files changed, 937 insertions(+), 272 deletions(-) diff --cc security-admin/src/main/java/org/apache/ranger/db/XXUserDao.java index 215c0f03c,fc1968352..8af4448b5 mode 100755,100644..100755 --- a/security-admin/src/main/java/org/apache/ranger/db/XXUserDao.java +++ b/security-admin/src/main/java/org/apache/ranger/db/XXUserDao.java @@@ -21,10 -21,13 +21,15 @@@ package org.apache.ranger.db import javax.persistence.NoResultException; + import com.google.gson.Gson; + import com.google.gson.GsonBuilder; +import org.apache.commons.collections.ListUtils; + import org.apache.commons.lang3.StringUtils; + import org.apache.ranger.common.RangerCommonEnums; import org.apache.ranger.common.db.BaseDao; import org.apache.ranger.entity.XXUser; +import org.apache.ranger.plugin.model.RangerPrincipal; + import org.apache.ranger.plugin.model.UserInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @@@ -125,36 -133,59 +135,92 @@@ public class XXUserDao extends BaseDao< return users; } + public List<RangerPrincipal> lookupPrincipalByName(String principalName, int startIndex, int pageSize) { + List<RangerPrincipal> ret = new ArrayList<>(); + + try { + List<Object[]> results = getEntityManager().createNamedQuery("VXXPrincipal.lookupByName", Object[].class) + .setParameter("principalName", principalName + "%") + .setFirstResult(startIndex) + .setMaxResults(pageSize).getResultList(); + + if (results != null) { + for (Object[] result : results) { + String name = (String) result[0]; + Number type = (Number) result[1]; + + switch (type.intValue()) { + case 0: + ret.add(new RangerPrincipal(RangerPrincipal.PrincipalType.USER, name)); + break; + case 1: + ret.add(new RangerPrincipal(RangerPrincipal.PrincipalType.GROUP, name)); + break; + case 2: + ret.add(new RangerPrincipal(RangerPrincipal.PrincipalType.ROLE, name)); + break; + } + } + } + } catch (NoResultException e) { + ret = ListUtils.EMPTY_LIST; + } + return ret; + } ++ + public List<UserInfo> getAllUsersInfo() { + List<UserInfo> ret = new ArrayList<>(); + + try { + List<Object[]> rows = getEntityManager().createNamedQuery("XXUser.getAllUsersInfo", Object[].class).getResultList(); + + if (rows != null) { + for (Object[] row : rows) { + + ret.add(toUserInfo(row)); + } + } + } catch (NoResultException excp) { + if (logger.isDebugEnabled()) { + logger.debug(excp.getMessage()); + } + } + + return ret; + } + + private UserInfo toUserInfo(Object[] row) { + String name = (String) row[0]; + String description = (String) row[1]; + String attributes = (String) row[2]; + String syncSource = (String) row[3]; + Number userSource = (Number) row[4]; + String emailAddress = (String) row[5]; + Boolean isInternal = userSource != null && userSource.equals(RangerCommonEnums.USER_APP); + Map<String, String> attrMap = null; + + if (StringUtils.isNotBlank(attributes)) { + try { + attrMap = gsonBuilder.fromJson(attributes, Map.class); + } catch (Exception excp) { + // ignore + } + } + + if (attrMap == null) { + attrMap = new HashMap<>(); + } + + if (StringUtils.isNotBlank(syncSource)) { + attrMap.put(SCRIPT_FIELD__SYNC_SOURCE, syncSource); + } + + if (StringUtils.isNotBlank(emailAddress)) { + attrMap.put(SCRIPT_FIELD__EMAIL_ADDRESS, emailAddress); + } + + attrMap.put(SCRIPT_FIELD__IS_INTERNAL, isInternal.toString()); + + return new UserInfo(name, description, attrMap); + } } diff --cc security-admin/src/main/resources/META-INF/jpa_named_queries.xml index 050c229e0,23085a273..f02101f09 --- a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml +++ b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml @@@ -178,13 -185,13 +185,20 @@@ </query> </named-query> + <named-query name="VXXPrincipal.lookupByName"> + <query>SELECT p.principalName, p.principalType FROM VXXPrincipal p + WHERE p.principalName LIKE :principalName + AND p.isVisible = 1 + ORDER BY p.principalName</query> + </named-query> + + <named-query name="XXUser.getAllUsersInfo"> + <query>SELECT user.name, user.description, user.otherAttributes, user.syncSource, pUser.userSource, pUser.emailAddress + FROM XXUser user LEFT OUTER JOIN XXPortalUser pUser ON pUser.loginId = user.name + WHERE user.isVisible = 1 + </query> + </named-query> + <named-query name="XXGroupUser.findUsersByGroupIds"> <query>SELECT group.name, user.name FROM XXUser user, XXGroup group, XXGroupUser groupUser WHERE user.id=groupUser.userId and group.id=groupUser.parentGroupId
