From ca364579c1a38b3b461234bb7c1e3e93359abb6e Mon Sep 17 00:00:00 2001 From: Massimiliano Assante Date: Fri, 17 Dec 2021 15:59:13 +0100 Subject: [PATCH] ready to release --- .settings/org.eclipse.wst.common.component | 27 ++++-- pom.xml | 5 + .../gcube/portlets/user/ExtAppManager.java | 93 +++++++++++++++++++ src/main/webapp/WEB-INF/liferay-display.xml | 1 + src/main/webapp/WEB-INF/liferay-portlet.xml | 10 ++ src/main/webapp/WEB-INF/portlet.xml | 33 +++++++ src/main/webapp/html/extappmanager/view.jsp | 25 +++++ 7 files changed, 185 insertions(+), 9 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/user/ExtAppManager.java create mode 100644 src/main/webapp/html/extappmanager/view.jsp diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index 2ade11b..b66919d 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -1,45 +1,54 @@ - + + - + + - + + - + + - + + - + + - + + - + + - + + diff --git a/pom.xml b/pom.xml index 5faf847..35f4802 100644 --- a/pom.xml +++ b/pom.xml @@ -124,6 +124,11 @@ spymemcached 2.12.3 + + com.squareup.okhttp3 + okhttp + 4.9.3 + org.gcube.resources.discovery ic-client diff --git a/src/main/java/org/gcube/portlets/user/ExtAppManager.java b/src/main/java/org/gcube/portlets/user/ExtAppManager.java new file mode 100644 index 0000000..b759abb --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/ExtAppManager.java @@ -0,0 +1,93 @@ +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/webapp/WEB-INF/liferay-display.xml b/src/main/webapp/WEB-INF/liferay-display.xml index 2c68721..815be22 100644 --- a/src/main/webapp/WEB-INF/liferay-display.xml +++ b/src/main/webapp/WEB-INF/liferay-display.xml @@ -6,6 +6,7 @@ + diff --git a/src/main/webapp/WEB-INF/liferay-portlet.xml b/src/main/webapp/WEB-INF/liferay-portlet.xml index 7aae31d..30e2f6c 100644 --- a/src/main/webapp/WEB-INF/liferay-portlet.xml +++ b/src/main/webapp/WEB-INF/liferay-portlet.xml @@ -51,6 +51,16 @@ ddas-vre-integration-portlet + + ext-app-manager + /icon.png + false + /css/main.css + + /js/main.js + + ext-app-manager-portlet + administrator Administrator diff --git a/src/main/webapp/WEB-INF/portlet.xml b/src/main/webapp/WEB-INF/portlet.xml index 913c2ef..935b873 100644 --- a/src/main/webapp/WEB-INF/portlet.xml +++ b/src/main/webapp/WEB-INF/portlet.xml @@ -160,4 +160,37 @@ user + + ext-app-manager + Ext App Manager + + org.gcube.portlets.user.ExtAppManager + + + view-jsp + /html/extappmanager/view.jsp + + 0 + + text/html + view + + + Ext App Manager + Ext App Manager + + + + administrator + + + guest + + + power-user + + + user + + \ No newline at end of file diff --git a/src/main/webapp/html/extappmanager/view.jsp b/src/main/webapp/html/extappmanager/view.jsp new file mode 100644 index 0000000..6a082c5 --- /dev/null +++ b/src/main/webapp/html/extappmanager/view.jsp @@ -0,0 +1,25 @@ +<%@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}