You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2006/05/28 21:46:39 UTC
svn commit: r409981 - in
/jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl:
BrowserCompatDomainHandler.java BrowserCompatSpec.java CookieSpecBase.java
Author: olegk
Date: Sun May 28 12:46:39 2006
New Revision: 409981
URL: http://svn.apache.org/viewvc?rev=409981&view=rev
Log:
Refactored the browser compatibility cookie policy ported from the Commons HttpClient 3.x code line
Added:
jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/BrowserCompatSpec.java (with props)
Modified:
jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/BrowserCompatDomainHandler.java
jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/CookieSpecBase.java
Modified: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/BrowserCompatDomainHandler.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/BrowserCompatDomainHandler.java?rev=409981&r1=409980&r2=409981&view=diff
==============================================================================
--- jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/BrowserCompatDomainHandler.java (original)
+++ jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/BrowserCompatDomainHandler.java Sun May 28 12:46:39 2006
@@ -102,6 +102,9 @@
}
String host = origin.getHost();
String domain = cookie.getDomain();
+ if (domain == null) {
+ return false;
+ }
if (host.equals(domain)) {
return true;
}
Added: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/BrowserCompatSpec.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/BrowserCompatSpec.java?rev=409981&view=auto
==============================================================================
--- jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/BrowserCompatSpec.java (added)
+++ jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/BrowserCompatSpec.java Sun May 28 12:46:39 2006
@@ -0,0 +1,137 @@
+/*
+ * $HeadURL$
+ * $Revision$
+ * $Date$
+ *
+ * ====================================================================
+ *
+ * Copyright 2002-2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+
+package org.apache.http.cookie.impl;
+
+import org.apache.http.Header;
+import org.apache.http.HeaderElement;
+import org.apache.http.cookie.Cookie;
+import org.apache.http.cookie.CookieOrigin;
+import org.apache.http.cookie.MalformedCookieException;
+import org.apache.http.io.CharArrayBuffer;
+import org.apache.http.util.DateParseException;
+import org.apache.http.util.DateUtils;
+
+/**
+ * Cookie specification that stives to closely mimic (mis)behavior of
+ * common web browser applications such as Microsoft Internet Explorer
+ * and Mozilla FireFox.
+ *
+ * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
+ *
+ * @since 4.0
+ */
+public class BrowserCompatSpec extends CookieSpecBase {
+
+ /** Valid date patterns */
+ private String[] datepatterns = new String[] {
+ DateUtils.PATTERN_RFC1123,
+ DateUtils.PATTERN_RFC1036,
+ DateUtils.PATTERN_ASCTIME,
+ "EEE, dd-MMM-yyyy HH:mm:ss z",
+ "EEE, dd-MMM-yyyy HH-mm-ss z",
+ "EEE, dd MMM yy HH:mm:ss z",
+ "EEE dd-MMM-yyyy HH:mm:ss z",
+ "EEE dd MMM yyyy HH:mm:ss z",
+ "EEE dd-MMM-yyyy HH-mm-ss z",
+ "EEE dd-MMM-yy HH:mm:ss z",
+ "EEE dd MMM yy HH:mm:ss z",
+ "EEE,dd-MMM-yy HH:mm:ss z",
+ "EEE,dd-MMM-yyyy HH:mm:ss z",
+ "EEE, dd-MM-yyyy HH:mm:ss z",
+ };
+
+ /** Default constructor */
+ public BrowserCompatSpec() {
+ super();
+ registerAttribHandler("path", new BasicPathHandler());
+ registerAttribHandler("domain", new BrowserCompatDomainHandler());
+ registerAttribHandler("max-age", new BasicMaxAgeHandler());
+ registerAttribHandler("secure", new BasicSecureHandler());
+ registerAttribHandler("comment", new BasicCommentHandler());
+ registerAttribHandler("expires", new BasicExpiresHandler(this.datepatterns));
+ }
+
+ public Cookie[] parse(final Header header, final CookieOrigin origin)
+ throws MalformedCookieException {
+ if (header == null) {
+ throw new IllegalArgumentException("Header may not be null");
+ }
+ if (header == null) {
+ throw new IllegalArgumentException("Cookie origin may not be null");
+ }
+ String headervalue = header.getValue();
+ boolean isNetscapeCookie = false;
+ int i1 = headervalue.toLowerCase().indexOf("expires=");
+ if (i1 != -1) {
+ i1 += "expires=".length();
+ int i2 = headervalue.indexOf(";", i1);
+ if (i2 == -1) {
+ i2 = headervalue.length();
+ }
+ try {
+ DateUtils.parseDate(headervalue.substring(i1, i2), this.datepatterns);
+ isNetscapeCookie = true;
+ } catch (DateParseException e) {
+ // Does not look like a valid expiry date
+ }
+ }
+ HeaderElement[] elems = null;
+ if (isNetscapeCookie) {
+ elems = new HeaderElement[] { HeaderElement.parse(headervalue) };
+ } else {
+ elems = header.getElements();
+ }
+ return parse(elems, origin);
+ }
+
+ public Header[] formatCookies(final Cookie[] cookies) {
+ if (cookies == null) {
+ throw new IllegalArgumentException("Cookie array may not be null");
+ }
+ if (cookies.length == 0) {
+ throw new IllegalArgumentException("Cookie array may not be empty");
+ }
+ CharArrayBuffer buffer = new CharArrayBuffer(20 * cookies.length);
+ for (int i = 0; i < cookies.length; i++) {
+ Cookie cookie = cookies[i];
+ if (i > 0) {
+ buffer.append("; ");
+ }
+ buffer.append(cookie.getName());
+ buffer.append("=");
+ String s = cookie.getValue();
+ if (s != null) {
+ buffer.append(s);
+ }
+ }
+ return new Header[] { new Header("Cookie", buffer.toString()) };
+ }
+
+}
Propchange: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/BrowserCompatSpec.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/BrowserCompatSpec.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/BrowserCompatSpec.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/CookieSpecBase.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/CookieSpecBase.java?rev=409981&r1=409980&r2=409981&view=diff
==============================================================================
--- jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/CookieSpecBase.java (original)
+++ jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/CookieSpecBase.java Sun May 28 12:46:39 2006
@@ -103,6 +103,9 @@
if (origin == null) {
throw new IllegalArgumentException("Cookie origin may not be null");
}
+ if (cookie.getName() == null || cookie.getName().trim().equals("")) {
+ throw new MalformedCookieException("Cookie name may not be blank");
+ }
for (Iterator i = getAttribHandlerIterator(); i.hasNext();) {
CookieAttributeHandler handler = (CookieAttributeHandler) i.next();
handler.validate(cookie, origin);