<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<!--
Copyright 2004 The Apache Software Foundation

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.
-->
<beans>
 <!-- ************** Security SPI Handlers ************** -->
  <!-- Security SPI: CommonQueries -->
  <bean id="org.apache.jetspeed.security.spi.impl.SecurityAccessImpl" 
  	   class="org.apache.jetspeed.security.spi.impl.SecurityAccessImpl"
  	   init-method="init"
  >  	   
  	   <constructor-arg ><value>META-INF/security_repository.xml</value></constructor-arg>  	   
  </bean>
  
  <bean id="org.apache.jetspeed.security.spi.SecurityAccess" parent="baseTransactionProxy" 
		name="SecurityCommonQueries" >
		<property name="proxyInterfaces">
			<value>org.apache.jetspeed.security.spi.SecurityAccess</value>
		</property>
		<property name="target">
			<ref bean="org.apache.jetspeed.security.spi.impl.SecurityAccessImpl"/>
		</property>
		<property name="transactionAttributes">
			<props>				
				<prop key="remove*">PROPAGATION_REQUIRED</prop>
				<prop key="set*">PROPAGATION_REQUIRED</prop>
				<prop key="*">PROPAGATION_SUPPORTS</prop>
			</props>
		</property>
   </bean>
  
  <bean id="org.apache.jetspeed.security.spi.PasswordCredentialProvider" 
       class="org.apache.jetspeed.security.spi.impl.DefaultPasswordCredentialProvider"/>

  <bean id="org.apache.jetspeed.security.spi.InternalPasswordCredentialInterceptor" 
       class="org.apache.jetspeed.security.spi.impl.InternalPasswordCredentialStateHandlingInterceptor">
       <!-- maxNumberOfAuthenticationFailures -->
       <constructor-arg index="0"><value>3</value></constructor-arg>  
       <!-- maxLifeSpanInDays -->     
       <constructor-arg index="1"><value>7</value></constructor-arg>       
  </bean>

  <!-- Security SPI: CredentialHandler -->
  <bean id="org.apache.jetspeed.security.spi.CredentialHandler" 
  	   class="org.apache.jetspeed.security.spi.impl.DefaultCredentialHandler"
  >  	   
  	   <constructor-arg index="0"><ref bean="org.apache.jetspeed.security.spi.SecurityAccess"/></constructor-arg>  	   
       <constructor-arg index="1"><ref bean="org.apache.jetspeed.security.spi.PasswordCredentialProvider"/></constructor-arg>       
       <constructor-arg index="2"><ref bean="org.apache.jetspeed.security.spi.InternalPasswordCredentialInterceptor"/></constructor-arg>       
  </bean>
  
  <!-- Security SPI: UserSecurityHandler -->
  <!-- The DefaultUSerSecurityHandler uses the raw SecurityAccessImpl so that it
  	   may demarcate its own transactions -->
  <bean id="org.apache.jetspeed.security.spi.UserSecurityHandlerImpl" 
  	   class="org.apache.jetspeed.security.spi.impl.DefaultUserSecurityHandler"
  >  	   
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.spi.SecurityAccess"/></constructor-arg>  	   
  </bean>
  
  <bean id="org.apache.jetspeed.security.spi.UserSecurityHandler" parent="baseTransactionProxy" 
		name="userSecurityHandler" >
		<property name="proxyInterfaces">
			<value>org.apache.jetspeed.security.spi.UserSecurityHandler</value>
		</property>
		<property name="target">
			<ref bean="org.apache.jetspeed.security.spi.UserSecurityHandlerImpl"/>
		</property>
		<property name="transactionAttributes">
			<props>				
				<prop key="*">PROPAGATION_REQUIRED</prop>
			</props>
		</property>
   </bean>
  
  <!-- Security SPI: RoleSecurityHandler -->
  <bean id="org.apache.jetspeed.security.spi.RoleSecurityHandler" 
  	   class="org.apache.jetspeed.security.spi.impl.DefaultRoleSecurityHandler"
  >  	   
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.spi.SecurityAccess"/></constructor-arg>
  </bean>
  
  <!-- Security SPI: GroupSecurityHandler -->
  <bean id="org.apache.jetspeed.security.spi.GroupSecurityHandler" 
  	   class="org.apache.jetspeed.security.spi.impl.DefaultGroupSecurityHandler"
  >  	   
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.spi.SecurityAccess"/></constructor-arg>
  </bean>
  
  <!-- Security SPI: SecurityMappingHandler -->
  <bean id="org.apache.jetspeed.security.spi.SecurityMappingHandler" 
  	   class="org.apache.jetspeed.security.spi.impl.DefaultSecurityMappingHandler"
  >  	   
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.spi.SecurityAccess"/></constructor-arg>
  	   <!-- Default role hierarchy strategy is by generalization.  Add contructor-arg to change the strategy. -->
  	   <!-- Default group hierarchy strategy is by generalization.  Add contructor-arg to change the strategy. -->
  </bean>
  
  <!-- ************** Security Providers ************** -->
  <!-- Security: Default Authentication Provider -->
  <bean id="org.apache.jetspeed.security.AuthenticationProvider" 
  	   class="org.apache.jetspeed.security.impl.AuthenticationProviderImpl"
  >  	   
  	   <constructor-arg index="0"><value>DefaultAuthenticator</value></constructor-arg>
  	   <constructor-arg index="1"><value>The default authenticator</value></constructor-arg>
  	   <constructor-arg index="2"><value>login.conf</value></constructor-arg>
  	   <constructor-arg index="3"><ref bean="org.apache.jetspeed.security.spi.CredentialHandler"/></constructor-arg>
  	   <constructor-arg index="4"><ref bean="org.apache.jetspeed.security.spi.UserSecurityHandler"/></constructor-arg>
  </bean>
  
  <!-- Security: Authentication Provider Proxy -->
  <bean id="org.apache.jetspeed.security.AuthenticationProviderProxy" 
  	   class="org.apache.jetspeed.security.impl.AuthenticationProviderProxyImpl"
  >  	   
  	   <constructor-arg >
  	   		<list>
  	   			<ref bean="org.apache.jetspeed.security.AuthenticationProvider"/>
  	   		</list>
  	   </constructor-arg>
  	   <constructor-arg ><value>DefaultAuthenticator</value></constructor-arg>
  </bean>
  
  <!-- Security: Security Provider -->
  <bean id="org.apache.jetspeed.security.SecurityProvider" 
  	   class="org.apache.jetspeed.security.impl.SecurityProviderImpl"
  >  	   
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.AuthenticationProviderProxy"/></constructor-arg>
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.spi.RoleSecurityHandler"/></constructor-arg>
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.spi.GroupSecurityHandler"/></constructor-arg>
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.spi.SecurityMappingHandler"/></constructor-arg>
  </bean>
  
  <!-- Security: User Manager -->
  <bean id="org.apache.jetspeed.security.UserManager" 
  	   class="org.apache.jetspeed.security.impl.UserManagerImpl"
  >  	   
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.SecurityProvider"/></constructor-arg>
  </bean>
  
   <!-- Security: Group Manager -->
  <bean id="org.apache.jetspeed.security.GroupManager" 
  	   class="org.apache.jetspeed.security.impl.GroupManagerImpl"
  >  	   
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.SecurityProvider"/></constructor-arg>   
  </bean>
  
  <!-- Security: Role Manager -->
  <bean id="org.apache.jetspeed.security.RoleManager" 
  	   class="org.apache.jetspeed.security.impl.RoleManagerImpl"
  >  	   
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.SecurityProvider"/></constructor-arg>   
  </bean>
  
  <!-- ************** Login Module ************** -->
  <!-- Security: Login Module Proxy -->
  <bean id="org.apache.jetspeed.security.LoginModuleProxy" 
  	   class="org.apache.jetspeed.security.impl.LoginModuleProxyImpl"
  >  	   
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.UserManager"/></constructor-arg>  	   
  </bean>

  
  <!-- ************** Authorization ************** -->
  <!-- Security: Permission Manager -->
  <bean id="org.apache.jetspeed.security.impl.PermissionManagerImpl" 
  	   class="org.apache.jetspeed.security.impl.PermissionManagerImpl"  />
  
  <bean id="org.apache.jetspeed.security.PermissionManager" parent="baseTransactionProxy" 
		name="permissionManager" >
		<property name="proxyInterfaces">
			<value>org.apache.jetspeed.security.PermissionManager</value>
		</property>
		<property name="target">
			<ref bean="org.apache.jetspeed.security.impl.PermissionManagerImpl"/>
		</property>
		<property name="transactionAttributes">
			<props>				
				<prop key="remove*">PROPAGATION_REQUIRED</prop>
				<prop key="grant*">PROPAGATION_REQUIRED</prop>
				<prop key="revoke*">PROPAGATION_REQUIRED</prop>
				<prop key="grant*">PROPAGATION_REQUIRED</prop>
				<prop key="add*">PROPAGATION_REQUIRED</prop>
				<prop key="*">PROPAGATION_SUPPORTS</prop>
			</props>
		</property>
   </bean>
  
  <!-- Security: RDBMS Policy implementation for JAAS -->
  <bean id="org.apache.jetspeed.security.impl.RdbmsPolicy" 
  	   class="org.apache.jetspeed.security.impl.RdbmsPolicy"
  >  	   
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.PermissionManager"/></constructor-arg>  	   
  </bean>
  
  <!-- Security: Authorization Provider -->
  <bean id="org.apache.jetspeed.security.AuthorizationProvider" 
  	   class="org.apache.jetspeed.security.impl.AuthorizationProviderImpl"
  >  	   
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.impl.RdbmsPolicy"/></constructor-arg>   
  </bean>
  
</beans>