content: /*
   * Licensed to the Apache Software Foundation (ASF) under one
   * or more contributor license agreements.  See the NOTICE file
   * distributed with this work for additional information
   * regarding copyright ownership.  The ASF licenses this file
   * to you 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.apache.ambari.server.security;
  
  import java.util.Collection;
  import java.util.Collections;
  
  import org.apache.ambari.server.security.authorization.User;
  import org.springframework.security.core.Authentication;
  import org.springframework.security.core.GrantedAuthority;
  import org.springframework.security.core.context.SecurityContext;
  import org.springframework.security.core.context.SecurityContextHolder;
  import org.springframework.security.core.userdetails.UserDetails;
  
  /**
   * Security related utilities.
   */
  // TODO : combine with AuthorizationHelper.
  public class SecurityHelperImpl implements SecurityHelper {
  
    /**
     * The singleton instance.
     */
    private static final SecurityHelper singleton = new SecurityHelperImpl();
  
  
    // ----- Constructors --------------------------------------------------
  
    /**
     * Hidden constructor.
     */
    private SecurityHelperImpl() {
    }
  
  
    // ----- SecurityHelperImpl --------------------------------------------
  
    public static SecurityHelper getInstance() {
      return singleton;
    }
  
  
    // ----- SecurityHelper ------------------------------------------------
  
    @Override
    public String getCurrentUserName() {
      SecurityContext ctx = SecurityContextHolder.getContext();
      Authentication authentication = ctx == null ? null : ctx.getAuthentication();
      Object principal = authentication == null ? null : authentication.getPrincipal();
  
      String username;
      if (principal instanceof UserDetails) {
        username = ((UserDetails) principal).getUsername();
      } else if (principal instanceof User) {
        username = ((User) principal).getUserName();
      } else {
        username = principal == null ? "" : principal.toString();
      }
      return username;
    }
  
    @Override
    public Collection<? extends GrantedAuthority> getCurrentAuthorities()
    {
      SecurityContext context = SecurityContextHolder.getContext();
  
      Authentication authentication = context.getAuthentication();
  
      if (context.getAuthentication() != null && context.getAuthentication().isAuthenticated()) {
        return authentication.getAuthorities();
      }
      return Collections.emptyList();
    }
  }
  