/** * (C) Copyright 2013 Jabylon (http://www.jabylon.org) and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ /** * */ package org.jabylon.rest.ui.navbar; import java.io.Serializable; import org.apache.wicket.MarkupContainer; import org.apache.wicket.Session; import org.apache.wicket.authroles.authentication.AuthenticatedWebSession; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.link.StatelessLink; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.StringResourceModel; import org.apache.wicket.request.Url; import org.apache.wicket.request.cycle.RequestCycle; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.jabylon.rest.ui.security.CDOAuthenticatedSession; import org.jabylon.rest.ui.security.LoginPage; import org.jabylon.rest.ui.wicket.BasicPanel; import org.jabylon.rest.ui.wicket.PanelFactory; import org.jabylon.rest.ui.wicket.config.SettingsPage; import org.jabylon.rest.ui.wicket.pages.WelcomePage; import org.jabylon.users.User; /** * @author Johannes Utzig (jutzig.dev@googlemail.com) * */ public class LoginPanel<T> extends BasicPanel<T> { private static final String LOGOUT_KEY = "logout.link.title"; static final String LOGIN_KEY = "login.link.title"; private static final long serialVersionUID = 1L; private BookmarkablePageLink<String> userLink; public LoginPanel(String id, IModel<T> object, PageParameters parameters) { super(id, object, parameters); } @Override protected void onInitialize() { super.onInitialize(); String username = "Anonymous"; Session theSession = getSession(); PageParameters userLinkParams = new PageParameters(); userLink = new BookmarkablePageLink<String>("user-link", SettingsPage.class, userLinkParams); if (theSession instanceof CDOAuthenticatedSession) { final CDOAuthenticatedSession session = (CDOAuthenticatedSession) theSession; User user = session.getUser(); if (user != null) { LogoutLink link = new LogoutLink("link"); link.add(new Label("link-label", new StringResourceModel(LOGOUT_KEY, this,null))); add(link); userLinkParams.set(0, "security"); userLinkParams.set(1, "users"); userLinkParams.set(2, user.getName()); username = user.getDisplayName(); if(username==null) username = user.getName(); userLink.setVisible(true); } else { Url returnUrl = RequestCycle.get().mapUrlFor(getPage().getClass(), getPage().getPageParameters()); BookmarkablePageLink<String> link = new BookmarkablePageLink<String>("link", LoginPage.class, new PageParameters().set("target", returnUrl)); link.add(new Label("link-label", new StringResourceModel(LOGIN_KEY, this,null))); add(link); userLink.setVisible(false); } } userLink.setBody(Model.of(username)); add(userLink); } public static class LoginPanelFactory implements PanelFactory<Object>, Serializable { private static final long serialVersionUID = 1L; @Override public Panel createPanel(PageParameters params, IModel<Object> input, String id) { return new LoginPanel<Object>(id, input, params); } } } class LogoutLink extends StatelessLink<String> { /** * */ private static final long serialVersionUID = -8192886483968891414L; public LogoutLink(String id) { super(id); } @Override public void onClick() { Session theSession = getSession(); if (theSession instanceof AuthenticatedWebSession) { AuthenticatedWebSession session = (AuthenticatedWebSession) theSession; session.invalidate(); MarkupContainer parent = getParent(); BookmarkablePageLink<String> link = new BookmarkablePageLink<String>("link", LoginPage.class); link.add(new Label("link-label", new StringResourceModel(LoginPanel.LOGIN_KEY,this,null))); parent.addOrReplace(link); setResponsePage(WelcomePage.class); } } }