/* * Copyright 2015 The Netty Project * * The Netty Project licenses this file to you 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 io.netty.handler.codec.http.cookie; import static io.netty.handler.codec.http.cookie.CookieUtil.*; import static io.netty.util.internal.ObjectUtil.checkNotNull; /** * The default {@link Cookie} implementation. */ public class DefaultCookie implements Cookie { private final String name; private String value; private boolean wrap; private String domain; private String path; private long maxAge = UNDEFINED_MAX_AGE; private boolean secure; private boolean httpOnly; /** * Creates a new cookie with the specified name and value. */ public DefaultCookie(String name, String value) { name = checkNotNull(name, "name").trim(); if (name.isEmpty()) { throw new IllegalArgumentException("empty name"); } this.name = name; setValue(value); } @Override public String name() { return name; } @Override public String value() { return value; } @Override public void setValue(String value) { this.value = checkNotNull(value, "value"); } @Override public boolean wrap() { return wrap; } @Override public void setWrap(boolean wrap) { this.wrap = wrap; } @Override public String domain() { return domain; } @Override public void setDomain(String domain) { this.domain = validateAttributeValue("domain", domain); } @Override public String path() { return path; } @Override public void setPath(String path) { this.path = validateAttributeValue("path", path); } @Override public long maxAge() { return maxAge; } @Override public void setMaxAge(long maxAge) { this.maxAge = maxAge; } @Override public boolean isSecure() { return secure; } @Override public void setSecure(boolean secure) { this.secure = secure; } @Override public boolean isHttpOnly() { return httpOnly; } @Override public void setHttpOnly(boolean httpOnly) { this.httpOnly = httpOnly; } @Override public int hashCode() { return name().hashCode(); } @Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof Cookie)) { return false; } Cookie that = (Cookie) o; if (!name().equals(that.name())) { return false; } if (path() == null) { if (that.path() != null) { return false; } } else if (that.path() == null) { return false; } else if (!path().equals(that.path())) { return false; } if (domain() == null) { if (that.domain() != null) { return false; } } else { return domain().equalsIgnoreCase(that.domain()); } return true; } @Override public int compareTo(Cookie c) { int v = name().compareTo(c.name()); if (v != 0) { return v; } if (path() == null) { if (c.path() != null) { return -1; } } else if (c.path() == null) { return 1; } else { v = path().compareTo(c.path()); if (v != 0) { return v; } } if (domain() == null) { if (c.domain() != null) { return -1; } } else if (c.domain() == null) { return 1; } else { v = domain().compareToIgnoreCase(c.domain()); return v; } return 0; } /** * Validate a cookie attribute value, throws a {@link IllegalArgumentException} otherwise. * Only intended to be used by {@link io.netty.handler.codec.http.DefaultCookie}. * @param name attribute name * @param value attribute value * @return the trimmed, validated attribute value * @deprecated CookieUtil is package private, will be removed once old Cookie API is dropped */ @Deprecated protected String validateValue(String name, String value) { return validateAttributeValue(name, value); } @Override public String toString() { StringBuilder buf = stringBuilder() .append(name()) .append('=') .append(value()); if (domain() != null) { buf.append(", domain=") .append(domain()); } if (path() != null) { buf.append(", path=") .append(path()); } if (maxAge() >= 0) { buf.append(", maxAge=") .append(maxAge()) .append('s'); } if (isSecure()) { buf.append(", secure"); } if (isHttpOnly()) { buf.append(", HTTPOnly"); } return buf.toString(); } }