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