This project has retired. For details please refer to its Attic page.
Source code
001package org.apache.archiva.admin.repository.runtime;
002/*
003 * Licensed to the Apache Software Foundation (ASF) under one
004 * or more contributor license agreements.  See the NOTICE file
005 * distributed with this work for additional information
006 * regarding copyright ownership.  The ASF licenses this file
007 * to you under the Apache License, Version 2.0 (the
008 * "License"); you may not use this file except in compliance
009 * with the License.  You may obtain a copy of the License at
010 *
011 *   http://www.apache.org/licenses/LICENSE-2.0
012 *
013 * Unless required by applicable law or agreed to in writing,
014 * software distributed under the License is distributed on an
015 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
016 * KIND, either express or implied.  See the License for the
017 * specific language governing permissions and limitations
018 * under the License.
019 */
020
021import org.apache.archiva.admin.model.RepositoryAdminException;
022import org.apache.archiva.admin.model.beans.CacheConfiguration;
023import org.apache.archiva.admin.model.beans.LdapConfiguration;
024import org.apache.archiva.admin.model.beans.LdapGroupMapping;
025import org.apache.archiva.admin.model.beans.RedbackRuntimeConfiguration;
026import org.apache.archiva.admin.model.runtime.RedbackRuntimeConfigurationAdmin;
027import org.apache.archiva.admin.repository.AbstractRepositoryAdmin;
028import org.apache.archiva.configuration.ArchivaConfiguration;
029import org.apache.archiva.configuration.Configuration;
030import org.apache.archiva.configuration.IndeterminateConfigurationException;
031import org.apache.archiva.components.cache.Cache;
032import org.apache.archiva.components.registry.RegistryException;
033import org.apache.archiva.redback.configuration.UserConfiguration;
034import org.apache.archiva.redback.configuration.UserConfigurationException;
035import org.apache.archiva.redback.configuration.UserConfigurationKeys;
036import org.apache.commons.lang3.StringUtils;
037import org.slf4j.Logger;
038import org.slf4j.LoggerFactory;
039import org.springframework.stereotype.Service;
040
041import javax.annotation.PostConstruct;
042import javax.inject.Inject;
043import javax.inject.Named;
044import java.util.ArrayList;
045import java.util.Arrays;
046import java.util.Collection;
047import java.util.HashSet;
048import java.util.List;
049import java.util.Map;
050import java.util.Set;
051
052/**
053 * @author Olivier Lamy
054 * @since 1.4-M4
055 */
056@Service( "redbackRuntimeConfigurationAdmin#default" )
057public class DefaultRedbackRuntimeConfigurationAdmin
058    extends AbstractRepositoryAdmin
059    implements RedbackRuntimeConfigurationAdmin, UserConfiguration
060{
061
062    protected Logger log = LoggerFactory.getLogger( getClass() );
063
064    private ArchivaConfiguration archivaConfiguration;
065
066    private UserConfiguration userConfiguration;
067
068    private Cache usersCache;
069
070    @Inject
071    public DefaultRedbackRuntimeConfigurationAdmin( ArchivaConfiguration archivaConfiguration,//
072                                                    @Named( value = "userConfiguration#redback" ) //
073                                                        UserConfiguration userConfiguration,
074                                                    @Named( value = "cache#users" ) Cache usersCache )
075    {
076        this.archivaConfiguration = archivaConfiguration;
077        this.userConfiguration = userConfiguration;
078        this.usersCache = usersCache;
079    }
080
081    @PostConstruct
082    @Override
083    public void initialize()
084        throws UserConfigurationException
085    {
086        try
087        {
088            RedbackRuntimeConfiguration redbackRuntimeConfiguration = getRedbackRuntimeConfiguration();
089            // migrate or not data from redback
090            if ( !redbackRuntimeConfiguration.isMigratedFromRedbackConfiguration() )
091            {
092                // not migrated so build a new fresh one
093                redbackRuntimeConfiguration = new RedbackRuntimeConfiguration();
094                // so migrate if available
095                String userManagerImpl =
096                    userConfiguration.getConcatenatedList( UserConfigurationKeys.USER_MANAGER_IMPL, //
097                                                           DEFAULT_USER_MANAGER_IMPL );
098                if ( StringUtils.isNotEmpty( userManagerImpl ) )
099                {
100                    String[] impls = StringUtils.split( userManagerImpl, ',' );
101                    for ( String impl : impls )
102                    {
103                        if (StringUtils.equalsIgnoreCase( "jdo", impl ))
104                        {
105                            impl = DEFAULT_USER_MANAGER_IMPL;
106                        }
107                        redbackRuntimeConfiguration.getUserManagerImpls().add( impl );
108                    }
109                }
110                else
111                {
112                    redbackRuntimeConfiguration.getUserManagerImpls().add( DEFAULT_USER_MANAGER_IMPL );
113                }
114
115                String rbacManagerImpls =
116                    userConfiguration.getConcatenatedList( UserConfigurationKeys.RBAC_MANAGER_IMPL, //
117                                                           DEFAULT_RBAC_MANAGER_IMPL );
118
119                if ( StringUtils.isNotEmpty( rbacManagerImpls ) )
120                {
121                    String[] impls = StringUtils.split( rbacManagerImpls, ',' );
122                    for ( String impl : impls )
123                    {
124                        if (StringUtils.equalsIgnoreCase( "jdo", impl ))
125                        {
126                            impl = DEFAULT_RBAC_MANAGER_IMPL;
127                        }
128                        redbackRuntimeConfiguration.getRbacManagerImpls().add( impl );
129                    }
130                }
131                else
132                {
133                    redbackRuntimeConfiguration.getRbacManagerImpls().add( DEFAULT_RBAC_MANAGER_IMPL );
134                }
135
136                // now ldap
137
138                LdapConfiguration ldapConfiguration = redbackRuntimeConfiguration.getLdapConfiguration();
139                if ( ldapConfiguration == null )
140                {
141                    ldapConfiguration = new LdapConfiguration();
142                    redbackRuntimeConfiguration.setLdapConfiguration( ldapConfiguration );
143                }
144
145                ldapConfiguration.setHostName(
146                    userConfiguration.getString( UserConfigurationKeys.LDAP_HOSTNAME, null ) );
147                ldapConfiguration.setPort( userConfiguration.getInt( UserConfigurationKeys.LDAP_PORT, -1 ) );
148                ldapConfiguration.setSsl( userConfiguration.getBoolean( UserConfigurationKeys.LDAP_SSL, false ) );
149                ldapConfiguration.setBaseDn(
150                    userConfiguration.getConcatenatedList( UserConfigurationKeys.LDAP_BASEDN, null ) );
151
152                ldapConfiguration.setBaseGroupsDn(
153                    userConfiguration.getConcatenatedList( UserConfigurationKeys.LDAP_GROUPS_BASEDN,
154                                                           ldapConfiguration.getBaseDn() ) );
155
156                ldapConfiguration.setContextFactory(
157                    userConfiguration.getString( UserConfigurationKeys.LDAP_CONTEX_FACTORY,
158                                                 isSunContextFactoryAvailable()
159                                                     ? "com.sun.jndi.ldap.LdapCtxFactory"
160                                                     : "" ) );
161                ldapConfiguration.setBindDn(
162                    userConfiguration.getConcatenatedList( UserConfigurationKeys.LDAP_BINDDN, null ) );
163                ldapConfiguration.setPassword(
164                    userConfiguration.getString( UserConfigurationKeys.LDAP_PASSWORD, null ) );
165                ldapConfiguration.setAuthenticationMethod(
166                    userConfiguration.getString( UserConfigurationKeys.LDAP_AUTHENTICATION_METHOD, null ) );
167
168                ldapConfiguration.setWritable(
169                    userConfiguration.getBoolean( UserConfigurationKeys.LDAP_WRITABLE, false ) );
170
171                ldapConfiguration.setUseRoleNameAsGroup(
172                    userConfiguration.getBoolean( UserConfigurationKeys.LDAP_GROUPS_USE_ROLENAME, false ) );
173
174                boolean ldapBindAuthenticatorEnabled =
175                    userConfiguration.getBoolean( UserConfigurationKeys.LDAP_BIND_AUTHENTICATOR_ENABLED, false );
176                ldapConfiguration.setBindAuthenticatorEnabled( ldapBindAuthenticatorEnabled );
177
178                // LDAP groups mapping reading !!
179                // UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY
180                // userConfiguration.getKeys()
181
182                Collection<String> keys = userConfiguration.getKeys();
183
184                List<LdapGroupMapping> ldapGroupMappings = new ArrayList<>();
185
186                for ( String key : keys )
187                {
188                    if ( key.startsWith( UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY ) )
189                    {
190                        String group =
191                            StringUtils.substringAfter( key, UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY );
192                        String val = userConfiguration.getConcatenatedList( key, "" );
193                        if ( !StringUtils.isEmpty( val ) )
194                        {
195                            String[] roles = StringUtils.split( val, ',' );
196                            ldapGroupMappings.add( new LdapGroupMapping( group, roles ) );
197                        }
198                    }
199                }
200
201                redbackRuntimeConfiguration.setLdapGroupMappings( ldapGroupMappings );
202
203                redbackRuntimeConfiguration.setMigratedFromRedbackConfiguration( true );
204
205                updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration );
206
207            }
208            // we must ensure userManagerImpls list is not empty if so put at least jdo one !
209            if ( redbackRuntimeConfiguration.getUserManagerImpls().isEmpty() )
210            {
211                log.info(
212                    "redbackRuntimeConfiguration with empty userManagerImpls so force at least jdo implementation !" );
213                redbackRuntimeConfiguration.getUserManagerImpls().add( "jdo" );
214                updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration );
215            }
216            else
217            {
218                log.info( "using userManagerImpls: {}", redbackRuntimeConfiguration.getUserManagerImpls() );
219            }
220
221            // we ensure rbacManagerImpls is not empty if so put at least cached
222            if ( redbackRuntimeConfiguration.getRbacManagerImpls().isEmpty() )
223            {
224                log.info(
225                    "redbackRuntimeConfiguration with empty rbacManagerImpls so force at least cached implementation !" );
226                redbackRuntimeConfiguration.getRbacManagerImpls().add( "cached" );
227                updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration );
228            }
229            else
230            {
231                log.info( "using rbacManagerImpls: {}", redbackRuntimeConfiguration.getRbacManagerImpls() );
232            }
233
234            boolean save = false;
235
236            // NPE free
237            if ( redbackRuntimeConfiguration.getUsersCacheConfiguration() == null )
238            {
239                redbackRuntimeConfiguration.setUsersCacheConfiguration( new CacheConfiguration() );
240            }
241            // if -1 it means non initialized to take values from the spring bean
242            if ( redbackRuntimeConfiguration.getUsersCacheConfiguration().getTimeToIdleSeconds() < 0 )
243            {
244                redbackRuntimeConfiguration.getUsersCacheConfiguration().setTimeToIdleSeconds(
245                    usersCache.getTimeToIdleSeconds() );
246                save = true;
247
248            }
249            usersCache.setTimeToIdleSeconds(
250                redbackRuntimeConfiguration.getUsersCacheConfiguration().getTimeToIdleSeconds() );
251
252            if ( redbackRuntimeConfiguration.getUsersCacheConfiguration().getTimeToLiveSeconds() < 0 )
253            {
254                redbackRuntimeConfiguration.getUsersCacheConfiguration().setTimeToLiveSeconds(
255                    usersCache.getTimeToLiveSeconds() );
256                save = true;
257
258            }
259            usersCache.setTimeToLiveSeconds(
260                redbackRuntimeConfiguration.getUsersCacheConfiguration().getTimeToLiveSeconds() );
261
262            if ( redbackRuntimeConfiguration.getUsersCacheConfiguration().getMaxElementsInMemory() < 0 )
263            {
264                redbackRuntimeConfiguration.getUsersCacheConfiguration().setMaxElementsInMemory(
265                    usersCache.getMaxElementsInMemory() );
266                save = true;
267            }
268            usersCache.setMaxElementsInMemory(
269                redbackRuntimeConfiguration.getUsersCacheConfiguration().getMaxElementsInMemory() );
270
271            if ( redbackRuntimeConfiguration.getUsersCacheConfiguration().getMaxElementsOnDisk() < 0 )
272            {
273                redbackRuntimeConfiguration.getUsersCacheConfiguration().setMaxElementsOnDisk(
274                    usersCache.getMaxElementsOnDisk() );
275                save = true;
276            }
277            usersCache.setMaxElementsOnDisk(
278                redbackRuntimeConfiguration.getUsersCacheConfiguration().getMaxElementsOnDisk() );
279
280            if ( save )
281            {
282                updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration );
283            }
284
285        }
286        catch ( RepositoryAdminException e )
287        {
288            throw new UserConfigurationException( e.getMessage(), e );
289        }
290    }
291
292    private boolean isSunContextFactoryAvailable()
293    {
294        try
295        {
296            return Thread.currentThread().getContextClassLoader().loadClass( "com.sun.jndi.ldap.LdapCtxFactory" )
297                != null;
298        }
299        catch ( ClassNotFoundException e )
300        {
301            return false;
302        }
303    }
304
305    @Override
306    public RedbackRuntimeConfiguration getRedbackRuntimeConfiguration()
307    {
308        return build( archivaConfiguration.getConfiguration().getRedbackRuntimeConfiguration() );
309    }
310
311    @Override
312    public void updateRedbackRuntimeConfiguration( RedbackRuntimeConfiguration redbackRuntimeConfiguration )
313        throws RepositoryAdminException
314    {
315        org.apache.archiva.configuration.RedbackRuntimeConfiguration runtimeConfiguration =
316            build( redbackRuntimeConfiguration );
317        Configuration configuration = archivaConfiguration.getConfiguration();
318        configuration.setRedbackRuntimeConfiguration( runtimeConfiguration );
319        try
320        {
321            archivaConfiguration.save( configuration );
322        }
323        catch ( RegistryException e )
324        {
325            throw new RepositoryAdminException( e.getMessage(), e );
326        }
327        catch ( IndeterminateConfigurationException e )
328        {
329            throw new RepositoryAdminException( e.getMessage(), e );
330        }
331    }
332
333    private RedbackRuntimeConfiguration build(
334        org.apache.archiva.configuration.RedbackRuntimeConfiguration runtimeConfiguration )
335    {
336        RedbackRuntimeConfiguration redbackRuntimeConfiguration =
337            getModelMapper().map( runtimeConfiguration, RedbackRuntimeConfiguration.class );
338
339        if ( runtimeConfiguration.getLdapConfiguration() != null )
340        {
341            redbackRuntimeConfiguration.setLdapConfiguration(
342                getModelMapper().map( runtimeConfiguration.getLdapConfiguration(), LdapConfiguration.class ) );
343        }
344
345        if ( runtimeConfiguration.getUsersCacheConfiguration() != null )
346        {
347            redbackRuntimeConfiguration.setUsersCacheConfiguration(
348                getModelMapper().map( runtimeConfiguration.getUsersCacheConfiguration(), CacheConfiguration.class ) );
349        }
350
351        if ( redbackRuntimeConfiguration.getLdapConfiguration() == null )
352        {
353            // prevent NPE
354            redbackRuntimeConfiguration.setLdapConfiguration( new LdapConfiguration() );
355        }
356
357        if ( redbackRuntimeConfiguration.getUsersCacheConfiguration() == null )
358        {
359            redbackRuntimeConfiguration.setUsersCacheConfiguration( new CacheConfiguration() );
360        }
361
362        List<org.apache.archiva.configuration.LdapGroupMapping> mappings = runtimeConfiguration.getLdapGroupMappings();
363
364        if ( mappings != null && mappings.size() > 0 )
365        {
366            List<LdapGroupMapping> ldapGroupMappings = new ArrayList<>( mappings.size() );
367
368            for ( org.apache.archiva.configuration.LdapGroupMapping mapping : mappings )
369            {
370                ldapGroupMappings.add( new LdapGroupMapping( mapping.getGroup(), mapping.getRoleNames() ) );
371            }
372
373            redbackRuntimeConfiguration.setLdapGroupMappings( ldapGroupMappings );
374        }
375
376        cleanupProperties( redbackRuntimeConfiguration );
377
378        return redbackRuntimeConfiguration;
379    }
380
381    /**
382     * cleaning from map properties used directly in archiva configuration fields
383     *
384     * @param redbackRuntimeConfiguration
385     */
386    private void cleanupProperties( RedbackRuntimeConfiguration redbackRuntimeConfiguration )
387    {
388        Map<String, String> properties = redbackRuntimeConfiguration.getConfigurationProperties();
389        properties.remove( UserConfigurationKeys.LDAP_HOSTNAME );
390        properties.remove( UserConfigurationKeys.LDAP_PORT );
391        properties.remove( UserConfigurationKeys.LDAP_BIND_AUTHENTICATOR_ENABLED );
392        properties.remove( UserConfigurationKeys.LDAP_SSL );
393        properties.remove( UserConfigurationKeys.LDAP_BASEDN );
394        properties.remove( UserConfigurationKeys.LDAP_GROUPS_BASEDN );
395        properties.remove( UserConfigurationKeys.LDAP_CONTEX_FACTORY );
396        properties.remove( UserConfigurationKeys.LDAP_BINDDN );
397        properties.remove( UserConfigurationKeys.LDAP_PASSWORD );
398        properties.remove( UserConfigurationKeys.LDAP_AUTHENTICATION_METHOD );
399        properties.remove( UserConfigurationKeys.LDAP_WRITABLE );
400        properties.remove( UserConfigurationKeys.LDAP_GROUPS_USE_ROLENAME );
401
402        // cleanup groups <-> role mapping
403        /**for ( Map.Entry<String, String> entry : new HashMap<String, String>( properties ).entrySet() )
404         {
405         if ( entry.getKey().startsWith( UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY ) )
406         {
407         properties.remove( entry.getKey() );
408         }
409         }*/
410    }
411
412    private org.apache.archiva.configuration.RedbackRuntimeConfiguration build(
413        RedbackRuntimeConfiguration redbackRuntimeConfiguration )
414    {
415        org.apache.archiva.configuration.RedbackRuntimeConfiguration res =
416            getModelMapper().map( redbackRuntimeConfiguration,
417                                  org.apache.archiva.configuration.RedbackRuntimeConfiguration.class );
418
419        if ( redbackRuntimeConfiguration.getLdapConfiguration() == null )
420        {
421            redbackRuntimeConfiguration.setLdapConfiguration( new LdapConfiguration() );
422        }
423        res.setLdapConfiguration( getModelMapper().map( redbackRuntimeConfiguration.getLdapConfiguration(),
424                                                        org.apache.archiva.configuration.LdapConfiguration.class ) );
425
426        if ( redbackRuntimeConfiguration.getUsersCacheConfiguration() == null )
427        {
428            redbackRuntimeConfiguration.setUsersCacheConfiguration( new CacheConfiguration() );
429        }
430
431        res.setUsersCacheConfiguration( getModelMapper().map( redbackRuntimeConfiguration.getUsersCacheConfiguration(),
432                                                              org.apache.archiva.configuration.CacheConfiguration.class ) );
433
434        List<LdapGroupMapping> ldapGroupMappings = redbackRuntimeConfiguration.getLdapGroupMappings();
435
436        if ( ldapGroupMappings != null && ldapGroupMappings.size() > 0 )
437        {
438
439            List<org.apache.archiva.configuration.LdapGroupMapping> mappings =
440                new ArrayList<>( ldapGroupMappings.size() );
441
442            for ( LdapGroupMapping ldapGroupMapping : ldapGroupMappings )
443            {
444
445                org.apache.archiva.configuration.LdapGroupMapping mapping =
446                    new org.apache.archiva.configuration.LdapGroupMapping();
447                mapping.setGroup( ldapGroupMapping.getGroup() );
448                mapping.setRoleNames( new ArrayList<>( ldapGroupMapping.getRoleNames() ) );
449                mappings.add( mapping );
450
451            }
452            res.setLdapGroupMappings( mappings );
453        }
454        return res;
455    }
456
457    // wrapper for UserConfiguration to intercept values (and store it not yet migrated)
458
459
460    @Override
461    public String getString( String key )
462    {
463        if ( UserConfigurationKeys.USER_MANAGER_IMPL.equals( key ) )
464        {
465            // possible false for others than archiva user manager
466            return getRedbackRuntimeConfiguration().getUserManagerImpls().get( 0 );
467        }
468
469        if ( StringUtils.startsWith( key, UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY ) )
470        {
471            RedbackRuntimeConfiguration redbackRuntimeConfiguration = getRedbackRuntimeConfiguration();
472            int index = redbackRuntimeConfiguration.getLdapGroupMappings().indexOf( new LdapGroupMapping(
473                StringUtils.substringAfter( key, UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY ) ) );
474            if ( index > -1 )
475            {
476                return StringUtils.join( redbackRuntimeConfiguration.getLdapGroupMappings().get( index ).getRoleNames(),
477                                         ',' );
478            }
479        }
480
481        RedbackRuntimeConfiguration conf = getRedbackRuntimeConfiguration();
482
483        if ( conf.getConfigurationProperties().containsKey( key ) )
484        {
485            return conf.getConfigurationProperties().get( key );
486        }
487
488        String value = userConfiguration.getString( key );
489        if ( value == null )
490        {
491            return null;
492        }
493        conf.getConfigurationProperties().put( key, value );
494
495        try
496        {
497            updateRedbackRuntimeConfiguration( conf );
498        }
499        catch ( RepositoryAdminException e )
500        {
501            log.error( "fail to save RedbackRuntimeConfiguration: {}", e.getMessage(), e );
502            throw new RuntimeException( e.getMessage(), e );
503        }
504
505        return value;
506    }
507
508    @Override
509    public String getString( String key, String defaultValue )
510    {
511        if ( UserConfigurationKeys.LDAP_HOSTNAME.equals( key ) )
512        {
513            return getRedbackRuntimeConfiguration().getLdapConfiguration().getHostName();
514        }
515        if ( UserConfigurationKeys.LDAP_CONTEX_FACTORY.equals( key ) )
516        {
517            return getRedbackRuntimeConfiguration().getLdapConfiguration().getContextFactory();
518        }
519        if ( UserConfigurationKeys.LDAP_PASSWORD.equals( key ) )
520        {
521            return getRedbackRuntimeConfiguration().getLdapConfiguration().getPassword();
522        }
523        if ( UserConfigurationKeys.LDAP_AUTHENTICATION_METHOD.equals( key ) )
524        {
525            return getRedbackRuntimeConfiguration().getLdapConfiguration().getAuthenticationMethod();
526        }
527
528        RedbackRuntimeConfiguration conf = getRedbackRuntimeConfiguration();
529
530        if ( conf.getConfigurationProperties().containsKey( key ) )
531        {
532            return conf.getConfigurationProperties().get( key );
533        }
534
535        String value = userConfiguration.getString( key, defaultValue );
536
537        if ( value == null )
538        {
539            return null;
540        }
541
542        conf.getConfigurationProperties().put( key, value );
543        try
544        {
545            updateRedbackRuntimeConfiguration( conf );
546        }
547        catch ( RepositoryAdminException e )
548        {
549            log.error( "fail to save RedbackRuntimeConfiguration: {}", e.getMessage(), e );
550            throw new RuntimeException( e.getMessage(), e );
551        }
552
553        return value;
554    }
555
556    @Override
557    public int getInt( String key )
558    {
559        RedbackRuntimeConfiguration conf = getRedbackRuntimeConfiguration();
560
561        if ( conf.getConfigurationProperties().containsKey( key ) )
562        {
563            return Integer.valueOf( conf.getConfigurationProperties().get( key ) );
564        }
565
566        int value = userConfiguration.getInt( key );
567
568        conf.getConfigurationProperties().put( key, Integer.toString( value ) );
569        try
570        {
571            updateRedbackRuntimeConfiguration( conf );
572        }
573        catch ( RepositoryAdminException e )
574        {
575            log.error( "fail to save RedbackRuntimeConfiguration: {}", e.getMessage(), e );
576            throw new RuntimeException( e.getMessage(), e );
577        }
578
579        return value;
580    }
581
582    @Override
583    public int getInt( String key, int defaultValue )
584    {
585        if ( UserConfigurationKeys.LDAP_PORT.equals( key ) )
586        {
587            return getRedbackRuntimeConfiguration().getLdapConfiguration().getPort();
588        }
589
590        RedbackRuntimeConfiguration conf = getRedbackRuntimeConfiguration();
591
592        if ( conf.getConfigurationProperties().containsKey( key ) )
593        {
594            return Integer.valueOf( conf.getConfigurationProperties().get( key ) );
595        }
596
597        int value = userConfiguration.getInt( key, defaultValue );
598
599        conf.getConfigurationProperties().put( key, Integer.toString( value ) );
600        try
601        {
602            updateRedbackRuntimeConfiguration( conf );
603        }
604        catch ( RepositoryAdminException e )
605        {
606            log.error( "fail to save RedbackRuntimeConfiguration: {}", e.getMessage(), e );
607            throw new RuntimeException( e.getMessage(), e );
608        }
609
610        return value;
611    }
612
613    @Override
614    public boolean getBoolean( String key )
615    {
616        RedbackRuntimeConfiguration conf = getRedbackRuntimeConfiguration();
617
618        if ( UserConfigurationKeys.LDAP_WRITABLE.equals( key ) )
619        {
620            return conf.getLdapConfiguration().isWritable();
621        }
622
623        if ( UserConfigurationKeys.LDAP_GROUPS_USE_ROLENAME.equals( key ) )
624        {
625            return conf.getLdapConfiguration().isUseRoleNameAsGroup();
626        }
627
628        if ( UserConfigurationKeys.LDAP_BIND_AUTHENTICATOR_ENABLED.equals( key ) )
629        {
630            return conf.getLdapConfiguration().isBindAuthenticatorEnabled();
631        }
632
633        if ( conf.getConfigurationProperties().containsKey( key ) )
634        {
635            return Boolean.valueOf( conf.getConfigurationProperties().get( key ) );
636        }
637
638        boolean value = userConfiguration.getBoolean( key );
639
640        conf.getConfigurationProperties().put( key, Boolean.toString( value ) );
641        try
642        {
643            updateRedbackRuntimeConfiguration( conf );
644        }
645        catch ( RepositoryAdminException e )
646        {
647            log.error( "fail to save RedbackRuntimeConfiguration: {}", e.getMessage(), e );
648            throw new RuntimeException( e.getMessage(), e );
649        }
650
651        return value;
652    }
653
654    @Override
655    public boolean getBoolean( String key, boolean defaultValue )
656    {
657        if ( UserConfigurationKeys.LDAP_SSL.equals( key ) )
658        {
659            return getRedbackRuntimeConfiguration().getLdapConfiguration().isSsl();
660        }
661
662        if ( UserConfigurationKeys.LDAP_WRITABLE.equals( key ) )
663        {
664            return getRedbackRuntimeConfiguration().getLdapConfiguration().isWritable();
665        }
666
667        if ( UserConfigurationKeys.LDAP_GROUPS_USE_ROLENAME.equals( key ) )
668        {
669            return getRedbackRuntimeConfiguration().getLdapConfiguration().isUseRoleNameAsGroup();
670        }
671
672        if ( UserConfigurationKeys.LDAP_BIND_AUTHENTICATOR_ENABLED.equals( key ) )
673        {
674            return getRedbackRuntimeConfiguration().getLdapConfiguration().isBindAuthenticatorEnabled();
675        }
676
677        RedbackRuntimeConfiguration conf = getRedbackRuntimeConfiguration();
678
679        if ( conf.getConfigurationProperties().containsKey( key ) )
680        {
681            return Boolean.valueOf( conf.getConfigurationProperties().get( key ) );
682        }
683
684        boolean value = userConfiguration.getBoolean( key, defaultValue );
685
686        conf.getConfigurationProperties().put( key, Boolean.toString( value ) );
687        try
688        {
689            updateRedbackRuntimeConfiguration( conf );
690        }
691        catch ( RepositoryAdminException e )
692        {
693            log.error( "fail to save RedbackRuntimeConfiguration: {}", e.getMessage(), e );
694            throw new RuntimeException( e.getMessage(), e );
695        }
696
697        return value;
698    }
699
700    @Override
701    public List<String> getList( String key )
702    {
703        RedbackRuntimeConfiguration conf = getRedbackRuntimeConfiguration();
704        if (conf.getConfigurationProperties().containsKey(key)) {
705            return Arrays.asList(conf.getConfigurationProperties().get(key).split(","));
706        }
707
708        List<String> value = userConfiguration.getList( key );
709
710        conf.getConfigurationProperties().put( key, "" );
711        try
712        {
713            updateRedbackRuntimeConfiguration( conf );
714        }
715        catch ( RepositoryAdminException e )
716        {
717            log.error( "fail to save RedbackRuntimeConfiguration: {}", e.getMessage(), e );
718            throw new RuntimeException( e.getMessage(), e );
719        }
720
721        return value;
722    }
723
724    @Override
725    public String getConcatenatedList( String key, String defaultValue )
726    {
727        if ( UserConfigurationKeys.LDAP_BASEDN.equals( key ) )
728        {
729            return getRedbackRuntimeConfiguration().getLdapConfiguration().getBaseDn();
730        }
731        if ( UserConfigurationKeys.LDAP_BINDDN.equals( key ) )
732        {
733            return getRedbackRuntimeConfiguration().getLdapConfiguration().getBindDn();
734        }
735        if ( UserConfigurationKeys.LDAP_GROUPS_BASEDN.equals( key ) )
736        {
737            return getRedbackRuntimeConfiguration().getLdapConfiguration().getBaseGroupsDn();
738        }
739        return userConfiguration.getConcatenatedList( key, defaultValue );
740    }
741
742    @Override
743    public Collection<String> getKeys()
744    {
745        Collection<String> keys = userConfiguration.getKeys();
746
747        Set<String> keysSet = new HashSet<>( keys );
748
749        keysSet.addAll( getRedbackRuntimeConfiguration().getConfigurationProperties().keySet() );
750
751        return keysSet;
752    }
753
754
755}