///* 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.flowable.ui.common.security;
//
//import org.flowable.idm.api.User;
//import org.flowable.ui.common.model.RemoteUser;
//import org.springframework.security.core.GrantedAuthority;
//import org.springframework.security.core.context.SecurityContext;
//import org.springframework.security.core.context.SecurityContextHolder;
//
//import java.util.ArrayList;
//import java.util.List;
//
///**
// * Utility class for Spring Security.
// */
//public class SecurityUtils {
//
//    private static User assumeUser;
//
//    private SecurityUtils() {
//    }
//
//    /**
//     * Get the login of the current user.
//     */
//    public static String getCurrentUserId() {
//        User user = getCurrentUserObject();
//        if (user != null) {
//            return user.getId();
//        }
//        return null;
//    }
//
//    /**
//     * @return the {@link User} object associated with the current logged in user.
//     */
//    public static User getCurrentUserObject() {
//        if (assumeUser != null) {
//            return assumeUser;
//        }
//
//        RemoteUser user = new RemoteUser();
//        user.setId("admin");
//        user.setDisplayName("Administrator");
//        user.setFirstName("Administrator");
//        user.setLastName("Administrator");
//        user.setEmail("admin@flowable.com");
//        user.setPassword("123456");
//        List<String> pris = new ArrayList<>();
//        pris.add(DefaultPrivileges.ACCESS_MODELER);
//        pris.add(DefaultPrivileges.ACCESS_IDM);
//        pris.add(DefaultPrivileges.ACCESS_ADMIN);
//        pris.add(DefaultPrivileges.ACCESS_TASK);
//        pris.add(DefaultPrivileges.ACCESS_REST_API);
//        user.setPrivileges(pris);
//        return user;
//    }
//
//    public static FlowableAppUser getCurrentFlowableAppUser() {
//        FlowableAppUser user = null;
//        SecurityContext securityContext = SecurityContextHolder.getContext();
//        if (securityContext != null && securityContext.getAuthentication() != null) {
//            Object principal = securityContext.getAuthentication().getPrincipal();
//            if (principal instanceof FlowableAppUser) {
//                user = (FlowableAppUser) principal;
//            }
//        }
//        return user;
//    }
//
//    public static boolean currentUserHasCapability(String capability) {
//        FlowableAppUser user = getCurrentFlowableAppUser();
//        for (GrantedAuthority grantedAuthority : user.getAuthorities()) {
//            if (capability.equals(grantedAuthority.getAuthority())) {
//                return true;
//            }
//        }
//        return false;
//    }
//
//    public static void assumeUser(User user) {
//        assumeUser = user;
//    }
//
//    public static void clearAssumeUser() {
//        assumeUser = null;
//    }
//
//}
