private boolean processJASPIAuth(String securityDomain, ModelNode node, ApplicationPolicy applicationPolicy) {
node = peek(node, AUTHENTICATION, JASPI);
if (node == null)
return false;
JASPIAuthenticationInfo authenticationInfo = new JASPIAuthenticationInfo(securityDomain);
Map<String, LoginModuleStackHolder> holders = new HashMap<String, LoginModuleStackHolder>();
List<Property> stacks = node.get(LOGIN_MODULE_STACK).asPropertyList();
for (Property stack : stacks) {
String name = stack.getName();
ModelNode stackNode = stack.getValue();
final LoginModuleStackHolder holder = new LoginModuleStackHolder(name, null);
holders.put(name, holder);
authenticationInfo.add(holder);
if (stackNode.hasDefined(LOGIN_MODULES)) {
processLoginModules(stackNode.get(LOGIN_MODULES), authenticationInfo, new LoginModuleContainer() {
public void addAppConfigurationEntry(AppConfigurationEntry entry) {
holder.addAppConfigurationEntry(entry);
}
});
}
}
List<ModelNode> authModules = node.get(AUTH_MODULES).asList();
for (ModelNode authModule : authModules) {
String code = extractCode(authModule, ModulesMap.AUTHENTICATION_MAP);
String loginStackRef = null;
if (authModule.hasDefined(LOGIN_MODULE_STACK_REF))
loginStackRef = authModule.get(LOGIN_MODULE_STACK_REF).asString();
Map<String, Object> options = extractOptions(authModule) ;
AuthModuleEntry entry = new AuthModuleEntry(code, options, loginStackRef);
if (authModule.hasDefined(FLAG)) {
entry.setControlFlag(ControlFlag.valueOf(authModule.get(FLAG).asString()));
}
if (loginStackRef != null) {
if (!holders.containsKey(loginStackRef)) {
throw SecurityMessages.MESSAGES.loginModuleStackIllegalArgument(loginStackRef);
}
entry.setLoginModuleStackHolder(holders.get(loginStackRef));
}
authenticationInfo.add(entry);
String moduleName = authModule.get(MODULE).asString();
if(authModule.hasDefined(MODULE) && moduleName != null && moduleName.length() > 0 ) {
authenticationInfo.setJBossModuleName(moduleName);
}
}
applicationPolicy.setAuthenticationInfo(authenticationInfo);
return true;
}