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.hc.client5.testing.auth;
29
30 import java.nio.charset.StandardCharsets;
31
32 import org.apache.commons.codec.BinaryDecoder;
33 import org.apache.commons.codec.DecoderException;
34 import org.apache.commons.codec.binary.Base64;
35 import org.apache.hc.client5.http.auth.StandardAuthScheme;
36 import org.apache.hc.core5.http.HttpException;
37 import org.apache.hc.core5.http.ProtocolException;
38
39 public class BasicAuthTokenExtractor {
40
41 public String extract(final String challengeResponse) throws HttpException {
42 if (challengeResponse != null) {
43 final int i = challengeResponse.indexOf(' ');
44 if (i == -1) {
45 throw new ProtocolException("Invalid challenge response: " + challengeResponse);
46 }
47 final String schemeName = challengeResponse.substring(0, i);
48 if (schemeName.equalsIgnoreCase(StandardAuthScheme.BASIC)) {
49 final String s = challengeResponse.substring(i + 1).trim();
50 try {
51 final byte[] credsRaw = s.getBytes(StandardCharsets.US_ASCII);
52 final BinaryDecoder codec = new Base64();
53 return new String(codec.decode(credsRaw), StandardCharsets.US_ASCII);
54 } catch (final DecoderException ex) {
55 throw new ProtocolException("Malformed Basic credentials");
56 }
57 }
58 }
59 return null;
60 }
61
62 }