content: /**
   * Copyright 2014 55 Minutes (http://www.55minutes.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 fiftyfive.wicket.shiro.markup;
  
  import org.apache.shiro.SecurityUtils;
  import org.apache.wicket.markup.html.basic.Label;
  import org.apache.wicket.markup.html.panel.Panel;
  import org.apache.wicket.model.PropertyModel;
  
  /**
   * Displays a login or logout link based on whether the current user is
   * known. If the user is known, also display the username. Consider placing
   * this panel on your base page.
   * <p>
   * This class is intended to get you started quickly with Shiro.
   * Any non-trivial application should probably reimplement this panel with an
   * appropriate look and feel.
   * 
   * @author Matt Brictson
   * @since 3.0
   */
  public class AuthenticationStatusPanel extends Panel
  {
      public AuthenticationStatusPanel(String id)
      {
          super(id);
          add(new Label("user", new PropertyModel<Object>(this, "username")));
          add(new LoginLink("login"));
          add(new LogoutLink("logout"));
      }
      
      /**
       * Returns the current Shiro principal (in other words, username).
       * Will be {@code null} if the user is unknown. You may override this if
       * the principal is not appropriate for display
       * (e.g. if it is a database identifier).
       */
      public String getUsername()
      {
          Object principal = SecurityUtils.getSubject().getPrincipal();
          return principal != null ? principal.toString() : null;
      }
  }
  