HttpConstants.java

/*
 * GovWay - A customizable API Gateway 
 * https://govway.org
 * 
 * Copyright (c) 2005-2024 Link.it srl (https://link.it). 
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 3, as published by
 * the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

package org.openspcoop2.utils.transport.http;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.openspcoop2.utils.mime.MimeTypeConstants;

/**
 * HttpConstants
 *
 *
 * @author Poli Andrea (apoli@link.it)
 * @author Tommaso Burlon (tommaso.burlon@link.it)
 * @author $Author$
 * @version $Rev$, $Date$
 */
public class HttpConstants {
	
	public static byte[] CR_LF_BREAK_LINE = { 13, 10 };
	public static String HTTP_HEADER_SEPARATOR = ": ";
	
	/** HTTP HEADERS */
	public static final String CONTENT_TYPE = "Content-Type";
	public static final String CONTENT_LENGTH = "Content-Length";
	public static final String CONTENT_LOCATION = "Content-Location";
	public static final String CONTENT_ID = "Content-ID";
	public static final String RETURN_CODE = "ReturnCode";
	
    /** ContentType */
    public static final String CONTENT_TYPE_NON_VALORIZZATO = "Not valued (null)";
    public static final String CONTENT_TYPE_NON_PRESENTE = "Undefined";
	
	/** Transfer Encoding */
	public static final String TRANSFER_ENCODING = "Transfer-Encoding";
	public static final String TRANSFER_ENCODING_VALUE_CHUNCKED = "chunked";
	
	/** Content Transfer Encoding */
	public static final String CONTENT_TRANSFER_ENCODING = "Content-Transfer-Encoding";
	public static final String CONTENT_TRANSFER_ENCODING_VALUE_BINARY = "binary";
	public static final String CONTENT_TRANSFER_ENCODING_VALUE_BASE64 = "base64";
	
	/** Content Encoding */
	public static final String CONTENT_ENCODING = "Content-Encoding";
	
	/** Redirect */
	public static final String REDIRECT_LOCATION = "Location";
	
	/** Proxy */
	public static final String PROXY_AUTHORIZATION = "Proxy-Authorization";
	
	/** Accept */
	public static final String ACCEPT = "Accept";
	
	/** Connection */
	public static final String CONNECTION = "Connection";
	public static final String CONNECTION_VALUE_KEEP_ALIVE = "keep-alive";
	public static final String CONNECTION_VALUE_CLOSE = "close";
	
	/** Retry-After */
	public static final String RETRY_AFTER = "Retry-After";
	
	/** Cookie */
	public static final String COOKIE = "Cookie";
	public static final String COOKIE_SEPARATOR = ";";
	public static final String COOKIE_NAME_VALUE_SEPARATOR = "=";
	
	/** SetCookie */
	public static final String SET_COOKIE = "Set-Cookie";
	public static final String SET_COOKIE_EXPIRES_PARAMETER = "Expires"; // <date>
	public static final String SET_COOKIE_MAX_AGE_PARAMETER = "Max-Age"; // <non-zero-digit>
	public static final String SET_COOKIE_PATH_PARAMETER = "Path"; // <path-value>
	public static final String SET_COOKIE_DOMAIN_PARAMETER = "Domain"; // <domain-value>
	public static final String SET_COOKIE_SECURE_PARAMETER = "Secure";
	public static final String SET_COOKIE_HTTP_ONLY_PARAMETER = "HttpOnly";
	
	/** Digest */
	public static final String DIGEST = "Digest";
	public static final String DIGEST_ALGO_MD5 = "MD5";
	public static final String DIGEST_ALGO_SHA = "SHA";
	public static final String DIGEST_ALGO_SHA_1 = "SHA-1";
	public static final String DIGEST_ALGO_SHA_256 = "SHA-256";
	public static final String DIGEST_ALGO_SHA_384 = "SHA-384";
	public static final String DIGEST_ALGO_SHA_512 = "SHA-512";
	
	/** Authentication */
	public static final String AUTHENTICATION_BASIC = "Basic";
	public static final String AUTHENTICATION_BEARER = "Bearer";
	
	/** Authorization */
	public static final String AUTHORIZATION = "Authorization";
	public static final String AUTHORIZATION_PREFIX_BASIC = AUTHENTICATION_BASIC+" ";
	public static final String AUTHORIZATION_PREFIX_BEARER = AUTHENTICATION_BEARER+" ";
	public static final String AUTHORIZATION_RESPONSE_WWW_AUTHENTICATE = "WWW-Authenticate";
	public static final String AUTHORIZATION_RESPONSE_WWW_AUTHENTICATE_BASIC_REALM_PREFIX = "Basic realm=\"\"";
	public static final String AUTHORIZATION_RESPONSE_WWW_AUTHENTICATE_BASIC_REALM_SUFFIX = "\"";
	
	/** Download */
	public static final String CONTENT_DISPOSITION = "Content-Disposition";
	public static final String CONTENT_DISPOSITION_ATTACH_FILE_PREFIX = "attachment; filename=";
	public static final String CONTENT_DISPOSITION_NAME_PREFIX = "name=";
	public static final String CONTENT_DISPOSITION_FILENAME_PREFIX = "filename=";
	
