Index: console/frontend/src/main/java/org/hippoecm/frontend/plugins/logout/LogoutLink.java
===================================================================
--- console/frontend/src/main/java/org/hippoecm/frontend/plugins/logout/LogoutLink.java (revision 45371)
+++ console/frontend/src/main/java/org/hippoecm/frontend/plugins/logout/LogoutLink.java (working copy)
@@ -18,10 +18,12 @@
import javax.jcr.Node;
import javax.jcr.RepositoryException;
+import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.protocol.http.WebApplication;
import org.hippoecm.frontend.dialog.DialogWindow;
import org.hippoecm.frontend.plugin.IPluginContext;
import org.hippoecm.frontend.session.UserSession;
@@ -57,6 +59,9 @@
dialogWindow.show(dialog);
} else {
userSession.logout();
+ if (WebApplication.exists()) {
+ throw new RestartResponseException(WebApplication.get().getHomePage());
+ }
}
} catch (RepositoryException e) {
log.error(e.getMessage());
Index: console/frontend/src/main/java/org/hippoecm/frontend/plugins/logout/LogoutDialog.java
===================================================================
--- console/frontend/src/main/java/org/hippoecm/frontend/plugins/logout/LogoutDialog.java (revision 45371)
+++ console/frontend/src/main/java/org/hippoecm/frontend/plugins/logout/LogoutDialog.java (working copy)
@@ -17,9 +17,11 @@
import javax.jcr.RepositoryException;
+import org.apache.wicket.RestartResponseException;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.StringResourceModel;
+import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.util.value.IValueMap;
import org.hippoecm.frontend.dialog.AbstractDialog;
import org.hippoecm.frontend.dialog.DialogConstants;
@@ -66,6 +68,9 @@
log.error("Unable to remove the pending changes upon logout.");
}
userSession.logout();
+ if (WebApplication.exists()) {
+ throw new RestartResponseException(WebApplication.get().getHomePage());
+ }
}
super.onClose();
}
Index: engine/src/main/java/org/hippoecm/frontend/session/PluginUserSession.java
===================================================================
--- engine/src/main/java/org/hippoecm/frontend/session/PluginUserSession.java (revision 45371)
+++ engine/src/main/java/org/hippoecm/frontend/session/PluginUserSession.java (working copy)
@@ -35,7 +35,6 @@
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
-import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.request.Request;
import org.apache.wicket.request.cycle.RequestCycle;
import org.hippoecm.frontend.Home;
@@ -351,9 +350,6 @@
invalidate();
dirty();
- if (WebApplication.exists()) {
- throw new RestartResponseException(WebApplication.get().getHomePage());
- }
}
public Credentials getCredentials() {
Index: config/src/main/resources/cms-static.xml
===================================================================
--- config/src/main/resources/cms-static.xml (revision 45371)
+++ config/src/main/resources/cms-static.xml (working copy)
@@ -414,6 +414,12 @@
header.bar.right
+
+ service.logout
+
+
+ extension.logout
+
frontend:pluginconfig
@@ -443,6 +449,17 @@
+
+
+ frontend:plugin
+
+
+ org.hippoecm.frontend.plugins.cms.root.LogoutPlugin
+
+
+ service.logout
+
+
Index: perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/RootPlugin.java
===================================================================
--- perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/RootPlugin.java (revision 45371)
+++ perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/RootPlugin.java (working copy)
@@ -107,8 +107,6 @@
add(new Label("username", new PropertyModel(this, "username")));
- add(new LogoutLink("logout"));
-
services = new LinkedList();
final IDataProvider provider = new ListDataProvider(services) {
Index: perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/LogoutPlugin.html
===================================================================
--- perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/LogoutPlugin.html (revision 0)
+++ perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/LogoutPlugin.html (revision 0)
@@ -0,0 +1,20 @@
+
+
+
+
+
+
Index: perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/RootPlugin.html
===================================================================
--- perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/RootPlugin.html (revision 45371)
+++ perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/RootPlugin.html (working copy)
@@ -29,9 +29,7 @@
[ user ]
Index: perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/LogoutLink.java
===================================================================
--- perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/LogoutLink.java (revision 45371)
+++ perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/LogoutLink.java (working copy)
@@ -15,19 +15,21 @@
*/
package org.hippoecm.frontend.plugins.cms.root;
+import static org.hippoecm.frontend.util.WebApplicationHelper.HIPPO_AUTO_LOGIN_COOKIE_BASE_NAME;
+
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.protocol.http.WebApplication;
import org.hippoecm.frontend.session.UserSession;
import org.hippoecm.frontend.util.WebApplicationHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import static org.hippoecm.frontend.util.WebApplicationHelper.HIPPO_AUTO_LOGIN_COOKIE_BASE_NAME;
-
public class LogoutLink extends MarkupContainer {
private static final long serialVersionUID = 1L;
@@ -42,24 +44,47 @@
@Override
public void onClick(AjaxRequestTarget target) {
- LogoutLink.this.logout();
+ LogoutLink.this.clearStates();
+ LogoutLink.this.logoutSession();
+ LogoutLink.this.redirectPage();
}
});
}
- protected void logout() {
+ /**
+ * Clear any user states other than user session.
+ */
+ protected void clearStates() {
// Remove the Hippo Auto Login cookie
WebApplicationHelper.clearCookie(WebApplicationHelper.getFullyQualifiedCookieName(HIPPO_AUTO_LOGIN_COOKIE_BASE_NAME));
+ }
+ /**
+ * Log out user session.
+ */
+ protected void logoutSession() {
UserSession userSession = UserSession.get();
+
try {
Session session = userSession.getJcrSession();
+
if (session != null) {
session.save();
}
} catch (RepositoryException e) {
log.error(e.getMessage());
}
+
userSession.logout();
}
+
+ /**
+ * Redirect it to (home)page
+ */
+ protected void redirectPage() {
+ if (WebApplication.exists()) {
+ throw new RestartResponseException(WebApplication.get().getHomePage());
+ }
+ }
+
}
Index: perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/LogoutPlugin.java
===================================================================
--- perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/LogoutPlugin.java (revision 0)
+++ perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/LogoutPlugin.java (revision 0)
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2008-2013 Hippo B.V. (http://www.onehippo.com)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.hippoecm.frontend.plugins.cms.root;
+
+import org.apache.wicket.Component;
+import org.hippoecm.frontend.plugin.IPluginContext;
+import org.hippoecm.frontend.plugin.config.IPluginConfig;
+import org.hippoecm.frontend.service.render.RenderPlugin;
+
+public class LogoutPlugin extends RenderPlugin {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("unused")
+ private String username;
+
+ public LogoutPlugin(IPluginContext context, IPluginConfig config) {
+ super(context, config);
+ add(createLogoutComponent("logout"));
+ }
+
+ protected Component createLogoutComponent(final String componentId) {
+ return new LogoutLink(componentId);
+ }
+}