alpha test is passed

This commit is contained in:
Massimiliano Assante 2021-05-13 12:17:25 +02:00
parent 5cb7bbb3a1
commit bc5f309fc5
4 changed files with 314 additions and 235 deletions

View File

@ -1,10 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="UsersManagementPortlet">
<wb-module deploy-name="UsersManagementPortlet-portlet">
<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
<property name="context-root" value="UsersManagementPortlet"/>
<property name="java-output-path" value="/UsersManagementPortlet/target/classes"/>
<property name="context-root" value="UsersManagementPortlet-portlet"/>
</wb-module>
</project-modules>

View File

@ -2,8 +2,14 @@ package gr.cite.bluebridge.portlets.admin.usersmanagementportlet;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collector;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import javax.portlet.GenericPortlet;
@ -16,15 +22,14 @@ import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;
import javax.servlet.http.HttpServletRequest;
import gr.cite.bluebridge.portlets.admin.usersmanagementportlet.mail.templates.TemplateUserRolesModifiedForGroup;
import org.gcube.common.portal.PortalContext;
import org.gcube.portal.mailing.message.EmailAddress;
import org.gcube.portal.mailing.message.Recipient;
import org.gcube.portal.mailing.message.RecipientType;
import org.gcube.portal.mailing.service.EmailTemplateService;
import org.gcube.portal.mailing.templates.TemplateUserApprovedRequestVRE;
import org.gcube.portal.mailing.templates.TemplateUserHasBeenUnregisteredVRE;
import org.gcube.portal.mailing.templates.TemplateUserRejectedRequestVRE;
import org.gcube.portal.mailing.message.EmailAddress;
import org.gcube.portal.mailing.message.Recipient;
import org.gcube.portal.mailing.message.RecipientType;
import org.gcube.vomanagement.usermanagement.GroupManager;
import org.gcube.vomanagement.usermanagement.RoleManager;
import org.gcube.vomanagement.usermanagement.UserManager;
@ -57,6 +62,7 @@ import com.liferay.portal.util.PortalUtil;
import gr.cite.bluebridge.portlets.admin.usersmanagementportlet.mail.templates.TemplateUserHasBeenAssociatedWithGCubeTeam;
import gr.cite.bluebridge.portlets.admin.usersmanagementportlet.mail.templates.TemplateUserHasBeenDissAssociatedWithGCubeTeam;
import gr.cite.bluebridge.portlets.admin.usersmanagementportlet.mail.templates.TemplateUserRolesModifiedForGroup;
public class UsersManagementPortletHome extends GenericPortlet {
protected String viewTemplate;
@ -72,7 +78,6 @@ public class UsersManagementPortletHome extends GenericPortlet {
private static final int REFRESH_SITE_TEAMS_TABLE = 2;
private static final int EDIT_SITE_TEAMS_TABLE = 1;
private static final int DELETE_SITE_TEAMS_TABLE = 0;
private static final int MASS_EDIT_USERS = 0;
private static final int ASSIGN_ROLES_TO_USERS = 1;
private static final int REMOVE_ROLES_TO_USERS = 3;
private static final int ASSIGN_TEAMS_TO_USERS = 2;
@ -545,61 +550,22 @@ public class UsersManagementPortletHome extends GenericPortlet {
return ja;
}
protected JSONArray usersForCurrrentUsersTablePlusRoles( Long groupId,
long[] usersIDs, String[] theRoles, String[] usersTeams,
boolean deletePreviousRoles, long selfId, int typeOfChangesUpponUserMode,
ResourceRequest request
) throws SystemException, PortalException, UserManagementSystemException, UserRetrievalFault, RoleRetrievalFault, GroupRetrievalFault{
LiferayGroupManager lgm = new LiferayGroupManager();
String groupName = lgm.getGroup(groupId).getGroupName();
LiferayRoleManager lrm = new LiferayRoleManager();
LiferayUserManager lum = new LiferayUserManager();
HttpServletRequest httpServletRequest = PortalUtil.getHttpServletRequest(request);
_log.debug("*** \n\n Editing users for the context: " + groupName);
System.out.println("\n\n****");
System.out.println("long[] usersIDs="+usersIDs.toString());
System.out.println("String[] theRoles="+theRoles.toString());
System.out.println("deletePreviousRoles?="+deletePreviousRoles);
System.out.println("selfId="+selfId);
System.out.println("int typeOfChangesUpponUserMode is="+typeOfChangesUpponUserMode);
System.out.println("usersIDs.length="+usersIDs.length);
if(usersIDs.length == 1) {//You can delete previous roles of a single user only.
GCubeUser gcu = lum.getUserById(usersIDs[0]);
long[] roleIDs = new long[theRoles.length];
GCubeRole[] gCubeRoles = new GCubeRole[theRoles.length];
long[] newRoleIDs = new long[theRoles.length];
List<GCubeRole> oldRoles = lrm.listRolesByUserAndGroup(usersIDs[0], groupId);
for(int i=0;i<theRoles.length;i++) {
gCubeRoles[i] = lrm.getRole(theRoles[i].trim(), groupId);
roleIDs[i] = gCubeRoles[i].getRoleId();
newRoleIDs[i] = gCubeRoles[i].getRoleId();
}
if(typeOfChangesUpponUserMode == REMOVE_ROLES_TO_USERS){
System.out.println("\n\n\n ****** REMOVE_ROLES_TO_USERS");
}
else if(typeOfChangesUpponUserMode == ASSIGN_ROLES_TO_USERS){
_log.info("\n\n\n ****** ASSIGN_ROLES_TO_USERS");
try{
lrm.removeAllRolesFromUser(gcu.getUserId(), groupId);
}catch(Exception e){
e.printStackTrace();
}
} else if(deletePreviousRoles && typeOfChangesUpponUserMode == ASSIGN_TEAMS_TO_USERS){
_log.debug("ASSIGN_TEAMS_TO_USERS");
}
/**
* manage the assignment to teams
* @param groupId
* @param usersIDs
* @param usersTeams
* @param selfId
* @param request
*/
private void assignRemoveUserToTeams(LiferayRoleManager lrm, GCubeUser gcu, Long groupId, String groupName, long[] usersIDs, String[] usersTeams, long selfId, HttpServletRequest httpServletRequest) throws Exception {
long[] gCubeTeamIDs = new long[usersTeams.length];
String[] gCubeTeamNames = new String[usersTeams.length];
StringBuffer teamNames = new StringBuffer();
LiferayGroupManager lgm = new LiferayGroupManager();
LiferayUserManager lum = new LiferayUserManager();
for (int i=0; i<usersTeams.length; i++) {
GCubeTeam team = null;
try {
@ -608,10 +574,10 @@ public class UsersManagementPortletHome extends GenericPortlet {
gCubeTeamNames[i] = team.getTeamName();
if (i != usersTeams.length-1) {
teamNames.append(gCubeTeamNames[i]).append(", ");
}else {
}
else {
teamNames.append(gCubeTeamNames[i]);
}
_log.debug("Succeeded at retrieving team with name: " + usersTeams[i].trim() + " for the group: "+ groupName);
} catch (TeamRetrievalFault e1) {
_log.debug("Failed at retrieving team with name: " + usersTeams[i].trim() + " for the group: "+ groupName);
@ -620,7 +586,7 @@ public class UsersManagementPortletHome extends GenericPortlet {
}
try {
if(typeOfChangesUpponUserMode != ASSIGN_ROLES_TO_USERS){
List<GCubeTeam> oldUserTeams = lrm.listTeamsByUserAndGroup(gcu.getUserId(), groupId);
List<Long> oldUserTeamsIDs = new ArrayList<Long>();
for(Iterator<GCubeTeam> it = oldUserTeams.iterator(); it.hasNext();) {
@ -669,15 +635,70 @@ public class UsersManagementPortletHome extends GenericPortlet {
notifyUsersByEmailOnTeamDismissal(groupId, gcu, lum.getUserById(selfId), lgm.getGroup(groupId), httpServletRequest, teamsToBeDisassociatedFrom.get(i));
}
}
}
} catch (TeamRetrievalFault e) {
_log.debug("User: " + gcu.getUsername() + " failed to be added to the following teams: " + teamNames);
e.printStackTrace();
}
}
/**
*
* @param groupId
* @param usersIDs
* @param theRoles
* @param usersTeams
* @param deletePreviousRoles
* @param selfId
* @param typeOfChangesUpponUserMode
* @param request
* @return
* @throws SystemException
* @throws PortalException
* @throws UserManagementSystemException
* @throws UserRetrievalFault
* @throws RoleRetrievalFault
* @throws GroupRetrievalFault
*/
protected JSONArray usersForCurrrentUsersTablePlusRoles( Long groupId,
long[] usersIDs, String[] theRoles, String[] usersTeams,
boolean deletePreviousRoles, long selfId, int typeOfChangesUpponUserMode,
ResourceRequest request
) throws SystemException, PortalException, UserManagementSystemException, UserRetrievalFault, RoleRetrievalFault, GroupRetrievalFault{
boolean rolesAssignmentSucceeded = lrm.assignRolesToUser(gcu.getUserId(), groupId, roleIDs);
if(rolesAssignmentSucceeded) {
LiferayGroupManager lgm = new LiferayGroupManager();
LiferayRoleManager lrm = new LiferayRoleManager();
LiferayUserManager lum = new LiferayUserManager();
String groupName = lgm.getGroup(groupId).getGroupName();
HttpServletRequest httpServletRequest = PortalUtil.getHttpServletRequest(request);
_log.debug("Editing users for the context: " + groupName);
_log.debug("String[] theRoles length?="+theRoles.length);
for (int i = 0; i < theRoles.length; i++) {
_log.debug("role: "+theRoles[i]);
}
_log.debug("String[] usersTeams length?="+usersTeams.length);
for (int i = 0; i < usersTeams.length; i++) {
_log.debug("team: "+usersTeams[i]);
}
_log.debug("Number of operation ((1:assign role, 2: assign/remove group, 3:revoke role) is ="+typeOfChangesUpponUserMode);
_log.debug("usersIDs.length="+usersIDs.length);
if(usersIDs.length == 1) {// SINGLE USER EDIT, support assignment and removal of roles and groups
GCubeUser gcu = lum.getUserById(usersIDs[0]);
long[] roleIDs = new long[theRoles.length];
GCubeRole[] gCubeRoles = new GCubeRole[theRoles.length];
long[] newRoleIDs = new long[theRoles.length];
List<GCubeRole> oldRoles = lrm.listRolesByUserAndGroup(usersIDs[0], groupId);
for(int i=0;i<theRoles.length;i++) {
gCubeRoles[i] = lrm.getRole(theRoles[i].trim(), groupId);
roleIDs[i] = gCubeRoles[i].getRoleId();
newRoleIDs[i] = gCubeRoles[i].getRoleId();
}
List<GCubeRole> rolesComingFromTheUI = gCubeRoles.length > 0 ? Arrays.asList(gCubeRoles) : new ArrayList<GCubeRole>();
_log.info("roles Coming From The UI");
rolesComingFromTheUI.forEach(role -> _log.info("Role UI: " + role.getRoleName()));
@ -689,32 +710,54 @@ public class UsersManagementPortletHome extends GenericPortlet {
}
List<Long> oldRoleIds = oldRoles.stream().map(role -> new Long(role.getRoleId())).collect(Collectors.toList());
switch (typeOfChangesUpponUserMode) {
case ASSIGN_ROLES_TO_USERS:
//new roles
roleIdsComingFromTheUI.removeAll(oldRoleIds);
List<GCubeRole> newRoles = new ArrayList<GCubeRole>(rolesComingFromTheUI.stream().filter(role -> roleIdsComingFromTheUI.contains(role.getRoleId())).collect(Collectors.toList()) );
_log.info("New roles");
newRoles.forEach(role -> _log.info("NewRole: " + role.getRoleName()));
_log.info("New roles found for "+gcu.getUsername());
boolean roleAssignmentSucceeded = false;
for (GCubeRole newRole : newRoles) {
_log.info("NewRole: " + newRole.getRoleName());
roleAssignmentSucceeded = lrm.assignRoleToUser(gcu.getUserId(), groupId, newRole.getRoleId());
}
if(newRoles.size() > 0 && roleAssignmentSucceeded)
notifyUsersByEmailOnRoleAssignment(groupId, gcu,lum.getUserById(selfId), lgm.getGroup(groupId), newRoles, httpServletRequest);
break;
case REMOVE_ROLES_TO_USERS:
//revoked roles
oldRoleIds.removeAll(roleIdsComingFromTheUICopy);
List<GCubeRole> rolesRevoked = new ArrayList<GCubeRole>( oldRoles.stream().filter(role -> oldRoleIds.contains(role.getRoleId())).collect(Collectors.toList()) );
_log.info("Revoked roles");
rolesRevoked.forEach(role -> _log.info("RevokedRole: " + role.getRoleName()));
if(newRoles.size() > 0 || rolesRevoked.size() > 0)
notifyUsersByEmailOnRoleAssignemntRevoke(groupId, gcu,lum.getUserById(selfId), lgm.getGroup(groupId), newRoles, rolesRevoked, httpServletRequest);
_log.info("Revoked roles found for "+gcu.getUsername());
boolean roleRevokationSucceeded = false;
for (GCubeRole role : rolesRevoked) {
_log.info("Revoked role: " + role.getRoleName());
roleRevokationSucceeded = lrm.removeRoleFromUser(gcu.getUserId(), groupId, role.getRoleId());
}
if(rolesRevoked.size() > 0 && roleRevokationSucceeded)
notifyUsersByEmailOnRoleRevokation(groupId, gcu,lum.getUserById(selfId), lgm.getGroup(groupId), rolesRevoked, httpServletRequest);
break;
case ASSIGN_TEAMS_TO_USERS:
try {
assignRemoveUserToTeams(lrm, gcu, groupId, groupName, usersIDs, usersTeams, selfId, httpServletRequest);
}
catch (Exception e) {
e.printStackTrace();
}
break;
default:
break;
}
_log.info("User: " + currentUser.getUsername() + " hes edited the roles of user: "+ gcu.getUsername() + " for the context: " + groupName);
_log.debug("User: " + currentUser.getUsername() + " is editing the roles of user: "+ gcu.getUsername() + " for the site: " + groupName + "and deletes all previous site-roles");
} //END EDIT ROLES
else {
} //END EDIT ROLES for single user
else { //MULTIUSER ASSIGNMENT of Roles only and Groups/Sites add and removal
System.out.println("MULTIUSER ASSIGNMENT type?="+typeOfChangesUpponUserMode);
List<GCubeTeam> existingGCubeTeams = lrm.listTeamsByGroup(groupId);
for(long uid : usersIDs){
for (long uid : usersIDs) { //for each user
GCubeUser user = lum.getUserById(uid);
GCubeUser gcu = lum.getUserByUsername(user.getUsername());
@ -746,7 +789,6 @@ public class UsersManagementPortletHome extends GenericPortlet {
}
List<GCubeRole> oldRoles = lrm.listRolesByUserAndGroup(usersIDs[0], groupId);
@SuppressWarnings("unused")
boolean rolesAssignmentSucceeded = lrm.assignRolesToUser(gcu.getUserId(), groupId, roleIDs);
if(rolesAssignmentSucceeded) {
@ -765,13 +807,9 @@ public class UsersManagementPortletHome extends GenericPortlet {
roleIdsComingFromTheUI.removeAll(oldRoleIds);
List<GCubeRole> newRoles = new ArrayList<GCubeRole>(rolesComingFromTheUI.stream().filter(role -> roleIdsComingFromTheUI.contains(role.getRoleId())).collect(Collectors.toList()) );
//revoked roles
oldRoleIds.removeAll(roleIdsComingFromTheUICopy);
List<GCubeRole> rolesRevoked = new ArrayList<GCubeRole>( oldRoles.stream().filter(role -> oldRoleIds.contains(role.getRoleId())).collect(Collectors.toList()) );
if(newRoles.size() > 0 && rolesRevoked.size() > 0)
notifyUsersByEmailOnRoleAssignemntRevoke(groupId, gcu,lum.getUserById(selfId), lgm.getGroup(groupId), newRoles, rolesRevoked, httpServletRequest);
if(newRoles.size() > 0)
notifyUsersByEmailOnRoleAssignment(groupId, gcu,lum.getUserById(selfId), lgm.getGroup(groupId), newRoles, httpServletRequest);
}
List<Long> gCubeTeamIDs = new ArrayList<Long>();
@ -847,20 +885,14 @@ public class UsersManagementPortletHome extends GenericPortlet {
for(Iterator<Long> it = teamsIDsToBeDisassociatedFrom.iterator(); it.hasNext();){
teamsToBeDisassociatedFrom.add( lrm.getTeam(it.next()) );
}
// lrm.deleteUserTeams(gcu.getUserId(), teamsToBeDisassociatedFrom);
// for(int index = 0; index < teamsToBeDisassociatedFrom.size(); index++) {
// notifyUsersByEmailOnTeamDismissal(groupId, gcu, lum.getUserById(selfId), lgm.getGroup(groupId), httpServletRequest, teamsToBeDisassociatedFrom.get(index));
// }
}
} catch (TeamRetrievalFault e) {
_log.debug("User: " + gcu.getUsername() + " failed to be added to the following teams: " + teamNames);
e.printStackTrace();
}
_log.debug("User: " + currentUser.getUsername() + " is editing the roles of user: "+ user.getUsername() + " for the site: " + groupName);
}
_log.debug("User: " + currentUser.getUsername() + " is editing the roles or VRE groups of user: "+ user.getUsername() + " for the site: " + groupName);
} //end for foreach user
}
return currentGroupUsers( groupId, selfId, httpServletRequest);
@ -1408,9 +1440,20 @@ public class UsersManagementPortletHome extends GenericPortlet {
EmailTemplateService.send(properEmailSubject, (org.gcube.common.portal.mailing.templates.Template)requestTeamDismissalTemplate, httpServletRequest, recs);
}
public void notifyUsersByEmailOnRoleAssignemntRevoke(long groupId, GCubeUser userToReceiveTheMail, GCubeUser manager, GCubeGroup group, List<GCubeRole> newRoles, List<GCubeRole> revokedRoles, HttpServletRequest httpServletRequest) throws UserManagementSystemException, GroupRetrievalFault {
_log.debug("Notifying user by email on new role assignme or role revoke fro user: " + userToReceiveTheMail.getUsername() + " for group: " + group.getGroupName() );
/**
*
* @param groupId
* @param userToReceiveTheMail
* @param manager
* @param group
* @param newRoles
* @param httpServletRequest
* @throws UserManagementSystemException
* @throws GroupRetrievalFault
*/
public void notifyUsersByEmailOnRoleAssignment(long groupId, GCubeUser userToReceiveTheMail, GCubeUser manager, GCubeGroup group, List<GCubeRole> newRoles, HttpServletRequest httpServletRequest) throws UserManagementSystemException, GroupRetrievalFault {
_log.debug("Notifying user by email on role assignment for user: " + userToReceiveTheMail.getUsername() + " for context name: " + group.getGroupName() );
ArrayList<String> managersEmails = getVREManagersEmailsForGroup(groupId);
int recSize = managersEmails.size() + 1;
@ -1423,24 +1466,47 @@ public class UsersManagementPortletHome extends GenericPortlet {
i++;
}
}
String properEmailSubject = EmailPartsConstruction.getRoleAssignmentRevokeSubject(new LiferayGroupManager().getGroup(groupId).getGroupName());
_log.debug("properEmailSubject: " + properEmailSubject);
TemplateUserRolesModifiedForGroup templateUserRolesModifiedForGroup = new TemplateUserRolesModifiedForGroup(
PortalContext.getConfiguration().getGatewayName(httpServletRequest), PortalContext.getConfiguration().getGatewayURL(httpServletRequest),
group, userToReceiveTheMail, manager, newRoles, revokedRoles, new Date() );
group, userToReceiveTheMail, manager, newRoles, new ArrayList<>(), new Date() );
// _log.debug("--------------------------------------------------------------------------------------------------------------------------------------------");
// _log.info(templateUserRolesModifiedForGroup.getTextHTML());
// _log.info("--------------------------------------------------------------------------------------------------------------------------------------------");
// _log.info(templateUserRolesModifiedForGroup.getTextPLAIN());
// _log.info("--------------------------------------------------------------------------------------------------------------------------------------------");
_log.debug("Sending email to user: " + userToReceiveTheMail.getUsername() + ". His roles have been modified within the context of VRE: " + group.getGroupName());
_log.info("Sending email to user: " + userToReceiveTheMail.getUsername() + ". His roles have been modified within the context of VRE: " + group.getGroupName());
EmailTemplateService.send(properEmailSubject, (org.gcube.common.portal.mailing.templates.Template)templateUserRolesModifiedForGroup, httpServletRequest, recs);
}
/**
*
* @param groupId
* @param userToReceiveTheMail
* @param manager
* @param group
* @param revokeRoles
* @param httpServletRequest
* @throws UserManagementSystemException
* @throws GroupRetrievalFault
*/
public void notifyUsersByEmailOnRoleRevokation(long groupId, GCubeUser userToReceiveTheMail, GCubeUser manager, GCubeGroup group, List<GCubeRole> revokeRoles, HttpServletRequest httpServletRequest) throws UserManagementSystemException, GroupRetrievalFault {
_log.debug("Notifying user by email on role revokation for user: " + userToReceiveTheMail.getUsername() + " for context name: " + group.getGroupName() );
ArrayList<String> managersEmails = getVREManagersEmailsForGroup(groupId);
int recSize = managersEmails.size() + 1;
Recipient[] recs = new Recipient[recSize];
recs[0] = new Recipient(new EmailAddress(userToReceiveTheMail.getEmail()), RecipientType.TO);
if (!managersEmails.isEmpty()) {
int i = 1;
for (String mEmail : managersEmails){
recs[i] = new Recipient(new EmailAddress(mEmail), RecipientType.BCC);
i++;
}
}
String properEmailSubject = EmailPartsConstruction.getRoleAssignmentRevokeSubject(new LiferayGroupManager().getGroup(groupId).getGroupName());
TemplateUserRolesModifiedForGroup templateUserRolesModifiedForGroup = new TemplateUserRolesModifiedForGroup(
PortalContext.getConfiguration().getGatewayName(httpServletRequest), PortalContext.getConfiguration().getGatewayURL(httpServletRequest),
group, userToReceiveTheMail, manager, new ArrayList<>(), revokeRoles, new Date() );
_log.info("Sending email to user: " + userToReceiveTheMail.getUsername() + ". His roles have been modified within the context of VRE: " + group.getGroupName());
EmailTemplateService.send(properEmailSubject, (org.gcube.common.portal.mailing.templates.Template)templateUserRolesModifiedForGroup, httpServletRequest, recs);
}

View File

@ -87,7 +87,7 @@ function constructToolbarForCurrentUsersTable(){
})).append($('<div></div>', {
id : 'removeRolesToUser',
class: 'insideToolbar',
text : 'Remove Roles'
text : 'Revoke Roles'
})).append($('<div></div>', {
id : 'assignUsersToGroup',
class: 'insideToolbar',

View File

@ -557,6 +557,10 @@ function tableEvents() {
}).on('click', 'div#toolbar.shownToolbar div#removeRolesToUser',
function() {
if (usersTableDataForEditing.length > 1) { //you can revoke roles to one user at a time
alert('Not supported, you can revoke roles to one user at a time only. Please select one single user.');
}
else {
$('#removeUsersRolesModal').modal('show');
//remove previous tags
$('#roleListInRemoveRolesModal').parent().find('.text-tag').remove();
@ -588,6 +592,7 @@ function tableEvents() {
$(this).closest('.text-tag').remove();
showCheckBoxForSingleTagInAssignRolesModal();
});
}
}).on('click', 'div#toolbar.shownToolbar div#assignUsersToGroup',
function() {