	/** Cache */
	public static final String CACHE_STATUS_DIRECTIVE_NO_CACHE = "no-cache";
	public static final String CACHE_STATUS_DIRECTIVE_NO_STORE = "no-store";
	public static final String CACHE_STATUS_DIRECTIVE_MAX_AGE = "max-age";
	public static final String CACHE_STATUS_DIRECTIVE_MUST_REVALIDATE = "must-revalidate";
	public static final String CACHE_STATUS_HTTP_1_1 = "Cache-Control";
	public static final String CACHE_STATUS_HTTP_1_1_DISABLE_CACHE = CACHE_STATUS_DIRECTIVE_NO_CACHE+", "+CACHE_STATUS_DIRECTIVE_NO_STORE+", "+CACHE_STATUS_DIRECTIVE_MUST_REVALIDATE;
	public static final String CACHE_STATUS_HTTP_1_0 = "Pragma";
	public static final String CACHE_STATUS_HTTP_1_0_DISABLE_CACHE = CACHE_STATUS_DIRECTIVE_NO_CACHE;
	public static final String CACHE_STATUS_PROXY_EXPIRES = "Expires";
	public static final long CACHE_STATUS_PROXY_EXPIRES_DISABLE_CACHE = 0;
	public static final String CACHE_STATUS_VARY = "Vary";
	public static final String CACHE_STATUS_VARY_UNCACHABLE = "*"; // Indicates that factors other than request headers influenced the generation of this response. Implies that the response is uncacheable.
	public static final List<String> CACHE_STATUS_HEADERS = new ArrayList<>();
	static {
		CACHE_STATUS_HEADERS.add(CACHE_STATUS_HTTP_1_1);
		CACHE_STATUS_HEADERS.add(CACHE_STATUS_HTTP_1_0);
		CACHE_STATUS_HEADERS.add(CACHE_STATUS_PROXY_EXPIRES);
		CACHE_STATUS_HEADERS.add(CACHE_STATUS_VARY);
	}
	public static boolean isCacheStatusHeader(String hdr) {
		if(hdr==null) {
			return false;
		}
		for (String h : CACHE_STATUS_HEADERS) {
			if(h.toLowerCase().equals(hdr.toLowerCase())) {
				return true;
			}
		}
		return false;
	}
	
	/** CORS Request */
	public static final String ACCESS_CONTROL_REQUEST_HEADERS = "Access-Control-Request-Headers";
	public static final String ACCESS_CONTROL_REQUEST_METHOD = "Access-Control-Request-Method";
	public static final String ACCESS_CONTROL_REQUEST_ORIGIN = "Origin";
		
	/** CORS Response */
	public static final String ACCESS_CONTROL_ALLOW_CREDENTIALS = "Access-Control-Allow-Credentials";
	public static final String ACCESS_CONTROL_ALLOW_HEADERS = "Access-Control-Allow-Headers";
	public static final String ALLOW_HEADERS = "Allow";
	public static final String ACCESS_CONTROL_ALLOW_METHODS = "Access-Control-Allow-Methods";
	public static final String ACCESS_CONTROL_ALLOW_ORIGIN = "Access-Control-Allow-Origin";
	public static final String ACCESS_CONTROL_ALLOW_ORIGIN_ALL_VALUE = "*";
	public static final String ACCESS_CONTROL_ALLOW_ORIGIN_VARY = "Vary";
	public static final String ACCESS_CONTROL_ALLOW_ORIGIN_VARY_ORIGIN_VALUE = "Origin";
	public static final String ACCESS_CONTROL_EXPOSE_HEADERS = "Access-Control-Expose-Headers";
	public static final String ACCESS_CONTROL_MAX_AGE = "Access-Control-Max-Age";
	public static final String ACCESS_CONTROL_MAX_AGE_DISABLE_CACHE = "-1";
    public static final List<String> ACCESS_CONTROL_SIMPLE_REQUEST_CONTENT_TYPES = new ArrayList<>(Arrays.asList(
    		HttpConstants.CONTENT_TYPE_X_WWW_FORM_URLENCODED, 
    		HttpConstants.CONTENT_TYPE_FORM_DATA,
    		HttpConstants.CONTENT_TYPE_PLAIN));

	/** Agent */
	public static final String USER_AGENT = "User-Agent";
	public static final String SERVER = "Server";
	public static final String X_POWERED_BY = "X-Powered-By";
	
