annotate src/luan/modules/http/jetty/AuthenticationHandler.java @ 1136:d30d400fd43d

add http/jetty
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 29 Jan 2018 17:50:49 -0700
parents src/luan/modules/http/AuthenticationHandler.java@0d884377e923
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1136
d30d400fd43d add http/jetty
Franklin Schmidt <fschmidt@gmail.com>
parents: 1080
diff changeset
1 package luan.modules.http.jetty;
188
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
2
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
3 import java.io.IOException;
1080
0d884377e923 eliminate other head
Franklin Schmidt <fschmidt@gmail.com>
parents: 1000
diff changeset
4 import javax.servlet.http.HttpServletRequest;
188
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
5 import javax.servlet.http.HttpServletResponse;
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
6 import org.eclipse.jetty.server.Request;
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
7 import org.eclipse.jetty.server.handler.AbstractHandler;
1080
0d884377e923 eliminate other head
Franklin Schmidt <fschmidt@gmail.com>
parents: 1000
diff changeset
8 import org.eclipse.jetty.util.B64Code;
188
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
9
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
10
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
11 public class AuthenticationHandler extends AbstractHandler {
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
12 private final String path;
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
13 private String password = "password";
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
14
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
15 public AuthenticationHandler(String path) {
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
16 this.path = path;
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
17 }
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
18
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
19 public void setPassword(String password) {
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
20 this.password = password;
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
21 }
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
22
1080
0d884377e923 eliminate other head
Franklin Schmidt <fschmidt@gmail.com>
parents: 1000
diff changeset
23 public void handle(String target,Request baseRequest,HttpServletRequest request,HttpServletResponse response)
188
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
24 throws IOException
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
25 {
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
26 if( !target.startsWith(path) )
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
27 return;
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
28 String pwd = getPassword(request);
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
29 if( password.equals(pwd) )
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
30 return;
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
31 response.setHeader("WWW-Authenticate","Basic realm=\""+path+"\"");
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
32 response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
1080
0d884377e923 eliminate other head
Franklin Schmidt <fschmidt@gmail.com>
parents: 1000
diff changeset
33 baseRequest.setHandled(true);
188
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
34 }
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
35
1080
0d884377e923 eliminate other head
Franklin Schmidt <fschmidt@gmail.com>
parents: 1000
diff changeset
36 private static String getPassword(HttpServletRequest request) {
188
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
37 String auth = request.getHeader("Authorization");
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
38 if( auth==null )
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
39 return null;
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
40 String[] a = auth.split(" +");
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
41 if( a.length != 2 )
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
42 throw new RuntimeException("auth = "+auth);
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
43 if( !a[0].equals("Basic") )
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
44 throw new RuntimeException("auth = "+auth);
1080
0d884377e923 eliminate other head
Franklin Schmidt <fschmidt@gmail.com>
parents: 1000
diff changeset
45 auth = new String(B64Code.decode(a[1]));
188
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
46 a = auth.split(":");
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
47 if( a.length != 2 )
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
48 throw new RuntimeException("auth = "+auth);
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
49 return a[1];
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
50 }
e132b7a3d94c add AuthenticationHandler
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
51 }