/*
* Copyright (c) 2010-2015 Evolveum
*
* 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 com.evolveum.midpoint.web.security;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.security.api.MidPointPrincipal;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.application.AuthorizationAction;
import com.evolveum.midpoint.web.application.PageDescriptor;
import com.evolveum.midpoint.web.component.menu.MainMenuItem;
import com.evolveum.midpoint.web.component.menu.MenuItem;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import java.util.ArrayList;
import java.util.List;
/**
* @author lazyman
*/
public class SecurityUtils {
private static final Trace LOGGER = TraceManager.getTrace(SecurityUtils.class);
public static MidPointPrincipal getPrincipalUser() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
return getPrincipalUser(authentication);
}
public static MidPointPrincipal getPrincipalUser(Authentication authentication) {
if (authentication == null) {
LOGGER.trace("Authentication not available in security context.");
return null;
}
Object principal = authentication.getPrincipal();
if (principal instanceof MidPointPrincipal) {
return (MidPointPrincipal) principal;
}
if (AuthorizationConstants.ANONYMOUS_USER_PRINCIPAL.equals(principal)) {
// silently ignore to avoid filling the logs
return null;
}
LOGGER.debug("Principal user in security context holder is {} ({}) but not type of {}",
new Object[]{principal, principal.getClass(), MidPointPrincipal.class.getName()});
return null;
}
public static boolean isMenuAuthorized(MainMenuItem item) {
Class clazz = item.getPageClass();
return clazz == null || isPageAuthorized(clazz);
}
public static boolean isMenuAuthorized(MenuItem item) {
Class clazz = item.getPageClass();
return isPageAuthorized(clazz);
}
public static boolean isPageAuthorized(Class page) {
if (page == null) {
return false;
}
PageDescriptor descriptor = (PageDescriptor) page.getAnnotation(PageDescriptor.class);
if (descriptor == null ){
return false;
}
AuthorizationAction[] actions = descriptor.action();
List<String> list = new ArrayList<>();
if (actions != null) {
for (AuthorizationAction action : actions) {
list.add(action.actionUri());
}
}
return WebComponentUtil.isAuthorized(list.toArray(new String[list.size()]));
}
}