	/** Content Type */
	public static final String CONTENT_TYPE_SOAP_1_1 = MimeTypeConstants.MEDIA_TYPE_SOAP_1_1;
	public static final String CONTENT_TYPE_SOAP_1_2 = MimeTypeConstants.MEDIA_TYPE_SOAP_1_2;
	public static final String CONTENT_TYPE_APPLICATION_OCTET_STREAM = MimeTypeConstants.MEDIA_TYPE_APPLICATION_OCTET_STREAM;
	public static final String CONTENT_TYPE_ZIP = MimeTypeConstants.MEDIA_TYPE_ZIP;
	public static final String CONTENT_TYPE_PDF = MimeTypeConstants.MEDIA_TYPE_PDF;
	public static final String CONTENT_TYPE_APPLICATION_XOP_XML = MimeTypeConstants.MEDIA_TYPE_APPLICATION_XOP_XML;
	public static final String CONTENT_TYPE_HTML = MimeTypeConstants.MEDIA_TYPE_HTML;
	public static final String CONTENT_TYPE_PLAIN = MimeTypeConstants.MEDIA_TYPE_PLAIN;
	public static final String CONTENT_TYPE_XML = MimeTypeConstants.MEDIA_TYPE_XML;
	public static final String CONTENT_TYPE_TEXT_XML = CONTENT_TYPE_SOAP_1_1;
	public static final String CONTENT_TYPE_JSON = MimeTypeConstants.MEDIA_TYPE_JSON;
	public static final String CONTENT_TYPE_OPENSPCOOP2_TUNNEL_SOAP = MimeTypeConstants.MEDIA_TYPE_OPENSPCOOP2_TUNNEL_SOAP;
	public static final String CONTENT_TYPE_X_DOWNLOAD = MimeTypeConstants.MEDIA_TYPE_X_DOWNLOAD;
	public static final String CONTENT_TYPE_X_WWW_FORM_URLENCODED = MimeTypeConstants.MEDIA_TYPE_X_WWW_FORM_URLENCODED;
	public static final String CONTENT_TYPE_FORM_DATA = MimeTypeConstants.MEDIA_TYPE_FORM_DATA;
	public static final String CONTENT_TYPE_JSON_PROBLEM_DETAILS_RFC_7807 = MimeTypeConstants.MEDIA_TYPE_JSON_PROBLEM_DETAILS_RFC_7807;
	public static final String CONTENT_TYPE_XML_PROBLEM_DETAILS_RFC_7807 = MimeTypeConstants.MEDIA_TYPE_XML_PROBLEM_DETAILS_RFC_7807;
	public static final String CONTENT_TYPE_OCSP_REQUEST = MimeTypeConstants.MEDIA_TYPE_OCSP_REQUEST;
	public static final String CONTENT_TYPE_OCSP_RESPONSE = MimeTypeConstants.MEDIA_TYPE_OCSP_RESPONSE;
	
	/** SOAP */
	public static final String SOAP11_MANDATORY_HEADER_HTTP_SOAP_ACTION = "SOAPAction";
	public static final String SOAP12_OPTIONAL_CONTENT_TYPE_PARAMETER_SOAP_ACTION = "action";
	
	/** Content Type, Parameter */
	public static final String CONTENT_TYPE_PARAMETER_CHARSET = "charset";
	
	/** Multipart Content Type */
	
	public static final String CONTENT_TYPE_MULTIPART_TYPE = "multipart";
	public static final String CONTENT_TYPE_MULTIPART_ALTERNATIVE_SUBTYPE = "alternative";
	public static final String CONTENT_TYPE_MULTIPART_MIXED_SUBTYPE = "mixed";
	public static final String CONTENT_TYPE_MULTIPART_RELATED_SUBTYPE = "related";
	public static final String CONTENT_TYPE_MULTIPART_FORM_DATA_SUBTYPE = "form-data";
	
	public static final String CONTENT_TYPE_MULTIPART_ALTERNATIVE = CONTENT_TYPE_MULTIPART_TYPE+"/"+CONTENT_TYPE_MULTIPART_ALTERNATIVE_SUBTYPE;
	public static final String CONTENT_TYPE_MULTIPART_MIXED = CONTENT_TYPE_MULTIPART_TYPE+"/"+CONTENT_TYPE_MULTIPART_MIXED_SUBTYPE;
	public static final String CONTENT_TYPE_MULTIPART_RELATED = CONTENT_TYPE_MULTIPART_TYPE+"/"+CONTENT_TYPE_MULTIPART_RELATED_SUBTYPE;
	public static final String CONTENT_TYPE_MULTIPART_FORM_DATA = CONTENT_TYPE_MULTIPART_TYPE+"/"+CONTENT_TYPE_MULTIPART_FORM_DATA_SUBTYPE;
	
	@Deprecated
	public static final String CONTENT_TYPE_MULTIPART = CONTENT_TYPE_MULTIPART_RELATED;
	
	public static final String CONTENT_TYPE_MULTIPART_PARAMETER_BOUNDARY = "boundary";
	public static final String CONTENT_TYPE_MULTIPART_PARAMETER_TYPE = "type";
	public static final String CONTENT_TYPE_MULTIPART_PARAMETER_START = "start";
	public static final String CONTENT_TYPE_MULTIPART_PARAMETER_START_INFO = "start-info";
	public static final String CONTENT_TYPE_MULTIPART_PARAMETER_FORM_DATA = "form-data";
	
	/** Source */
    public static final String SEPARATOR_SOURCE = ":";
    
    /** Content Security Policy */
	public static final String HEADER_NAME_CONTENT_SECURITY_POLICY = "Content-Security-Policy";
	public static final String HEADER_NAME_CONTENT_SECURITY_POLICY_REPORT_ONLY = "Content-Security-Policy-Report-Only";
	
}