diff --git a/.classpath b/.classpath
index 2ca6eea..7594b7e 100644
--- a/.classpath
+++ b/.classpath
@@ -1,6 +1,6 @@
-
+
@@ -22,8 +22,9 @@
+
-
+
diff --git a/distro/changelog.xml b/distro/changelog.xml
index 43d69d7..16dcf62 100644
--- a/distro/changelog.xml
+++ b/distro/changelog.xml
@@ -1,4 +1,12 @@
+
+ Updated PortalContext support[ticket #6279]
+
+
+ Added Portal Context
+
Removed accesslogger dependency
diff --git a/pom.xml b/pom.xml
index 24c8ff6..2592ddf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,7 +12,7 @@
org.gcube.portlets.widgets
github-connector
- 1.2.0-SNAPSHOT
+ 1.3.0-SNAPSHOT
jar
github-connector
@@ -163,6 +163,12 @@
provided
+
+ org.gcube.portal
+ client-context-library
+ [1.0.0-SNAPSHOT,)
+ compile
+
@@ -177,12 +183,12 @@
provided
-
+
@@ -373,6 +379,41 @@
+
+
+
+
+ org.eclipse.m2e
+ lifecycle-mapping
+ 1.0.0
+
+
+
+
+
+
+ org.codehaus.mojo
+
+
+ gwt-maven-plugin
+
+
+ [2.7.0,)
+
+
+ resources
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/org/gcube/portlets/widgets/githubconnector/portlet/GitHubConnectorPortlet.java b/src/main/java/org/gcube/portlets/widgets/githubconnector/portlet/GitHubConnectorPortlet.java
index 4a53aa2..a792ec7 100644
--- a/src/main/java/org/gcube/portlets/widgets/githubconnector/portlet/GitHubConnectorPortlet.java
+++ b/src/main/java/org/gcube/portlets/widgets/githubconnector/portlet/GitHubConnectorPortlet.java
@@ -11,6 +11,7 @@ import javax.portlet.PortletRequestDispatcher;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
+import org.gcube.common.portal.PortalContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -44,9 +45,9 @@ public class GitHubConnectorPortlet extends GenericPortlet {
public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
logger.trace("Loading from JSP: "+VIEW_JSP);
+ logger.trace("Setting user in session using PortalContext");
+ PortalContext.setUserInSession(request);
- //logger.trace("setting context using ScopeHelper");
- //ScopeHelper.setContext(request);
logger.trace("passing to the render");
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(VIEW_JSP);
diff --git a/src/main/java/org/gcube/portlets/widgets/githubconnector/server/GitHubConnectorServiceImpl.java b/src/main/java/org/gcube/portlets/widgets/githubconnector/server/GitHubConnectorServiceImpl.java
index 24b7e3a..cab2289 100644
--- a/src/main/java/org/gcube/portlets/widgets/githubconnector/server/GitHubConnectorServiceImpl.java
+++ b/src/main/java/org/gcube/portlets/widgets/githubconnector/server/GitHubConnectorServiceImpl.java
@@ -19,14 +19,14 @@ import com.google.gwt.user.server.rpc.RemoteServiceServlet;
/**
*
- * @author Giancarlo Panichi
- * email: g.panichi@isti.cnr.it
+ * @author Giancarlo Panichi email: g.panichi@isti.cnr.it
*
*/
@SuppressWarnings("serial")
public class GitHubConnectorServiceImpl extends RemoteServiceServlet implements
GitHubConnectorService {
-
+
private static Logger logger = LoggerFactory
.getLogger(GitHubConnectorServiceImpl.class);
@@ -45,11 +45,13 @@ public class GitHubConnectorServiceImpl extends RemoteServiceServlet implements
@Override
public UserInfo hello() throws ServiceException {
try {
-
- ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(this.getThreadLocalRequest());
+
+ ServiceCredentials serviceCredentials = SessionUtil
+ .getServiceCredentials(this.getThreadLocalRequest());
logger.debug("hello()");
UserInfo userInfo = new UserInfo(serviceCredentials.getUserName(),
- serviceCredentials.getGroupId(), serviceCredentials.getGroupName(),
+ serviceCredentials.getGroupId(),
+ serviceCredentials.getGroupName(),
serviceCredentials.getScope(),
serviceCredentials.getEmail(),
serviceCredentials.getFullName());
@@ -70,7 +72,8 @@ public class GitHubConnectorServiceImpl extends RemoteServiceServlet implements
public ArrayList getRepositories(String repositoryOwner,
GitHubCredential gitHubCredential) throws ServiceException {
try {
- ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(this.getThreadLocalRequest());
+ ServiceCredentials serviceCredentials = SessionUtil
+ .getServiceCredentials(this.getThreadLocalRequest());
logger.debug("getRepository(): " + gitHubCredential);
GitConnectorService gitConnectorService = new GitConnectorService(
serviceCredentials.getUserName(), gitHubCredential);
@@ -89,13 +92,16 @@ public class GitHubConnectorServiceImpl extends RemoteServiceServlet implements
public void cloneRepository(GitHubCloneSession gitHubCloneSession)
throws ServiceException {
try {
- ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(this.getThreadLocalRequest());
+ ServiceCredentials serviceCredentials = SessionUtil
+ .getServiceCredentials(this.getThreadLocalRequest());
logger.debug("cloneRepository(): " + gitHubCloneSession);
GitConnectorService gitConnectorService = new GitConnectorService(
serviceCredentials.getUserName(),
gitHubCloneSession.getGitHubCredential());
- gitConnectorService.cloneRepository(gitHubCloneSession.getDestinationFolderId(),
- gitHubCloneSession.getRepositoryOwner(), gitHubCloneSession.getRepositoryName());
+ gitConnectorService.cloneRepository(
+ gitHubCloneSession.getDestinationFolderId(),
+ gitHubCloneSession.getRepositoryOwner(),
+ gitHubCloneSession.getRepositoryName());
return;
} catch (ServiceException e) {
e.printStackTrace();
diff --git a/src/main/java/org/gcube/portlets/widgets/githubconnector/server/SessionUtil.java b/src/main/java/org/gcube/portlets/widgets/githubconnector/server/SessionUtil.java
index 4761bf1..5e971b4 100644
--- a/src/main/java/org/gcube/portlets/widgets/githubconnector/server/SessionUtil.java
+++ b/src/main/java/org/gcube/portlets/widgets/githubconnector/server/SessionUtil.java
@@ -6,10 +6,15 @@ package org.gcube.portlets.widgets.githubconnector.server;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
+import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.common.portal.PortalContext;
+import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.portlets.widgets.githubconnector.server.util.ServiceCredentials;
import org.gcube.portlets.widgets.githubconnector.shared.Constants;
import org.gcube.portlets.widgets.githubconnector.shared.exception.ServiceException;
+import org.gcube.vomanagement.usermanagement.impl.LiferayGroupManager;
+import org.gcube.vomanagement.usermanagement.model.GCubeGroup;
+import org.gcube.vomanagement.usermanagement.model.GCubeUser;
/**
*
@@ -22,46 +27,160 @@ public class SessionUtil {
private static final Logger logger = Logger.getLogger(SessionUtil.class);
+ /**
+ *
+ * @param httpServletRequest
+ * @return
+ * @throws TDGWTServiceException
+ */
public static ServiceCredentials getServiceCredentials(
- HttpServletRequest httpServletRequest) throws ServiceException {
+ HttpServletRequest httpServletRequest)
+ throws ServiceException {
+ return getServiceCredentials(httpServletRequest, null);
+ }
+
+ /**
+ *
+ * @param httpServletRequest
+ * @param scopeGroupId
+ * @return
+ * @throws TDGWTServiceException
+ */
+ public static ServiceCredentials getServiceCredentials(
+ HttpServletRequest httpServletRequest, String scopeGroupId)
+ throws ServiceException {
+
ServiceCredentials sCredentials = null;
String userName = null;
String scope = null;
String token = null;
+ String groupId = null;
+ String groupName = null;
if (Constants.DEBUG_MODE) {
logger.info("No credential found in session, use test user!");
+ /*
+ * InfoLocale infoLocale = getInfoLocale(httpServletRequest, null);
+ * Locale locale = new Locale(infoLocale.getLanguage());
+ *
+ * ResourceBundle messages = ResourceBundle.getBundle(
+ * StatAlgoImporterServiceMessagesConstants.TDGWTServiceMessages,
+ * locale);
+ */
userName = Constants.DEFAULT_USER;
scope = Constants.DEFAULT_SCOPE;
token = Constants.DEFAULT_TOKEN;
+ logger.info("Set SecurityToken: " + token);
+ SecurityTokenProvider.instance.set(token);
+ logger.info("Set ScopeProvider: " + scope);
+ ScopeProvider.instance.set(scope);
+
sCredentials = new ServiceCredentials(userName, scope, token);
} else {
logger.info("Retrieving credential in session!");
PortalContext pContext = PortalContext.getConfiguration();
- userName = pContext.getCurrentUser(httpServletRequest)
- .getUsername();
- scope = pContext.getCurrentScope(httpServletRequest);
- token = pContext.getCurrentUserToken(httpServletRequest);
- String name = pContext.getCurrentUser(httpServletRequest)
- .getFirstName();
- String lastName = pContext.getCurrentUser(httpServletRequest)
- .getLastName();
- String fullName = pContext.getCurrentUser(httpServletRequest).getFullname();
-
- String email = pContext.getCurrentUser(httpServletRequest)
- .getEmail();
- String groupId = String.valueOf(pContext
- .getCurrentGroupId(httpServletRequest));
- String groupName = pContext.getCurrentGroupName(httpServletRequest);
-
- sCredentials = new ServiceCredentials(userName, fullName, name, lastName,
- email, scope, groupId, groupName, token);
+ boolean hasScopeGroupId = false;
+ if (scopeGroupId != null && !scopeGroupId.isEmpty()) {
+ hasScopeGroupId = true;
+
+ } else {
+ hasScopeGroupId = false;
+ }
+
+ if (hasScopeGroupId) {
+ scope = pContext.getCurrentScope(scopeGroupId);
+ } else {
+ scope = pContext.getCurrentScope(httpServletRequest);
+ }
+
+ if (scope == null || scope.isEmpty()) {
+ String error = "Error retrieving scope: " + scope;
+ logger.error(error);
+ throw new ServiceException(error);
+ }
+
+ GCubeUser gCubeUser = pContext.getCurrentUser(httpServletRequest);
+
+ if (gCubeUser == null) {
+ String error = "Error retrieving gCubeUser in scope " + scope
+ + ": " + gCubeUser;
+ logger.error(error);
+ throw new ServiceException(error);
+ }
+
+ userName = gCubeUser.getUsername();
+
+ if (userName == null || userName.isEmpty()) {
+ String error = "Error retrieving username in scope " + scope
+ + ": " + userName;
+ logger.error(error);
+ throw new ServiceException(error);
+ }
+
+ token = pContext.getCurrentUserToken(scope, userName);
+
+ if (token == null || token.isEmpty()) {
+ String error = "Error retrieving token for " + userName
+ + " in " + scope + ": " + token;
+ logger.error(error);
+ throw new ServiceException(error);
+ }
+
+ String name = gCubeUser.getFirstName();
+ String lastName = gCubeUser.getLastName();
+ String fullName = gCubeUser.getFullname();
+
+ String userAvatarURL = gCubeUser.getUserAvatarURL();
+
+ String email = gCubeUser.getEmail();
+
+ if (hasScopeGroupId) {
+ logger.info("Set SecurityToken: " + token);
+ SecurityTokenProvider.instance.set(token);
+ logger.info("Set ScopeProvider: " + scope);
+ ScopeProvider.instance.set(scope);
+
+ groupId = scopeGroupId;
+
+ long gId;
+
+ try {
+ gId = Long.parseLong(scopeGroupId);
+ } catch (Throwable e) {
+ String error = "Error retrieving groupId: " + scopeGroupId;
+ logger.error(error, e);
+ throw new ServiceException(error);
+ }
+
+ GCubeGroup group;
+ try {
+ group = new LiferayGroupManager().getGroup(gId);
+ } catch (Throwable e) {
+ String error = "Error retrieving group: " + groupName;
+ logger.error(error);
+ throw new ServiceException(error);
+ }
+
+ groupName = group.getGroupName();
+
+ } else {
+
+ groupId = String.valueOf(pContext
+ .getCurrentGroupId(httpServletRequest));
+
+ groupName = pContext.getCurrentGroupName(httpServletRequest);
+
+ }
+
+ sCredentials = new ServiceCredentials(userName, fullName, name,
+ lastName, email, scope, groupId, groupName, userAvatarURL,
+ token);
}
- logger.info("ServiceCredential: " + sCredentials);
+ logger.info("ServiceCredentials: " + sCredentials);
return sCredentials;
}
diff --git a/src/main/java/org/gcube/portlets/widgets/githubconnector/server/util/ServiceCredentials.java b/src/main/java/org/gcube/portlets/widgets/githubconnector/server/util/ServiceCredentials.java
index ecd1fe3..7405d58 100644
--- a/src/main/java/org/gcube/portlets/widgets/githubconnector/server/util/ServiceCredentials.java
+++ b/src/main/java/org/gcube/portlets/widgets/githubconnector/server/util/ServiceCredentials.java
@@ -19,6 +19,7 @@ public class ServiceCredentials implements Serializable {
private String scope;
private String groupId;
private String groupName;
+ private String userAvatarURL;
private String token;
public ServiceCredentials() {
@@ -34,7 +35,7 @@ public class ServiceCredentials implements Serializable {
public ServiceCredentials(String userName, String fullName, String name,
String lastName, String email, String scope, String groupId,
- String groupName, String token) {
+ String groupName, String userAvatarURL, String token) {
super();
this.userName = userName;
this.fullName = fullName;
@@ -44,6 +45,7 @@ public class ServiceCredentials implements Serializable {
this.scope = scope;
this.groupId = groupId;
this.groupName = groupName;
+ this.userAvatarURL = userAvatarURL;
this.token = token;
}
@@ -111,6 +113,14 @@ public class ServiceCredentials implements Serializable {
this.groupName = groupName;
}
+ public String getUserAvatarURL() {
+ return userAvatarURL;
+ }
+
+ public void setUserAvatarURL(String userAvatarURL) {
+ this.userAvatarURL = userAvatarURL;
+ }
+
public String getToken() {
return token;
}
@@ -124,10 +134,8 @@ public class ServiceCredentials implements Serializable {
return "ServiceCredentials [userName=" + userName + ", fullName="
+ fullName + ", name=" + name + ", lastName=" + lastName
+ ", email=" + email + ", scope=" + scope + ", groupId="
- + groupId + ", groupName=" + groupName + ", token=" + token
- + "]";
+ + groupId + ", groupName=" + groupName + ", userAvatarURL="
+ + userAvatarURL + ", token=" + token + "]";
}
-
-
-}
+}
\ No newline at end of file