org.wisdom.api.cookies.Cookie Maven / Gradle / Ivy
/*
* #%L
* Wisdom-Framework
* %%
* Copyright (C) 2013 - 2014 Wisdom Framework
* %%
* 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.
* #L%
*/
package org.wisdom.api.cookies;
import com.google.common.base.Preconditions;
/**
* An HTTP cookie.
*/
public class Cookie {
/**
* Property to configure in the application.conf file to set the prefix to all wisdom cookies.
* {@literal wisdom} is used by default.
*/
public static final String APPLICATION_COOKIE_PREFIX = "application.cookie.prefix";
/**
* Cookie's name.
*/
private final String name;
/**
* Cookie's value.
*/
private final String value;
/**
* Cookie's content.
*/
private final String comment;
/**
* Cookie's domain.
*/
private final String domain;
/**
* Cookie's max age.
*/
private final long maxAge;
/**
* Cookie's path.
*/
private final String path;
/**
* Is the cookies secure.
*/
private final boolean secure;
/**
* Is the cookies only for HTTP.
*/
private final boolean httpOnly;
/**
* Creates a new cookie.
*
* @param name the name
* @param value the value
* @param comment the comment
* @param domain the domain
* @param maxAge the max age
* @param path the path
* @param secure whether the cookie is secure
* @param httpOnly whether the cookie is only served on HTTP
*/
public Cookie(String name,
String value,
String comment,
String domain,
long maxAge,
String path,
boolean secure,
boolean httpOnly) {
this.name = name;
this.value = value;
this.comment = comment;
this.domain = domain;
this.maxAge = maxAge;
this.path = path;
this.secure = secure;
this.httpOnly = httpOnly;
}
/**
* Gets the cookie's name.
*
* @return the name
*/
public String name() {
return name;
}
/**
* Gets the cookie's value.
*
* @return the value
*/
public String value() {
return value;
}
/**
* Gets the cookie's comment.
*
* @return the comment
*/
public String comment() {
return comment;
}
/**
* Gets the cookie's domain.
*
* @return the domain
*/
public String domain() {
return domain;
}
/**
* Gets the cookie's max-age.
*
* @return the max-age
*/
public long maxAge() {
return maxAge;
}
/**
* Gets the cookie's path.
*
* @return the path
*/
public String path() {
return path;
}
/**
* Is the cookies secure?
*
* @return {@literal true} is the cookie is secure, {@literal false} otherwise.
*/
public boolean isSecure() {
return secure;
}
/**
* Is the cookies served only on HTTP?
*
* @return {@literal true} is the cookie is only served on HTTP, {@literal false} otherwise.
*/
public boolean isHttpOnly() {
return httpOnly;
}
/**
* {@inheritDoc}
*/
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Cookie cookie = (Cookie) o;
return httpOnly == cookie.httpOnly
&& maxAge == cookie.maxAge
&& secure == cookie.secure
&& !(comment != null ? !comment.equals(cookie.comment) : cookie.comment != null)
&& !(domain != null ? !domain.equals(cookie.domain) : cookie.domain != null)
&& !(name != null ? !name.equals(cookie.name) : cookie.name != null)
&& !(path != null ? !path.equals(cookie.path) : cookie.path != null)
&& !(value != null ? !value.equals(cookie.value) : cookie.value != null);
}
/**
* {@inheritDoc}
*/
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + (value != null ? value.hashCode() : 0);
result = 31 * result + (comment != null ? comment.hashCode() : 0);
result = 31 * result + (domain != null ? domain.hashCode() : 0);
result = 31 * result + (int) maxAge;
result = 31 * result + (path != null ? path.hashCode() : 0);
result = 31 * result + (secure ? 1 : 0);
result = 31 * result + (httpOnly ? 1 : 0);
return result;
}
/**
* Gets a new cookie's builder.
*
* @param name the cookie's name
* @param value the cookie's value
* @return the new builder
*/
public static Builder builder(String name, String value) {
Preconditions.checkNotNull(name);
Preconditions.checkNotNull(value);
return new Builder(name, value);
}
/**
* Gets a new cookie's builder copying the given cookie.
*
* @param like the cookie to copy
* @return the new builder
*/
public static Builder builder(Cookie like) {
return new Builder(like);
}
/**
* Equivalent to {@link #builder(String, String)}.
*
* @param name the cookie's name
* @param value the cookie's value
* @return the new builder
*/
public static Builder cookie(String name, String value) {
return builder(name, value)
// Populate default:
.setPath("/").setHttpOnly(true).setSecure(false).setMaxAge(3600);
}
/**
* A builder to create a new cookie.
*/
public static class Builder {
private final String name;
private String value;
private String comment;
private String domain;
private long maxAge = -1;
private String path = "/";
private boolean secure;
private boolean httpOnly;
private Builder(String name, String value) {
this.name = name;
this.value = value;
}
private Builder(Cookie like) {
name = like.name;
value = like.value;
comment = like.comment;
domain = like.domain;
maxAge = like.maxAge;
path = like.path;
secure = like.secure;
httpOnly = like.httpOnly;
}
/**
* Creates the cookie.
*
* @return the cookie
*/
public Cookie build() {
return new Cookie(name, value, comment, domain, maxAge, path,
secure, httpOnly);
}
/**
* Sets the cookie's value.
*
* @param value the value
* @return the current builder
*/
public Builder setValue(String value) {
this.value = value;
return this;
}
/**
* Sets the cookie's comment.
*
* @param comment the comment
* @return the current builder
*/
public Builder setComment(String comment) {
this.comment = comment;
return this;
}
/**
* Sets the cookie's domain.
*
* @param domain the domain
* @return the current builder
*/
public Builder setDomain(String domain) {
this.domain = domain;
return this;
}
/**
* Sets the cookie's max age.
*
* @param maxAge the max age in seconds.
* @return the current builder
*/
public Builder setMaxAge(long maxAge) {
this.maxAge = maxAge;
return this;
}
/**
* Sets the cookie's path.
*
* @param path the path
* @return the current builder
*/
public Builder setPath(String path) {
this.path = path;
return this;
}
/**
* Sets the cookie's secure flag.
*
* @param secure the secure flag
* @return the current builder
*/
public Builder setSecure(boolean secure) {
this.secure = secure;
return this;
}
/**
* Sets the cookie's HTTP only flag.
*
* @param httpOnly the http only flag
* @return the current builder
*/
public Builder setHttpOnly(boolean httpOnly) {
this.httpOnly = httpOnly;
return this;
}
}
}