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.

ArchivaLdapRoleMapperConfiguration.java 6.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. package org.apache.archiva.web.security;
  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.LdapGroupMapping;
  22. import org.apache.archiva.admin.model.beans.RedbackRuntimeConfiguration;
  23. import org.apache.archiva.admin.model.runtime.RedbackRuntimeConfigurationAdmin;
  24. import org.apache.archiva.redback.common.ldap.MappingException;
  25. import org.apache.archiva.redback.common.ldap.role.LdapRoleMapperConfiguration;
  26. import org.slf4j.Logger;
  27. import org.slf4j.LoggerFactory;
  28. import org.springframework.stereotype.Service;
  29. import javax.inject.Inject;
  30. import javax.inject.Named;
  31. import java.util.ArrayList;
  32. import java.util.Collection;
  33. import java.util.Collections;
  34. import java.util.HashMap;
  35. import java.util.List;
  36. import java.util.Map;
  37. /**
  38. * @author Olivier Lamy
  39. * @since 2.1
  40. */
  41. @Service( "ldapRoleMapperConfiguration#archiva" )
  42. public class ArchivaLdapRoleMapperConfiguration
  43. implements LdapRoleMapperConfiguration
  44. {
  45. private Logger logger = LoggerFactory.getLogger( getClass() );
  46. @Inject
  47. @Named( value = "redbackRuntimeConfigurationAdmin#default" )
  48. private RedbackRuntimeConfigurationAdmin redbackRuntimeConfigurationAdmin;
  49. public void addLdapMapping( String ldapGroup, List<String> roles )
  50. throws MappingException
  51. {
  52. logger.debug( "addLdapMapping ldapGroup: {}, roles: {}", ldapGroup, roles );
  53. // TODO check if already exist first
  54. try
  55. {
  56. RedbackRuntimeConfiguration redbackRuntimeConfiguration =
  57. redbackRuntimeConfigurationAdmin.getRedbackRuntimeConfiguration();
  58. boolean added =
  59. redbackRuntimeConfiguration.getLdapGroupMappings().add( new LdapGroupMapping( ldapGroup, roles ) );
  60. logger.debug( "addLdapMapping ldapGroup: {}, roles: {}, added: {}", ldapGroup, roles, added );
  61. redbackRuntimeConfigurationAdmin.updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration );
  62. }
  63. catch ( RepositoryAdminException e )
  64. {
  65. throw new MappingException( e.getMessage(), e );
  66. }
  67. }
  68. public void updateLdapMapping( String ldapGroup, List<String> roles )
  69. throws MappingException
  70. {
  71. try
  72. {
  73. RedbackRuntimeConfiguration redbackRuntimeConfiguration =
  74. redbackRuntimeConfigurationAdmin.getRedbackRuntimeConfiguration();
  75. LdapGroupMapping ldapGroupMapping = new LdapGroupMapping( ldapGroup );
  76. int idx = redbackRuntimeConfiguration.getLdapGroupMappings().indexOf( ldapGroupMapping );
  77. if ( idx > -1 )
  78. {
  79. logger.debug( "updateLdapMapping ldapGroup: {}, roles: {}", ldapGroup, roles );
  80. ldapGroupMapping = redbackRuntimeConfiguration.getLdapGroupMappings().get( idx );
  81. ldapGroupMapping.setRoleNames( roles );
  82. }
  83. redbackRuntimeConfigurationAdmin.updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration );
  84. }
  85. catch ( RepositoryAdminException e )
  86. {
  87. throw new MappingException( e.getMessage(), e );
  88. }
  89. }
  90. public void removeLdapMapping( String group )
  91. throws MappingException
  92. {
  93. try
  94. {
  95. RedbackRuntimeConfiguration redbackRuntimeConfiguration =
  96. redbackRuntimeConfigurationAdmin.getRedbackRuntimeConfiguration();
  97. boolean removed =
  98. redbackRuntimeConfiguration.getLdapGroupMappings().remove( new LdapGroupMapping( group ) );
  99. redbackRuntimeConfigurationAdmin.updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration );
  100. logger.debug( "removeLdapMapping ldapGroup: {}, removed: {}", group, removed );
  101. }
  102. catch ( RepositoryAdminException e )
  103. {
  104. throw new MappingException( e.getMessage(), e );
  105. }
  106. }
  107. public Map<String, Collection<String>> getLdapGroupMappings()
  108. throws MappingException
  109. {
  110. try
  111. {
  112. RedbackRuntimeConfiguration redbackRuntimeConfiguration =
  113. redbackRuntimeConfigurationAdmin.getRedbackRuntimeConfiguration();
  114. List<LdapGroupMapping> ldapGroupMappings = redbackRuntimeConfiguration.getLdapGroupMappings();
  115. if ( ldapGroupMappings == null )
  116. {
  117. return Collections.emptyMap();
  118. }
  119. Map<String, Collection<String>> res = new HashMap<String, Collection<String>>( ldapGroupMappings.size() );
  120. for ( LdapGroupMapping ldapGroupMapping : ldapGroupMappings )
  121. {
  122. res.put( ldapGroupMapping.getGroup(), ldapGroupMapping.getRoleNames() );
  123. }
  124. return res;
  125. }
  126. catch ( RepositoryAdminException e )
  127. {
  128. throw new MappingException( e.getMessage(), e );
  129. }
  130. }
  131. public void setLdapGroupMappings( Map<String, List<String>> mappings )
  132. throws MappingException
  133. {
  134. try
  135. {
  136. RedbackRuntimeConfiguration redbackRuntimeConfiguration =
  137. redbackRuntimeConfigurationAdmin.getRedbackRuntimeConfiguration();
  138. List<LdapGroupMapping> ldapGroupMappings = new ArrayList<>( mappings.size() );
  139. for ( Map.Entry<String, List<String>> entry : mappings.entrySet() )
  140. {
  141. ldapGroupMappings.add( new LdapGroupMapping( entry.getKey(), entry.getValue() ) );
  142. }
  143. redbackRuntimeConfiguration.setLdapGroupMappings( ldapGroupMappings );
  144. redbackRuntimeConfigurationAdmin.updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration );
  145. }
  146. catch ( RepositoryAdminException e )
  147. {
  148. throw new MappingException( e.getMessage(), e );
  149. }
  150. }
  151. }