diff --git a/${webappDirectory}/WEB-INF/classes/META-INF/MANIFEST.MF b/${webappDirectory}/WEB-INF/classes/META-INF/MANIFEST.MF new file mode 100644 index 0000000..1819f59 --- /dev/null +++ b/${webappDirectory}/WEB-INF/classes/META-INF/MANIFEST.MF @@ -0,0 +1,13 @@ +Manifest-Version: 1.0 +Build-Jdk-Spec: 15 +Specification-Title: gCube Session Checker Widget +Specification-Version: 1.2 +Implementation-Title: gCube Session Checker Widget +Implementation-Version: 1.2.0-SNAPSHOT +Build-Time: 20230608-121104 +Created-By: Maven Integration for Eclipse +SCM-Branch: +SCM-Revision: +SCM-Revision-URL: https://code-repo.d4science.org/gCubeSystem/session-ch + ecker/commit/${buildNumber} + diff --git a/${webappDirectory}/WEB-INF/classes/META-INF/maven/org.gcube.portlets.widgets/session-checker/pom.properties b/${webappDirectory}/WEB-INF/classes/META-INF/maven/org.gcube.portlets.widgets/session-checker/pom.properties new file mode 100644 index 0000000..32f76ef --- /dev/null +++ b/${webappDirectory}/WEB-INF/classes/META-INF/maven/org.gcube.portlets.widgets/session-checker/pom.properties @@ -0,0 +1,7 @@ +#Generated by Maven Integration for Eclipse +#Thu Jun 08 14:14:48 CEST 2023 +m2e.projectLocation=/Users/massi/workspace/session-checker-widget +m2e.projectName=session-checker-widget +groupId=org.gcube.portlets.widgets +artifactId=session-checker +version=1.2.0-SNAPSHOT diff --git a/${webappDirectory}/WEB-INF/classes/META-INF/maven/org.gcube.portlets.widgets/session-checker/pom.xml b/${webappDirectory}/WEB-INF/classes/META-INF/maven/org.gcube.portlets.widgets/session-checker/pom.xml new file mode 100644 index 0000000..6c22556 --- /dev/null +++ b/${webappDirectory}/WEB-INF/classes/META-INF/maven/org.gcube.portlets.widgets/session-checker/pom.xml @@ -0,0 +1,195 @@ + + + 4.0.0 + + maven-parent + org.gcube.tools + 1.1.0 + + + + org.gcube.portlets.widgets + session-checker + jar + 1.2.0-SNAPSHOT + gCube Session Checker Widget + + gCube Session Checker Widget is a GWT Widget that can be used to automatically check if the session expired. + + + scm:git:https://code-repo.d4science.org/gCubeSystem/${project.artifactId}.git + scm:git:https://code-repo.d4science.org/gCubeSystem/${project.artifactId}.git + https://code-repo.d4science.org/gCubeSystem/${project.artifactId} + + + + 2.7.0 + distro + 6.2.5 + 1.7 + 1.7 + UTF-8 + UTF-8 + + + + + org.gcube.distribution + maven-portal-bom + LATEST + pom + import + + + + + + + com.google.gwt + gwt-user + ${gwtVersion} + provided + + + org.gcube.portal + custom-portal-handler + [2.0.0-SNAPSHOT,3.0.0-SNAPSHOT) + provided + + + org.gcube.portlets.user + gcube-widgets + [2.0.0-SNAPSHOT,3.0.0-SNAPSHOT) + + + + org.gcube.applicationsupportlayer + aslcore + provided + + + com.liferay.portal + portal-service + ${liferay.version} + provided + + + + + ${webappDirectory}/WEB-INF/classes + + + src/main/java + + **/*.* + + + + src/main/resources + + **/*.* + + + + + + + org.codehaus.mojo + gwt-maven-plugin + ${gwtVersion} + + + + org.gcube.portlets.widgets.sessionchecker.client.SessionChecker + + + + + + + + + + SessionChecker.html + ${webappDirectory} + + + + + + org.apache.maven.plugins + maven-war-plugin + 2.1.1 + + + compile + + exploded + + + + + ${webappDirectory} + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.3.2 + + 1.7 + 1.7 + + + + + org.apache.maven.plugins + maven-assembly-plugin + 2.2 + + + ${distroDirectory}/descriptor.xml + + + + + servicearchive + install + + single + + + + + + org.apache.maven.plugins + maven-resources-plugin + 2.5 + + + copy-profile + install + + copy-resources + + + target + + + ${distroDirectory} + true + + profile.xml + + + + + + + + + + + \ No newline at end of file diff --git a/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/SessionChecker.gwt.xml b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/SessionChecker.gwt.xml new file mode 100644 index 0000000..068a33b --- /dev/null +++ b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/SessionChecker.gwt.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/CheckSession.java b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/CheckSession.java new file mode 100644 index 0000000..0a048b3 --- /dev/null +++ b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/CheckSession.java @@ -0,0 +1,222 @@ +package org.gcube.portlets.widgets.sessionchecker.client; + +import java.util.HashMap; + +import org.gcube.portlets.user.gcubewidgets.client.popup.GCubeDialog; +import org.gcube.portlets.widgets.sessionchecker.client.bundle.CheckSessionBundle; +import org.gcube.portlets.widgets.sessionchecker.client.elements.Div; +import org.gcube.portlets.widgets.sessionchecker.client.event.SessionTimeoutEvent; +import org.gcube.portlets.widgets.sessionchecker.shared.SessionInfoBean; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Style.Display; +import com.google.gwt.event.shared.HandlerManager; +import com.google.gwt.user.client.Timer; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.HasAlignment; +import com.google.gwt.user.client.ui.RootPanel; +import com.google.gwt.user.client.ui.VerticalPanel; +@Deprecated +public class CheckSession { + private final int MILLI_SECONDS = 55 * 1000; //(milli)seconds + + //for css and images + private static CheckSessionBundle images = GWT.create(CheckSessionBundle.class); + + static { + CheckSessionBundle.INSTANCE.css().ensureInjected(); + } + /** + * the eventbus where to launch the events + */ + private HandlerManager eventBus = null; + /** + * Create a remote service proxy to talk to the server-side Greeting service. + */ + private final SessionCheckerServiceAsync checkerService = GWT.create(SessionCheckerService.class); + + private String username; + private String scope; + private Timer t; + + //we give the user the possibility to show the dialog or not + private boolean showSessionExpiredDialog = true; + + //needed to mask the page when session id up! + private Div maskDiv = new Div(); + + private static CheckSession singleton; + /** + * use this method if you want to get an event when session expires + * @param eventBus your GWT webapp instance of {@link HandlerManager} + */ + public static CheckSession getInstance(HandlerManager eventBus) { + if (singleton == null) + singleton = new CheckSession(eventBus); + return singleton; + } + /** + * method with no events launching when session expires + */ + public static CheckSession getInstance() { + if (singleton == null) + singleton = new CheckSession(); + return singleton; + } + /** + * use this constructor if you want to get an event when session expires + * @param eventBus GWT webapp instance of {@link HandlerManager} + */ + private CheckSession(HandlerManager eventBus) { + this(); + this.eventBus = eventBus; + } + /** + * constructor with no events launching when session expires + */ + private CheckSession() { + + addMaskDiv2DOM(); + maskDiv.setStyleName("div-mask"); + + //polling timer + t = new Timer() { + @Override + public void run() { + checkerService.checkSession(new AsyncCallback() { + @Override + public void onSuccess(SessionInfoBean result) { + if (result != null) { + + username = result.getUsername(); + scope = result.getScope(); + boolean userValid = ( username != null) ? true : false; + boolean scopeValid = (scope != null) ? true : false; + + if (! (userValid && scopeValid) ) { //if session expired + mask(true); + stopPolling(); + if (showSessionExpiredDialog) { + showLogoutDialog(); + } else { + if (eventBus == null) + throw new NullPointerException("Hey, it seems you chose to handle yourself session expiration " + + "but also not to get informed about it (eventbus is null) what's the point then?"); + } + if (eventBus != null) { + eventBus.fireEvent(new SessionTimeoutEvent(result)); + } + } + else if (result.isDevMode()) { + GWT.log("Stopping polling because i think you're in development mode and not in a real portal"); + stopPolling(); + } + } + else { + GWT.log("result null"); + stopPolling(); + } + } + @Override + public void onFailure(Throwable caught) { + mask(true); + stopPolling(); + showLogoutDialog(); + } + }); + } + }; + } + + private void addMaskDiv2DOM() { + RootPanel.get().insert(maskDiv, 0); + } + /** + * set visible the masking div setting/unsetting css display property + * @param mask + */ + private void mask(boolean mask) { + GWT.log("Masking"); + if (mask) + maskDiv.getElement().getStyle().setDisplay(Display.BLOCK); + else + maskDiv.getElement().getStyle().setDisplay(Display.NONE); + } + /** + * shows the logout dialog + */ + public static void showLogoutDialog() { + showLogoutDialog(null); + } + + /** + * shows the logout dialog with redirection appended with parametersMap + * @param paramsMap a map containing the attrs and related values of what you want after the ? + * e.g. aUrl?name=foo&lastname=fie + */ + public static void showLogoutDialog(HashMap paramsMap) { + String href = "javascript:location.reload();"; + + String params = "?"; + if (! (paramsMap == null || paramsMap.isEmpty()) ) { + for (String attr : paramsMap.keySet()) { + params += attr+"="+paramsMap.get(attr)+"&"; + } + + href = Window.Location.getHref(); + if (Window.Location.getHref().contains("?")) + href = href.substring(0, href.indexOf("?")); + + href += params; + } + + GCubeDialog dlg = new GCubeDialog(); + dlg.setText("Your Session Expired!"); + + VerticalPanel topPanel = new VerticalPanel(); + topPanel.setPixelSize(420, 290); + + topPanel.setHorizontalAlignment(HasAlignment.ALIGN_CENTER); + + HTML toShow = new HTML("
" + + "" + + "
" + + "Please try reload this page or logout
"); + + + topPanel.add(toShow); + dlg.add(topPanel); + dlg.center(); + dlg.show(); + } + + + public String getUsername() { + return username; + } + + public String getScope() { + return scope; + } + /** + * use to start checking if the session expired + */ + public void startPolling() { + t.scheduleRepeating(MILLI_SECONDS); + } + /** + * use to stop checking if the session expired + */ + public void stopPolling() { + t.cancel(); + } + + public boolean isShowSessionExpiredDialog() { + return showSessionExpiredDialog; + } + public void setShowSessionExpiredDialog(boolean showSessionExpiredDialog) { + this.showSessionExpiredDialog = showSessionExpiredDialog; + } +} diff --git a/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/SessionChecker.java b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/SessionChecker.java new file mode 100644 index 0000000..16c2f73 --- /dev/null +++ b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/SessionChecker.java @@ -0,0 +1,13 @@ +package org.gcube.portlets.widgets.sessionchecker.client; + +import com.google.gwt.core.client.EntryPoint; + +/** + * Entry point classes define onModuleLoad(). + */ +public class SessionChecker implements EntryPoint { + + public void onModuleLoad() { + //CheckSession.getInstance().startPolling(); + } +} diff --git a/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/SessionCheckerService.java b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/SessionCheckerService.java new file mode 100644 index 0000000..9f78a55 --- /dev/null +++ b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/SessionCheckerService.java @@ -0,0 +1,14 @@ +package org.gcube.portlets.widgets.sessionchecker.client; + +import org.gcube.portlets.widgets.sessionchecker.shared.SessionInfoBean; + +import com.google.gwt.user.client.rpc.RemoteService; +import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; + +/** + * The client side stub for the RPC service. + */ +@RemoteServiceRelativePath("checksession") +public interface SessionCheckerService extends RemoteService { + SessionInfoBean checkSession(); +} diff --git a/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/SessionCheckerServiceAsync.java b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/SessionCheckerServiceAsync.java new file mode 100644 index 0000000..2c049dc --- /dev/null +++ b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/SessionCheckerServiceAsync.java @@ -0,0 +1,11 @@ +package org.gcube.portlets.widgets.sessionchecker.client; + +import org.gcube.portlets.widgets.sessionchecker.shared.SessionInfoBean; + +import com.google.gwt.user.client.rpc.AsyncCallback; + +public interface SessionCheckerServiceAsync { + + void checkSession(AsyncCallback callback); + +} diff --git a/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/bundle/CheckSession.css b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/bundle/CheckSession.css new file mode 100644 index 0000000..58746ee --- /dev/null +++ b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/bundle/CheckSession.css @@ -0,0 +1,11 @@ +@external div-mask; + +.div-mask { + position: fixed; + width: 100%; + height: 100%; + background-color: rgba(0,0,0,.2); + top: 0; + left: 0; + display: none; +} \ No newline at end of file diff --git a/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/bundle/CheckSessionBundle.java b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/bundle/CheckSessionBundle.java new file mode 100644 index 0000000..86603b8 --- /dev/null +++ b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/bundle/CheckSessionBundle.java @@ -0,0 +1,17 @@ +package org.gcube.portlets.widgets.sessionchecker.client.bundle; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.CssResource; +import com.google.gwt.resources.client.ImageResource; + +public interface CheckSessionBundle extends ClientBundle { + + public static final CheckSessionBundle INSTANCE = GWT.create(CheckSessionBundle.class); + + @Source("CheckSession.css") + public CssResource css(); + + @Source("session_expired.jpg") + ImageResource expired(); +} diff --git a/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/bundle/session_expired.jpg b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/bundle/session_expired.jpg new file mode 100644 index 0000000..5b66306 Binary files /dev/null and b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/bundle/session_expired.jpg differ diff --git a/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/elements/Div.java b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/elements/Div.java new file mode 100644 index 0000000..04eab23 --- /dev/null +++ b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/elements/Div.java @@ -0,0 +1,27 @@ +package org.gcube.portlets.widgets.sessionchecker.client.elements; + +import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.HasText; + +/** + * + * @author Massimiliano Assante, ISTI-CNR + * @version 0.1 Sep 2012 + * + */ +public class Div extends HTML implements HasText { + + public Div() { + super(DOM.createElement("div")); + } + + public Div(String text) { + this(); + setText(text); + } + + public void setAttribute(String name, String value) { + super.getElement().setAttribute(name, value); + } +} diff --git a/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/event/SessionTimeoutEvent.java b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/event/SessionTimeoutEvent.java new file mode 100644 index 0000000..1a880d1 --- /dev/null +++ b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/event/SessionTimeoutEvent.java @@ -0,0 +1,31 @@ +package org.gcube.portlets.widgets.sessionchecker.client.event; + +import org.gcube.portlets.widgets.sessionchecker.shared.SessionInfoBean; + +import com.google.gwt.event.shared.GwtEvent; + + + +public class SessionTimeoutEvent extends GwtEvent { + public static Type TYPE = new Type(); + + private SessionInfoBean sessionInfo; + + public SessionTimeoutEvent(SessionInfoBean sessionInfo) { + this.sessionInfo = sessionInfo; + } + + public SessionInfoBean getSessionInfo() { + return sessionInfo; + } + + @Override + public Type getAssociatedType() { + return TYPE; + } + + @Override + protected void dispatch(SessionTimoutEventHandler handler) { + handler.onSessionExpiration(this); + } +} diff --git a/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/event/SessionTimoutEventHandler.java b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/event/SessionTimoutEventHandler.java new file mode 100644 index 0000000..46c0fce --- /dev/null +++ b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/client/event/SessionTimoutEventHandler.java @@ -0,0 +1,7 @@ +package org.gcube.portlets.widgets.sessionchecker.client.event; + +import com.google.gwt.event.shared.EventHandler; + +public interface SessionTimoutEventHandler extends EventHandler { + void onSessionExpiration(SessionTimeoutEvent event); +} diff --git a/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/server/SessionCheckerServiceImpl.java b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/server/SessionCheckerServiceImpl.java new file mode 100644 index 0000000..986ee02 --- /dev/null +++ b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/server/SessionCheckerServiceImpl.java @@ -0,0 +1,100 @@ +package org.gcube.portlets.widgets.sessionchecker.server; + +import java.util.Date; + +import org.gcube.application.framework.core.session.ASLSession; +import org.gcube.application.framework.core.session.SessionManager; +import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; +import org.gcube.portlets.widgets.sessionchecker.client.SessionCheckerService; +import org.gcube.portlets.widgets.sessionchecker.shared.SessionInfoBean; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.gwt.user.server.rpc.RemoteServiceServlet; +import com.liferay.portal.service.UserLocalServiceUtil; + +/** + * The server side implementation of the RPC service. + */ +@SuppressWarnings("serial") +@Deprecated +public class SessionCheckerServiceImpl extends RemoteServiceServlet implements SessionCheckerService { + + private static final Logger _log = LoggerFactory.getLogger(SessionCheckerServiceImpl.class); + + + /** + * the current ASLSession + * @return . + */ + private ASLSession getASLSession() { + String sessionID = this.getThreadLocalRequest().getSession().getId(); + String user = (String) this.getThreadLocalRequest().getSession().getAttribute(ScopeHelper.USERNAME_ATTRIBUTE); + SessionManager manager = SessionManager.getInstance(); + ASLSession toReturn = manager.getASLSession(sessionID, user); + return toReturn; + } + + @Override + public SessionInfoBean checkSession() { + SessionManager manager = null; + try { + manager = SessionManager.getInstance(); + } + catch (NullPointerException e) { + _log.error("SessionManager#getInstance null returning session expired"); + return new SessionInfoBean("",""); //tells session expired + } + if (manager == null) { + _log.warn("Liferay Portal Detected but session Expired"); + return new SessionInfoBean("",""); //tells session expired + } + + + ASLSession session = null; + try { + session = getASLSession(); + if (session == null || session.getUsername() == null) { + UserLocalServiceUtil.getService(); + _log.warn("Liferay Portal Detected but session Expired"); + return new SessionInfoBean(null,null); //tells session expired + } + } + catch (Exception e) { + if (isWithinPortal()) { + _log.warn("Liferay Portal Detected but session Expired"); + return new SessionInfoBean(null,null); //tells session expired + } + else { + _log.warn("Stopping session polling as i think you are in development mode"); + return new SessionInfoBean("","", true); //tells that you are in development mode + } + } + String user = session.getUsername(); + String scope = session.getScope(); + //else + _log.trace("Session check OK for " + user + " at " + new Date()); + if (user == null || user.compareTo("") == 0) { + _log.warn("User is null at " + new Date()); + } + if (scope == null || scope.compareTo("") == 0) { + _log.warn("Scope is null at " + new Date()); + } + return new SessionInfoBean(session.getUsername(), session.getScope()); + } + + /** + * + * @return true if you're running into the portal, false if in development + */ + private boolean isWithinPortal() { + try { + UserLocalServiceUtil.getService(); + return true; + } + catch (com.liferay.portal.kernel.bean.BeanLocatorException ex) { + _log.trace("Development Mode ON"); + return false; + } + } +} diff --git a/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/shared/SessionInfoBean.java b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/shared/SessionInfoBean.java new file mode 100644 index 0000000..5bccb7c --- /dev/null +++ b/${webappDirectory}/WEB-INF/classes/org/gcube/portlets/widgets/sessionchecker/shared/SessionInfoBean.java @@ -0,0 +1,63 @@ +package org.gcube.portlets.widgets.sessionchecker.shared; + +import java.io.Serializable; + +@SuppressWarnings("serial") +public class SessionInfoBean implements Serializable { + + private String username; + private String scope; + private boolean isDevMode; + + public SessionInfoBean() { + super(); + } + + + public SessionInfoBean(String username, String scope) { + super(); + this.username = username; + this.scope = scope; + } + + + + public SessionInfoBean(String username, String scope, boolean isDevMode) { + super(); + this.username = username; + this.scope = scope; + this.isDevMode = isDevMode; + } + + + public String getUsername() { + return username; + } + + + public void setUsername(String username) { + this.username = username; + } + + + public String getScope() { + return scope; + } + + + public void setScope(String scope) { + this.scope = scope; + } + + + public boolean isDevMode() { + return isDevMode; + } + + + public void setDevMode(boolean isDevMode) { + this.isDevMode = isDevMode; + } + + +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b83d222 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..7a58138 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,13 @@ + +# Changelog for session checker (deprecated) + +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] - 2023-06-12 + +- ported to git + +## [v1.0.0] - 2015-07-02 + +First release diff --git a/FUNDING.md b/FUNDING.md new file mode 100644 index 0000000..6fa9eac --- /dev/null +++ b/FUNDING.md @@ -0,0 +1,26 @@ +# Acknowledgments + +The projects leading to this software have received funding from a series of European Union programmes including: + +- the Sixth Framework Programme for Research and Technological Development + - [DILIGENT](https://cordis.europa.eu/project/id/004260) (grant no. 004260). +- the Seventh Framework Programme for research, technological development and demonstration + - [D4Science](https://cordis.europa.eu/project/id/212488) (grant no. 212488); + - [D4Science-II](https://cordis.europa.eu/project/id/239019) (grant no.239019); + - [ENVRI](https://cordis.europa.eu/project/id/283465) (grant no. 283465); + - [iMarine](https://cordis.europa.eu/project/id/283644) (grant no. 283644); + - [EUBrazilOpenBio](https://cordis.europa.eu/project/id/288754) (grant no. 288754). +- the H2020 research and innovation programme + - [SoBigData](https://cordis.europa.eu/project/id/654024) (grant no. 654024); + - [PARTHENOS](https://cordis.europa.eu/project/id/654119) (grant no. 654119); + - [EGI-Engage](https://cordis.europa.eu/project/id/654142) (grant no. 654142); + - [ENVRI PLUS](https://cordis.europa.eu/project/id/654182) (grant no. 654182); + - [BlueBRIDGE](https://cordis.europa.eu/project/id/675680) (grant no. 675680); + - [PerformFISH](https://cordis.europa.eu/project/id/727610) (grant no. 727610); + - [AGINFRA PLUS](https://cordis.europa.eu/project/id/731001) (grant no. 731001); + - [DESIRA](https://cordis.europa.eu/project/id/818194) (grant no. 818194); + - [ARIADNEplus](https://cordis.europa.eu/project/id/823914) (grant no. 823914); + - [RISIS 2](https://cordis.europa.eu/project/id/824091) (grant no. 824091); + - [EOSC-Pillar](https://cordis.europa.eu/project/id/857650) (grant no. 857650); + - [Blue Cloud](https://cordis.europa.eu/project/id/862409) (grant no. 862409); + - [SoBigData-PlusPlus](https://cordis.europa.eu/project/id/871042) (grant no. 871042); \ No newline at end of file diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..c25566d --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,311 @@ +#European Union Public Licence V.1.1 + +##*EUPL © the European Community 2007* + + +This **European Union Public Licence** (the **“EUPL”**) applies to the Work or Software +(as defined below) which is provided under the terms of this Licence. Any use of +the Work, other than as authorised under this Licence is prohibited (to the +extent such use is covered by a right of the copyright holder of the Work). + +The Original Work is provided under the terms of this Licence when the Licensor +(as defined below) has placed the following notice immediately following the +copyright notice for the Original Work: + +**Licensed under the EUPL V.1.1** + +or has expressed by any other mean his willingness to license under the EUPL. + + + +##1. Definitions + +In this Licence, the following terms have the following meaning: + +- The Licence: this Licence. + +- The Original Work or the Software: the software distributed and/or + communicated by the Licensor under this Licence, available as Source Code and + also as Executable Code as the case may be. + +- Derivative Works: the works or software that could be created by the Licensee, + based upon the Original Work or modifications thereof. This Licence does not + define the extent of modification or dependence on the Original Work required + in order to classify a work as a Derivative Work; this extent is determined by + copyright law applicable in the country mentioned in Article 15. + +- The Work: the Original Work and/or its Derivative Works. + +- The Source Code: the human-readable form of the Work which is the most + convenient for people to study and modify. + +- The Executable Code: any code which has generally been compiled and which is + meant to be interpreted by a computer as a program. + +- The Licensor: the natural or legal person that distributes and/or communicates + the Work under the Licence. + +- Contributor(s): any natural or legal person who modifies the Work under the + Licence, or otherwise contributes to the creation of a Derivative Work. + +- The Licensee or “You”: any natural or legal person who makes any usage of the + Software under the terms of the Licence. + +- Distribution and/or Communication: any act of selling, giving, lending, + renting, distributing, communicating, transmitting, or otherwise making + available, on-line or off-line, copies of the Work or providing access to its + essential functionalities at the disposal of any other natural or legal + person. + + + +##2. Scope of the rights granted by the Licence + +The Licensor hereby grants You a world-wide, royalty-free, non-exclusive, +sub-licensable licence to do the following, for the duration of copyright vested +in the Original Work: + +- use the Work in any circumstance and for all usage, reproduce the Work, modify +- the Original Work, and make Derivative Works based upon the Work, communicate +- to the public, including the right to make available or display the Work or +- copies thereof to the public and perform publicly, as the case may be, the +- Work, distribute the Work or copies thereof, lend and rent the Work or copies +- thereof, sub-license rights in the Work or copies thereof. + +Those rights can be exercised on any media, supports and formats, whether now +known or later invented, as far as the applicable law permits so. + +In the countries where moral rights apply, the Licensor waives his right to +exercise his moral right to the extent allowed by law in order to make effective +the licence of the economic rights here above listed. + +The Licensor grants to the Licensee royalty-free, non exclusive usage rights to +any patents held by the Licensor, to the extent necessary to make use of the +rights granted on the Work under this Licence. + + + +##3. Communication of the Source Code + +The Licensor may provide the Work either in its Source Code form, or as +Executable Code. If the Work is provided as Executable Code, the Licensor +provides in addition a machine-readable copy of the Source Code of the Work +along with each copy of the Work that the Licensor distributes or indicates, in +a notice following the copyright notice attached to the Work, a repository where +the Source Code is easily and freely accessible for as long as the Licensor +continues to distribute and/or communicate the Work. + + + +##4. Limitations on copyright + +Nothing in this Licence is intended to deprive the Licensee of the benefits from +any exception or limitation to the exclusive rights of the rights owners in the +Original Work or Software, of the exhaustion of those rights or of other +applicable limitations thereto. + + + +##5. Obligations of the Licensee + +The grant of the rights mentioned above is subject to some restrictions and +obligations imposed on the Licensee. Those obligations are the following: + +Attribution right: the Licensee shall keep intact all copyright, patent or +trademarks notices and all notices that refer to the Licence and to the +disclaimer of warranties. The Licensee must include a copy of such notices and a +copy of the Licence with every copy of the Work he/she distributes and/or +communicates. The Licensee must cause any Derivative Work to carry prominent +notices stating that the Work has been modified and the date of modification. + +Copyleft clause: If the Licensee distributes and/or communicates copies of the +Original Works or Derivative Works based upon the Original Work, this +Distribution and/or Communication will be done under the terms of this Licence +or of a later version of this Licence unless the Original Work is expressly +distributed only under this version of the Licence. The Licensee (becoming +Licensor) cannot offer or impose any additional terms or conditions on the Work +or Derivative Work that alter or restrict the terms of the Licence. + +Compatibility clause: If the Licensee Distributes and/or Communicates Derivative +Works or copies thereof based upon both the Original Work and another work +licensed under a Compatible Licence, this Distribution and/or Communication can +be done under the terms of this Compatible Licence. For the sake of this clause, +“Compatible Licence” refers to the licences listed in the appendix attached to +this Licence. Should the Licensee’s obligations under the Compatible Licence +conflict with his/her obligations under this Licence, the obligations of the +Compatible Licence shall prevail. + +Provision of Source Code: When distributing and/or communicating copies of the +Work, the Licensee will provide a machine-readable copy of the Source Code or +indicate a repository where this Source will be easily and freely available for +as long as the Licensee continues to distribute and/or communicate the Work. + +Legal Protection: This Licence does not grant permission to use the trade names, +trademarks, service marks, or names of the Licensor, except as required for +reasonable and customary use in describing the origin of the Work and +reproducing the content of the copyright notice. + + + +##6. Chain of Authorship + +The original Licensor warrants that the copyright in the Original Work granted +hereunder is owned by him/her or licensed to him/her and that he/she has the +power and authority to grant the Licence. + +Each Contributor warrants that the copyright in the modifications he/she brings +to the Work are owned by him/her or licensed to him/her and that he/she has the +power and authority to grant the Licence. + +Each time You accept the Licence, the original Licensor and subsequent +Contributors grant You a licence to their contributions to the Work, under the +terms of this Licence. + + + +##7. Disclaimer of Warranty + +The Work is a work in progress, which is continuously improved by numerous +contributors. It is not a finished work and may therefore contain defects or +“bugs” inherent to this type of software development. + +For the above reason, the Work is provided under the Licence on an “as is” basis +and without warranties of any kind concerning the Work, including without +limitation merchantability, fitness for a particular purpose, absence of defects +or errors, accuracy, non-infringement of intellectual property rights other than +copyright as stated in Article 6 of this Licence. + +This disclaimer of warranty is an essential part of the Licence and a condition +for the grant of any rights to the Work. + + + +##8. Disclaimer of Liability + +Except in the cases of wilful misconduct or damages directly caused to natural +persons, the Licensor will in no event be liable for any direct or indirect, +material or moral, damages of any kind, arising out of the Licence or of the use +of the Work, including without limitation, damages for loss of goodwill, work +stoppage, computer failure or malfunction, loss of data or any commercial +damage, even if the Licensor has been advised of the possibility of such +damage. However, the Licensor will be liable under statutory product liability +laws as far such laws apply to the Work. + + + +##9. Additional agreements + +While distributing the Original Work or Derivative Works, You may choose to +conclude an additional agreement to offer, and charge a fee for, acceptance of +support, warranty, indemnity, or other liability obligations and/or services +consistent with this Licence. However, in accepting such obligations, You may +act only on your own behalf and on your sole responsibility, not on behalf of +the original Licensor or any other Contributor, and only if You agree to +indemnify, defend, and hold each Contributor harmless for any liability incurred +by, or claims asserted against such Contributor by the fact You have accepted +any such warranty or additional liability. + + + +##10. Acceptance of the Licence + +The provisions of this Licence can be accepted by clicking on an icon “I agree” +placed under the bottom of a window displaying the text of this Licence or by +affirming consent in any other similar way, in accordance with the rules of +applicable law. Clicking on that icon indicates your clear and irrevocable +acceptance of this Licence and all of its terms and conditions. + +Similarly, you irrevocably accept this Licence and all of its terms and +conditions by exercising any rights granted to You by Article 2 of this Licence, +such as the use of the Work, the creation by You of a Derivative Work or the +Distribution and/or Communication by You of the Work or copies thereof. + + + +##11. Information to the public + +In case of any Distribution and/or Communication of the Work by means of +electronic communication by You (for example, by offering to download the Work +from a remote location) the distribution channel or media (for example, a +website) must at least provide to the public the information requested by the +applicable law regarding the Licensor, the Licence and the way it may be +accessible, concluded, stored and reproduced by the Licensee. + + + +##12. Termination of the Licence + +The Licence and the rights granted hereunder will terminate automatically upon +any breach by the Licensee of the terms of the Licence. + +Such a termination will not terminate the licences of any person who has +received the Work from the Licensee under the Licence, provided such persons +remain in full compliance with the Licence. + + + +##13. Miscellaneous + +Without prejudice of Article 9 above, the Licence represents the complete +agreement between the Parties as to the Work licensed hereunder. + +If any provision of the Licence is invalid or unenforceable under applicable +law, this will not affect the validity or enforceability of the Licence as a +whole. Such provision will be construed and/or reformed so as necessary to make +it valid and enforceable. + +The European Commission may publish other linguistic versions and/or new +versions of this Licence, so far this is required and reasonable, without +reducing the scope of the rights granted by the Licence. New versions of the +Licence will be published with a unique version number. + +All linguistic versions of this Licence, approved by the European Commission, +have identical value. Parties can take advantage of the linguistic version of +their choice. + + + +##14. Jurisdiction + +Any litigation resulting from the interpretation of this License, arising +between the European Commission, as a Licensor, and any Licensee, will be +subject to the jurisdiction of the Court of Justice of the European Communities, +as laid down in article 238 of the Treaty establishing the European Community. + +Any litigation arising between Parties, other than the European Commission, and +resulting from the interpretation of this License, will be subject to the +exclusive jurisdiction of the competent court where the Licensor resides or +conducts its primary business. + + + +##15. Applicable Law + +This Licence shall be governed by the law of the European Union country where +the Licensor resides or has his registered office. + +This licence shall be governed by the Belgian law if: + +- a litigation arises between the European Commission, as a Licensor, and any +- Licensee; the Licensor, other than the European Commission, has no residence +- or registered office inside a European Union country. + + +--- + + +##Appendix + + +**“Compatible Licences”** according to article 5 EUPL are: + + +- GNU General Public License (GNU GPL) v. 2 + +- Open Software License (OSL) v. 2.1, v. 3.0 + +- Common Public License v. 1.0 + +- Eclipse Public License v. 1.0 + +- Cecill v. 2.0 \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..2d5cbd8 --- /dev/null +++ b/README.md @@ -0,0 +1,42 @@ +# gCube System - Session Checker Widget + +gCube Session Checker Widget is a GWT Widget that can be used to automatically check if the session expired. + + +## Structure of the project + +* The source code is present in the src folder. + +## Built With + +* [OpenJDK](https://openjdk.java.net/) - The JDK used +* [Maven](https://maven.apache.org/) - Dependency Management + +## Documentation + +* Use of this service is described in the [Wiki](https://wiki.gcube-system.org/gcube/User%27s_Guide). + +## Change log + +See [Releases](https://code-repo.d4science.org/gCubeSystem/invite-firends-widget/releases). + +## Authors + +* **Massimiliano Assante** ([ORCID](https://orcid.org/0000-0002-3761-1492)) - [ISTI-CNR Infrascience Group](https://www.isti.cnr.it/People/M.Assante) + +## Maintainers + +* **Massimiliano Assante** ([ORCID](https://orcid.org/0000-0002-3761-1492)) - [ISTI-CNR Infrascience Group](https://www.isti.cnr.it/People/M.Assante) + +## License + +This project is licensed under the EUPL V.1.1 License - see the [LICENSE.md](LICENSE.md) file for details. + + +## About the gCube Framework +This software is part of the [gCubeFramework](https://www.gcube-system.org/ "gCubeFramework"): an +open-source software toolkit used for building and operating Hybrid Data +Infrastructures enabling the dynamic deployment of Virtual Research Environments +by favouring the realisation of reuse oriented policies. + +The projects leading to this software have received funding from a series of European Union programmes see [FUNDING.md](FUNDING.md) \ No newline at end of file diff --git a/SessionCheckerTest-dev.launch b/SessionCheckerTest-dev.launch deleted file mode 100644 index 6e97204..0000000 --- a/SessionCheckerTest-dev.launch +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/SessionCheckerTest-prod.launch b/SessionCheckerTest-prod.launch deleted file mode 100644 index 7e830b9..0000000 --- a/SessionCheckerTest-prod.launch +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/pom.xml b/pom.xml index 6c0a80a..bccd0f6 100644 --- a/pom.xml +++ b/pom.xml @@ -5,22 +5,22 @@ maven-parent org.gcube.tools - 1.0.0 + 1.1.0 org.gcube.portlets.widgets - session-checker + session-checker-widget jar - 1.1.0-SNAPSHOT + 1.2.0-SNAPSHOT gCube Session Checker Widget gCube Session Checker Widget is a GWT Widget that can be used to automatically check if the session expired. - scm:svn:http://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/${project.artifactId} - scm:https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/${project.artifactId} - http://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/${project.artifactId} + scm:git:https://code-repo.d4science.org/gCubeSystem/${project.artifactId}.git + scm:git:https://code-repo.d4science.org/gCubeSystem/${project.artifactId}.git + https://code-repo.d4science.org/gCubeSystem/${project.artifactId} @@ -37,7 +37,7 @@ org.gcube.distribution maven-portal-bom - LATEST + 3.6.4 pom import @@ -54,15 +54,12 @@ org.gcube.portal custom-portal-handler - [2.0.0-SNAPSHOT,3.0.0-SNAPSHOT) provided org.gcube.portlets.user gcube-widgets - [2.0.0-SNAPSHOT,3.0.0-SNAPSHOT) - org.gcube.applicationsupportlayer aslcore @@ -71,24 +68,22 @@ com.liferay.portal portal-service - ${liferay.version} provided - - ${webappDirectory}/WEB-INF/classes src/main/java - **/*.* + **/*.java + **/*.gwt.xml src/main/resources - **/*.* + **/* @@ -98,97 +93,52 @@ org.codehaus.mojo gwt-maven-plugin ${gwtVersion} + + + + com.google.gwt + gwt-user + ${gwtVersion} + + + com.google.gwt + gwt-dev + ${gwtVersion} + + + - - org.gcube.portlets.widgets.sessionchecker.client.SessionChecker - + prepare-package - - + resources + compile - SessionChecker.html - ${webappDirectory} - - org.apache.maven.plugins - maven-war-plugin - 2.1.1 + maven-javadoc-plugin + + -Xdoclint:none + -Xdoclint:none + + 3.1.0 - compile - - exploded - - - - - ${webappDirectory} - - - - org.apache.maven.plugins - maven-compiler-plugin - 2.3.2 - - 1.7 - 1.7 - - - - - org.apache.maven.plugins - maven-assembly-plugin - 2.2 - - - ${distroDirectory}/descriptor.xml - - - - - servicearchive + generate-doc install - single + jar - - org.apache.maven.plugins - maven-resources-plugin - 2.5 - - - copy-profile - install - - copy-resources - - - target - - - ${distroDirectory} - true - - profile.xml - - - - - - -