public void initialize()
throws UserConfigurationException
{
try
{
RedbackRuntimeConfiguration redbackRuntimeConfiguration = getRedbackRuntimeConfiguration();
// migrate or not data from redback
if ( !redbackRuntimeConfiguration.isMigratedFromRedbackConfiguration() )
{
// not migrated so build a new fresh one
redbackRuntimeConfiguration = new RedbackRuntimeConfiguration();
// so migrate if available
String userManagerImpl =
userConfiguration.getConcatenatedList( UserConfigurationKeys.USER_MANAGER_IMPL, "jdo" );
if ( StringUtils.isNotEmpty( userManagerImpl ) )
{
String[] impls = StringUtils.split( userManagerImpl, ',' );
for ( String impl : impls )
{
redbackRuntimeConfiguration.getUserManagerImpls().add( impl );
}
}
String rbacManagerImpls =
userConfiguration.getConcatenatedList( UserConfigurationKeys.RBAC_MANAGER_IMPL, "jdo" );
if ( StringUtils.isNotEmpty( rbacManagerImpls ) )
{
String[] impls = StringUtils.split( rbacManagerImpls, ',' );
for ( String impl : impls )
{
redbackRuntimeConfiguration.getRbacManagerImpls().add( impl );
}
}
// now ldap
LdapConfiguration ldapConfiguration = redbackRuntimeConfiguration.getLdapConfiguration();
if ( ldapConfiguration == null )
{
ldapConfiguration = new LdapConfiguration();
redbackRuntimeConfiguration.setLdapConfiguration( ldapConfiguration );
}
ldapConfiguration.setHostName(
userConfiguration.getString( UserConfigurationKeys.LDAP_HOSTNAME, null ) );
ldapConfiguration.setPort( userConfiguration.getInt( UserConfigurationKeys.LDAP_PORT, -1 ) );
ldapConfiguration.setSsl( userConfiguration.getBoolean( UserConfigurationKeys.LDAP_SSL, false ) );
ldapConfiguration.setBaseDn(
userConfiguration.getConcatenatedList( UserConfigurationKeys.LDAP_BASEDN, null ) );
ldapConfiguration.setBaseGroupsDn(
userConfiguration.getConcatenatedList( UserConfigurationKeys.LDAP_GROUPS_BASEDN,
ldapConfiguration.getBaseDn() )
);
ldapConfiguration.setContextFactory(
userConfiguration.getString( UserConfigurationKeys.LDAP_CONTEX_FACTORY,
isSunContextFactoryAvailable()
? "com.sun.jndi.ldap.LdapCtxFactory"
: ""
)
);
ldapConfiguration.setBindDn(
userConfiguration.getConcatenatedList( UserConfigurationKeys.LDAP_BINDDN, null ) );
ldapConfiguration.setPassword(
userConfiguration.getString( UserConfigurationKeys.LDAP_PASSWORD, null ) );
ldapConfiguration.setAuthenticationMethod(
userConfiguration.getString( UserConfigurationKeys.LDAP_AUTHENTICATION_METHOD, null ) );
ldapConfiguration.setWritable(
userConfiguration.getBoolean( UserConfigurationKeys.LDAP_WRITABLE, false ) );
ldapConfiguration.setUseRoleNameAsGroup(
userConfiguration.getBoolean( UserConfigurationKeys.LDAP_GROUPS_USE_ROLENAME, false ) );
boolean ldapBindAuthenticatorEnabled =
userConfiguration.getBoolean( UserConfigurationKeys.LDAP_BIND_AUTHENTICATOR_ENABLED, false );
ldapConfiguration.setBindAuthenticatorEnabled( ldapBindAuthenticatorEnabled );
// LDAP groups mapping reading !!
// UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY
// userConfiguration.getKeys()
Collection<String> keys = userConfiguration.getKeys();
List<LdapGroupMapping> ldapGroupMappings = new ArrayList<>();
for ( String key : keys )
{
if ( key.startsWith( UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY ) )
{
String group =
StringUtils.substringAfter( key, UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY );
String val = userConfiguration.getConcatenatedList( key, "" );
if ( !StringUtils.isEmpty( val ) )
{
String[] roles = StringUtils.split( val, ',' );
ldapGroupMappings.add( new LdapGroupMapping( group, roles ) );
}
}
}
redbackRuntimeConfiguration.setLdapGroupMappings( ldapGroupMappings );
redbackRuntimeConfiguration.setMigratedFromRedbackConfiguration( true );
updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration );
}
// we must ensure userManagerImpls list is not empty if so put at least jdo one !
if ( redbackRuntimeConfiguration.getUserManagerImpls().isEmpty() )
{
log.info(
"redbackRuntimeConfiguration with empty userManagerImpls so force at least jdo implementation !" );
redbackRuntimeConfiguration.getUserManagerImpls().add( "jdo" );
updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration );
}
else
{
log.info( "using userManagerImpls: {}", redbackRuntimeConfiguration.getUserManagerImpls() );
}
// we ensure rbacManagerImpls is not empty if so put at least cached
if ( redbackRuntimeConfiguration.getRbacManagerImpls().isEmpty() )
{
log.info(
"redbackRuntimeConfiguration with empty rbacManagerImpls so force at least cached implementation !" );
redbackRuntimeConfiguration.getRbacManagerImpls().add( "cached" );
updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration );
}
else
{
log.info( "using rbacManagerImpls: {}", redbackRuntimeConfiguration.getRbacManagerImpls() );
}
boolean save = false;
// NPE free
if ( redbackRuntimeConfiguration.getUsersCacheConfiguration() == null )
{
redbackRuntimeConfiguration.setUsersCacheConfiguration( new CacheConfiguration() );
}
// if -1 it means non initialized to take values from the spring bean
if ( redbackRuntimeConfiguration.getUsersCacheConfiguration().getTimeToIdleSeconds() < 0 )
{
redbackRuntimeConfiguration.getUsersCacheConfiguration().setTimeToIdleSeconds(
usersCache.getTimeToIdleSeconds() );
save = true;
}
usersCache.setTimeToIdleSeconds(
redbackRuntimeConfiguration.getUsersCacheConfiguration().getTimeToIdleSeconds() );
if ( redbackRuntimeConfiguration.getUsersCacheConfiguration().getTimeToLiveSeconds() < 0 )
{
redbackRuntimeConfiguration.getUsersCacheConfiguration().setTimeToLiveSeconds(
usersCache.getTimeToLiveSeconds() );
save = true;
}
usersCache.setTimeToLiveSeconds(
redbackRuntimeConfiguration.getUsersCacheConfiguration().getTimeToLiveSeconds() );
if ( redbackRuntimeConfiguration.getUsersCacheConfiguration().getMaxElementsInMemory() < 0 )
{
redbackRuntimeConfiguration.getUsersCacheConfiguration().setMaxElementsInMemory(
usersCache.getMaxElementsInMemory() );
save = true;
}
usersCache.setMaxElementsInMemory(
redbackRuntimeConfiguration.getUsersCacheConfiguration().getMaxElementsInMemory() );
if ( redbackRuntimeConfiguration.getUsersCacheConfiguration().getMaxElementsOnDisk() < 0 )
{
redbackRuntimeConfiguration.getUsersCacheConfiguration().setMaxElementsOnDisk(
usersCache.getMaxElementsOnDisk() );
save = true;
}
usersCache.setMaxElementsOnDisk(
redbackRuntimeConfiguration.getUsersCacheConfiguration().getMaxElementsOnDisk() );
if ( save )
{
updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration );
}