org.jboss.security.AppPolicy Maven / Gradle / Ivy
/*
* JBoss, Home of Professional Open Source
* Copyright 2005, JBoss Inc., and individual contributors as indicated
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY 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 along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.security;
import java.security.AllPermission;
import java.security.CodeSource;
import java.security.KeyStore;
import java.security.PermissionCollection;
import java.security.Permissions;
import javax.security.auth.Subject;
import javax.security.auth.login.AppConfigurationEntry;
/** A combination of keystore, authentication and authorization entries.
@author [email protected]
@version $Revision$
*/
public class AppPolicy
{
/** A PermissionCollection that allows no permissions */
public static final PermissionCollection NO_PERMISSIONS = new Permissions();
/** A PermissionCollection that allows all permissions */
private static PermissionCollection ALL_PERMISSIONS;
/**
* @label defaultAppPolicy
*/
private static AppPolicy defaultAppPolicy;
// Setup the class statics
static
{
// A PermissionCollection that allows all permissions
AllPermission all = new AllPermission();
ALL_PERMISSIONS = all.newPermissionCollection();
ALL_PERMISSIONS.add(all);
// A default policy with no authentication and NO_PERMISSIONS
defaultAppPolicy = new AppPolicy("other");
}
private String appName;
private KeyStore keyStore;
/**
* @label permissions
*/
private AuthorizationInfo permissionInfo;
/**
* @label login
*/
private AuthenticationInfo loginInfo;
public KeyStore getKeyStore()
{
return keyStore;
}
public void setKeyStore(KeyStore keyStore)
{
this.keyStore = keyStore;
}
public static void setDefaultAppPolicy(AppPolicy policy)
{
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
sm.checkPermission(new RuntimePermission(AppPolicy.class.getName() + ".setDefaultAppPolicy"));
}
if( policy == null )
throw PicketBoxMessages.MESSAGES.invalidNullArgument("policy");
defaultAppPolicy = policy;
}
public static AppPolicy getDefaultAppPolicy()
{
return defaultAppPolicy;
}
public AppPolicy(String appName)
{
this.appName = appName;
}
public AuthenticationInfo getLoginInfo()
{
SecurityManager manager = System.getSecurityManager();
if (manager != null) {
manager.checkPermission(AuthenticationInfo.GET_CONFIG_ENTRY_PERM);
}
return loginInfo;
}
public void setLoginInfo(AuthenticationInfo loginInfo)
{
SecurityManager manager = System.getSecurityManager();
if (manager != null) {
manager.checkPermission(AuthenticationInfo.SET_CONFIG_ENTRY_PERM);
}
this.loginInfo = loginInfo;
}
public AuthorizationInfo getPermissionInfo()
{
return permissionInfo;
}
public void setPermissionInfo(AuthorizationInfo permissionInfo)
{
this.permissionInfo = permissionInfo;
}
public AppConfigurationEntry[] getAppConfigurationEntry()
{
AppConfigurationEntry[] appConfig = null;
if( loginInfo != null )
appConfig = loginInfo.getAppConfigurationEntry();
if( appConfig == null && this != defaultAppPolicy )
appConfig = defaultAppPolicy.getAppConfigurationEntry();
AppConfigurationEntry[] copy = null;
if( appConfig != null )
{
copy = new AppConfigurationEntry[appConfig.length];
for(int c = 0; c < copy.length; c ++)
{
AppConfigurationEntry e0 = appConfig[c];
AppConfigurationEntry e1 = new AppConfigurationEntry(
e0.getLoginModuleName(),
e0.getControlFlag(),
e0.getOptions()
);
copy[c] = e1;
}
}
return copy;
}
public PermissionCollection getPermissions(Subject subject, CodeSource codesource)
{
PermissionCollection perms = NO_PERMISSIONS;
AuthorizationInfo info = getPermissionInfo();
if( info == null )
info = defaultAppPolicy.getPermissionInfo();
if( info != null )
{
perms = info.getPermissions(subject, codesource);
}
return perms;
}
public String toString()
{
StringBuffer buffer = new StringBuffer(appName);
buffer.append('\n');
buffer.append("AuthenticationInfo:\n");
if( loginInfo != null )
buffer.append(loginInfo);
buffer.append("AuthorizationInfo:\n");
if( permissionInfo != null )
buffer.append(permissionInfo);
return buffer.toString();
}
}