This project has retired. For details please refer to its
Attic page.
LdapExpandedAuthenticator xref
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.juddi.v3.auth;
17
18 import java.util.HashMap;
19 import java.util.Hashtable;
20 import java.util.Map;
21
22 import javax.naming.Context;
23 import javax.naming.NamingException;
24 import javax.naming.ldap.InitialLdapContext;
25 import javax.naming.ldap.LdapContext;
26 import javax.persistence.EntityManager;
27 import javax.persistence.EntityTransaction;
28 import javax.xml.ws.WebServiceContext;
29
30 import org.apache.commons.logging.Log;
31 import org.apache.commons.logging.LogFactory;
32
33 import org.apache.juddi.config.AppConfig;
34 import org.apache.juddi.config.PersistenceManager;
35 import org.apache.juddi.config.Property;
36 import org.apache.juddi.model.Publisher;
37 import org.apache.juddi.model.UddiEntityPublisher;
38 import org.apache.juddi.v3.error.AuthenticationException;
39 import org.apache.juddi.v3.error.ErrorMessage;
40 import org.apache.juddi.v3.error.FatalErrorException;
41 import org.apache.juddi.v3.error.UnknownUserException;
42
43 import org.apache.commons.configuration.ConfigurationException;
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 public class LdapExpandedAuthenticator implements Authenticator {
71 private Log logger = LogFactory.getLog(this.getClass());
72
73 private LdapContext ctx = null;
74
75 private Hashtable<String, String> env = null;
76 private String url = null;
77
78 private static final String DEFAULT_URL = "ldap://localhost:389";
79
80 public LdapExpandedAuthenticator() throws NamingException, ConfigurationException {
81 String authURL = null;
82 try {
83 authURL = AppConfig.getConfiguration().getString(Property.JUDDI_AUTHENTICATOR_URL, DEFAULT_URL);
84 } catch (ConfigurationException ce) {
85 logger.error("Configuration exception occurred retrieving: " + Property.JUDDI_AUTHENTICATOR_URL);
86 throw new NamingException(Property.JUDDI_AUTHENTICATOR_URL + " missing from config or config is not available.");
87 }
88 init(authURL);
89 }
90
91 public LdapExpandedAuthenticator(String url) throws NamingException, ConfigurationException {
92 init(url);
93 }
94
95 public void init(String url) throws NamingException, ConfigurationException {
96 env = new Hashtable<String, String>();
97 env.put(Context.INITIAL_CONTEXT_FACTORY, AppConfig.getConfiguration().getString(Property.JUDDI_AUTHENTICATOR_INITIAL_CONTEXT, "com.sun.jndi.ldap.LdapCtxFactory"));
98 env.put(Context.SECURITY_AUTHENTICATION, AppConfig.getConfiguration().getString(Property.JUDDI_AUTHENTICATOR_STYLE, "simple"));
99 env.put(Context.PROVIDER_URL, url);
100
101 this.url = url;
102
103 try {
104 ctx = new InitialLdapContext(env, null);
105 } catch (NamingException e) {
106 logger.error("Naming exception " + e);
107 throw e;
108 }
109 }
110
111 public String authenticate(String authorizedName, String cred)
112 throws AuthenticationException, FatalErrorException {
113 if (authorizedName == null || "".equals(authorizedName)) {
114 throw new UnknownUserException(new ErrorMessage("errors.auth.NoPublisher", authorizedName));
115 }
116
117 boolean isLdapUser = false;
118
119 int MaxBindingsPerService = -1;
120 int MaxServicesPerBusiness = -1;
121 int MaxTmodels = -1;
122 int MaxBusinesses = -1;
123 try {
124 MaxBindingsPerService = AppConfig.getConfiguration().getInt(Property.JUDDI_MAX_BINDINGS_PER_SERVICE, -1);
125 MaxServicesPerBusiness = AppConfig.getConfiguration().getInt(Property.JUDDI_MAX_SERVICES_PER_BUSINESS, -1);
126 MaxTmodels = AppConfig.getConfiguration().getInt(Property.JUDDI_MAX_TMODELS_PER_PUBLISHER, -1);
127 MaxBusinesses = AppConfig.getConfiguration().getInt(Property.JUDDI_MAX_BUSINESSES_PER_PUBLISHER, -1);
128 } catch (Exception ex) {
129 MaxBindingsPerService = -1;
130 MaxServicesPerBusiness = -1;
131 MaxTmodels = -1;
132 MaxBusinesses = -1;
133 logger.error("config exception! " + authorizedName, ex);
134 }
135
136 try {
137 env = new Hashtable<String, String>();
138 env.put(Context.INITIAL_CONTEXT_FACTORY, AppConfig.getConfiguration().getString(Property.JUDDI_AUTHENTICATOR_INITIAL_CONTEXT, "com.sun.jndi.ldap.LdapCtxFactory"));
139 env.put(Context.SECURITY_AUTHENTICATION, AppConfig.getConfiguration().getString(Property.JUDDI_AUTHENTICATOR_STYLE, "simple"));
140
141 env.put(Context.PROVIDER_URL, url);
142 String format = String.format(AppConfig.getConfiguration().getString(Property.JUDDI_AUTHENTICATOR_LDAP_EXPANDED_STR), authorizedName);
143
144 env.put(Context.SECURITY_PRINCIPAL, format);
145 env.put(Context.SECURITY_CREDENTIALS, cred);
146 ctx = new InitialLdapContext(env, null);
147 isLdapUser = true;
148 logger.info(authorizedName + " is authenticated");
149
150 } catch (ConfigurationException e) {
151 logger.error(authorizedName + " is not authenticated", e);
152 throw new UnknownUserException(new ErrorMessage("errors.auth.NoPublisher", authorizedName));
153 }
154 catch (NamingException e) {
155 logger.error(authorizedName + " is not authenticated");
156 throw new UnknownUserException(new ErrorMessage("errors.auth.NoPublisher", authorizedName));
157 }finally {
158 try {
159 ctx.close();
160 } catch (NamingException e) {
161 logger.error("Context close failure " + e);
162 }
163 }
164
165 if (isLdapUser) {
166 EntityManager em = PersistenceManager.getEntityManager();
167 EntityTransaction tx = em.getTransaction();
168 try {
169 tx.begin();
170 Publisher publisher = em.find(Publisher.class, authorizedName);
171 if (publisher == null) {
172 logger.warn("Publisher was not found in the database, adding the publisher in on the fly.");
173 publisher = new Publisher();
174 publisher.setAuthorizedName(authorizedName);
175 publisher.setIsAdmin("false");
176 publisher.setIsEnabled("true");
177 publisher.setMaxBindingsPerService(MaxBindingsPerService);
178 publisher.setMaxBusinesses(MaxBusinesses);
179 publisher.setMaxServicesPerBusiness(MaxServicesPerBusiness);
180 publisher.setMaxTmodels(MaxTmodels);
181 publisher.setPublisherName("Unknown");
182 em.persist(publisher);
183 tx.commit();
184 }
185 } finally {
186 if (tx.isActive()) {
187 tx.rollback();
188 }
189 em.close();
190 }
191 } else {
192 throw new UnknownUserException(new ErrorMessage("errors.auth.NoPublisher", authorizedName));
193 }
194 return authorizedName;
195 }
196
197 public UddiEntityPublisher identify(String authInfo, String authorizedName, WebServiceContext ctx) throws AuthenticationException, FatalErrorException {
198 EntityManager em = PersistenceManager.getEntityManager();
199 EntityTransaction tx = em.getTransaction();
200 try {
201 tx.begin();
202 Publisher publisher = em.find(Publisher.class, authorizedName);
203 if (publisher == null)
204 throw new UnknownUserException(new ErrorMessage("errors.auth.NoPublisher", authorizedName));
205 return publisher;
206 } finally {
207 if (tx.isActive()) {
208 tx.rollback();
209 }
210 em.close();
211 }
212 }
213 }