diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component
index 336593c..5fe3680 100644
--- a/.settings/org.eclipse.wst.common.component
+++ b/.settings/org.eclipse.wst.common.component
@@ -4,9 +4,6 @@
-
- uses
-
diff --git a/pom.xml b/pom.xml
index 24b27a5..e958be2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -99,13 +99,11 @@
org.gcube.common
authorization-client
- [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT)
provided
org.gcube.common
common-authorization
- [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT)
provided
diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GcubeCkanDataCatalogService.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GcubeCkanDataCatalogService.java
index 0f2bbc3..849dfd1 100644
--- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GcubeCkanDataCatalogService.java
+++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GcubeCkanDataCatalogService.java
@@ -18,11 +18,28 @@ import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
public interface GcubeCkanDataCatalogService extends RemoteService {
+ /**
+ * Get the ckan connector access point
+ * @param pathInfoParameters
+ * @param queryStringParameters
+ * @param currentUrl
+ * @return
+ * @throws Exception
+ */
CkanConnectorAccessPoint getCKanConnector(
String pathInfoParameters, String queryStringParameters, String currentUrl) throws Exception;
+ /**
+ * Get the current role in CKAN for this user
+ * @return
+ * @throws Exception
+ */
CkanRole getMyRole() throws Exception;
+ /**
+ * Get the current user's username
+ * @return
+ */
String getUser();
/**
@@ -31,9 +48,13 @@ public interface GcubeCkanDataCatalogService extends RemoteService {
*/
Map getCkanOrganizationsNamesAndUrlsForUser();
+ /**
+ * Logout from ckan
+ */
void logoutFromCkan();
/**
+ * Remove auth cookie for ckan of this user
* @return
*/
String logoutURIFromCkan();
diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanFramePanel.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanFramePanel.java
index e6c03a5..5ebad21 100644
--- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanFramePanel.java
+++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanFramePanel.java
@@ -5,14 +5,17 @@ package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.view;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.GCubeCkanDataCatalog;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.IFrameInstanciedEvent;
+import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.resource.CkanPortletResources;
import com.google.gwt.core.shared.GWT;
+import com.google.gwt.dom.client.Style.Display;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.LoadEvent;
import com.google.gwt.event.dom.client.LoadHandler;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Frame;
+import com.google.gwt.user.client.ui.Image;
/**
@@ -25,6 +28,7 @@ public class CkanFramePanel extends FlowPanel{
private Frame frame;
private HandlerManager eventBus;
+ private Image loading = new Image(CkanPortletResources.ICONS.loading());
/**
@@ -34,7 +38,9 @@ public class CkanFramePanel extends FlowPanel{
*/
public CkanFramePanel(HandlerManager eventBus) {
this.eventBus = eventBus;
-
+ this.add(loading);
+ loading.getElement().getStyle().setProperty("margin", "auto");
+ loading.getElement().getStyle().setDisplay(Display.BLOCK);
}
/**
@@ -64,14 +70,17 @@ public class CkanFramePanel extends FlowPanel{
frame = new Frame(ckanUrlConnector);
frame.getElement().setId(GCubeCkanDataCatalog.GCUBE_CKAN_IFRAME);
frame.setWidth("100%");
-// frame.setHeight("100%");
-// frame.getElement().getStyle().setOverflow(Overflow.HIDDEN);
-// frame.getElement().setAttribute("scrolling", "no");
+ // frame.setHeight("100%");
+ // frame.getElement().getStyle().setOverflow(Overflow.HIDDEN);
+ // frame.getElement().setAttribute("scrolling", "no");
frame.getElement().getStyle().setBorderWidth(0, Unit.PX);
frame.addLoadHandler(new LoadHandler() {
@Override
public void onLoad(LoadEvent arg0) {
+
+ CkanFramePanel.this.remove(loading);
+
}
});
add(frame);
diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanMetadataManagementPanel.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanMetadataManagementPanel.java
index baa21ee..cbf4d6a 100644
--- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanMetadataManagementPanel.java
+++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanMetadataManagementPanel.java
@@ -175,7 +175,7 @@ public class CkanMetadataManagementPanel extends FlowPanel{
}
/**
- * Those buttons can be only visible when the logged user has role editr/admin/sysadmin
+ * Those buttons can be only visible when the logged user has role edit/admin/sysadmin
* @param show
*/
public void showInsertAndEditProductButtons(boolean show){
diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanOrganizationsPanel.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanOrganizationsPanel.java
index 2de27c2..f14b581 100644
--- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanOrganizationsPanel.java
+++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanOrganizationsPanel.java
@@ -32,7 +32,7 @@ public class CkanOrganizationsPanel extends VerticalPanel{
}
/**
- * Set the organizations to show
+ * Set the organizations to show. If a null list is passed, it is an error
* @param result
*/
public void setOrganizations(Map result) {
@@ -47,7 +47,13 @@ public class CkanOrganizationsPanel extends VerticalPanel{
this.organizations = result;
//generate the list of organizations
- if(result == null || result.isEmpty()){
+ if(result == null){
+ Paragraph p = new Paragraph("There was an error while retrieving your organizations, sorry.");
+ p.setStyleName("no-organizations-found-paragraph");
+ p.getElement().getStyle().setColor("#aaaaaa");
+ vPanel.add(p);
+ }
+ else if(result.isEmpty()){
Paragraph p = new Paragraph("You are not a member of any organizations.");
p.setStyleName("no-organizations-found-paragraph");
@@ -85,6 +91,7 @@ public class CkanOrganizationsPanel extends VerticalPanel{
vPanel.add(list);
}
+ // add the footer
String html = "Powered by gCube | CKAN";
Footer footer = new Footer(html);
footer.setStyleName("footer-organizations");
diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/GCubeCkanDataCatalogPanel.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/GCubeCkanDataCatalogPanel.java
index 903d7f1..fa41111 100644
--- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/GCubeCkanDataCatalogPanel.java
+++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/GCubeCkanDataCatalogPanel.java
@@ -64,8 +64,11 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate {
String queryParameter =
Window.Location.getParameter(GCubeCkanDataCatalog.GET_QUERY_PARAMETER);
+ String currentPortletUrl = Window.Location.getHref();
+ currentPortletUrl = currentPortletUrl.split("\\?")[0]; // ignore get parameters
+
GCubeCkanDataCatalog.service.getCKanConnector(
- pathParameter, queryParameter, Window.Location.getHref(),
+ pathParameter, queryParameter, currentPortletUrl,
new AsyncCallback() {
@Override
@@ -83,11 +86,11 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate {
if (result) {
// the portlet is outside the portal and no user is logged
- // in
- // show only home and statistics
+ // in show only home and statistics
managementPanel.doNotShowUserRelatedInfo();
}
else {
+
// polling for session expired check
CheckSession.getInstance().startPolling();
@@ -97,13 +100,15 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate {
@Override
public void onSuccess(Map result) {
- if (result != null)
ckanOrganizationsPanel.setOrganizations(result);
}
@Override
public void onFailure(Throwable caught) {
-
+
+ // an error message will be displayed
+ ckanOrganizationsPanel.setOrganizations(null);
+
}
});
@@ -122,7 +127,7 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate {
showEditInsertButtons(true);
break;
case EDITOR:
- showEditInsertButtons(false); // because the editor has some limitations TODO
+ showEditInsertButtons(true);
break;
case MEMBER:
showEditInsertButtons(false);
diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/GcubeCkanDataCatalogServiceImpl.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/GcubeCkanDataCatalogServiceImpl.java
index 3ffd2d1..4cde739 100644
--- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/GcubeCkanDataCatalogServiceImpl.java
+++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/GcubeCkanDataCatalogServiceImpl.java
@@ -19,10 +19,10 @@ import org.apache.commons.codec.binary.Base64;
import org.apache.http.HttpStatus;
import org.gcube.application.framework.core.session.ASLSession;
import org.gcube.application.framework.core.session.SessionManager;
-import org.gcube.common.scope.api.ScopeProvider;
+import org.gcube.common.authorization.library.provider.UserInfo;
+import org.gcube.datacatalogue.ckanutillibrary.ApplicationProfileScopePerUrlReader;
import org.gcube.datacatalogue.ckanutillibrary.CKanUtils;
import org.gcube.datacatalogue.ckanutillibrary.CkanUtilsFactory;
-import org.gcube.datacatalogue.ckanutillibrary.utils.ApplicationProfileScopePerUrlReader;
import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.GcubeCkanDataCatalogService;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint;
@@ -56,7 +56,6 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
public static String CKANCONNECTORLOGOUT = "CkanConnectorLogout";
public static final String USERNAME_ATTRIBUTE = ScopeHelper.USERNAME_ATTRIBUTE;
private static Logger logger = LoggerFactory.getLogger(GcubeCkanDataCatalogServiceImpl.class);
- private final static String DEFAULT_ROLE = "OrganizationMember";
public final static String TEST_USER = "test.user";
public final static String TEST_SCOPE = "/gcube/devsec/devVRE";
@@ -68,8 +67,8 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
private static final String CKAN_HIGHEST_ROLE = "ckanHighestRole"; // editor, member, admin (this information is retrieved according the scope)
private static final String CKAN_ORGANIZATIONS_PUBLISH_KEY = "ckanOrganizationsPublish"; // here he can publish (admin role)
- // THIS IS NEEDED TO HANDLE SPECIAL CASES (e.g. for a certain portlet url we want to discover in another scope)
- private final static String CLIENT_PORTLET_URL = "currentClientUrlPortlet";
+ // THIS IS NEEDED TO HANDLE SPECIAL CASES (e.g. for a certain portlet url we want to discover in another scope the ckan instance information)
+ private final static String SCOPE_CLIENT_PORTLET_URL = "currentClientUrlPortletScope";
/**
* Instanciate the ckan util library.
@@ -82,13 +81,14 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
HttpSession httpSession = getThreadLocalRequest().getSession();
ASLSession aslSession = getASLSession(httpSession);
String currentScope = aslSession.getScope();
- String user = aslSession.getUsername();
CKanUtils instance = null;
try{
+
String scopeInWhichDiscover = (discoverScope != null && !discoverScope.isEmpty()) ? discoverScope : currentScope;
logger.debug("Discovering ckan utils library into scope " + scopeInWhichDiscover);
instance = CkanUtilsFactory.getFactory().getUtilsPerScope(scopeInWhichDiscover);
+
}catch(Exception e){
logger.error("Unable to retrieve ckan utils", e);
}
@@ -99,18 +99,18 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
* @see org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.GcubeCkanDataCatalogService#getCKanConnector(java.lang.String, java.lang.String)
*/
@Override
- public CkanConnectorAccessPoint getCKanConnector(String pathInfoParameter, String queryStringParameters, String currentUrl) throws Exception {
- logger.info("getCKanConnector [pathInfo: "+pathInfoParameter + ", query: "+queryStringParameters+"], current url is " + currentUrl);
+ public CkanConnectorAccessPoint getCKanConnector(String pathInfoParameter, String queryStringParameters, String currentPortletUrl) throws Exception {
+ logger.info("getCKanConnector [pathInfo: "+pathInfoParameter + ", query: "+queryStringParameters+"], current url is " + currentPortletUrl);
try{
// call asl session otherwise ScopeProvider.instance.get(); returns null
ASLSession aslSession = getASLSession(this.getThreadLocalRequest().getSession());
// retrieve scope per current portlet url
- String scopePerCurrentUrl = new ApplicationProfileScopePerUrlReader().getScopePerUrl(currentUrl);
+ String scopePerCurrentUrl = new ApplicationProfileScopePerUrlReader().getScopePerUrl(currentPortletUrl);
// save it
- this.getThreadLocalRequest().getSession().setAttribute(CLIENT_PORTLET_URL, currentUrl);
+ this.getThreadLocalRequest().getSession().setAttribute(SCOPE_CLIENT_PORTLET_URL, scopePerCurrentUrl);
if(queryStringParameters!=null && Base64.isBase64(queryStringParameters.getBytes())){
byte[] valueDecoded=Base64.decodeBase64(queryStringParameters.getBytes());
@@ -177,12 +177,13 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
//GET TOKEN
String gcubeTokenValue = null;
if(SessionUtil.isIntoPortal()){
- gcubeTokenValue = getGcubeSecurityToken();
+ gcubeTokenValue = getGcubeSecurityToken(scopePerCurrentUrl);
}else{
logger.warn("******** Using TEST_USER security token!!!");
gcubeTokenValue = TEST_SEC_TOKEN;
}
+ // set the token into the CkanConnectorAccessPoint
ckan.addGubeToken(gcubeTokenValue);
//ADDING LIST OF VRE TO WHICH USER BELONGS
@@ -190,6 +191,7 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
return ckan;
}
+ // retrieve the list of VREs to whom the user belongs
List listVres = UserUtil.getListVreForUser(session.getUserEmailAddress());
ckan.addListOfVREs(listVres);
@@ -197,43 +199,41 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
}
/**
- * Gets the gcube security token.
+ * Gets the gcube security token for the user in current session and for a given scope
*
* @return the gcube security token
+ * @throws Exception
*/
- protected String getGcubeSecurityToken() {
- HttpSession httpSession = this.getThreadLocalRequest().getSession();
- ASLSession session = getASLSession(httpSession);
- logger.debug("Get security token return: "+session.getSecurityToken());
+ protected String getGcubeSecurityToken(String scope) throws Exception {
- if(session.getSecurityToken()==null || session.getSecurityToken().isEmpty()){
- logger.warn("Security token retured from ASL is null or empty, I'm setting security token...");
- setAuthorizationToken(session);
- }
-
- return session.getSecurityToken();
- }
-
-
- /**
- * Temporary method to set the authorization token.
- *
- * @param session the new authorization token
- */
- private static void setAuthorizationToken(ASLSession session) {
+ // ask it directly to the auth service
+ ASLSession session = getASLSession(this.getThreadLocalRequest().getSession());
String username = session.getUsername();
- String scope = session.getScope();
- ScopeProvider.instance.set(scope);
- logger.debug("calling service token on scope " + scope);
- List userRoles = new ArrayList();
- userRoles.add(DEFAULT_ROLE);
- session.setSecurityToken(null);
- String token = authorizationService().build().generate(session.getUsername(), userRoles);
- logger.debug("received token: "+token);
- session.setSecurityToken(token);
- logger.info("Security token set in session for: "+username + " on " + scope);
+ String token = authorizationService().generateUserToken(new UserInfo(username, new ArrayList()), scope);
+ return token;
+
}
+ // /**
+ // * Temporary method to set the authorization token.
+ // *
+ // * @param session the new authorization token
+ // * @throws Exception
+ // */
+ // private static void setAuthorizationToken(ASLSession session) throws Exception {
+ // String username = session.getUsername();
+ // String scope = session.getScope();
+ // ScopeProvider.instance.set(scope);
+ // logger.debug("calling service token on scope " + scope);
+ // List userRoles = new ArrayList();
+ // userRoles.add(DEFAULT_ROLE);
+ // session.setSecurityToken(null);
+ // String token = authorizationService().generateUserToken(new UserInfo(username, userRoles), scope);
+ // logger.debug("received token: "+token);
+ // session.setSecurityToken(token);
+ // logger.info("Security token set in session for: "+username + " on " + scope);
+ // }
+
/**
* Gets the ASL session.
*
@@ -285,11 +285,8 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
}else{
- // save it
- String currentUrl = (String)this.getThreadLocalRequest().getSession().getAttribute(CLIENT_PORTLET_URL);
-
- // retrieve scope per current portlet url
- String scopePerCurrentUrl = new ApplicationProfileScopePerUrlReader().getScopePerUrl(currentUrl);
+ // get the scope
+ String scopePerCurrentUrl = (String)this.getThreadLocalRequest().getSession().getAttribute(SCOPE_CLIENT_PORTLET_URL);
// get key per scope
String keyPerScope = UserUtil.concatenateSessionKeyScope(CKAN_HIGHEST_ROLE, scopePerCurrentUrl);
@@ -306,21 +303,22 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
GroupManager gm = new LiferayGroupManager();
String groupName = gm.getGroup(gm.getGroupIdFromInfrastructureScope(scopePerCurrentUrl)).getGroupName();
- // we build up also a list that keeps track of the scopes (orgs) in which the user has role ADMIN
- List orgsInWhichAdminRole = new ArrayList();
- toReturn = UserUtil.getHighestRole(scopePerCurrentUrl, username, groupName, this, orgsInWhichAdminRole);
+ // we build up also a list that keeps track of the scopes (orgs) in which the user has at least role EDITOR
+ List orgsInWhichAtLeastEditorRole = new ArrayList();
+ toReturn = UserUtil.getHighestRole(scopePerCurrentUrl, username, groupName, this, orgsInWhichAtLeastEditorRole);
+
+ // put role in session
httpSession.setAttribute(keyPerScope, toReturn);
-
logger.info("Set role " + toReturn + " into session for user " + username);
- // if he is an admin preload:
+ // if he is an admin/editor preload:
// 1) organizations in which he can publish (the widget will find these info in session)
- if(toReturn.equals(CkanRole.ADMIN)){
- httpSession.setAttribute(UserUtil.concatenateSessionKeyScope(CKAN_ORGANIZATIONS_PUBLISH_KEY, scopePerCurrentUrl), orgsInWhichAdminRole);
- logger.info("Set organizations in which he can publish to " + orgsInWhichAdminRole + " into session for user " + username);
+ if(toReturn.equals(CkanRole.ADMIN) || toReturn.equals(CkanRole.EDITOR)){
+ httpSession.setAttribute(UserUtil.concatenateSessionKeyScope(CKAN_ORGANIZATIONS_PUBLISH_KEY, scopePerCurrentUrl), orgsInWhichAtLeastEditorRole);
+ logger.info("Set organizations in which he can publish to " + orgsInWhichAtLeastEditorRole + " into session for user " + username);
}
}catch(Exception e){
- logger.error("Error while retreving roles... returning MEMBER", e);
+ logger.error("Error while retreving roles... returning " + toReturn, e);
}
}
}
@@ -337,9 +335,9 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
public String getUser() {
HttpSession httpSession = this.getThreadLocalRequest().getSession();
-
- logger.debug("User in session is " + getASLSession(httpSession).getUsername());
- return getASLSession(httpSession).getUsername();
+ String username = getASLSession(httpSession).getUsername();
+ logger.debug("User in session is " + username);
+ return username;
}
@@ -348,8 +346,11 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
HttpSession httpSession = this.getThreadLocalRequest().getSession();
ASLSession session = getASLSession(httpSession);
String username = session.getUsername();
- CkanConnectorAccessPoint ckanAP = SessionUtil.getCkanAccessPoint(this.getThreadLocalRequest().getSession(), session.getScope());
- // String token = getGcubeSecurityToken();
+
+ // get the scope from session
+ String scopePerCurrentUrl = (String)this.getThreadLocalRequest().getSession().getAttribute(SCOPE_CLIENT_PORTLET_URL);
+
+ CkanConnectorAccessPoint ckanAP = SessionUtil.getCkanAccessPoint(this.getThreadLocalRequest().getSession(), scopePerCurrentUrl);
logger.info("Logout from CKAN for: "+username +" by token: "+ckanAP.getGcubeTokenValue());
String ckanConnectorLogut = getServletContext().getInitParameter(CKANCONNECTORLOGOUT);
@@ -369,7 +370,9 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
HttpSession httpSession = this.getThreadLocalRequest().getSession();
ASLSession session = getASLSession(httpSession);
String username = session.getUsername();
- CkanConnectorAccessPoint ckanAP = SessionUtil.getCkanAccessPoint(this.getThreadLocalRequest().getSession(), session.getScope());
+ // get the scope from session
+ String scopePerCurrentUrl = (String)this.getThreadLocalRequest().getSession().getAttribute(SCOPE_CLIENT_PORTLET_URL);
+ CkanConnectorAccessPoint ckanAP = SessionUtil.getCkanAccessPoint(this.getThreadLocalRequest().getSession(), scopePerCurrentUrl);
// String token = getGcubeSecurityToken();
logger.info("Logout from CKAN for: "+username +" by token: "+ckanAP.getGcubeTokenValue());
@@ -441,12 +444,8 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
ASLSession session = getASLSession(httpSession);
String username = session.getUsername();
- // get it
- String currentUrl = (String)this.getThreadLocalRequest().getSession().getAttribute(CLIENT_PORTLET_URL);
-
// retrieve scope per current portlet url
- String scopePerCurrentUrl = new ApplicationProfileScopePerUrlReader().getScopePerUrl(currentUrl);
-
+ String scopePerCurrentUrl = (String)this.getThreadLocalRequest().getSession().getAttribute(SCOPE_CLIENT_PORTLET_URL);
String keyPerScope = UserUtil.concatenateSessionKeyScope(CKAN_ORGS_USER_KEY, scopePerCurrentUrl);
if(!username.equals(TEST_USER)){
@@ -475,7 +474,7 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
if(!SessionUtil.isIntoPortal()){
- logger.warn("You are not into the portal");
+ logger.warn("You are in DEV mode");
return false;
}else{
@@ -483,11 +482,8 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
HttpSession httpSession = this.getThreadLocalRequest().getSession();
ASLSession session = getASLSession(httpSession);
String username = session.getUsername();
+ return username.equals(TEST_USER);
- if(username.equals(TEST_USER))
- return true;
-
- return false;
}
}
}
diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/SessionUtil.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/SessionUtil.java
index b889ab2..94bfda7 100644
--- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/SessionUtil.java
+++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/SessionUtil.java
@@ -96,7 +96,5 @@ public class SessionUtil {
public static CkanConnectorAccessPoint getCkanAccessPoint(HttpSession session, String scope) {
String key = getKeyForSession(CKAN_ACCESS_POINT, scope);
return (CkanConnectorAccessPoint) session.getAttribute(key);
-
-
}
}
diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/UserUtil.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/UserUtil.java
index bb983a6..65fc275 100644
--- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/UserUtil.java
+++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/UserUtil.java
@@ -79,7 +79,7 @@ public class UserUtil {
}
/**
- * Retrieve the highest ckan role the user has and also retrieve the list of organizations (scopes) in which the user has the ckan-admin role
+ * Retrieve the highest ckan role the user has and also retrieve the list of organizations (scopes) in which the user has the ckan-admin or ckan-editor role
* @param currentScope the current scope
* @param username the current username
* @param groupName the current groupName
@@ -87,7 +87,7 @@ public class UserUtil {
* @param orgsInWhichAdminRole
* @param ckanUtils ckanUtils
*/
- public static CkanRole getHighestRole(String currentScope, String username, String groupName, GcubeCkanDataCatalogServiceImpl gcubeCkanDataCatalogServiceImpl, List orgsInWhichAdminRole){
+ public static CkanRole getHighestRole(String currentScope, String username, String groupName, GcubeCkanDataCatalogServiceImpl gcubeCkanDataCatalogServiceImpl, List orgsInWhichAtLeastEditorRole){
// base role as default value
CkanRole toReturn = CkanRole.MEMBER;
@@ -129,8 +129,16 @@ public class UserUtil {
if(correspondentRoleToCheck.equals(RolesIntoOrganization.MEMBER))
continue;
+ // admin or editor case
checkIfRoleIsSetInCkanInstance(username, gCubeGroupName, gCubeGroup.getGroupId(),
- correspondentRoleToCheck, groupManager, gcubeCkanDataCatalogServiceImpl, orgsInWhichAdminRole);
+ correspondentRoleToCheck, groupManager, gcubeCkanDataCatalogServiceImpl, orgsInWhichAtLeastEditorRole);
+
+ if(toReturn.equals(CkanRole.ADMIN))
+ continue;
+ else if(toReturn.equals(CkanRole.EDITOR) && correspondentRoleToCheck.equals(RolesIntoOrganization.ADMIN))
+ toReturn = CkanRole.ADMIN;
+ else // it was MEMBER
+ toReturn = mapRolesIntoOrganizationToCkanRole(correspondentRoleToCheck);
}
@@ -156,7 +164,14 @@ public class UserUtil {
continue;
checkIfRoleIsSetInCkanInstance(username, gCubeGroupName, gCubeGroup.getGroupId(),
- correspondentRoleToCheck, groupManager, gcubeCkanDataCatalogServiceImpl, orgsInWhichAdminRole);
+ correspondentRoleToCheck, groupManager, gcubeCkanDataCatalogServiceImpl, orgsInWhichAtLeastEditorRole);
+
+ if(toReturn.equals(CkanRole.ADMIN))
+ continue;
+ else if(toReturn.equals(CkanRole.EDITOR) && correspondentRoleToCheck.equals(RolesIntoOrganization.ADMIN))
+ toReturn = CkanRole.ADMIN;
+ else
+ toReturn = mapRolesIntoOrganizationToCkanRole(correspondentRoleToCheck);
}
}else if(groupManager.isVRE(currentGroupId)){
@@ -167,11 +182,11 @@ public class UserUtil {
// get highest role
RolesIntoOrganization correspondentRoleToCheck = getLiferayHighestRoleInOrg(roles);
- // if it the role is ADMIN we have to be sure to set it
- if(correspondentRoleToCheck.equals(RolesIntoOrganization.ADMIN)){
+ // if it the role is ADMIN/EDITOR we have to be sure to set it
+ if(correspondentRoleToCheck.equals(RolesIntoOrganization.ADMIN) || correspondentRoleToCheck.equals(RolesIntoOrganization.EDITOR)){
checkIfRoleIsSetInCkanInstance(username, groupName, currentGroupId,
- correspondentRoleToCheck, groupManager, gcubeCkanDataCatalogServiceImpl, orgsInWhichAdminRole);
+ correspondentRoleToCheck, groupManager, gcubeCkanDataCatalogServiceImpl, orgsInWhichAtLeastEditorRole);
}
}
}catch(Exception e){
@@ -179,17 +194,13 @@ public class UserUtil {
return CkanRole.MEMBER;
}
- // check the list
- if(orgsInWhichAdminRole.size() > 0)
- toReturn = CkanRole.ADMIN;
-
// return the role
logger.debug("Returning role " + toReturn + " for user " + username);
return toReturn;
}
/**
- * Check if the role admin is set or must be set into the ckan instance at this scope
+ * Check if the role admin/editor is set or must be set into the ckan instance at this scope
* @param username
* @param gCubeGroupName
* @param groupId
@@ -204,7 +215,7 @@ public class UserUtil {
String gCubeGroupName, long groupId,
RolesIntoOrganization correspondentRoleToCheck,
GroupManager groupManager,
- GcubeCkanDataCatalogServiceImpl gcubeCkanDataCatalogServiceImpl, List orgsInWhichAdminRole) throws UserManagementSystemException, GroupRetrievalFault {
+ GcubeCkanDataCatalogServiceImpl gcubeCkanDataCatalogServiceImpl, List orgsInWhichAtLeastEditorRole) throws UserManagementSystemException, GroupRetrievalFault {
// with this invocation, we check if the role is present in ckan and if it is not it will be added
CKanUtils ckanUtils = gcubeCkanDataCatalogServiceImpl.getCkanUtilsObj(groupManager.getInfrastructureScope(groupId));
@@ -213,11 +224,11 @@ public class UserUtil {
if(ckanUtils != null){
boolean res = ckanUtils.checkRole(username, gCubeGroupName, correspondentRoleToCheck);
if(res){
- // get the orgs of the user
+ // get the orgs of the user and retrieve its title and name
List ckanOrgs = ckanUtils.getOrganizationsByUser(username);
for (CkanOrganization ckanOrganization : ckanOrgs) {
if(ckanOrganization.getName().equals(gCubeGroupName.toLowerCase()) || ckanOrganization.getName().equals(CKanUtilsImpl.PRODUCTION_CKAN_ORGNAME_ROOT)){
- orgsInWhichAdminRole.add(new OrganizationBean(ckanOrganization.getTitle(), ckanOrganization.getName()));
+ orgsInWhichAtLeastEditorRole.add(new OrganizationBean(ckanOrganization.getTitle(), ckanOrganization.getName()));
break;
}
}
@@ -228,21 +239,42 @@ public class UserUtil {
}
/**
- * Retrieve the ckan roles among a list of liferay roles
+ * Retrieve the ckan role among a list of liferay roles
* @param roles
- * @return
+ * @return MEMBER/EDITOR/ADMIN role
*/
private static RolesIntoOrganization getLiferayHighestRoleInOrg(
List roles) {
+
// NOTE: it is supposed that there is just one role for this person correspondent to the one in the catalog
for (GCubeRole gCubeRole : roles) {
if(gCubeRole.getRoleName().equalsIgnoreCase(GatewayRolesNames.CATALOGUE_ADMIN.getRoleName())){
return RolesIntoOrganization.ADMIN;
}
+ if(gCubeRole.getRoleName().equalsIgnoreCase(GatewayRolesNames.CATALOGUE_EDITOR.getRoleName())){
+ return RolesIntoOrganization.EDITOR;
+ }
}
return RolesIntoOrganization.MEMBER;
}
+ /**
+ * Return the correspondent CkanRole
+ * @param correspondentRoleToCheck
+ * @return
+ */
+ private static CkanRole mapRolesIntoOrganizationToCkanRole(
+ RolesIntoOrganization correspondentRoleToCheck) {
+ switch(correspondentRoleToCheck){
+
+ case ADMIN: return CkanRole.ADMIN;
+ case EDITOR: return CkanRole.EDITOR;
+ case MEMBER: return CkanRole.MEMBER;
+ default:return null;
+
+ }
+ }
+
/**
* Builds a string made of key + scope
* @param key