diff --git a/src/main/java/org/gcube/common/portal/PortalContext.java b/src/main/java/org/gcube/common/portal/PortalContext.java index c57e413..a46607f 100644 --- a/src/main/java/org/gcube/common/portal/PortalContext.java +++ b/src/main/java/org/gcube/common/portal/PortalContext.java @@ -11,6 +11,8 @@ import java.util.Properties; import javax.servlet.http.HttpServletRequest; +import org.gcube.common.authorization.client.exceptions.ObjectNotFound; +import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.authorization.library.provider.UserInfo; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.vomanagement.usermanagement.impl.LiferayGroupManager; @@ -246,7 +248,7 @@ public class PortalContext { } return -1; } - + /** * @@ -259,9 +261,18 @@ public class PortalContext { if (groupIdNo != null) { String scope = getCurrentScope(httpServletRequest); String username = getCurrentUser(httpServletRequest).getUsername(); + String userToken = null; try { - return getAuthorizationToken(username, scope); - } catch (Exception e) { + ScopeProvider.instance.set(scope); + userToken = authorizationService().resolveTokenByUserAndContext(username, scope); + SecurityTokenProvider.instance.set(userToken); + } + catch (ObjectNotFound ex) { + userToken = generateAuthorizationToken(username, scope); + SecurityTokenProvider.instance.set(userToken); + _log.debug("generateAuthorizationToken OK for " + username + " in scope " + scope); + } + catch (Exception e) { _log.error("Error while trying to generate token for user " + username + "in scope " + scope); e.printStackTrace(); return null; @@ -278,20 +289,23 @@ public class PortalContext { } return null; } - + /** * * @param username * @param scope * @throws Exception */ - private static String getAuthorizationToken(String username, String scope) throws Exception { - ScopeProvider.instance.set(scope); - _log.debug("calling service token on scope " + scope); + private static String generateAuthorizationToken(String username, String scope) { List userRoles = new ArrayList<>(); userRoles.add(DEFAULT_ROLE); - String token = authorizationService().generateUserToken(new UserInfo(username, userRoles), scope); - _log.debug("received token: "+token); + String token; + try { + token = authorizationService().generateUserToken(new UserInfo(username, userRoles), scope); + } catch (Exception e) { + e.printStackTrace(); + return null; + } return token; } /** @@ -650,7 +664,7 @@ public class PortalContext { return null; } } - + /** * for development purposes only */ @@ -703,7 +717,7 @@ public class PortalContext { return null; } } - + /** * for development purposes only */ @@ -738,8 +752,8 @@ public class PortalContext { } return -1L; } - - + + /** * * @return $CATALINA_HOME @@ -747,7 +761,7 @@ public class PortalContext { private static String getCatalinaHome() { return (System.getenv("CATALINA_HOME").endsWith("/") ? System.getenv("CATALINA_HOME") : System.getenv("CATALINA_HOME")+"/"); } - + /** * * @return $GCUBE-DEV-HOME