annotate src/de/mpiwg/itgroup/annotationManager/restlet/RestServer.java @ 15:6c7c4140630d

on the way to updating annotations.
author casties
date Wed, 21 Mar 2012 18:12:45 +0100
parents 9393c9c9b916
children 0cd1e7608d25
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
dwinter
parents:
diff changeset
1 package de.mpiwg.itgroup.annotationManager.restlet;
dwinter
parents:
diff changeset
2
9
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
3 import java.io.File;
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
4 import java.io.FileInputStream;
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
5 import java.io.FileNotFoundException;
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
6 import java.io.IOException;
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
7 import java.io.InputStream;
0
dwinter
parents:
diff changeset
8 import java.net.URI;
dwinter
parents:
diff changeset
9 import java.net.URISyntaxException;
dwinter
parents:
diff changeset
10 import java.util.Hashtable;
9
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
11 import java.util.Properties;
0
dwinter
parents:
diff changeset
12
dwinter
parents:
diff changeset
13 import javax.naming.NamingEnumeration;
dwinter
parents:
diff changeset
14 import javax.naming.NamingException;
dwinter
parents:
diff changeset
15 import javax.naming.directory.Attribute;
dwinter
parents:
diff changeset
16 import javax.naming.directory.DirContext;
dwinter
parents:
diff changeset
17 import javax.naming.directory.InitialDirContext;
dwinter
parents:
diff changeset
18 import javax.naming.directory.SearchControls;
dwinter
parents:
diff changeset
19 import javax.naming.directory.SearchResult;
dwinter
parents:
diff changeset
20 import javax.security.auth.Subject;
dwinter
parents:
diff changeset
21 import javax.security.auth.login.Configuration;
dwinter
parents:
diff changeset
22 import javax.security.auth.login.LoginContext;
dwinter
parents:
diff changeset
23 import javax.security.auth.login.LoginException;
9
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
24 import javax.servlet.ServletContext;
0
dwinter
parents:
diff changeset
25
dwinter
parents:
diff changeset
26 import org.apache.log4j.BasicConfigurator;
dwinter
parents:
diff changeset
27 import org.apache.log4j.Level;
dwinter
parents:
diff changeset
28 import org.apache.log4j.Logger;
dwinter
parents:
diff changeset
29 import org.restlet.Application;
dwinter
parents:
diff changeset
30 import org.restlet.Context;
dwinter
parents:
diff changeset
31 import org.restlet.Request;
dwinter
parents:
diff changeset
32 import org.restlet.Response;
dwinter
parents:
diff changeset
33 import org.restlet.Restlet;
dwinter
parents:
diff changeset
34 import org.restlet.data.ChallengeScheme;
dwinter
parents:
diff changeset
35 import org.restlet.data.ClientInfo;
dwinter
parents:
diff changeset
36 import org.restlet.ext.jaas.JaasVerifier;
dwinter
parents:
diff changeset
37 import org.restlet.routing.Router;
dwinter
parents:
diff changeset
38 import org.restlet.security.ChallengeAuthenticator;
dwinter
parents:
diff changeset
39 import org.restlet.security.User;
dwinter
parents:
diff changeset
40
dwinter
parents:
diff changeset
41 import com.sun.security.auth.login.ConfigFile;
dwinter
parents:
diff changeset
42
dwinter
parents:
diff changeset
43 public class RestServer extends Application {
dwinter
parents:
diff changeset
44
9
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
45 private ChallengeAuthenticator authenticator;
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
46
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
47 /**
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
48 * Properties holding consumer keys and secrets
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
49 */
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
50 private Properties consumerKeys;
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
51 public final String CONSUMER_KEYS_PATH = "WEB-INF/consumerkeys.property";
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
52
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
53 /**
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
54 * constructor
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
55 *
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
56 * @param parentContext
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
57 */
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
58 public RestServer(Context parentContext) {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
59 super(parentContext);
0
dwinter
parents:
diff changeset
60
9
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
61 Logger rl = Logger.getRootLogger();
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
62 BasicConfigurator.configure();
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
63 rl.setLevel(Level.DEBUG);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
64 // read consumerKeys from webapp
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
65 consumerKeys = new Properties();
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
66 ServletContext sc = (ServletContext) getContext().getServerDispatcher()
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
67 .getContext().getAttributes()
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
68 .get("org.restlet.ext.servlet.ServletContext");
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
69 if (sc != null) {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
70 InputStream ps = sc.getResourceAsStream(CONSUMER_KEYS_PATH);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
71 if (ps == null) {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
72 // try as file
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
73 File pf = new File(sc.getRealPath(CONSUMER_KEYS_PATH));
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
74 if (pf != null) {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
75 rl.debug("trying file for consumer keys: "+pf);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
76 try {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
77 ps = new FileInputStream(pf);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
78 } catch (FileNotFoundException e) {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
79 // TODO Auto-generated catch block
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
80 e.printStackTrace();
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
81 }
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
82 }
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
83 }
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
84 if (ps != null) {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
85 rl.debug("loading consumer keys from "+CONSUMER_KEYS_PATH);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
86 try {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
87 consumerKeys.load(ps);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
88 } catch (IOException e) {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
89 // TODO Auto-generated catch block
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
90 e.printStackTrace();
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
91 }
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
92 rl.debug("consumer keys: "+consumerKeys);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
93 } else {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
94 rl.error("Unable to get resource "+CONSUMER_KEYS_PATH);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
95 }
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
96 } else {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
97 rl.error("Unable to get ServletContext!");
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
98 }
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
99
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
100 }
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
101
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
102 /**
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
103 * returns consumer secret for consumer key.
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
104 * returns null if consumer key doesn't exist.
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
105 * @param consumerKey
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
106 * @return
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
107 */
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
108 public String getConsumerSecret(String consumerKey) {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
109 return consumerKeys.getProperty(consumerKey);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
110 }
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
111
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
112 /**
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
113 * Erzeuge einen Authenticator
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
114 *
0
dwinter
parents:
diff changeset
115 * @return
dwinter
parents:
diff changeset
116 */
dwinter
parents:
diff changeset
117 private ChallengeAuthenticator createAuthenticator() {
dwinter
parents:
diff changeset
118 Context context = getContext();
dwinter
parents:
diff changeset
119 boolean optional = true;
dwinter
parents:
diff changeset
120 ChallengeScheme challengeScheme = ChallengeScheme.HTTP_BASIC;
dwinter
parents:
diff changeset
121 String realm = "Annotation Service";
dwinter
parents:
diff changeset
122
9
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
123 JaasVerifier verifier = new JaasVerifier(
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
124 "BasicJaasAuthenticationApplication");
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
125 // JaasVerifier verifier = new JaasVerifier("DummyAuthentication");
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
126
0
dwinter
parents:
diff changeset
127 Configuration jaasConfig;
dwinter
parents:
diff changeset
128 jaasConfig = createConfiguration();
9
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
129
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
130 verifier.setConfiguration(jaasConfig);
0
dwinter
parents:
diff changeset
131 verifier.setUserPrincipalClassName("com.sun.security.auth.UserPrincipal");
9
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
132
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
133 ChallengeAuthenticator auth = new ChallengeAuthenticator(context,
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
134 optional, challengeScheme, realm, verifier) {
0
dwinter
parents:
diff changeset
135 @Override
dwinter
parents:
diff changeset
136 protected boolean authenticate(Request request, Response response) {
dwinter
parents:
diff changeset
137 if (request.getChallengeResponse() == null) {
dwinter
parents:
diff changeset
138 return false;
dwinter
parents:
diff changeset
139 } else {
dwinter
parents:
diff changeset
140 return super.authenticate(request, response);
dwinter
parents:
diff changeset
141 }
dwinter
parents:
diff changeset
142 }
dwinter
parents:
diff changeset
143 };
dwinter
parents:
diff changeset
144
dwinter
parents:
diff changeset
145 return auth;
dwinter
parents:
diff changeset
146 }
dwinter
parents:
diff changeset
147
9
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
148 /**
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
149 * Konfiguration fuer den Authentificator in Jaas. Pfad zum
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
150 * JAAS-Konfigurationsfile liegt im Context-Parameter
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
151 * "de.mpiwg.itgroup.annotationManager.jaas.configFilePath".
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
152 *
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
153 * @return
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
154 */
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
155 protected Configuration createConfiguration() {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
156 Configuration jaasConfig;
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
157 URI confUri;
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
158
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
159 Context context = getContext();
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
160 String configFilePath = context.getParameters().getFirstValue(
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
161 "de.mpiwg.itgroup.annotationManager.jaas.configFilePath");
0
dwinter
parents:
diff changeset
162
9
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
163 try {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
164 confUri = new URI(configFilePath);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
165 } catch (URISyntaxException e) {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
166 e.printStackTrace();
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
167 confUri = null;
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
168 }
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
169
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
170 jaasConfig = new ConfigFile(confUri);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
171 return jaasConfig;
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
172 }
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
173
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
174 /*
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
175 * (non-Javadoc)
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
176 *
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
177 * @see org.restlet.Application#createInboundRoot()
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
178 */
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
179 public synchronized Restlet createInboundRoot() {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
180 this.authenticator = createAuthenticator();
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
181
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
182 // String target = "{rh}/{rf}/XX";
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
183 // Redirector redirector = new
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
184 // Redirector(getContext().createChildContext(), target,
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
185 // Redirector.MODE_CLIENT_SEE_OTHER);
0
dwinter
parents:
diff changeset
186
9
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
187 Router router = new Router(getContext());
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
188
13
9393c9c9b916 saves annotations now!
casties
parents: 9
diff changeset
189 router.attach("/annotator/annotations", AnnotatorAnnotations.class);
15
6c7c4140630d on the way to updating annotations.
casties
parents: 13
diff changeset
190 router.attach("/annotator/annotations/{id}", AnnotatorAnnotations.class);
6c7c4140630d on the way to updating annotations.
casties
parents: 13
diff changeset
191 router.attach("/annotator/search", AnnotatorSearch.class);
6c7c4140630d on the way to updating annotations.
casties
parents: 13
diff changeset
192
9
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
193 router.attach("/dummy", Dummy.class);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
194
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
195 // router.attach("",redirector);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
196 router.attach("/annotator", ExtendedAnnotationInput.class);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
197 router.attach("/", AnnotatorInfo.class);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
198 authenticator.setNext(router);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
199 return authenticator;
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
200 }
0
dwinter
parents:
diff changeset
201
9
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
202 /**
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
203 * Authentifiziere den Benutzer aus dem Request (BasicAuthenfication)
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
204 *
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
205 * @param request
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
206 * @param response
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
207 * @return
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
208 */
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
209 public boolean authenticate(Request request, Response response) {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
210 if (!request.getClientInfo().isAuthenticated()) {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
211 authenticator.challenge(response, false);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
212 return false;
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
213 }
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
214
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
215 if (request.getClientInfo().getUser() == null) // FIXME sometimes ist
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
216 // authenticated true,
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
217 // but no user
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
218 {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
219 authenticator.challenge(response, false);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
220 return false;
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
221 }
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
222 return true;
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
223 }
0
dwinter
parents:
diff changeset
224
9
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
225 /**
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
226 * Authentifiziere den Benutzer
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
227 *
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
228 * @param username
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
229 * @param password
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
230 * @param request
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
231 * @return
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
232 */
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
233 public boolean authenticate(String username, String password,
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
234 Request request) {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
235 LoginContext lc;
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
236
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
237 try {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
238 Configuration conf = createConfiguration();
0
dwinter
parents:
diff changeset
239
9
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
240 lc = new LoginContext("BasicJaasAuthenticationApplication", null,
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
241 new MyCallBackHandler(username, password), conf);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
242 // lc = new LoginContext("DummyAuthentication", null, new
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
243 // MyCallBackHandler(username,password),conf);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
244 lc.login();
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
245 } catch (LoginException e) {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
246 // TODO Auto-generated catch block
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
247 e.printStackTrace();
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
248 return false;
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
249 }
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
250
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
251 Subject subject = lc.getSubject();
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
252 ClientInfo clientInfo = new ClientInfo();
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
253 User user = new User(username);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
254 clientInfo.setAuthenticated(true);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
255 clientInfo.setUser(user);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
256
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
257 request.setClientInfo(clientInfo);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
258 return true;
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
259 }
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
260
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
261 /**
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
262 * Hole den vollen Benutzernamen aus dem LDAP
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
263 *
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
264 * @param creator
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
265 * @return
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
266 */
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
267 public String getUserNameFromLdap(String creator) {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
268 String retString = creator; // falls nichts gefunden wird einfach den
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
269 // creator zurueckgeben
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
270 Hashtable<String, String> env = new Hashtable<String, String>();
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
271 String sp = "com.sun.jndi.ldap.LdapCtxFactory";
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
272 env.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, sp);
0
dwinter
parents:
diff changeset
273
9
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
274 String ldapUrl = "ldap://ldapreplik.mpiwg-berlin.mpg.de/dc=mpiwg-berlin,dc=mpg,dc=de";// TODO
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
275 // should
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
276 // go
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
277 // into
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
278 // config
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
279 // file
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
280 env.put(javax.naming.Context.PROVIDER_URL, ldapUrl);
0
dwinter
parents:
diff changeset
281
9
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
282 DirContext dctx;
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
283 try {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
284 dctx = new InitialDirContext(env);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
285 } catch (NamingException e1) {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
286 // TODO Auto-generated catch block
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
287 e1.printStackTrace();
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
288 return retString;
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
289 }
0
dwinter
parents:
diff changeset
290
9
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
291 String base = "ou=People";
0
dwinter
parents:
diff changeset
292
9
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
293 SearchControls sc = new SearchControls();
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
294 String[] attributeFilter = { "cn", "mail" };
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
295 sc.setReturningAttributes(attributeFilter);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
296 sc.setSearchScope(SearchControls.SUBTREE_SCOPE);
0
dwinter
parents:
diff changeset
297
9
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
298 String filter = "(uid=" + creator + ")";
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
299
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
300 try {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
301 NamingEnumeration<SearchResult> results = dctx.search(base, filter,
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
302 sc);
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
303 while (results.hasMore()) {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
304 SearchResult sr = (SearchResult) results.next();
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
305 javax.naming.directory.Attributes attrs = sr.getAttributes();
0
dwinter
parents:
diff changeset
306
9
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
307 Attribute attr = attrs.get("cn");
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
308 retString = (String) attr.get();
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
309 }
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
310 } catch (NamingException e) {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
311 // TODO Auto-generated catch block
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
312 e.printStackTrace();
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
313 }
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
314
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
315 try {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
316 dctx.close();
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
317 } catch (NamingException e) {
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
318 // TODO Auto-generated catch block
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
319 e.printStackTrace();
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
320 }
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
321 return retString;
e9fd2e1e0979 consumer key and secret store (property file).
casties
parents: 8
diff changeset
322 }
0
dwinter
parents:
diff changeset
323
dwinter
parents:
diff changeset
324 }