diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..3e75f39 --- /dev/null +++ b/.classpath @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..364da1e --- /dev/null +++ b/.project @@ -0,0 +1,59 @@ + + + session-checker + session-checker project + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + org.maven.ide.eclipse.maven2Builder + + + + + com.google.gdt.eclipse.core.webAppProjectValidator + + + + + com.google.gwt.eclipse.core.gwtProjectValidator + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.maven.ide.eclipse.maven2Nature + org.eclipse.jdt.core.javanature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.wst.jsdt.core.jsNature + com.google.gwt.eclipse.core.gwtNature + + diff --git a/.settings/.jsdtscope b/.settings/.jsdtscope new file mode 100644 index 0000000..ba3c245 --- /dev/null +++ b/.settings/.jsdtscope @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/.settings/com.google.appengine.eclipse.core.prefs b/.settings/com.google.appengine.eclipse.core.prefs new file mode 100644 index 0000000..a60576c --- /dev/null +++ b/.settings/com.google.appengine.eclipse.core.prefs @@ -0,0 +1,3 @@ +#Thu Jun 16 10:18:26 CEST 2011 +eclipse.preferences.version=1 +filesCopiedToWebInfLib= diff --git a/.settings/com.google.gdt.eclipse.core.prefs b/.settings/com.google.gdt.eclipse.core.prefs new file mode 100644 index 0000000..0f79acd --- /dev/null +++ b/.settings/com.google.gdt.eclipse.core.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +jarsExcludedFromWebInfLib= +lastWarOutDir=/Users/massi/Documents/workspace/session-checker/target/session-checker-0.1.0-SNAPSHOT +warSrcDir=src/main/webapp +warSrcDirIsOutput=false diff --git a/.settings/com.google.gwt.eclipse.core.prefs b/.settings/com.google.gwt.eclipse.core.prefs new file mode 100644 index 0000000..c803c44 --- /dev/null +++ b/.settings/com.google.gwt.eclipse.core.prefs @@ -0,0 +1,5 @@ +#Thu Jun 16 11:14:17 CEST 2011 +eclipse.preferences.version=1 +entryPointModules= +filesCopiedToWebInfLib=gwt-servlet.jar +gwtCompileSettings=PGd3dC1jb21waWxlLXNldHRpbmdzPjxsb2ctbGV2ZWw+SU5GTzwvbG9nLWxldmVsPjxvdXRwdXQtc3R5bGU+T0JGVVNDQVRFRDwvb3V0cHV0LXN0eWxlPjxleHRyYS1hcmdzPjwhW0NEQVRBWy13YXIgc3JjL21haW4vd2ViYXBwXV0+PC9leHRyYS1hcmdzPjx2bS1hcmdzPjwhW0NEQVRBWy1YbXg1MTJtXV0+PC92bS1hcmdzPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLmNvbXBhbnkuU29tZU1vZHVsZTwvZW50cnktcG9pbnQtbW9kdWxlPjwvZ3d0LWNvbXBpbGUtc2V0dGluZ3M+ diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..29abf99 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,6 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding//src/test/resources=UTF-8 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..443e085 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component new file mode 100644 index 0000000..2236024 --- /dev/null +++ b/.settings/org.eclipse.wst.common.component @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/.settings/org.eclipse.wst.common.project.facet.core.xml b/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 0000000..4045d87 --- /dev/null +++ b/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.container b/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 0000000..3bd5d0a --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/.settings/org.eclipse.wst.validation.prefs b/.settings/org.eclipse.wst.validation.prefs new file mode 100644 index 0000000..04cad8c --- /dev/null +++ b/.settings/org.eclipse.wst.validation.prefs @@ -0,0 +1,2 @@ +disabled=06target +eclipse.preferences.version=1 diff --git a/.settings/org.maven.ide.eclipse.prefs b/.settings/org.maven.ide.eclipse.prefs new file mode 100644 index 0000000..dae95d4 --- /dev/null +++ b/.settings/org.maven.ide.eclipse.prefs @@ -0,0 +1,9 @@ +#Thu Sep 02 10:42:12 CEST 2010 +activeProfiles= +eclipse.preferences.version=1 +fullBuildGoals=process-test-resources +includeModules=false +resolveWorkspaceProjects=true +resourceFilterGoals=process-resources resources\\:testResources +skipCompilerPlugin=true +version=1 diff --git a/SessionCheckerTest-dev.launch b/SessionCheckerTest-dev.launch new file mode 100644 index 0000000..6e97204 --- /dev/null +++ b/SessionCheckerTest-dev.launch @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/SessionCheckerTest-prod.launch b/SessionCheckerTest-prod.launch new file mode 100644 index 0000000..7e830b9 --- /dev/null +++ b/SessionCheckerTest-prod.launch @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/distro/INSTALL b/distro/INSTALL new file mode 100644 index 0000000..139597f --- /dev/null +++ b/distro/INSTALL @@ -0,0 +1,2 @@ + + diff --git a/distro/LICENSE b/distro/LICENSE new file mode 100644 index 0000000..cdb5851 --- /dev/null +++ b/distro/LICENSE @@ -0,0 +1,7 @@ +gCube System - License +------------------------------------------------------------ + +The gCube/gCore software is licensed as Free Open Source software conveying to the EUPL (http://ec.europa.eu/idabc/eupl). +The software and documentation is provided by its authors/distributors "as is" and no expressed or +implied warranty is given for its use, quality or fitness for a particular case. + diff --git a/distro/MAINTAINERS b/distro/MAINTAINERS new file mode 100644 index 0000000..680cebb --- /dev/null +++ b/distro/MAINTAINERS @@ -0,0 +1,6 @@ +Mantainers +------- + +* Massimiliano Assante (massimiliano.assante@isti.cnr.it), CNR Pisa, + Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo". + diff --git a/distro/README b/distro/README new file mode 100644 index 0000000..2637525 --- /dev/null +++ b/distro/README @@ -0,0 +1,35 @@ +The gCube System - Welcome Tour Widget +------------------------------------------------------------ + +This work is partially funded by the European Commission in the +context of the iMarine project (www.i-marine.eu), under the 1st call of FP7 IST priority. + +Authors +------- +Massimiliano Assante +* +Version and Release Date +------------------------ +March 2014 0.1 + + +Description +----------- +gCube Session Checker Widget is a GWT Widget that can be used to automatically check if the session expired. + +Download information +-------------------- +Source code is available from SVN: +https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/session-checker + +Binaries can be downloaded from: +http://software.d4science.research-infrastructures.eu/ + +Documentation +------------- +Documentation is available on-line from the Projects Documentation Wiki: + +Licensing +--------- + +This software is licensed under the terms you may find in the file named "LICENSE" in this directory. diff --git a/distro/changelog.xml b/distro/changelog.xml new file mode 100644 index 0000000..49b33ea --- /dev/null +++ b/distro/changelog.xml @@ -0,0 +1,6 @@ + + + First Release + + diff --git a/distro/descriptor.xml b/distro/descriptor.xml new file mode 100644 index 0000000..c468f13 --- /dev/null +++ b/distro/descriptor.xml @@ -0,0 +1,48 @@ + + servicearchive + + tar.gz + + / + + + ${distroDirectory} + / + true + + README + LICENSE + INSTALL + MAINTAINERS + changelog.xml + + 755 + true + + + target/apidocs + /${artifactId}/doc/api + true + 755 + + + + + ${distroDirectory}/profile.xml + ./ + true + + + target/${build.finalName}.jar + /${artifactId} + + + ${distroDirectory}/svnpath.txt + /${artifactId} + true + + + \ No newline at end of file diff --git a/distro/profile.xml b/distro/profile.xml new file mode 100644 index 0000000..3678a78 --- /dev/null +++ b/distro/profile.xml @@ -0,0 +1,25 @@ + + + + Library + + ${description} + PortletsWigets + ${artifactId} + ${version} + + + ${artifactId} + ${version} + + ${groupId} + ${artifactId} + ${version} + + + ${build.finalName}.jar + + + + + diff --git a/distro/svnpath.txt b/distro/svnpath.txt new file mode 100644 index 0000000..edacb04 --- /dev/null +++ b/distro/svnpath.txt @@ -0,0 +1 @@ +${scm.url} \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..189fdda --- /dev/null +++ b/pom.xml @@ -0,0 +1,185 @@ + + + 4.0.0 + + maven-parent + org.gcube.tools + 1.0.0 + + + + org.gcube.portlets.widgets + session-checker + jar + 0.1.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} + + + + 2.5.1 + distro + + 1.7 + 1.7 + UTF-8 + UTF-8 + + + + + org.gcube.distribution + maven-portal-bom + LATEST + pom + import + + + + + + + com.google.gwt + gwt-user + provided + + + org.gcube.portal + custom-portal-handler + provided + + + org.gcube.portlets.user + gcube-widgets + + + org.gcube.applicationsupportlayer + aslcore + 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/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/CheckSession.java b/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/CheckSession.java new file mode 100644 index 0000000..9e9068e --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/CheckSession.java @@ -0,0 +1,74 @@ +package org.gcube.portlets.widgets.sessionchecker.client; + +import org.gcube.portlets.widgets.sessionchecker.shared.SessionInfoBean; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.Timer; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.rpc.AsyncCallback; + +public class CheckSession { + private final int MILLI_SECONDS = 60 * 1000; //60 seconds + /** + * 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; + + private static CheckSession singleton; + + public static CheckSession getInstance() { + if (singleton == null) + singleton = new CheckSession(); + return singleton; + } + + private CheckSession() { + 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) ) { + Window.alert("Session Expired"); + } + } + } + @Override + public void onFailure(Throwable caught) { } + }); + } + }; + } + + + 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(); + } +} diff --git a/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/SessionChecker.java b/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/SessionChecker.java new file mode 100644 index 0000000..9394d3a --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/SessionChecker.java @@ -0,0 +1,12 @@ +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() { + } +} diff --git a/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/SessionCheckerService.java b/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/SessionCheckerService.java new file mode 100644 index 0000000..9f78a55 --- /dev/null +++ b/src/main/java/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/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/SessionCheckerServiceAsync.java b/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/SessionCheckerServiceAsync.java new file mode 100644 index 0000000..2c049dc --- /dev/null +++ b/src/main/java/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/src/main/java/org/gcube/portlets/widgets/sessionchecker/server/SessionCheckerServiceImpl.java b/src/main/java/org/gcube/portlets/widgets/sessionchecker/server/SessionCheckerServiceImpl.java new file mode 100644 index 0000000..12e555b --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/sessionchecker/server/SessionCheckerServiceImpl.java @@ -0,0 +1,51 @@ +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; + +/** + * The server side implementation of the RPC service. + */ +@SuppressWarnings("serial") +public class SessionCheckerServiceImpl extends RemoteServiceServlet implements SessionCheckerService { + + private static final Logger _log = LoggerFactory.getLogger(SessionCheckerServiceImpl.class); + /** + * the current ASLSession + * @return . + */ + private ASLSession getASLSession() { + System.out.println("\n\n\n*****+ ASL checksession"); + String sessionID = this.getThreadLocalRequest().getSession().getId(); + String user = (String) this.getThreadLocalRequest().getSession().getAttribute(ScopeHelper.USERNAME_ATTRIBUTE); + + System.out.println("ASL checksession ID = " +sessionID); + return SessionManager.getInstance().getASLSession(sessionID, user); + } + + @Override + public SessionInfoBean checkSession() { + ASLSession session = getASLSession(); + String user = session.getUsername(); + String scope = session.getScope(); + _log.trace("Session checked 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()); + } + + +} diff --git a/src/main/java/org/gcube/portlets/widgets/sessionchecker/shared/SessionInfoBean.java b/src/main/java/org/gcube/portlets/widgets/sessionchecker/shared/SessionInfoBean.java new file mode 100644 index 0000000..da28671 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/sessionchecker/shared/SessionInfoBean.java @@ -0,0 +1,44 @@ +package org.gcube.portlets.widgets.sessionchecker.shared; + +import java.io.Serializable; + +@SuppressWarnings("serial") +public class SessionInfoBean implements Serializable { + + private String username; + private String scope; + + + public SessionInfoBean() { + super(); + } + + + public SessionInfoBean(String username, String scope) { + super(); + this.username = username; + this.scope = scope; + } + + + 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; + } + + +} diff --git a/src/main/resources/org/gcube/portlets/widgets/sessionchecker/SessionChecker.gwt.xml b/src/main/resources/org/gcube/portlets/widgets/sessionchecker/SessionChecker.gwt.xml new file mode 100644 index 0000000..2baa634 --- /dev/null +++ b/src/main/resources/org/gcube/portlets/widgets/sessionchecker/SessionChecker.gwt.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/main/webapp/SessionChecker.css b/src/main/webapp/SessionChecker.css new file mode 100644 index 0000000..7aca7ac --- /dev/null +++ b/src/main/webapp/SessionChecker.css @@ -0,0 +1,34 @@ +/** Add css rules here for your application. */ + + +/** Example rules used by the template application (remove for your app) */ +h1 { + font-size: 2em; + font-weight: bold; + color: #777777; + margin: 40px 0px 70px; + text-align: center; +} + +.sendButton { + display: block; + font-size: 16pt; +} + +/** Most GWT widgets already have a style name defined */ +.gwt-DialogBox { + width: 400px; +} + +.dialogVPanel { + margin: 5px; +} + +.serverResponseLabelError { + color: red; +} + +/** Set ids using widget.getElement().setId("idOfElement") */ +#closeButton { + margin: 15px 6px 6px; +} diff --git a/src/main/webapp/SessionChecker.html b/src/main/webapp/SessionChecker.html new file mode 100644 index 0000000..084eeb0 --- /dev/null +++ b/src/main/webapp/SessionChecker.html @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + Web Application Starter Project + + + + + + + + + + + + + + + + + + + + + + +

Web Application Starter Project

+ + + + + + + + + + + + +
Please enter your name:
+ + diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..e125b4f --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,24 @@ + + + + + + + + checkServlet + org.gcube.portlets.widgets.sessionchecker.server.SessionCheckerServiceImpl + + + + checkServlet + /SessionChecker/checksession + + + + + SessionChecker.html + + +