ref 13226:StorageHub - Update workspace-sharing-widget to SH
https://support.d4science.org/issues/13226 Fixed share folder with multiple users git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-sharing-widget@179300 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
a869b7aa14
commit
22fcb1a056
|
@ -449,7 +449,7 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
|||
SharedFolder sharedFolder = (SharedFolder) folderItem;
|
||||
String currentUser = getMyLogin();
|
||||
logger.debug("Current User: " + currentUser);
|
||||
|
||||
|
||||
Set<String> alreadySharedUsers = null;
|
||||
Metadata usersMetadata = sharedFolder.getUsers();
|
||||
if (usersMetadata != null) {
|
||||
|
@ -462,7 +462,7 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Set<String> logins = new HashSet<>(listLogin);
|
||||
if (logins.contains(currentUser)) {
|
||||
logins.remove(currentUser);
|
||||
|
@ -492,7 +492,7 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
|||
logger.debug("Folder is not shared");
|
||||
Set<String> logins = new HashSet<>(listLogin);
|
||||
logger.debug("Share logins: " + logins);
|
||||
folderContainer=folderContainer.share(logins, getAccessType(acl));
|
||||
folderContainer = folderContainer.share(logins, getAccessType(acl));
|
||||
logger.debug("Shared done");
|
||||
created = true;
|
||||
NotificationsProducer np = getNotificationProducer(this.getThreadLocalRequest());
|
||||
|
@ -717,24 +717,31 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
|||
}
|
||||
|
||||
private List<InfoContactModel> retrieveAdminContactsFromACLs(FolderContainer folderContainer) throws Exception {
|
||||
List<ACL> acls = folderContainer.getAcls();
|
||||
logger.debug("Retrieved acls: " + acls);
|
||||
List<String> admins = new ArrayList<>();
|
||||
for (ACL acl : acls) {
|
||||
boolean isAdmin = false;
|
||||
for (AccessType accesstype : acl.getAccessTypes()) {
|
||||
if (accesstype != null && accesstype == AccessType.ADMINISTRATOR) {
|
||||
isAdmin = true;
|
||||
break;
|
||||
if (folderContainer == null) {
|
||||
logger.debug("FolderContainer is null");
|
||||
return new ArrayList<InfoContactModel>();
|
||||
} else {
|
||||
logger.debug("Retrieve Admins for: " + folderContainer.get());
|
||||
List<String> admins = new ArrayList<>();
|
||||
|
||||
List<ACL> acls = folderContainer.getAcls();
|
||||
logger.debug("Retrieved acls: " + acls);
|
||||
for (ACL acl : acls) {
|
||||
boolean isAdmin = false;
|
||||
for (AccessType accesstype : acl.getAccessTypes()) {
|
||||
if (accesstype != null && accesstype == AccessType.ADMINISTRATOR) {
|
||||
isAdmin = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (isAdmin) {
|
||||
admins.add(acl.getPricipal());
|
||||
}
|
||||
}
|
||||
if (isAdmin) {
|
||||
admins.add(acl.getPricipal());
|
||||
}
|
||||
logger.debug("Retrieved admins list: " + admins);
|
||||
GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder();
|
||||
return builder.buildGxtInfoContactsFromPortalLogins(admins);
|
||||
}
|
||||
logger.debug("Retrieved admins list: " + admins);
|
||||
GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder();
|
||||
return builder.buildGxtInfoContactsFromPortalLogins(admins);
|
||||
}
|
||||
|
||||
// /**
|
||||
|
@ -1088,18 +1095,24 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
|||
GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder();
|
||||
|
||||
List<InfoContactModel> listContactsModel = builder.buildGXTListContactsModelFromUserModel(info);
|
||||
boolean ownerFound = false;
|
||||
for (InfoContactModel icm : listContactsModel) {
|
||||
if (icm.getLogin().compareTo(folderItem.getOwner()) == 0) {
|
||||
logger.debug("Retrieved: " + icm);
|
||||
logger.debug("Owner Retrieved: " + icm);
|
||||
owner = icm;
|
||||
ownerFound = true;
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
logger.debug("Owner not found from user model!");
|
||||
owner = new InfoContactModel(folderItem.getOwner(), folderItem.getOwner(), folderItem.getOwner(),
|
||||
false);
|
||||
if (!ownerFound) {
|
||||
logger.debug("Owner not found from user model!");
|
||||
owner = new InfoContactModel(folderItem.getOwner(), folderItem.getOwner(),
|
||||
folderItem.getOwner(), false);
|
||||
}
|
||||
} else {
|
||||
logger.debug("Owner not found from item");
|
||||
owner = new InfoContactModel();
|
||||
owner = null;
|
||||
}
|
||||
|
||||
String username = info.getUsername();
|
||||
|
@ -1108,22 +1121,20 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
|||
return new AllowAccess(itemId, true, "The folder is already public. Access granted to " + username,
|
||||
null);
|
||||
}
|
||||
logger.info("owner of: " + folderItem.getName() + " is: " + owner);
|
||||
logger.info("current context user: " + username);
|
||||
if (owner.getLogin().compareToIgnoreCase(username) == 0) {
|
||||
logger.info("The owner of: " + folderItem.getName() + " is: " + owner);
|
||||
logger.info("The current context user: " + username);
|
||||
if (owner != null && owner.getLogin().compareToIgnoreCase(username) == 0) {
|
||||
logger.info("Access to Folder Link " + folderItem.getName() + " granted, " + username
|
||||
+ " is the owner of: " + itemId);
|
||||
return new AllowAccess(itemId, true,
|
||||
info.getUserFullName() + " is the owner of: " + folderItem.getName(), null);
|
||||
}
|
||||
|
||||
try {
|
||||
List<InfoContactModel> admins = null;
|
||||
|
||||
if (folderItem.isShared()) {
|
||||
if (folderItem instanceof SharedFolder) {
|
||||
admins = retrieveAdminContactsFromACLs(folderContainer);
|
||||
|
||||
} else {
|
||||
FolderContainer rootSharedFolderContainer = folderContainer.getRootSharedFolder();
|
||||
FolderItem rootSharedFolder = rootSharedFolderContainer.get();
|
||||
|
@ -1142,13 +1153,19 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
|||
"The item requested is not a valid shared folder : [itemId=" + itemId + "]");
|
||||
}
|
||||
|
||||
for (InfoContactModel infoContactModel : admins) {
|
||||
if (infoContactModel.getLogin().compareToIgnoreCase(username) == 0) {
|
||||
logger.info("Access to Folder Link " + logger.getName() + " granted, " + username
|
||||
+ " is the admin of: " + itemId);
|
||||
return new AllowAccess(itemId, true,
|
||||
info.getUserFullName() + " is the admin of: " + folderItem.getName(), null);
|
||||
if (admins != null) {
|
||||
for (InfoContactModel infoContactModel : admins) {
|
||||
if (infoContactModel.getLogin().compareToIgnoreCase(username) == 0) {
|
||||
logger.info("Access to Folder Link " + logger.getName() + " granted, " + username
|
||||
+ " is the admin of: " + itemId);
|
||||
return new AllowAccess(itemId, true,
|
||||
info.getUserFullName() + " is the admin of: " + folderItem.getName(), null);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return new AllowAccess(itemId, false,
|
||||
"You have not permission to get Folder Link, you must be owner or administrator to the folder", "Permission not found");
|
||||
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return new AllowAccess(itemId, false,
|
||||
|
@ -1163,9 +1180,7 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
|||
return new AllowAccess(itemId, false, "The item is not a folder", null);
|
||||
}
|
||||
|
||||
} catch (
|
||||
|
||||
Exception e) {
|
||||
} catch (Exception e) {
|
||||
logger.error("Error in server FormattedGcubeItemProperties: " + e.getLocalizedMessage(), e);
|
||||
String error = "Error when reading access policy to Folder Link: " + itemId + ", Refresh and try again";
|
||||
throw new Exception(error, e);
|
||||
|
|
Loading…
Reference in New Issue