You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DefaultRedbackRuntimeConfigurationAdmin.java 28KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723
  1. package org.apache.archiva.admin.repository.runtime;
  2. /*
  3. * Licensed to the Apache Software Foundation (ASF) under one
  4. * or more contributor license agreements. See the NOTICE file
  5. * distributed with this work for additional information
  6. * regarding copyright ownership. The ASF licenses this file
  7. * to you under the Apache License, Version 2.0 (the
  8. * "License"); you may not use this file except in compliance
  9. * with the License. You may obtain a copy of the License at
  10. *
  11. * http://www.apache.org/licenses/LICENSE-2.0
  12. *
  13. * Unless required by applicable law or agreed to in writing,
  14. * software distributed under the License is distributed on an
  15. * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  16. * KIND, either express or implied. See the License for the
  17. * specific language governing permissions and limitations
  18. * under the License.
  19. */
  20. import org.apache.archiva.admin.model.RepositoryAdminException;
  21. import org.apache.archiva.admin.model.beans.CacheConfiguration;
  22. import org.apache.archiva.admin.model.beans.LdapConfiguration;
  23. import org.apache.archiva.admin.model.beans.LdapGroupMapping;
  24. import org.apache.archiva.admin.model.beans.RedbackRuntimeConfiguration;
  25. import org.apache.archiva.admin.model.runtime.RedbackRuntimeConfigurationAdmin;
  26. import org.apache.archiva.admin.repository.AbstractRepositoryAdmin;
  27. import org.apache.archiva.configuration.ArchivaConfiguration;
  28. import org.apache.archiva.configuration.Configuration;
  29. import org.apache.archiva.configuration.IndeterminateConfigurationException;
  30. import org.apache.archiva.redback.components.cache.Cache;
  31. import org.apache.archiva.redback.components.registry.RegistryException;
  32. import org.apache.archiva.redback.configuration.UserConfiguration;
  33. import org.apache.archiva.redback.configuration.UserConfigurationException;
  34. import org.apache.archiva.redback.configuration.UserConfigurationKeys;
  35. import org.apache.commons.lang.StringUtils;
  36. import org.slf4j.Logger;
  37. import org.slf4j.LoggerFactory;
  38. import org.springframework.stereotype.Service;
  39. import javax.annotation.PostConstruct;
  40. import javax.inject.Inject;
  41. import javax.inject.Named;
  42. import java.util.ArrayList;
  43. import java.util.Collection;
  44. import java.util.HashSet;
  45. import java.util.List;
  46. import java.util.Map;
  47. import java.util.Set;
  48. /**
  49. * @author Olivier Lamy
  50. * @since 1.4-M4
  51. */
  52. @Service("redbackRuntimeConfigurationAdmin#default")
  53. public class DefaultRedbackRuntimeConfigurationAdmin
  54. extends AbstractRepositoryAdmin
  55. implements RedbackRuntimeConfigurationAdmin, UserConfiguration
  56. {
  57. protected Logger log = LoggerFactory.getLogger( getClass() );
  58. private ArchivaConfiguration archivaConfiguration;
  59. private UserConfiguration userConfiguration;
  60. private Cache usersCache;
  61. @Inject
  62. public DefaultRedbackRuntimeConfigurationAdmin( ArchivaConfiguration archivaConfiguration,//
  63. @Named(value = "userConfiguration#redback") //
  64. UserConfiguration userConfiguration,
  65. @Named(value = "cache#users") Cache usersCache )
  66. {
  67. this.archivaConfiguration = archivaConfiguration;
  68. this.userConfiguration = userConfiguration;
  69. this.usersCache = usersCache;
  70. }
  71. @PostConstruct
  72. public void initialize()
  73. throws UserConfigurationException
  74. {
  75. try
  76. {
  77. RedbackRuntimeConfiguration redbackRuntimeConfiguration = getRedbackRuntimeConfiguration();
  78. // migrate or not data from redback
  79. if ( !redbackRuntimeConfiguration.isMigratedFromRedbackConfiguration() )
  80. {
  81. // not migrated so build a new fresh one
  82. redbackRuntimeConfiguration = new RedbackRuntimeConfiguration();
  83. // so migrate if available
  84. String userManagerImpl =
  85. userConfiguration.getConcatenatedList( UserConfigurationKeys.USER_MANAGER_IMPL, "jdo" );
  86. if ( StringUtils.isNotEmpty( userManagerImpl ) )
  87. {
  88. String[] impls = StringUtils.split( userManagerImpl, ',' );
  89. for ( String impl : impls )
  90. {
  91. redbackRuntimeConfiguration.getUserManagerImpls().add( impl );
  92. }
  93. }
  94. String rbacManagerImpls =
  95. userConfiguration.getConcatenatedList( UserConfigurationKeys.RBAC_MANAGER_IMPL, "jdo" );
  96. if ( StringUtils.isNotEmpty( rbacManagerImpls ) )
  97. {
  98. String[] impls = StringUtils.split( rbacManagerImpls, ',' );
  99. for ( String impl : impls )
  100. {
  101. redbackRuntimeConfiguration.getRbacManagerImpls().add( impl );
  102. }
  103. }
  104. // now ldap
  105. LdapConfiguration ldapConfiguration = redbackRuntimeConfiguration.getLdapConfiguration();
  106. if ( ldapConfiguration == null )
  107. {
  108. ldapConfiguration = new LdapConfiguration();
  109. redbackRuntimeConfiguration.setLdapConfiguration( ldapConfiguration );
  110. }
  111. ldapConfiguration.setHostName(
  112. userConfiguration.getString( UserConfigurationKeys.LDAP_HOSTNAME, null ) );
  113. ldapConfiguration.setPort( userConfiguration.getInt( UserConfigurationKeys.LDAP_PORT, -1 ) );
  114. ldapConfiguration.setSsl( userConfiguration.getBoolean( UserConfigurationKeys.LDAP_SSL, false ) );
  115. ldapConfiguration.setBaseDn(
  116. userConfiguration.getConcatenatedList( UserConfigurationKeys.LDAP_BASEDN, null ) );
  117. ldapConfiguration.setBaseGroupsDn(
  118. userConfiguration.getConcatenatedList( UserConfigurationKeys.LDAP_GROUPS_BASEDN,
  119. ldapConfiguration.getBaseDn() )
  120. );
  121. ldapConfiguration.setContextFactory(
  122. userConfiguration.getString( UserConfigurationKeys.LDAP_CONTEX_FACTORY,
  123. isSunContextFactoryAvailable()
  124. ? "com.sun.jndi.ldap.LdapCtxFactory"
  125. : ""
  126. )
  127. );
  128. ldapConfiguration.setBindDn(
  129. userConfiguration.getConcatenatedList( UserConfigurationKeys.LDAP_BINDDN, null ) );
  130. ldapConfiguration.setPassword(
  131. userConfiguration.getString( UserConfigurationKeys.LDAP_PASSWORD, null ) );
  132. ldapConfiguration.setAuthenticationMethod(
  133. userConfiguration.getString( UserConfigurationKeys.LDAP_AUTHENTICATION_METHOD, null ) );
  134. ldapConfiguration.setWritable(
  135. userConfiguration.getBoolean( UserConfigurationKeys.LDAP_WRITABLE, false ) );
  136. ldapConfiguration.setUseRoleNameAsGroup(
  137. userConfiguration.getBoolean( UserConfigurationKeys.LDAP_GROUPS_USE_ROLENAME, false ) );
  138. boolean ldapBindAuthenticatorEnabled =
  139. userConfiguration.getBoolean( UserConfigurationKeys.LDAP_BIND_AUTHENTICATOR_ENABLED, false );
  140. ldapConfiguration.setBindAuthenticatorEnabled( ldapBindAuthenticatorEnabled );
  141. // LDAP groups mapping reading !!
  142. // UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY
  143. // userConfiguration.getKeys()
  144. Collection<String> keys = userConfiguration.getKeys();
  145. List<LdapGroupMapping> ldapGroupMappings = new ArrayList<>();
  146. for ( String key : keys )
  147. {
  148. if ( key.startsWith( UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY ) )
  149. {
  150. String group =
  151. StringUtils.substringAfter( key, UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY );
  152. String val = userConfiguration.getConcatenatedList( key, "" );
  153. if ( !StringUtils.isEmpty( val ) )
  154. {
  155. String[] roles = StringUtils.split( val, ',' );
  156. ldapGroupMappings.add( new LdapGroupMapping( group, roles ) );
  157. }
  158. }
  159. }
  160. redbackRuntimeConfiguration.setLdapGroupMappings( ldapGroupMappings );
  161. redbackRuntimeConfiguration.setMigratedFromRedbackConfiguration( true );
  162. updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration );
  163. }
  164. // we must ensure userManagerImpls list is not empty if so put at least jdo one !
  165. if ( redbackRuntimeConfiguration.getUserManagerImpls().isEmpty() )
  166. {
  167. log.info(
  168. "redbackRuntimeConfiguration with empty userManagerImpls so force at least jdo implementation !" );
  169. redbackRuntimeConfiguration.getUserManagerImpls().add( "jdo" );
  170. updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration );
  171. }
  172. else
  173. {
  174. log.info( "using userManagerImpls: {}", redbackRuntimeConfiguration.getUserManagerImpls() );
  175. }
  176. // we ensure rbacManagerImpls is not empty if so put at least cached
  177. if ( redbackRuntimeConfiguration.getRbacManagerImpls().isEmpty() )
  178. {
  179. log.info(
  180. "redbackRuntimeConfiguration with empty rbacManagerImpls so force at least cached implementation !" );
  181. redbackRuntimeConfiguration.getRbacManagerImpls().add( "cached" );
  182. updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration );
  183. }
  184. else
  185. {
  186. log.info( "using rbacManagerImpls: {}", redbackRuntimeConfiguration.getRbacManagerImpls() );
  187. }
  188. boolean save = false;
  189. // NPE free
  190. if ( redbackRuntimeConfiguration.getUsersCacheConfiguration() == null )
  191. {
  192. redbackRuntimeConfiguration.setUsersCacheConfiguration( new CacheConfiguration() );
  193. }
  194. // if -1 it means non initialized to take values from the spring bean
  195. if ( redbackRuntimeConfiguration.getUsersCacheConfiguration().getTimeToIdleSeconds() < 0 )
  196. {
  197. redbackRuntimeConfiguration.getUsersCacheConfiguration().setTimeToIdleSeconds(
  198. usersCache.getTimeToIdleSeconds() );
  199. save = true;
  200. }
  201. usersCache.setTimeToIdleSeconds(
  202. redbackRuntimeConfiguration.getUsersCacheConfiguration().getTimeToIdleSeconds() );
  203. if ( redbackRuntimeConfiguration.getUsersCacheConfiguration().getTimeToLiveSeconds() < 0 )
  204. {
  205. redbackRuntimeConfiguration.getUsersCacheConfiguration().setTimeToLiveSeconds(
  206. usersCache.getTimeToLiveSeconds() );
  207. save = true;
  208. }
  209. usersCache.setTimeToLiveSeconds(
  210. redbackRuntimeConfiguration.getUsersCacheConfiguration().getTimeToLiveSeconds() );
  211. if ( redbackRuntimeConfiguration.getUsersCacheConfiguration().getMaxElementsInMemory() < 0 )
  212. {
  213. redbackRuntimeConfiguration.getUsersCacheConfiguration().setMaxElementsInMemory(
  214. usersCache.getMaxElementsInMemory() );
  215. save = true;
  216. }
  217. usersCache.setMaxElementsInMemory(
  218. redbackRuntimeConfiguration.getUsersCacheConfiguration().getMaxElementsInMemory() );
  219. if ( redbackRuntimeConfiguration.getUsersCacheConfiguration().getMaxElementsOnDisk() < 0 )
  220. {
  221. redbackRuntimeConfiguration.getUsersCacheConfiguration().setMaxElementsOnDisk(
  222. usersCache.getMaxElementsOnDisk() );
  223. save = true;
  224. }
  225. usersCache.setMaxElementsOnDisk(
  226. redbackRuntimeConfiguration.getUsersCacheConfiguration().getMaxElementsOnDisk() );
  227. if ( save )
  228. {
  229. updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration );
  230. }
  231. }
  232. catch ( RepositoryAdminException e )
  233. {
  234. throw new UserConfigurationException( e.getMessage(), e );
  235. }
  236. }
  237. private boolean isSunContextFactoryAvailable()
  238. {
  239. try
  240. {
  241. return Thread.currentThread().getContextClassLoader().loadClass( "com.sun.jndi.ldap.LdapCtxFactory" )
  242. != null;
  243. }
  244. catch ( ClassNotFoundException e )
  245. {
  246. return false;
  247. }
  248. }
  249. public RedbackRuntimeConfiguration getRedbackRuntimeConfiguration()
  250. {
  251. return build( archivaConfiguration.getConfiguration().getRedbackRuntimeConfiguration() );
  252. }
  253. public void updateRedbackRuntimeConfiguration( RedbackRuntimeConfiguration redbackRuntimeConfiguration )
  254. throws RepositoryAdminException
  255. {
  256. org.apache.archiva.configuration.RedbackRuntimeConfiguration runtimeConfiguration =
  257. build( redbackRuntimeConfiguration );
  258. Configuration configuration = archivaConfiguration.getConfiguration();
  259. configuration.setRedbackRuntimeConfiguration( runtimeConfiguration );
  260. try
  261. {
  262. archivaConfiguration.save( configuration );
  263. }
  264. catch ( RegistryException e )
  265. {
  266. throw new RepositoryAdminException( e.getMessage(), e );
  267. }
  268. catch ( IndeterminateConfigurationException e )
  269. {
  270. throw new RepositoryAdminException( e.getMessage(), e );
  271. }
  272. }
  273. private RedbackRuntimeConfiguration build(
  274. org.apache.archiva.configuration.RedbackRuntimeConfiguration runtimeConfiguration )
  275. {
  276. RedbackRuntimeConfiguration redbackRuntimeConfiguration =
  277. getModelMapper().map( runtimeConfiguration, RedbackRuntimeConfiguration.class );
  278. if ( runtimeConfiguration.getLdapConfiguration() != null )
  279. {
  280. redbackRuntimeConfiguration.setLdapConfiguration(
  281. getModelMapper().map( runtimeConfiguration.getLdapConfiguration(), LdapConfiguration.class ) );
  282. }
  283. if ( runtimeConfiguration.getUsersCacheConfiguration() != null )
  284. {
  285. redbackRuntimeConfiguration.setUsersCacheConfiguration(
  286. getModelMapper().map( runtimeConfiguration.getUsersCacheConfiguration(), CacheConfiguration.class ) );
  287. }
  288. if ( redbackRuntimeConfiguration.getLdapConfiguration() == null )
  289. {
  290. // prevent NPE
  291. redbackRuntimeConfiguration.setLdapConfiguration( new LdapConfiguration() );
  292. }
  293. if ( redbackRuntimeConfiguration.getUsersCacheConfiguration() == null )
  294. {
  295. redbackRuntimeConfiguration.setUsersCacheConfiguration( new CacheConfiguration() );
  296. }
  297. List<org.apache.archiva.configuration.LdapGroupMapping> mappings = runtimeConfiguration.getLdapGroupMappings();
  298. if ( mappings != null && mappings.size() > 0 )
  299. {
  300. List<LdapGroupMapping> ldapGroupMappings = new ArrayList<>( mappings.size() );
  301. for ( org.apache.archiva.configuration.LdapGroupMapping mapping : mappings )
  302. {
  303. ldapGroupMappings.add( new LdapGroupMapping( mapping.getGroup(), mapping.getRoleNames() ) );
  304. }
  305. redbackRuntimeConfiguration.setLdapGroupMappings( ldapGroupMappings );
  306. }
  307. cleanupProperties( redbackRuntimeConfiguration );
  308. return redbackRuntimeConfiguration;
  309. }
  310. /**
  311. * cleaning from map properties used directly in archiva configuration fields
  312. *
  313. * @param redbackRuntimeConfiguration
  314. */
  315. private void cleanupProperties( RedbackRuntimeConfiguration redbackRuntimeConfiguration )
  316. {
  317. Map<String, String> properties = redbackRuntimeConfiguration.getConfigurationProperties();
  318. properties.remove( UserConfigurationKeys.LDAP_HOSTNAME );
  319. properties.remove( UserConfigurationKeys.LDAP_PORT );
  320. properties.remove( UserConfigurationKeys.LDAP_BIND_AUTHENTICATOR_ENABLED );
  321. properties.remove( UserConfigurationKeys.LDAP_SSL );
  322. properties.remove( UserConfigurationKeys.LDAP_BASEDN );
  323. properties.remove( UserConfigurationKeys.LDAP_GROUPS_BASEDN );
  324. properties.remove( UserConfigurationKeys.LDAP_CONTEX_FACTORY );
  325. properties.remove( UserConfigurationKeys.LDAP_BINDDN );
  326. properties.remove( UserConfigurationKeys.LDAP_PASSWORD );
  327. properties.remove( UserConfigurationKeys.LDAP_AUTHENTICATION_METHOD );
  328. properties.remove( UserConfigurationKeys.LDAP_WRITABLE );
  329. properties.remove( UserConfigurationKeys.LDAP_GROUPS_USE_ROLENAME );
  330. // cleanup groups <-> role mapping
  331. /**for ( Map.Entry<String, String> entry : new HashMap<String, String>( properties ).entrySet() )
  332. {
  333. if ( entry.getKey().startsWith( UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY ) )
  334. {
  335. properties.remove( entry.getKey() );
  336. }
  337. }*/
  338. }
  339. private org.apache.archiva.configuration.RedbackRuntimeConfiguration build(
  340. RedbackRuntimeConfiguration redbackRuntimeConfiguration )
  341. {
  342. org.apache.archiva.configuration.RedbackRuntimeConfiguration res =
  343. getModelMapper().map( redbackRuntimeConfiguration,
  344. org.apache.archiva.configuration.RedbackRuntimeConfiguration.class );
  345. if ( redbackRuntimeConfiguration.getLdapConfiguration() == null )
  346. {
  347. redbackRuntimeConfiguration.setLdapConfiguration( new LdapConfiguration() );
  348. }
  349. res.setLdapConfiguration( getModelMapper().map( redbackRuntimeConfiguration.getLdapConfiguration(),
  350. org.apache.archiva.configuration.LdapConfiguration.class ) );
  351. if ( redbackRuntimeConfiguration.getUsersCacheConfiguration() == null )
  352. {
  353. redbackRuntimeConfiguration.setUsersCacheConfiguration( new CacheConfiguration() );
  354. }
  355. res.setUsersCacheConfiguration( getModelMapper().map( redbackRuntimeConfiguration.getUsersCacheConfiguration(),
  356. org.apache.archiva.configuration.CacheConfiguration.class ) );
  357. List<LdapGroupMapping> ldapGroupMappings = redbackRuntimeConfiguration.getLdapGroupMappings();
  358. if ( ldapGroupMappings != null && ldapGroupMappings.size() > 0 )
  359. {
  360. List<org.apache.archiva.configuration.LdapGroupMapping> mappings =
  361. new ArrayList<>( ldapGroupMappings.size() );
  362. for ( LdapGroupMapping ldapGroupMapping : ldapGroupMappings )
  363. {
  364. org.apache.archiva.configuration.LdapGroupMapping mapping =
  365. new org.apache.archiva.configuration.LdapGroupMapping();
  366. mapping.setGroup( ldapGroupMapping.getGroup() );
  367. mapping.setRoleNames( new ArrayList<>( ldapGroupMapping.getRoleNames() ) );
  368. mappings.add( mapping );
  369. }
  370. res.setLdapGroupMappings( mappings );
  371. }
  372. return res;
  373. }
  374. // wrapper for UserConfiguration to intercept values (and store it not yet migrated)
  375. public String getString( String key )
  376. {
  377. if ( UserConfigurationKeys.USER_MANAGER_IMPL.equals( key ) )
  378. {
  379. // possible false for others than archiva user manager
  380. return getRedbackRuntimeConfiguration().getUserManagerImpls().get( 0 );
  381. }
  382. if ( StringUtils.startsWith( key, UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY ) )
  383. {
  384. RedbackRuntimeConfiguration redbackRuntimeConfiguration = getRedbackRuntimeConfiguration();
  385. int index = redbackRuntimeConfiguration.getLdapGroupMappings().indexOf( new LdapGroupMapping(
  386. StringUtils.substringAfter( key, UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY ) ) );
  387. if ( index > -1 )
  388. {
  389. return StringUtils.join( redbackRuntimeConfiguration.getLdapGroupMappings().get( index ).getRoleNames(),
  390. ',' );
  391. }
  392. }
  393. RedbackRuntimeConfiguration conf = getRedbackRuntimeConfiguration();
  394. if ( conf.getConfigurationProperties().containsKey( key ) )
  395. {
  396. return conf.getConfigurationProperties().get( key );
  397. }
  398. String value = userConfiguration.getString( key );
  399. if ( value == null )
  400. {
  401. return null;
  402. }
  403. conf.getConfigurationProperties().put( key, value );
  404. try
  405. {
  406. updateRedbackRuntimeConfiguration( conf );
  407. }
  408. catch ( RepositoryAdminException e )
  409. {
  410. log.error( "fail to save RedbackRuntimeConfiguration: {}", e.getMessage(), e );
  411. throw new RuntimeException( e.getMessage(), e );
  412. }
  413. return value;
  414. }
  415. public String getString( String key, String defaultValue )
  416. {
  417. if ( UserConfigurationKeys.LDAP_HOSTNAME.equals( key ) )
  418. {
  419. return getRedbackRuntimeConfiguration().getLdapConfiguration().getHostName();
  420. }
  421. if ( UserConfigurationKeys.LDAP_CONTEX_FACTORY.equals( key ) )
  422. {
  423. return getRedbackRuntimeConfiguration().getLdapConfiguration().getContextFactory();
  424. }
  425. if ( UserConfigurationKeys.LDAP_PASSWORD.equals( key ) )
  426. {
  427. return getRedbackRuntimeConfiguration().getLdapConfiguration().getPassword();
  428. }
  429. if ( UserConfigurationKeys.LDAP_AUTHENTICATION_METHOD.equals( key ) )
  430. {
  431. return getRedbackRuntimeConfiguration().getLdapConfiguration().getAuthenticationMethod();
  432. }
  433. RedbackRuntimeConfiguration conf = getRedbackRuntimeConfiguration();
  434. if ( conf.getConfigurationProperties().containsKey( key ) )
  435. {
  436. return conf.getConfigurationProperties().get( key );
  437. }
  438. String value = userConfiguration.getString( key, defaultValue );
  439. if ( value == null )
  440. {
  441. return null;
  442. }
  443. conf.getConfigurationProperties().put( key, value );
  444. try
  445. {
  446. updateRedbackRuntimeConfiguration( conf );
  447. }
  448. catch ( RepositoryAdminException e )
  449. {
  450. log.error( "fail to save RedbackRuntimeConfiguration: {}", e.getMessage(), e );
  451. throw new RuntimeException( e.getMessage(), e );
  452. }
  453. return value;
  454. }
  455. public int getInt( String key )
  456. {
  457. RedbackRuntimeConfiguration conf = getRedbackRuntimeConfiguration();
  458. if ( conf.getConfigurationProperties().containsKey( key ) )
  459. {
  460. return Integer.valueOf( conf.getConfigurationProperties().get( key ) );
  461. }
  462. int value = userConfiguration.getInt( key );
  463. conf.getConfigurationProperties().put( key, Integer.toString( value ) );
  464. try
  465. {
  466. updateRedbackRuntimeConfiguration( conf );
  467. }
  468. catch ( RepositoryAdminException e )
  469. {
  470. log.error( "fail to save RedbackRuntimeConfiguration: {}", e.getMessage(), e );
  471. throw new RuntimeException( e.getMessage(), e );
  472. }
  473. return value;
  474. }
  475. public int getInt( String key, int defaultValue )
  476. {
  477. if ( UserConfigurationKeys.LDAP_PORT.equals( key ) )
  478. {
  479. return getRedbackRuntimeConfiguration().getLdapConfiguration().getPort();
  480. }
  481. RedbackRuntimeConfiguration conf = getRedbackRuntimeConfiguration();
  482. if ( conf.getConfigurationProperties().containsKey( key ) )
  483. {
  484. return Integer.valueOf( conf.getConfigurationProperties().get( key ) );
  485. }
  486. int value = userConfiguration.getInt( key, defaultValue );
  487. conf.getConfigurationProperties().put( key, Integer.toString( value ) );
  488. try
  489. {
  490. updateRedbackRuntimeConfiguration( conf );
  491. }
  492. catch ( RepositoryAdminException e )
  493. {
  494. log.error( "fail to save RedbackRuntimeConfiguration: {}", e.getMessage(), e );
  495. throw new RuntimeException( e.getMessage(), e );
  496. }
  497. return value;
  498. }
  499. public boolean getBoolean( String key )
  500. {
  501. RedbackRuntimeConfiguration conf = getRedbackRuntimeConfiguration();
  502. if ( UserConfigurationKeys.LDAP_WRITABLE.equals( key ) )
  503. {
  504. return conf.getLdapConfiguration().isWritable();
  505. }
  506. if ( UserConfigurationKeys.LDAP_GROUPS_USE_ROLENAME.equals( key ) )
  507. {
  508. return conf.getLdapConfiguration().isUseRoleNameAsGroup();
  509. }
  510. if ( UserConfigurationKeys.LDAP_BIND_AUTHENTICATOR_ENABLED.equals( key ) )
  511. {
  512. return conf.getLdapConfiguration().isBindAuthenticatorEnabled();
  513. }
  514. if ( conf.getConfigurationProperties().containsKey( key ) )
  515. {
  516. return Boolean.valueOf( conf.getConfigurationProperties().get( key ) );
  517. }
  518. boolean value = userConfiguration.getBoolean( key );
  519. conf.getConfigurationProperties().put( key, Boolean.toString( value ) );
  520. try
  521. {
  522. updateRedbackRuntimeConfiguration( conf );
  523. }
  524. catch ( RepositoryAdminException e )
  525. {
  526. log.error( "fail to save RedbackRuntimeConfiguration: {}", e.getMessage(), e );
  527. throw new RuntimeException( e.getMessage(), e );
  528. }
  529. return value;
  530. }
  531. public boolean getBoolean( String key, boolean defaultValue )
  532. {
  533. if ( UserConfigurationKeys.LDAP_SSL.equals( key ) )
  534. {
  535. return getRedbackRuntimeConfiguration().getLdapConfiguration().isSsl();
  536. }
  537. if ( UserConfigurationKeys.LDAP_WRITABLE.equals( key ) )
  538. {
  539. return getRedbackRuntimeConfiguration().getLdapConfiguration().isWritable();
  540. }
  541. if ( UserConfigurationKeys.LDAP_GROUPS_USE_ROLENAME.equals( key ) )
  542. {
  543. return getRedbackRuntimeConfiguration().getLdapConfiguration().isUseRoleNameAsGroup();
  544. }
  545. if ( UserConfigurationKeys.LDAP_BIND_AUTHENTICATOR_ENABLED.equals( key ) )
  546. {
  547. return getRedbackRuntimeConfiguration().getLdapConfiguration().isBindAuthenticatorEnabled();
  548. }
  549. RedbackRuntimeConfiguration conf = getRedbackRuntimeConfiguration();
  550. if ( conf.getConfigurationProperties().containsKey( key ) )
  551. {
  552. return Boolean.valueOf( conf.getConfigurationProperties().get( key ) );
  553. }
  554. boolean value = userConfiguration.getBoolean( key, defaultValue );
  555. conf.getConfigurationProperties().put( key, Boolean.toString( value ) );
  556. try
  557. {
  558. updateRedbackRuntimeConfiguration( conf );
  559. }
  560. catch ( RepositoryAdminException e )
  561. {
  562. log.error( "fail to save RedbackRuntimeConfiguration: {}", e.getMessage(), e );
  563. throw new RuntimeException( e.getMessage(), e );
  564. }
  565. return value;
  566. }
  567. public List<String> getList( String key )
  568. {
  569. List<String> value = userConfiguration.getList( key );
  570. RedbackRuntimeConfiguration conf = getRedbackRuntimeConfiguration();
  571. // TODO concat values
  572. conf.getConfigurationProperties().put( key, "" );
  573. try
  574. {
  575. updateRedbackRuntimeConfiguration( conf );
  576. }
  577. catch ( RepositoryAdminException e )
  578. {
  579. log.error( "fail to save RedbackRuntimeConfiguration: {}", e.getMessage(), e );
  580. throw new RuntimeException( e.getMessage(), e );
  581. }
  582. return value;
  583. }
  584. public String getConcatenatedList( String key, String defaultValue )
  585. {
  586. if ( UserConfigurationKeys.LDAP_BASEDN.equals( key ) )
  587. {
  588. return getRedbackRuntimeConfiguration().getLdapConfiguration().getBaseDn();
  589. }
  590. if ( UserConfigurationKeys.LDAP_BINDDN.equals( key ) )
  591. {
  592. return getRedbackRuntimeConfiguration().getLdapConfiguration().getBindDn();
  593. }
  594. if ( UserConfigurationKeys.LDAP_GROUPS_BASEDN.equals( key ) )
  595. {
  596. return getRedbackRuntimeConfiguration().getLdapConfiguration().getBaseGroupsDn();
  597. }
  598. return userConfiguration.getConcatenatedList( key, defaultValue );
  599. }
  600. public Collection<String> getKeys()
  601. {
  602. Collection<String> keys = userConfiguration.getKeys();
  603. Set<String> keysSet = new HashSet<String>( keys );
  604. keysSet.addAll( getRedbackRuntimeConfiguration().getConfigurationProperties().keySet() );
  605. return keysSet;
  606. }
  607. }