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 package org.apache.http.impl.cookie;
28
29 import org.apache.http.annotation.Immutable;
30 import org.apache.http.cookie.Cookie;
31 import org.apache.http.cookie.CookieAttributeHandler;
32 import org.apache.http.cookie.CookieOrigin;
33 import org.apache.http.cookie.CookieRestrictionViolationException;
34 import org.apache.http.cookie.MalformedCookieException;
35 import org.apache.http.cookie.SetCookie;
36 import org.apache.http.util.Args;
37
38
39
40
41
42 @Immutable
43 public class BasicDomainHandler implements CookieAttributeHandler {
44
45 public BasicDomainHandler() {
46 super();
47 }
48
49 public void parse(final SetCookie cookie, final String value)
50 throws MalformedCookieException {
51 Args.notNull(cookie, "Cookie");
52 if (value == null) {
53 throw new MalformedCookieException("Missing value for domain attribute");
54 }
55 if (value.trim().length() == 0) {
56 throw new MalformedCookieException("Blank value for domain attribute");
57 }
58 cookie.setDomain(value);
59 }
60
61 public void validate(final Cookie cookie, final CookieOrigin origin)
62 throws MalformedCookieException {
63 Args.notNull(cookie, "Cookie");
64 Args.notNull(origin, "Cookie origin");
65
66
67
68
69
70 final String host = origin.getHost();
71 String domain = cookie.getDomain();
72 if (domain == null) {
73 throw new CookieRestrictionViolationException("Cookie domain may not be null");
74 }
75 if (host.contains(".")) {
76
77
78
79
80 if (!host.endsWith(domain)) {
81 if (domain.startsWith(".")) {
82 domain = domain.substring(1, domain.length());
83 }
84 if (!host.equals(domain)) {
85 throw new CookieRestrictionViolationException(
86 "Illegal domain attribute \"" + domain
87 + "\". Domain of origin: \"" + host + "\"");
88 }
89 }
90 } else {
91 if (!host.equals(domain)) {
92 throw new CookieRestrictionViolationException(
93 "Illegal domain attribute \"" + domain
94 + "\". Domain of origin: \"" + host + "\"");
95 }
96 }
97 }
98
99 public boolean match(final Cookie cookie, final CookieOrigin origin) {
100 Args.notNull(cookie, "Cookie");
101 Args.notNull(origin, "Cookie origin");
102 final String host = origin.getHost();
103 String domain = cookie.getDomain();
104 if (domain == null) {
105 return false;
106 }
107 if (host.equals(domain)) {
108 return true;
109 }
110 if (!domain.startsWith(".")) {
111 domain = '.' + domain;
112 }
113 return host.endsWith(domain) || host.equals(domain.substring(1));
114 }
115
116 }