1
18 package io.undertow.security.impl;
19
20 import io.undertow.util.HeaderToken;
21 import io.undertow.util.HeaderTokenParser;
22 import io.undertow.util.Headers;
23 import io.undertow.util.HttpString;
24
25 import java.util.Collections;
26 import java.util.LinkedHashMap;
27 import java.util.Map;
28
29
34 public enum DigestAuthorizationToken implements HeaderToken {
35
36 USERNAME(Headers.USERNAME, true),
37 REALM(Headers.REALM, true),
38 NONCE(Headers.NONCE, true),
39 DIGEST_URI(Headers.URI, true),
40 RESPONSE(Headers.RESPONSE, true),
41 ALGORITHM(Headers.ALGORITHM, true),
42 CNONCE(Headers.CNONCE, true),
43 OPAQUE(Headers.OPAQUE, true),
44 MESSAGE_QOP(Headers.QOP, true),
45 NONCE_COUNT(Headers.NONCE_COUNT, false),
46 AUTH_PARAM(Headers.AUTH_PARAM, false);
47
48 private static final HeaderTokenParser<DigestAuthorizationToken> TOKEN_PARSER;
49
50 static {
51 Map<String, DigestAuthorizationToken> expected = new LinkedHashMap<>(
52 DigestAuthorizationToken.values().length);
53 for (DigestAuthorizationToken current : DigestAuthorizationToken.values()) {
54 expected.put(current.getName(), current);
55 }
56
57 TOKEN_PARSER = new HeaderTokenParser<>(Collections.unmodifiableMap(expected));
58 }
59
60 private final String name;
61 private final boolean quoted;
62
63 DigestAuthorizationToken(final HttpString name, final boolean quoted) {
64 this.name = name.toString();
65 this.quoted = quoted;
66 }
67
68 @Override
69 public String getName() {
70 return name;
71 }
72
73 @Override
74 public boolean isAllowQuoted() {
75 return quoted;
76 }
77
78 public static Map<DigestAuthorizationToken, String> parseHeader(final String header) {
79 return TOKEN_PARSER.parseHeader(header);
80 }
81 }
82