1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.http.localserver;
29
30 import org.apache.commons.codec.BinaryDecoder;
31 import org.apache.commons.codec.DecoderException;
32 import org.apache.commons.codec.binary.Base64;
33 import org.apache.http.Header;
34 import org.apache.http.HttpException;
35 import org.apache.http.HttpRequest;
36 import org.apache.http.ProtocolException;
37 import org.apache.http.auth.AUTH;
38 import org.apache.http.util.EncodingUtils;
39
40 public class BasicAuthTokenExtractor {
41
42 public String extract(final HttpRequest request) throws HttpException {
43 String auth = null;
44
45 final Header h = request.getFirstHeader(AUTH.WWW_AUTH_RESP);
46 if (h != null) {
47 final String s = h.getValue();
48 if (s != null) {
49 auth = s.trim();
50 }
51 }
52
53 if (auth != null) {
54 final int i = auth.indexOf(' ');
55 if (i == -1) {
56 throw new ProtocolException("Invalid Authorization header: " + auth);
57 }
58 final String authscheme = auth.substring(0, i);
59 if (authscheme.equalsIgnoreCase("basic")) {
60 final String s = auth.substring(i + 1).trim();
61 try {
62 final byte[] credsRaw = EncodingUtils.getAsciiBytes(s);
63 final BinaryDecoder codec = new Base64();
64 auth = EncodingUtils.getAsciiString(codec.decode(credsRaw));
65 } catch (final DecoderException ex) {
66 throw new ProtocolException("Malformed BASIC credentials");
67 }
68 }
69 }
70 return auth;
71 }
72
73 }