From 1222051250ac422ea6944c8ed39157ee3296c04e Mon Sep 17 00:00:00 2001 From: Massimiliano Assante Date: Fri, 18 Feb 2022 13:59:37 +0100 Subject: [PATCH] Added Weblet support --- .settings/org.eclipse.wst.common.component | 27 +++-- CHANGELOG.md | 6 +- pom.xml | 10 +- .../gcube/portlets/user/ExtAppManager.java | 93 --------------- .../weblet/WebletConfigurationAction.java | 41 +++++++ .../portlets/user/weblet/WebletManager.java | 108 ++++++++++++++++++ src/main/webapp/WEB-INF/liferay-display.xml | 2 +- .../WEB-INF/liferay-plugin-package.properties | 2 +- src/main/webapp/WEB-INF/liferay-portlet.xml | 3 +- src/main/webapp/WEB-INF/portlet.xml | 16 ++- src/main/webapp/html/extappmanager/config.jsp | 48 ++++++++ src/main/webapp/html/extappmanager/view.jsp | 25 ---- src/main/webapp/html/extappmanager/weblet.jsp | 26 +++++ 13 files changed, 266 insertions(+), 141 deletions(-) delete mode 100644 src/main/java/org/gcube/portlets/user/ExtAppManager.java create mode 100644 src/main/java/org/gcube/portlets/user/weblet/WebletConfigurationAction.java create mode 100644 src/main/java/org/gcube/portlets/user/weblet/WebletManager.java create mode 100644 src/main/webapp/html/extappmanager/config.jsp delete mode 100644 src/main/webapp/html/extappmanager/view.jsp create mode 100644 src/main/webapp/html/extappmanager/weblet.jsp diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index b66919d..39464e9 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -1,53 +1,62 @@ - + + - + + - + + - + + - + + - + + - + + - + + - + + diff --git a/CHANGELOG.md b/CHANGELOG.md index adc36c2..0ed9dd9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,13 @@ -# Changelog for VRE Definition Portlet +# Changelog for VRE App Integration Portlet All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [v1.2.0-SNAPSHOT] - 2022-02-18 + +- Added Weblet support + ## [v1.1.0] - 2021-07-13 - Ported to git diff --git a/pom.xml b/pom.xml index 35f4802..a7abe4b 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ VREApp-Integration-portlet war VREApp-Integration-portlet Portlet - 1.1.0 + 1.2.0-SNAPSHOT ${project.basedir}/distro UTF-8 @@ -35,7 +35,7 @@ org.gcube.distribution maven-portal-bom - 3.6.3 + 3.6.3-SNAPSHOT pom import @@ -89,6 +89,10 @@ portal-manager provided + + org.gcube.portal + oidc-library-portal + org.gcube.core common-scope-maps @@ -146,7 +150,6 @@ com.liferay.portal portal-service - ${liferay.version} provided @@ -164,7 +167,6 @@ com.liferay.portal util-java - ${liferay.version} provided diff --git a/src/main/java/org/gcube/portlets/user/ExtAppManager.java b/src/main/java/org/gcube/portlets/user/ExtAppManager.java deleted file mode 100644 index b759abb..0000000 --- a/src/main/java/org/gcube/portlets/user/ExtAppManager.java +++ /dev/null @@ -1,93 +0,0 @@ -package org.gcube.portlets.user; - -import java.io.IOException; -import java.util.Base64; - -import javax.portlet.PortletException; -import javax.portlet.RenderRequest; -import javax.portlet.RenderResponse; -import javax.servlet.http.HttpServletRequest; - -import org.gcube.common.portal.PortalContext; -import org.gcube.oidc.rest.JWTToken; -import org.gcube.portal.oidc.lr62.OIDCUmaUtil; - -import com.liferay.portal.kernel.log.LogFactoryUtil; -import com.liferay.portal.util.PortalUtil; -import com.liferay.util.bridges.mvc.MVCPortlet; - -import okhttp3.*; - -/** - * Portlet implementation class ExtAppManager - */ -public class ExtAppManager extends MVCPortlet { - private static com.liferay.portal.kernel.log.Log _log = LogFactoryUtil.getLog(ExtAppManager.class); - final String D4S_BOOT_URL = "https://d4science-cdn.nubisware.cloud/d4s-cdn/visuals/d4s-boot"; - final String EXT_APP_MANAGER_URL = "https://d4science-cdn.nubisware.cloud/d4s-cdn/visuals/ext-app-manager"; - - - public static final String D4S_BOOT_ATTR = "d4s-boot-div"; - public static final String EXT_APP_MANAGERATTR = "ext-app-div"; - - - @Override - public void render(RenderRequest renderRequest, RenderResponse renderResponse) throws PortletException, IOException { - JWTToken umaToken = null; - try { - String username = PortalUtil.getUser(renderRequest).getScreenName(); - HttpServletRequest httpReq = PortalUtil.getOriginalServletRequest(PortalUtil.getHttpServletRequest(renderRequest)); - String context = getCurrentContext(renderRequest); - umaToken = OIDCUmaUtil.getUMAToken(httpReq, username, context); - } catch (Exception e) { - e.printStackTrace(); - } - String token = umaToken.getAccessTokenString(); - - - OkHttpClient client = new OkHttpClient(); - Request request = new Request.Builder() - .url(D4S_BOOT_URL) - .addHeader("cache-control", "no-cache") - .addHeader("Authorization", "Bearer " + token) - .build(); - Call call = client.newCall(request); - Response response = call.execute(); - String d4sBootDIV = response.body().string(); - String encodedSd4sBootDIV = Base64.getEncoder().encodeToString(d4sBootDIV.getBytes()); - renderRequest.setAttribute(D4S_BOOT_ATTR, encodedSd4sBootDIV); - request = new Request.Builder() - .url(EXT_APP_MANAGER_URL) - .addHeader("cache-control", "no-cache") - .addHeader("Authorization", "Bearer " + token) - .build(); - call = client.newCall(request); - response = call.execute(); - String extAppDIV = response.body().string(); - String encodedextAppDIV = Base64.getEncoder().encodeToString(extAppDIV.getBytes()); - renderRequest.setAttribute(EXT_APP_MANAGERATTR, encodedextAppDIV); - - super.render(renderRequest, renderResponse); - } - - public static String getCurrentContext(RenderRequest request) { - long groupId = -1; - try { - groupId = PortalUtil.getScopeGroupId(request); - return getCurrentContext(groupId); - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - public static String getCurrentContext(long groupId) { - try { - PortalContext pContext = PortalContext.getConfiguration(); - return pContext.getCurrentScope(""+groupId); - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } -} diff --git a/src/main/java/org/gcube/portlets/user/weblet/WebletConfigurationAction.java b/src/main/java/org/gcube/portlets/user/weblet/WebletConfigurationAction.java new file mode 100644 index 0000000..81a4409 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/weblet/WebletConfigurationAction.java @@ -0,0 +1,41 @@ +package org.gcube.portlets.user.weblet; + +import javax.portlet.ActionRequest; +import javax.portlet.ActionResponse; +import javax.portlet.PortletConfig; +import javax.portlet.PortletPreferences; +import javax.portlet.RenderRequest; +import javax.portlet.RenderResponse; + +import com.liferay.portal.kernel.log.Log; +import com.liferay.portal.kernel.log.LogFactoryUtil; +import com.liferay.portal.kernel.portlet.DefaultConfigurationAction; + +public class WebletConfigurationAction extends DefaultConfigurationAction { + private static Log _log = LogFactoryUtil.getLog(WebletConfigurationAction.class); + @Override + public void processAction( + PortletConfig portletConfig, ActionRequest actionRequest, + ActionResponse actionResponse) throws Exception { + + super.processAction(portletConfig, actionRequest, actionResponse); + + PortletPreferences prefs = actionRequest.getPreferences(); + String bootURL = prefs.getValue("bootURL", "true"); + String managerURL = prefs.getValue("managerURL", "true"); + String iamClientId = prefs.getValue("iamClientId", "true"); + + _log.debug("bootURL = " + bootURL + " in PublicWebappConfigurationAction.processAction()."); + _log.debug("managerURL = " + managerURL + " in PublicWebappConfigurationAction.processAction()."); + _log.debug("iamClientId = " + iamClientId + " in PublicWebappConfigurationAction.processAction()."); + } + + @Override + public String render(PortletConfig portletConfig, + RenderRequest renderRequest, RenderResponse renderResponse) + throws Exception { + + return "/html/extappmanager/config.jsp"; + } + +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/weblet/WebletManager.java b/src/main/java/org/gcube/portlets/user/weblet/WebletManager.java new file mode 100644 index 0000000..31dc95b --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/weblet/WebletManager.java @@ -0,0 +1,108 @@ +package org.gcube.portlets.user.weblet; + +import java.io.IOException; +import java.util.Base64; + +import javax.portlet.PortletException; +import javax.portlet.PortletPreferences; +import javax.portlet.RenderRequest; +import javax.portlet.RenderResponse; +import javax.servlet.http.HttpServletRequest; + +import org.gcube.common.portal.PortalContext; +import org.gcube.oidc.rest.JWTToken; +import org.gcube.portal.oidc.lr62.OIDCUmaUtil; + +import com.liferay.portal.kernel.log.LogFactoryUtil; +import com.liferay.portal.kernel.util.GetterUtil; +import com.liferay.portal.kernel.util.StringPool; +import com.liferay.portal.util.PortalUtil; +import com.liferay.util.bridges.mvc.MVCPortlet; + +import okhttp3.*; + +/** + * Portlet implementation class WebletManager + */ +public class WebletManager extends MVCPortlet { + private static com.liferay.portal.kernel.log.Log _log = LogFactoryUtil.getLog(WebletManager.class); + //final String D4S_BOOT_URL = "https://cdn.dev.d4science.org/visuals/d4s-cdn/d4s-boot"; + //final String EXT_APP_MANAGER_URL = "https://cdn.dev.d4science.org/visuals/d4s-vre-manager/ext-app-manager?app=_myextapp"; + + + public static final String D4S_BOOT_ATTR = "d4s-boot-div"; + public static final String EXT_APP_MANAGERATTR = "ext-app-div"; + + + @Override + public void render(RenderRequest renderRequest, RenderResponse renderResponse) throws PortletException, IOException { + + PortletPreferences portletPreferences = renderRequest.getPreferences(); + String D4S_BOOT_URL = GetterUtil.getString(portletPreferences.getValue("bootURL", StringPool.BLANK)); + String WEBLET_MANAGER_URL = GetterUtil.getString(portletPreferences.getValue("managerURL", StringPool.BLANK)); + String IAM_CLIENTID = GetterUtil.getString(portletPreferences.getValue("iamClientId", StringPool.BLANK)); + + String webletForIamClientURL = new StringBuilder(WEBLET_MANAGER_URL).append("?app=").append(IAM_CLIENTID).toString(); + + if (D4S_BOOT_URL.equals(StringPool.BLANK) || WEBLET_MANAGER_URL.equals(StringPool.BLANK) || IAM_CLIENTID.equals(StringPool.BLANK)) { + _log.warn("Missing parameters in config"); + } + else { + JWTToken umaToken = null; + try { + String username = PortalUtil.getUser(renderRequest).getScreenName(); + HttpServletRequest httpReq = PortalUtil.getOriginalServletRequest(PortalUtil.getHttpServletRequest(renderRequest)); + String context = getCurrentContext(renderRequest); + umaToken = OIDCUmaUtil.getUMAToken(httpReq, username, context); + } catch (Exception e) { + e.printStackTrace(); + } + String token = umaToken.getAccessTokenString(); + + + OkHttpClient client = new OkHttpClient(); + Request request = new Request.Builder() + .url(D4S_BOOT_URL) + .addHeader("cache-control", "no-cache") + .addHeader("Authorization", "Bearer " + token) + .build(); + Call call = client.newCall(request); + Response response = call.execute(); + String d4sBootDIV = response.body().string(); + String encodedSd4sBootDIV = Base64.getEncoder().encodeToString(d4sBootDIV.getBytes()); + renderRequest.setAttribute(D4S_BOOT_ATTR, encodedSd4sBootDIV); + request = new Request.Builder() + .url(webletForIamClientURL) + .addHeader("cache-control", "no-cache") + .addHeader("Authorization", "Bearer " + token) + .build(); + call = client.newCall(request); + response = call.execute(); + String extAppDIV = response.body().string(); + String encodedextAppDIV = Base64.getEncoder().encodeToString(extAppDIV.getBytes()); + renderRequest.setAttribute(EXT_APP_MANAGERATTR, encodedextAppDIV); + } + super.render(renderRequest, renderResponse); + } + + public static String getCurrentContext(RenderRequest request) { + long groupId = -1; + try { + groupId = PortalUtil.getScopeGroupId(request); + return getCurrentContext(groupId); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static String getCurrentContext(long groupId) { + try { + PortalContext pContext = PortalContext.getConfiguration(); + return pContext.getCurrentScope(""+groupId); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/src/main/webapp/WEB-INF/liferay-display.xml b/src/main/webapp/WEB-INF/liferay-display.xml index 815be22..a681f2f 100644 --- a/src/main/webapp/WEB-INF/liferay-display.xml +++ b/src/main/webapp/WEB-INF/liferay-display.xml @@ -6,7 +6,7 @@ - + diff --git a/src/main/webapp/WEB-INF/liferay-plugin-package.properties b/src/main/webapp/WEB-INF/liferay-plugin-package.properties index 0bcd300..1497245 100644 --- a/src/main/webapp/WEB-INF/liferay-plugin-package.properties +++ b/src/main/webapp/WEB-INF/liferay-plugin-package.properties @@ -4,6 +4,6 @@ module-incremental-version=4 tags= short-description= change-log= -page-url=http://www.d4science.org +page-url=https://code-repo.d4science.org/gCubeSystem/VREApp-Integration-portlet author=M.Assante licenses=EUPL diff --git a/src/main/webapp/WEB-INF/liferay-portlet.xml b/src/main/webapp/WEB-INF/liferay-portlet.xml index 30e2f6c..670276c 100644 --- a/src/main/webapp/WEB-INF/liferay-portlet.xml +++ b/src/main/webapp/WEB-INF/liferay-portlet.xml @@ -52,8 +52,9 @@ - ext-app-manager + weblet-manager /icon.png + org.gcube.portlets.user.weblet.WebletConfigurationAction false /css/main.css diff --git a/src/main/webapp/WEB-INF/portlet.xml b/src/main/webapp/WEB-INF/portlet.xml index 935b873..3b332c7 100644 --- a/src/main/webapp/WEB-INF/portlet.xml +++ b/src/main/webapp/WEB-INF/portlet.xml @@ -161,14 +161,18 @@ - ext-app-manager - Ext App Manager + weblet-manager + Weblet Manager - org.gcube.portlets.user.ExtAppManager + org.gcube.portlets.user.weblet.WebletManager + + config-template + /html/extappmanager/config.jsp + view-jsp - /html/extappmanager/view.jsp + /html/extappmanager/weblet.jsp 0 @@ -176,8 +180,8 @@ view - Ext App Manager - Ext App Manager + Weblet Manager + Weblet Manager diff --git a/src/main/webapp/html/extappmanager/config.jsp b/src/main/webapp/html/extappmanager/config.jsp new file mode 100644 index 0000000..ddccd51 --- /dev/null +++ b/src/main/webapp/html/extappmanager/config.jsp @@ -0,0 +1,48 @@ +<%@include file="/html/init.jsp"%> + + + +<% +String bootURL_cfg = GetterUtil.getString(portletPreferences.getValue("bootURL", StringPool.BLANK)); +String managerURLcfg = GetterUtil.getString(portletPreferences.getValue("managerURL", StringPool.BLANK)); +String iamClientId_cfg = GetterUtil.getString(portletPreferences.getValue("iamClientId", StringPool.BLANK)); +%> + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/html/extappmanager/view.jsp b/src/main/webapp/html/extappmanager/view.jsp deleted file mode 100644 index 6a082c5..0000000 --- a/src/main/webapp/html/extappmanager/view.jsp +++ /dev/null @@ -1,25 +0,0 @@ -<%@include file="/html/init.jsp"%> - - -<%@ page import="java.util.Base64" %> - -<% - - -String encodedD4sBootDIV = (String) request.getAttribute("d4s-boot-div"); -String encodedExtAppDIV = (String) request.getAttribute("ext-app-div"); - -byte[] decodedBytes = Base64.getDecoder().decode(encodedD4sBootDIV); -String d4sBootDIV = new String(decodedBytes); - -decodedBytes = Base64.getDecoder().decode(encodedExtAppDIV); -String extAppDIV = new String(decodedBytes); - -pageContext.setAttribute("d4sBootDIV", d4sBootDIV); -pageContext.setAttribute("extAppDIV", extAppDIV); - - -%> -${d4sBootDIV} - -
${extAppDIV}
diff --git a/src/main/webapp/html/extappmanager/weblet.jsp b/src/main/webapp/html/extappmanager/weblet.jsp new file mode 100644 index 0000000..880266a --- /dev/null +++ b/src/main/webapp/html/extappmanager/weblet.jsp @@ -0,0 +1,26 @@ +<%@include file="/html/init.jsp"%> + + +<%@ page import="java.util.Base64"%> + +<% +String encodedD4sBootDIV = (String) request.getAttribute("d4s-boot-div"); +String encodedExtAppDIV = (String) request.getAttribute("ext-app-div"); + +if (encodedD4sBootDIV == null || encodedExtAppDIV == null) { + String d4sBootDIV = new String( + "Configuration is missing, please enter boot, manager urls and clientId name in portlet configuration"); +} else { + byte[] decodedBytes = Base64.getDecoder().decode(encodedD4sBootDIV); + String d4sBootDIV = new String(decodedBytes); + + decodedBytes = Base64.getDecoder().decode(encodedExtAppDIV); + String extAppDIV = new String(decodedBytes); + + pageContext.setAttribute("d4sBootDIV", d4sBootDIV); + pageContext.setAttribute("extAppDIV", extAppDIV); +} +%> +${d4sBootDIV} + +
${extAppDIV}