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.redback.components.cache.Cache; 032import org.apache.archiva.redback.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.lang.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 redbackRuntimeConfiguration.getUserManagerImpls().add( impl ); 104 } 105 } 106 else 107 { 108 redbackRuntimeConfiguration.getUserManagerImpls().add( DEFAULT_USER_MANAGER_IMPL ); 109 } 110 111 String rbacManagerImpls = 112 userConfiguration.getConcatenatedList( UserConfigurationKeys.RBAC_MANAGER_IMPL, // 113 DEFAULT_RBAC_MANAGER_IMPL ); 114 115 if ( StringUtils.isNotEmpty( rbacManagerImpls ) ) 116 { 117 String[] impls = StringUtils.split( rbacManagerImpls, ',' ); 118 for ( String impl : impls ) 119 { 120 redbackRuntimeConfiguration.getRbacManagerImpls().add( impl ); 121 } 122 } 123 else 124 { 125 redbackRuntimeConfiguration.getRbacManagerImpls().add( DEFAULT_RBAC_MANAGER_IMPL ); 126 } 127 128 // now ldap 129 130 LdapConfiguration ldapConfiguration = redbackRuntimeConfiguration.getLdapConfiguration(); 131 if ( ldapConfiguration == null ) 132 { 133 ldapConfiguration = new LdapConfiguration(); 134 redbackRuntimeConfiguration.setLdapConfiguration( ldapConfiguration ); 135 } 136 137 ldapConfiguration.setHostName( 138 userConfiguration.getString( UserConfigurationKeys.LDAP_HOSTNAME, null ) ); 139 ldapConfiguration.setPort( userConfiguration.getInt( UserConfigurationKeys.LDAP_PORT, -1 ) ); 140 ldapConfiguration.setSsl( userConfiguration.getBoolean( UserConfigurationKeys.LDAP_SSL, false ) ); 141 ldapConfiguration.setBaseDn( 142 userConfiguration.getConcatenatedList( UserConfigurationKeys.LDAP_BASEDN, null ) ); 143 144 ldapConfiguration.setBaseGroupsDn( 145 userConfiguration.getConcatenatedList( UserConfigurationKeys.LDAP_GROUPS_BASEDN, 146 ldapConfiguration.getBaseDn() ) ); 147 148 ldapConfiguration.setContextFactory( 149 userConfiguration.getString( UserConfigurationKeys.LDAP_CONTEX_FACTORY, 150 isSunContextFactoryAvailable() 151 ? "com.sun.jndi.ldap.LdapCtxFactory" 152 : "" ) ); 153 ldapConfiguration.setBindDn( 154 userConfiguration.getConcatenatedList( UserConfigurationKeys.LDAP_BINDDN, null ) ); 155 ldapConfiguration.setPassword( 156 userConfiguration.getString( UserConfigurationKeys.LDAP_PASSWORD, null ) ); 157 ldapConfiguration.setAuthenticationMethod( 158 userConfiguration.getString( UserConfigurationKeys.LDAP_AUTHENTICATION_METHOD, null ) ); 159 160 ldapConfiguration.setWritable( 161 userConfiguration.getBoolean( UserConfigurationKeys.LDAP_WRITABLE, false ) ); 162 163 ldapConfiguration.setUseRoleNameAsGroup( 164 userConfiguration.getBoolean( UserConfigurationKeys.LDAP_GROUPS_USE_ROLENAME, false ) ); 165 166 boolean ldapBindAuthenticatorEnabled = 167 userConfiguration.getBoolean( UserConfigurationKeys.LDAP_BIND_AUTHENTICATOR_ENABLED, false ); 168 ldapConfiguration.setBindAuthenticatorEnabled( ldapBindAuthenticatorEnabled ); 169 170 // LDAP groups mapping reading !! 171 // UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY 172 // userConfiguration.getKeys() 173 174 Collection<String> keys = userConfiguration.getKeys(); 175 176 List<LdapGroupMapping> ldapGroupMappings = new ArrayList<>(); 177 178 for ( String key : keys ) 179 { 180 if ( key.startsWith( UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY ) ) 181 { 182 String group = 183 StringUtils.substringAfter( key, UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY ); 184 String val = userConfiguration.getConcatenatedList( key, "" ); 185 if ( !StringUtils.isEmpty( val ) ) 186 { 187 String[] roles = StringUtils.split( val, ',' ); 188 ldapGroupMappings.add( new LdapGroupMapping( group, roles ) ); 189 } 190 } 191 } 192 193 redbackRuntimeConfiguration.setLdapGroupMappings( ldapGroupMappings ); 194 195 redbackRuntimeConfiguration.setMigratedFromRedbackConfiguration( true ); 196 197 updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration ); 198 199 } 200 // we must ensure userManagerImpls list is not empty if so put at least jdo one ! 201 if ( redbackRuntimeConfiguration.getUserManagerImpls().isEmpty() ) 202 { 203 log.info( 204 "redbackRuntimeConfiguration with empty userManagerImpls so force at least jdo implementation !" ); 205 redbackRuntimeConfiguration.getUserManagerImpls().add( "jdo" ); 206 updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration ); 207 } 208 else 209 { 210 log.info( "using userManagerImpls: {}", redbackRuntimeConfiguration.getUserManagerImpls() ); 211 } 212 213 // we ensure rbacManagerImpls is not empty if so put at least cached 214 if ( redbackRuntimeConfiguration.getRbacManagerImpls().isEmpty() ) 215 { 216 log.info( 217 "redbackRuntimeConfiguration with empty rbacManagerImpls so force at least cached implementation !" ); 218 redbackRuntimeConfiguration.getRbacManagerImpls().add( "cached" ); 219 updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration ); 220 } 221 else 222 { 223 log.info( "using rbacManagerImpls: {}", redbackRuntimeConfiguration.getRbacManagerImpls() ); 224 } 225 226 boolean save = false; 227 228 // NPE free 229 if ( redbackRuntimeConfiguration.getUsersCacheConfiguration() == null ) 230 { 231 redbackRuntimeConfiguration.setUsersCacheConfiguration( new CacheConfiguration() ); 232 } 233 // if -1 it means non initialized to take values from the spring bean 234 if ( redbackRuntimeConfiguration.getUsersCacheConfiguration().getTimeToIdleSeconds() < 0 ) 235 { 236 redbackRuntimeConfiguration.getUsersCacheConfiguration().setTimeToIdleSeconds( 237 usersCache.getTimeToIdleSeconds() ); 238 save = true; 239 240 } 241 usersCache.setTimeToIdleSeconds( 242 redbackRuntimeConfiguration.getUsersCacheConfiguration().getTimeToIdleSeconds() ); 243 244 if ( redbackRuntimeConfiguration.getUsersCacheConfiguration().getTimeToLiveSeconds() < 0 ) 245 { 246 redbackRuntimeConfiguration.getUsersCacheConfiguration().setTimeToLiveSeconds( 247 usersCache.getTimeToLiveSeconds() ); 248 save = true; 249 250 } 251 usersCache.setTimeToLiveSeconds( 252 redbackRuntimeConfiguration.getUsersCacheConfiguration().getTimeToLiveSeconds() ); 253 254 if ( redbackRuntimeConfiguration.getUsersCacheConfiguration().getMaxElementsInMemory() < 0 ) 255 { 256 redbackRuntimeConfiguration.getUsersCacheConfiguration().setMaxElementsInMemory( 257 usersCache.getMaxElementsInMemory() ); 258 save = true; 259 } 260 usersCache.setMaxElementsInMemory( 261 redbackRuntimeConfiguration.getUsersCacheConfiguration().getMaxElementsInMemory() ); 262 263 if ( redbackRuntimeConfiguration.getUsersCacheConfiguration().getMaxElementsOnDisk() < 0 ) 264 { 265 redbackRuntimeConfiguration.getUsersCacheConfiguration().setMaxElementsOnDisk( 266 usersCache.getMaxElementsOnDisk() ); 267 save = true; 268 } 269 usersCache.setMaxElementsOnDisk( 270 redbackRuntimeConfiguration.getUsersCacheConfiguration().getMaxElementsOnDisk() ); 271 272 if ( save ) 273 { 274 updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration ); 275 } 276 277 } 278 catch ( RepositoryAdminException e ) 279 { 280 throw new UserConfigurationException( e.getMessage(), e ); 281 } 282 } 283 284 private boolean isSunContextFactoryAvailable() 285 { 286 try 287 { 288 return Thread.currentThread().getContextClassLoader().loadClass( "com.sun.jndi.ldap.LdapCtxFactory" ) 289 != null; 290 } 291 catch ( ClassNotFoundException e ) 292 { 293 return false; 294 } 295 } 296 297 @Override 298 public RedbackRuntimeConfiguration getRedbackRuntimeConfiguration() 299 { 300 return build( archivaConfiguration.getConfiguration().getRedbackRuntimeConfiguration() ); 301 } 302 303 @Override 304 public void updateRedbackRuntimeConfiguration( RedbackRuntimeConfiguration redbackRuntimeConfiguration ) 305 throws RepositoryAdminException 306 { 307 org.apache.archiva.configuration.RedbackRuntimeConfiguration runtimeConfiguration = 308 build( redbackRuntimeConfiguration ); 309 Configuration configuration = archivaConfiguration.getConfiguration(); 310 configuration.setRedbackRuntimeConfiguration( runtimeConfiguration ); 311 try 312 { 313 archivaConfiguration.save( configuration ); 314 } 315 catch ( RegistryException e ) 316 { 317 throw new RepositoryAdminException( e.getMessage(), e ); 318 } 319 catch ( IndeterminateConfigurationException e ) 320 { 321 throw new RepositoryAdminException( e.getMessage(), e ); 322 } 323 } 324 325 private RedbackRuntimeConfiguration build( 326 org.apache.archiva.configuration.RedbackRuntimeConfiguration runtimeConfiguration ) 327 { 328 RedbackRuntimeConfiguration redbackRuntimeConfiguration = 329 getModelMapper().map( runtimeConfiguration, RedbackRuntimeConfiguration.class ); 330 331 if ( runtimeConfiguration.getLdapConfiguration() != null ) 332 { 333 redbackRuntimeConfiguration.setLdapConfiguration( 334 getModelMapper().map( runtimeConfiguration.getLdapConfiguration(), LdapConfiguration.class ) ); 335 } 336 337 if ( runtimeConfiguration.getUsersCacheConfiguration() != null ) 338 { 339 redbackRuntimeConfiguration.setUsersCacheConfiguration( 340 getModelMapper().map( runtimeConfiguration.getUsersCacheConfiguration(), CacheConfiguration.class ) ); 341 } 342 343 if ( redbackRuntimeConfiguration.getLdapConfiguration() == null ) 344 { 345 // prevent NPE 346 redbackRuntimeConfiguration.setLdapConfiguration( new LdapConfiguration() ); 347 } 348 349 if ( redbackRuntimeConfiguration.getUsersCacheConfiguration() == null ) 350 { 351 redbackRuntimeConfiguration.setUsersCacheConfiguration( new CacheConfiguration() ); 352 } 353 354 List<org.apache.archiva.configuration.LdapGroupMapping> mappings = runtimeConfiguration.getLdapGroupMappings(); 355 356 if ( mappings != null && mappings.size() > 0 ) 357 { 358 List<LdapGroupMapping> ldapGroupMappings = new ArrayList<>( mappings.size() ); 359 360 for ( org.apache.archiva.configuration.LdapGroupMapping mapping : mappings ) 361 { 362 ldapGroupMappings.add( new LdapGroupMapping( mapping.getGroup(), mapping.getRoleNames() ) ); 363 } 364 365 redbackRuntimeConfiguration.setLdapGroupMappings( ldapGroupMappings ); 366 } 367 368 cleanupProperties( redbackRuntimeConfiguration ); 369 370 return redbackRuntimeConfiguration; 371 } 372 373 /** 374 * cleaning from map properties used directly in archiva configuration fields 375 * 376 * @param redbackRuntimeConfiguration 377 */ 378 private void cleanupProperties( RedbackRuntimeConfiguration redbackRuntimeConfiguration ) 379 { 380 Map<String, String> properties = redbackRuntimeConfiguration.getConfigurationProperties(); 381 properties.remove( UserConfigurationKeys.LDAP_HOSTNAME ); 382 properties.remove( UserConfigurationKeys.LDAP_PORT ); 383 properties.remove( UserConfigurationKeys.LDAP_BIND_AUTHENTICATOR_ENABLED ); 384 properties.remove( UserConfigurationKeys.LDAP_SSL ); 385 properties.remove( UserConfigurationKeys.LDAP_BASEDN ); 386 properties.remove( UserConfigurationKeys.LDAP_GROUPS_BASEDN ); 387 properties.remove( UserConfigurationKeys.LDAP_CONTEX_FACTORY ); 388 properties.remove( UserConfigurationKeys.LDAP_BINDDN ); 389 properties.remove( UserConfigurationKeys.LDAP_PASSWORD ); 390 properties.remove( UserConfigurationKeys.LDAP_AUTHENTICATION_METHOD ); 391 properties.remove( UserConfigurationKeys.LDAP_WRITABLE ); 392 properties.remove( UserConfigurationKeys.LDAP_GROUPS_USE_ROLENAME ); 393 394 // cleanup groups <-> role mapping 395 /**for ( Map.Entry<String, String> entry : new HashMap<String, String>( properties ).entrySet() ) 396 { 397 if ( entry.getKey().startsWith( UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY ) ) 398 { 399 properties.remove( entry.getKey() ); 400 } 401 }*/ 402 } 403 404 private org.apache.archiva.configuration.RedbackRuntimeConfiguration build( 405 RedbackRuntimeConfiguration redbackRuntimeConfiguration ) 406 { 407 org.apache.archiva.configuration.RedbackRuntimeConfiguration res = 408 getModelMapper().map( redbackRuntimeConfiguration, 409 org.apache.archiva.configuration.RedbackRuntimeConfiguration.class ); 410 411 if ( redbackRuntimeConfiguration.getLdapConfiguration() == null ) 412 { 413 redbackRuntimeConfiguration.setLdapConfiguration( new LdapConfiguration() ); 414 } 415 res.setLdapConfiguration( getModelMapper().map( redbackRuntimeConfiguration.getLdapConfiguration(), 416 org.apache.archiva.configuration.LdapConfiguration.class ) ); 417 418 if ( redbackRuntimeConfiguration.getUsersCacheConfiguration() == null ) 419 { 420 redbackRuntimeConfiguration.setUsersCacheConfiguration( new CacheConfiguration() ); 421 } 422 423 res.setUsersCacheConfiguration( getModelMapper().map( redbackRuntimeConfiguration.getUsersCacheConfiguration(), 424 org.apache.archiva.configuration.CacheConfiguration.class ) ); 425 426 List<LdapGroupMapping> ldapGroupMappings = redbackRuntimeConfiguration.getLdapGroupMappings(); 427 428 if ( ldapGroupMappings != null && ldapGroupMappings.size() > 0 ) 429 { 430 431 List<org.apache.archiva.configuration.LdapGroupMapping> mappings = 432 new ArrayList<>( ldapGroupMappings.size() ); 433 434 for ( LdapGroupMapping ldapGroupMapping : ldapGroupMappings ) 435 { 436 437 org.apache.archiva.configuration.LdapGroupMapping mapping = 438 new org.apache.archiva.configuration.LdapGroupMapping(); 439 mapping.setGroup( ldapGroupMapping.getGroup() ); 440 mapping.setRoleNames( new ArrayList<>( ldapGroupMapping.getRoleNames() ) ); 441 mappings.add( mapping ); 442 443 } 444 res.setLdapGroupMappings( mappings ); 445 } 446 return res; 447 } 448 449 // wrapper for UserConfiguration to intercept values (and store it not yet migrated) 450 451 452 @Override 453 public String getString( String key ) 454 { 455 if ( UserConfigurationKeys.USER_MANAGER_IMPL.equals( key ) ) 456 { 457 // possible false for others than archiva user manager 458 return getRedbackRuntimeConfiguration().getUserManagerImpls().get( 0 ); 459 } 460 461 if ( StringUtils.startsWith( key, UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY ) ) 462 { 463 RedbackRuntimeConfiguration redbackRuntimeConfiguration = getRedbackRuntimeConfiguration(); 464 int index = redbackRuntimeConfiguration.getLdapGroupMappings().indexOf( new LdapGroupMapping( 465 StringUtils.substringAfter( key, UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY ) ) ); 466 if ( index > -1 ) 467 { 468 return StringUtils.join( redbackRuntimeConfiguration.getLdapGroupMappings().get( index ).getRoleNames(), 469 ',' ); 470 } 471 } 472 473 RedbackRuntimeConfiguration conf = getRedbackRuntimeConfiguration(); 474 475 if ( conf.getConfigurationProperties().containsKey( key ) ) 476 { 477 return conf.getConfigurationProperties().get( key ); 478 } 479 480 String value = userConfiguration.getString( key ); 481 if ( value == null ) 482 { 483 return null; 484 } 485 conf.getConfigurationProperties().put( key, value ); 486 487 try 488 { 489 updateRedbackRuntimeConfiguration( conf ); 490 } 491 catch ( RepositoryAdminException e ) 492 { 493 log.error( "fail to save RedbackRuntimeConfiguration: {}", e.getMessage(), e ); 494 throw new RuntimeException( e.getMessage(), e ); 495 } 496 497 return value; 498 } 499 500 @Override 501 public String getString( String key, String defaultValue ) 502 { 503 if ( UserConfigurationKeys.LDAP_HOSTNAME.equals( key ) ) 504 { 505 return getRedbackRuntimeConfiguration().getLdapConfiguration().getHostName(); 506 } 507 if ( UserConfigurationKeys.LDAP_CONTEX_FACTORY.equals( key ) ) 508 { 509 return getRedbackRuntimeConfiguration().getLdapConfiguration().getContextFactory(); 510 } 511 if ( UserConfigurationKeys.LDAP_PASSWORD.equals( key ) ) 512 { 513 return getRedbackRuntimeConfiguration().getLdapConfiguration().getPassword(); 514 } 515 if ( UserConfigurationKeys.LDAP_AUTHENTICATION_METHOD.equals( key ) ) 516 { 517 return getRedbackRuntimeConfiguration().getLdapConfiguration().getAuthenticationMethod(); 518 } 519 520 RedbackRuntimeConfiguration conf = getRedbackRuntimeConfiguration(); 521 522 if ( conf.getConfigurationProperties().containsKey( key ) ) 523 { 524 return conf.getConfigurationProperties().get( key ); 525 } 526 527 String value = userConfiguration.getString( key, defaultValue ); 528 529 if ( value == null ) 530 { 531 return null; 532 } 533 534 conf.getConfigurationProperties().put( key, value ); 535 try 536 { 537 updateRedbackRuntimeConfiguration( conf ); 538 } 539 catch ( RepositoryAdminException e ) 540 { 541 log.error( "fail to save RedbackRuntimeConfiguration: {}", e.getMessage(), e ); 542 throw new RuntimeException( e.getMessage(), e ); 543 } 544 545 return value; 546 } 547 548 @Override 549 public int getInt( String key ) 550 { 551 RedbackRuntimeConfiguration conf = getRedbackRuntimeConfiguration(); 552 553 if ( conf.getConfigurationProperties().containsKey( key ) ) 554 { 555 return Integer.valueOf( conf.getConfigurationProperties().get( key ) ); 556 } 557 558 int value = userConfiguration.getInt( key ); 559 560 conf.getConfigurationProperties().put( key, Integer.toString( value ) ); 561 try 562 { 563 updateRedbackRuntimeConfiguration( conf ); 564 } 565 catch ( RepositoryAdminException e ) 566 { 567 log.error( "fail to save RedbackRuntimeConfiguration: {}", e.getMessage(), e ); 568 throw new RuntimeException( e.getMessage(), e ); 569 } 570 571 return value; 572 } 573 574 @Override 575 public int getInt( String key, int defaultValue ) 576 { 577 if ( UserConfigurationKeys.LDAP_PORT.equals( key ) ) 578 { 579 return getRedbackRuntimeConfiguration().getLdapConfiguration().getPort(); 580 } 581 582 RedbackRuntimeConfiguration conf = getRedbackRuntimeConfiguration(); 583 584 if ( conf.getConfigurationProperties().containsKey( key ) ) 585 { 586 return Integer.valueOf( conf.getConfigurationProperties().get( key ) ); 587 } 588 589 int value = userConfiguration.getInt( key, defaultValue ); 590 591 conf.getConfigurationProperties().put( key, Integer.toString( value ) ); 592 try 593 { 594 updateRedbackRuntimeConfiguration( conf ); 595 } 596 catch ( RepositoryAdminException e ) 597 { 598 log.error( "fail to save RedbackRuntimeConfiguration: {}", e.getMessage(), e ); 599 throw new RuntimeException( e.getMessage(), e ); 600 } 601 602 return value; 603 } 604 605 @Override 606 public boolean getBoolean( String key ) 607 { 608 RedbackRuntimeConfiguration conf = getRedbackRuntimeConfiguration(); 609 610 if ( UserConfigurationKeys.LDAP_WRITABLE.equals( key ) ) 611 { 612 return conf.getLdapConfiguration().isWritable(); 613 } 614 615 if ( UserConfigurationKeys.LDAP_GROUPS_USE_ROLENAME.equals( key ) ) 616 { 617 return conf.getLdapConfiguration().isUseRoleNameAsGroup(); 618 } 619 620 if ( UserConfigurationKeys.LDAP_BIND_AUTHENTICATOR_ENABLED.equals( key ) ) 621 { 622 return conf.getLdapConfiguration().isBindAuthenticatorEnabled(); 623 } 624 625 if ( conf.getConfigurationProperties().containsKey( key ) ) 626 { 627 return Boolean.valueOf( conf.getConfigurationProperties().get( key ) ); 628 } 629 630 boolean value = userConfiguration.getBoolean( key ); 631 632 conf.getConfigurationProperties().put( key, Boolean.toString( value ) ); 633 try 634 { 635 updateRedbackRuntimeConfiguration( conf ); 636 } 637 catch ( RepositoryAdminException e ) 638 { 639 log.error( "fail to save RedbackRuntimeConfiguration: {}", e.getMessage(), e ); 640 throw new RuntimeException( e.getMessage(), e ); 641 } 642 643 return value; 644 } 645 646 @Override 647 public boolean getBoolean( String key, boolean defaultValue ) 648 { 649 if ( UserConfigurationKeys.LDAP_SSL.equals( key ) ) 650 { 651 return getRedbackRuntimeConfiguration().getLdapConfiguration().isSsl(); 652 } 653 654 if ( UserConfigurationKeys.LDAP_WRITABLE.equals( key ) ) 655 { 656 return getRedbackRuntimeConfiguration().getLdapConfiguration().isWritable(); 657 } 658 659 if ( UserConfigurationKeys.LDAP_GROUPS_USE_ROLENAME.equals( key ) ) 660 { 661 return getRedbackRuntimeConfiguration().getLdapConfiguration().isUseRoleNameAsGroup(); 662 } 663 664 if ( UserConfigurationKeys.LDAP_BIND_AUTHENTICATOR_ENABLED.equals( key ) ) 665 { 666 return getRedbackRuntimeConfiguration().getLdapConfiguration().isBindAuthenticatorEnabled(); 667 } 668 669 RedbackRuntimeConfiguration conf = getRedbackRuntimeConfiguration(); 670 671 if ( conf.getConfigurationProperties().containsKey( key ) ) 672 { 673 return Boolean.valueOf( conf.getConfigurationProperties().get( key ) ); 674 } 675 676 boolean value = userConfiguration.getBoolean( key, defaultValue ); 677 678 conf.getConfigurationProperties().put( key, Boolean.toString( value ) ); 679 try 680 { 681 updateRedbackRuntimeConfiguration( conf ); 682 } 683 catch ( RepositoryAdminException e ) 684 { 685 log.error( "fail to save RedbackRuntimeConfiguration: {}", e.getMessage(), e ); 686 throw new RuntimeException( e.getMessage(), e ); 687 } 688 689 return value; 690 } 691 692 @Override 693 public List<String> getList( String key ) 694 { 695 RedbackRuntimeConfiguration conf = getRedbackRuntimeConfiguration(); 696 if (conf.getConfigurationProperties().containsKey(key)) { 697 return Arrays.asList(conf.getConfigurationProperties().get(key).split(",")); 698 } 699 700 List<String> value = userConfiguration.getList( key ); 701 702 conf.getConfigurationProperties().put( key, "" ); 703 try 704 { 705 updateRedbackRuntimeConfiguration( conf ); 706 } 707 catch ( RepositoryAdminException e ) 708 { 709 log.error( "fail to save RedbackRuntimeConfiguration: {}", e.getMessage(), e ); 710 throw new RuntimeException( e.getMessage(), e ); 711 } 712 713 return value; 714 } 715 716 @Override 717 public String getConcatenatedList( String key, String defaultValue ) 718 { 719 if ( UserConfigurationKeys.LDAP_BASEDN.equals( key ) ) 720 { 721 return getRedbackRuntimeConfiguration().getLdapConfiguration().getBaseDn(); 722 } 723 if ( UserConfigurationKeys.LDAP_BINDDN.equals( key ) ) 724 { 725 return getRedbackRuntimeConfiguration().getLdapConfiguration().getBindDn(); 726 } 727 if ( UserConfigurationKeys.LDAP_GROUPS_BASEDN.equals( key ) ) 728 { 729 return getRedbackRuntimeConfiguration().getLdapConfiguration().getBaseGroupsDn(); 730 } 731 return userConfiguration.getConcatenatedList( key, defaultValue ); 732 } 733 734 @Override 735 public Collection<String> getKeys() 736 { 737 Collection<String> keys = userConfiguration.getKeys(); 738 739 Set<String> keysSet = new HashSet<>( keys ); 740 741 keysSet.addAll( getRedbackRuntimeConfiguration().getConfigurationProperties().keySet() ); 742 743 return keysSet; 744 } 745 746 747}