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

io.micronaut.http.cookie.Cookie Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2017-2020 original authors
 *
 * 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
 *
 * https://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.micronaut.http.cookie;

import io.micronaut.core.annotation.NonNull;
import io.micronaut.core.annotation.Nullable;
import io.micronaut.core.util.ArgumentUtils;

import java.io.Serializable;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAmount;
import java.util.Optional;

/**
 * An interface representing a Cookie. See .
 * @see RFC6265
 *
 * @author Graeme Rocher
 * @since 1.0
 */
public interface Cookie extends Comparable, Serializable {

    /**
     * Constant for undefined MaxAge attribute value.
     */
    long UNDEFINED_MAX_AGE = Long.MIN_VALUE;

    /**
     * @see The Secure Attribute.
     */
    String ATTRIBUTE_SECURE = "Secure";

    /**
     * @see The HttpOnly Attribute.
     */
    String ATTRIBUTE_HTTP_ONLY = "HttpOnly";

    /**
     * Controls whether a cookie is sent with cross-site requests.
     */
    String ATTRIBUTE_SAME_SITE = "SameSite";

    /**
     * @see The Domain Attribute
     */
    String ATTRIBUTE_DOMAIN = "Domain";

    /**
     * @see The Path Attribute.
     */
    String ATTRIBUTE_PATH = "Path";

    /**
     * @see The Expires Attribute.
     */
    String ATTRIBUTE_EXPIRES = "Expires";

    /**
     * @see The Max-Age Attribute
     */
    String ATTRIBUTE_MAX_AGE = "Max-Age";

    /**
     * @return The name of the cookie
     */
    @NonNull String getName();

    /**
     * @return The value of the cookie
     */
    @NonNull String getValue();

    /**
     * Gets the domain name of this Cookie.
     *
     * 

Domain names are formatted according to RFC 2109. * * @return the domain name of this Cookie */ @Nullable String getDomain(); /** * The path of the cookie. The cookie is visible to all paths below the request path on the server. * * @return The cookie path */ @Nullable String getPath(); /** * Checks to see if this {@link Cookie} can only be accessed via HTTP. * If this returns true, the {@link Cookie} cannot be accessed through client side script - But only if the * browser supports it. *

* See here for reference * * @return True if this {@link Cookie} is HTTP-only or false if it isn't */ boolean isHttpOnly(); /** * @return True if the cookie is secure */ boolean isSecure(); /** * Gets the maximum age of the cookie in seconds. If the max age has not been explicitly set, * then the value returned will be {@link #UNDEFINED_MAX_AGE}, indicating that the Max-Age * Attribute should not be written. * * @return The maximum age of the cookie in seconds */ long getMaxAge(); /** * Checks to see if this {@link Cookie} can be sent along cross-site requests. * For more information, please look * here * @return The SameSite attribute of the cookie */ default Optional getSameSite() { return Optional.empty(); } /** * Determines if this {@link Cookie} can be sent along cross-site requests. * For more information, please look * here * @param sameSite SameSite value * @return This cookie */ default @NonNull Cookie sameSite(@Nullable SameSite sameSite) { return this; } /** * Sets the max age of the cookie in seconds. When not explicitly set, the max age will default * to {@link #UNDEFINED_MAX_AGE} and cause the Max-Age Attribute not to be encoded. * * @param maxAge The max age * @return This cookie */ @NonNull Cookie maxAge(long maxAge); /** * Sets the value. * * @param value The value of the cookie * @return This cookie */ @NonNull Cookie value(@NonNull String value); /** * Sets the domain of the cookie. * * @param domain The domain of the cookie * @return This cookie */ @NonNull Cookie domain(@Nullable String domain); /** * Sets the path of the cookie. * * @param path The path of the cookie * @return This cookie */ @NonNull Cookie path(@Nullable String path); /** * Sets whether the cookie is secure. * * @param secure Is the cookie secure * @return This cookie */ @NonNull Cookie secure(boolean secure); /** * Sets this cookie as secure. * @return This Cookie * @since 4.3.0 */ @NonNull default Cookie secure() { return secure(true); } /** * Sets whether the cookie is HTTP-Only. * * @param httpOnly Is the cookie HTTP-Only * @return This cookie */ @NonNull Cookie httpOnly(boolean httpOnly); /** * Sets this cookie as HTTP-Only. * * @return This cookie * @since 4.3.0 */ @NonNull default Cookie httpOnly() { return httpOnly(true); } /** * Configure the Cookie with the given configuration. * @param configuration The configuration * @return The cookie */ default @NonNull Cookie configure(@NonNull CookieConfiguration configuration) { ArgumentUtils.requireNonNull("configuration", configuration); return configure(configuration, true); } /** * Configure the Cookie with the given configuration. * @param configuration The configuration * @param isSecure Is the request secure * @return The cookie */ default @NonNull Cookie configure( @NonNull CookieConfiguration configuration, boolean isSecure) { ArgumentUtils.requireNonNull("configuration", configuration); configuration.getCookiePath().ifPresent(this::path); configuration.getCookieDomain().ifPresent(this::domain); configuration.getCookieMaxAge().ifPresent(this::maxAge); configuration.isCookieHttpOnly().ifPresent(this::httpOnly); final Optional secureConfiguration = configuration.isCookieSecure(); if (secureConfiguration.isPresent()) { secure(secureConfiguration.get()); } else { secure(isSecure); } configuration.getCookieSameSite().ifPresent(this::sameSite); return this; } /** * Sets the max age of the cookie. * * @param maxAge The max age * @return This cookie */ default @NonNull Cookie maxAge(@NonNull TemporalAmount maxAge) { ArgumentUtils.requireNonNull("maxAge", maxAge); return maxAge(maxAge.get(ChronoUnit.SECONDS)); } /** * Construct a new Cookie for the given name and value. * * @param name The name * @param value The value * @return The Cookie */ static @NonNull Cookie of(@NonNull String name, @NonNull String value) { CookieFactory instance = CookieFactory.INSTANCE; if (instance != null) { return instance.create(name, value); } throw new UnsupportedOperationException("No CookeFactory implementation found. Server implementation does not support cookies."); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy