diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/WorkspaceSharingServiceImpl.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/WorkspaceSharingServiceImpl.java index df826fb..cec0fae 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/WorkspaceSharingServiceImpl.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/WorkspaceSharingServiceImpl.java @@ -449,7 +449,7 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements SharedFolder sharedFolder = (SharedFolder) folderItem; String currentUser = getMyLogin(); logger.debug("Current User: " + currentUser); - + Set alreadySharedUsers = null; Metadata usersMetadata = sharedFolder.getUsers(); if (usersMetadata != null) { @@ -462,7 +462,7 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements } } } - + Set 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 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 retrieveAdminContactsFromACLs(FolderContainer folderContainer) throws Exception { - List acls = folderContainer.getAcls(); - logger.debug("Retrieved acls: " + acls); - List 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(); + } else { + logger.debug("Retrieve Admins for: " + folderContainer.get()); + List admins = new ArrayList<>(); + + List 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 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 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);