/*
* JBoss, Home of Professional Open Source
* Copyright 2010-2013 Red Hat Inc. and/or its affiliates and other contributors
* as indicated by the @author tags. All rights reserved.
* See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This copyrighted material is made available to anyone wishing to use,
* modify, copy, or redistribute it subject to the terms and conditions
* of the GNU Lesser General Public License, v. 2.1.
* This program is distributed in the hope that it will be useful, but WITHOUT A
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public License,
* v.2.1 along with this distribution; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package org.infinispan.server.endpoint.subsystem;
import java.security.AccessController;
import java.security.PrivilegedAction;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.security.Security;
import org.infinispan.server.core.ProtocolServer;
import org.infinispan.server.core.configuration.ProtocolServerConfiguration;
import org.jboss.security.SecurityContext;
import org.jboss.security.SecurityContextAssociation;
/**
* Privileged Actions
*
* @author Anil.Saldhana@redhat.com
* @since Jan 12, 2011
*/
class SecurityActions {
private static <T> T doPrivileged(PrivilegedAction<T> action) {
if (System.getSecurityManager() != null) {
return AccessController.doPrivileged(action);
} else {
return Security.doPrivileged(action);
}
}
/**
* Set the {@code SecurityContext} on the {@code SecurityContextAssociation}
*
* @param sc
* the security context
*/
static void setSecurityContextOnAssociation(final SecurityContext sc) {
AccessController.doPrivileged(new PrivilegedAction<Void>() {
@Override
public Void run() {
SecurityContextAssociation.setSecurityContext(sc);
return null;
}
});
}
/**
* Get the current {@code SecurityContext}
*
* @return an instance of {@code SecurityContext}
*/
static SecurityContext getSecurityContext() {
return AccessController.doPrivileged(new PrivilegedAction<SecurityContext>() {
@Override
public SecurityContext run() {
return SecurityContextAssociation.getSecurityContext();
}
});
}
/**
* Clears current {@code SecurityContext}
*/
static void clearSecurityContext() {
AccessController.doPrivileged(new PrivilegedAction<Void>() {
@Override
public Void run() {
SecurityContextAssociation.clearSecurityContext();
return null;
}
});
}
public static final String AUTH_EXCEPTION_KEY = "org.jboss.security.exception";
static void clearAuthException() {
if (System.getSecurityManager() != null) {
AccessController.doPrivileged(new PrivilegedAction<Void>() {
@Override
public Void run() {
SecurityContext sc = getSecurityContext();
if (sc != null)
sc.getData().put(AUTH_EXCEPTION_KEY, null);
return null;
}
});
} else {
SecurityContext sc = getSecurityContext();
if (sc != null)
sc.getData().put(AUTH_EXCEPTION_KEY, null);
}
}
static Throwable getAuthException() {
if (System.getSecurityManager() != null) {
return AccessController.doPrivileged(new PrivilegedAction<Throwable>() {
@Override
public Throwable run() {
SecurityContext sc = getSecurityContext();
Throwable exception = null;
if (sc != null)
exception = (Throwable) sc.getData().get(AUTH_EXCEPTION_KEY);
return exception;
}
});
} else {
SecurityContext sc = getSecurityContext();
Throwable exception = null;
if (sc != null)
exception = (Throwable) sc.getData().get(AUTH_EXCEPTION_KEY);
return exception;
}
}
static void startProtocolServer(final ProtocolServer server, final ProtocolServerConfiguration configuration, final EmbeddedCacheManager cacheManager) {
PrivilegedAction<Void> action = new PrivilegedAction<Void>() {
@Override
public Void run() {
server.start(configuration, cacheManager);
return null;
}
};
doPrivileged(action);
}
}