All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.firenio.codec.http11.Cookie Maven / Gradle / Ivy

There is a newer version: 1.3.6
Show newest version
/*
 * Copyright 2015 The FireNio Project
 *
 * 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.
 */
package com.firenio.codec.http11;

public class Cookie implements Cloneable {

    private static final String  tspecials = ",; ";
    private              String  comment;
    private              String  domain;
    private              int     maxAge    = -1;
    private              String  name;
    private              String  path;
    private              boolean secure;
    private              String  value;

    private int version = 0;

    public Cookie(String name, String value) {
        if (!isToken(name) || name.equalsIgnoreCase("Comment") // rfc2019
                || name.equalsIgnoreCase("Discard") // 2019++
                || name.equalsIgnoreCase("Domain") || name.equalsIgnoreCase("Expires") // (old cookies)
                || name.equalsIgnoreCase("Max-Age") // rfc2019
                || name.equalsIgnoreCase("Path") || name.equalsIgnoreCase("Secure") || name.equalsIgnoreCase("Version") || name.startsWith("$")) {
            throw new IllegalArgumentException("undefined cookie name " + name);
        }

        this.name = name;
        this.value = value;
    }

    /**
     * Returns the comment describing the purpose of this cookie, or
     * null if the cookie has no comment.
     *
     * @return a String containing the comment, or
     * null if none
     * @see #setComment
     */

    public String getComment() {
        return comment;
    }

    /**
     * Returns the domain name set for this cookie. The form of the domain name
     * is set by RFC 2109.
     *
     * @return a String containing the domain name
     * @see #setDomain
     */

    public String getDomain() {
        return domain;
    }

    /**
     * Returns the maximum age of the cookie, specified in seconds, By default,
     * -1 indicating the cookie will persist until browser
     * shutdown.
     *
     * @return an integer specifying the maximum age of the cookie in seconds;
     * if negative, means the cookie persists until browser shutdown
     * @see #setMaxAge
     */

    public int getMaxAge() {
        return maxAge;
    }

    /**
     * Returns the name of the cookie. The name cannot be changed after
     * creation.
     *
     * @return a String specifying the cookie's name
     */

    public String getName() {
        return name;
    }

    /**
     * Returns the path on the server to which the browser returns this cookie.
     * The cookie is visible to all subpaths on the server.
     *
     * @return a String specifying a path that contains a servlet
     * name, for example, /catalog
     * @see #setPath
     */

    public String getPath() {
        return path;
    }

    /**
     * Returns true if the browser is sending cookies only over a
     * secure protocol, or false if the browser can send cookies
     * using any protocol.
     *
     * @return true if the browser uses a secure protocol;
     * otherwise, true
     * @see #setSecure
     */

    public boolean getSecure() {
        return secure;
    }

    /**
     * Returns the value of the cookie.
     *
     * @return a String containing the cookie's present value
     * @see #setValue
     * @see Cookie
     */

    public String getValue() {
        return value;
    }

    /**
     * Returns the version of the protocol this cookie complies with. Version 1
     * complies with RFC 2109, and version 0 complies with the original cookie
     * specification drafted by Netscape. Cookies provided by a browser use and
     * identify the browser's cookie version.
     *
     * @return 0 if the cookie complies with the original Netscape
     * specification; 1 if the cookie complies with RFC 2109
     * @see #setVersion
     */

    public int getVersion() {
        return version;
    }

    private boolean isToken(String value) {
        int len = value.length();

        for (int i = 0; i < len; i++) {
            char c = value.charAt(i);

            if (c < 0x20 || c >= 0x7f || tspecials.indexOf(c) != -1) {
                return false;
            }
        }
        return true;
    }

    /**
     * Specifies a comment that describes a cookie's purpose. The comment is
     * useful if the browser presents the cookie to the user. Comments are not
     * supported by Netscape Version 0 cookies.
     *
     * @param purpose a String specifying the comment to display to
     *                the user
     * @see #getComment
     */

    public void setComment(String purpose) {
        comment = purpose;
    }

    /**
     * Specifies the domain within which this cookie should be presented.
     *
     * 

* The form of the domain name is specified by RFC 2109. A domain name * begins with a dot (.foo.com) and means that the cookie is * visible to servers in a specified Domain Name System (DNS) zone (for * example, www.foo.com, but not a.b.foo.com). By * default, cookies are only returned to the server that sent them. * * @param pattern a String containing the domain name within * which this cookie is visible; form is according to RFC 2109 * @see #getDomain */ public void setDomain(String pattern) { domain = pattern.toLowerCase(); // IE allegedly needs this } /** * Sets the maximum age of the cookie in seconds. * *

* A positive value indicates that the cookie will expire after that many * seconds have passed. Note that the value is the maximum age when * the cookie will expire, not the cookie's current age. * *

* A negative value means that the cookie is not stored persistently and * will be deleted when the Web browser exits. A zero value causes the * cookie to be deleted. * * @param expiry an integer specifying the maximum age of the cookie in * seconds; if negative, means the cookie is not stored; if * zero, deletes the cookie * @see #getMaxAge */ public void setMaxAge(int expiry) { maxAge = expiry; } /** * Specifies a path for the cookie to which the client should return the * cookie. * *

* The cookie is visible to all the pages in the directory you specify, and * all the pages in that directory's subdirectories. A cookie's path must * include the servlet that set the cookie, for example, /catalog, * which makes the cookie visible to all directories on the server under * /catalog. * *

* Consult RFC 2109 (available on the Internet) for more information on * setting path names for cookies. * * @param uri a String specifying a path * @see #getPath */ public void setPath(String uri) { path = uri; } /** * Indicates to the browser whether the cookie should only be sent using a * secure protocol, such as HTTPS or SSL. * *

* The default value is false. * * @param flag if true, sends the cookie from the browser to * the server only when using a secure protocol; if * false, sent on any protocol * @see #getSecure */ public void setSecure(boolean flag) { secure = flag; } // Note -- disabled for now to allow full Netscape compatibility // from RFC 2068, token special case characters // // private static final String tspecials = "()<>@,;:\\\"/[]?={} \t"; /** * Assigns a new value to a cookie after the cookie is created. If you use * a binary value, you may want to use BASE64 encoding. * *

* With Version 0 cookies, values should not contain white space, brackets, * parentheses, equals signs, commas, double quotes, slashes, question * marks, at signs, colons, and semicolons. Empty values may not behave the * same way on all browsers. * * @param newValue a String specifying the new value * @see #getValue * @see Cookie */ public void setValue(String newValue) { value = newValue; } /* * Tests a string and returns true if the string counts as a reserved token * in the Java language. * * @param value the String to be tested * * @return true if the String is a reserved * token; false if it is not */ /** * Sets the version of the cookie protocol this cookie complies with. * Version 0 complies with the original Netscape cookie specification. * Version 1 complies with RFC 2109. * *

* Since RFC 2109 is still somewhat new, consider version 1 as * experimental; do not use it yet on production sites. * * @param v 0 if the cookie should comply with the original Netscape * specification; 1 if the cookie should comply with RFC 2109 * @see #getVersion */ public void setVersion(int v) { version = v; } @Override public String toString() { StringBuilder sb = new StringBuilder(); CookieUtil.appendCookieValue(sb, this); return sb.toString(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy