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

oracle.nosql.driver.util.HttpConstants Maven / Gradle / Ivy

/*-
 * Copyright (c) 2011, 2024 Oracle and/or its affiliates. All rights reserved.
 *
 * Licensed under the Universal Permissive License v 1.0 as shown at
 *  https://oss.oracle.com/licenses/upl/
 */

package oracle.nosql.driver.util;

import oracle.nosql.driver.NoSQLHandleConfig;

/**
 * Constants used for HTTP headers and paths
 */
public class HttpConstants {

    /**
     * The http header that identifies the client scoped unique request id
     * associated with each request. The request header is returned by the
     * server, as part of the response and serves to associate the response
     * with the request.
     *
     * Note: We could use stream ids to associate a request and response.
     * However, the current handler pipeline on the client side operates at the
     * http level rather than the frame level, and consequently does not have
     * access to the stream id.
     */
    public static final String REQUEST_ID_HEADER = "x-nosql-request-id";

    /**
     * The version number associated with the serialization. The server will
     * use this version number when deserializing the http request and
     * serializing the http response.
     */
    public static final String REQUEST_SERDE_VERSION_HEADER =
        "x-nosql-serde-version";

    /**
     * A header for transferring a LogContext on an http request.
     */
    public static final String REQUEST_LOGCONTEXT_HEADER =
        "x-nosql-logcontext";

    /**
     * A header for transferring the compartment id on an http request.
     */
    public static final String REQUEST_COMPARTMENT_ID = "x-nosql-compartment-id";

    /**
     * A header for transferring the default namespace on an http request.
     * onprem use only.
     */
    public static final String REQUEST_NAMESPACE_HEADER = "x-nosql-default-ns";

    /**
     * A header that indicates the serial version of the protocol used by the
     * server (proxy).
     */
    public static final String SERVER_SERIAL_VERSION = "x-nosql-serial-version";

    /**
     * A header that indicates the version of the proxy and kv used.
     */
    public static final String SERVER_VERSION = "x-nosql-version";

    /**
     * Headers possibly set by the load balancer service to indicate original
     * IP address
     */
    public static final String X_REAL_IP_HEADER = "x-real-ip";
    public static final String X_FORWARDED_FOR_HEADER = "x-forwarded-for";

    /**
     * The name of the content type header
     */
    public static final String CONTENT_TYPE = "Content-Type";

    /**
     * The name of the content length header
     */
    public static final String CONTENT_LENGTH = "Content-Length";

    /**
     * The name of the cookie header
     */
    public static final String COOKIE = "Cookie";

    /**
     * The name of the date header
     */
    public static final String DATE = "date";

    /**
     * The name of the (request-target) header
     */
    public static final String REQUEST_TARGET = "(request-target)";

    /**
     * The name of the host header
     */
    public static final String HOST = "host";

    /**
     * the name of the content sha256 header
     */
    public static final String CONTENT_SHA = "x-content-sha256";

    /*
     * Keep alive header
     */
    public static final String KEEP_ALIVE = "keep-alive";

    public static final String CONNECTION = "Connection";

    public static final String ACCEPT = "Accept";

    public static final String USER_AGENT = "User-Agent";

    /*
     * Content type values
     */
    public static final String APPLICATION_JSON =
        "application/json; charset=UTF-8";
    /* should this be "binary" ? */
    public static final String OCTET_STREAM = "application/octet-stream";

    /*
     * Headers required for security. These need to be in each response
     */
    public static final String X_CONTENT_TYPE_OPTIONS = "X-content-type-options";
    public static final String X_CONTENT_TYPE_OPTIONS_VALUE = "nosniff";
    public static final String CONTENT_DISPOSITION = "content-disposition";
    public static final String CONTENT_DISPOSITION_VALUE =
        "attachment; filename=api.json";

    /*
     * The name of the Authorization header
     */
    public static final String AUTHORIZATION = "Authorization";

    /*
     * The Access Token prefix in authorization header
     */
    public static final String TOKEN_PREFIX = "Bearer ";

    public static final String userAgent = makeUserAgent();

    /*
     * If present, the amount of time the request was delayed due to
     * rate limiting (in milliseconds).
     */
    public static final String X_RATELIMIT_DELAY = "X-Nosql-RL-Delay-Ms";

    /*
     * Path Components
     */

    /**
     * The current version of the protocol
     */
    public static final String NOSQL_VERSION = "V2";

    /**
     * The path denoting a NoSQL request
     */
    public static final String NOSQL_DATA_PATH = makePath(NOSQL_VERSION,
                                                          "nosql/data");

    /**
     * The base path to the on-premises security services. All users need
     * a leading "/" so add it here.
     */
    public static final String KV_SECURITY_PATH = makePath("/" + NOSQL_VERSION,
                                                           "nosql/security");

    /**
     * Path component indicating table usage
     */
    public static final String TABLE_USAGE = "usage";

    /**
     * Path component indicating table history
     */
    public static final String TABLE_HISTORY = "history";

    /**
     * Path component indicating store info (internal use by tenant manager)
     */
    public static final String TABLE_STOREINFO = "storeinfo";

    /**
     * Path component indicating indexes operation
     */
    public static final String TABLE_INDEXES = "indexes";

    /*
     * Query Parameters used by GET operations
     */

    /**
     * Tenant id, required for all paths
     */
    public static final String TENANT_ID = "tenantid";

    /**
     * If exists, used for drop table, index
     */
    public static final String IF_EXISTS = "ifexists";

    /**
     * verb, used by retrieve request history
     */
    public static final String VERB = "verb";

    /**
     * Operation id, used optionally by GET table, calling the SC
     */
    public static final String OPERATION_ID = "operationid";

    /**
     * Used by list tables for paging (history, list)
     */
    public static final String START_INDEX = "start_index";

    /**
     * Used for numeric limits to return objects (usage, history, list)
     */
    public static final String LIMIT = "limit";

    /**
     * Used to specify a log level for LogControlService.
     */
    public static final String LOG_LEVEL = "level";

    /**
     * Used to specify an entrypoint for LogControlService.
     */
    public static final String ENTRYPOINT = "entrypoint";

    /**
     * Used by usage to return a range of records
     */
    public static final String START_TIMESTAMP = "start_timestamp";
    public static final String END_TIMESTAMP = "end_timestamp";

    /**
     * Used for paginating results that might be voluminous.
     */
    public static final String PAGE_SIZE = "pagesz";
    public static final String PAGE_NUMBER = "pageno";

    /**
     * Use this key to represent non-exist entry key for admin sub service
     * lookup.
     */
    public static final String NULL_KEY = "NULL";

    /**
     * Prefix of the basic authentication information.
     */
    public static final String BASIC_PREFIX = "Basic ";

    /**
     * Prefix of the authorization field for access token.
     */
    public static final String BEARER_PREFIX = "Bearer ";

    /**
     * Creates a URI path from the arguments
     */
    private static String makePath(String ... s) {
        StringBuilder sb = new StringBuilder();
        sb.append(s[0]);
        for (int i = 1; i < s.length; i++) {
            sb.append("/");
            sb.append(s[i]);
        }
        return sb.toString();
    }

    /**
     * Format: "NoSQL-JavaSDK/version (os info)"
     */
    public static String makeUserAgent() {
        String os = System.getProperty("os.name");
        String osVersion = System.getProperty("os.version");
        String javaVersion = System.getProperty("java.version");
        String javaVmName = System.getProperty("java.vm.name");
        StringBuilder sb = new StringBuilder();
        sb.append("NoSQL-JavaSDK/")
            .append(NoSQLHandleConfig.getLibraryVersion())
            .append(" (")
            .append(os).append("/").append(osVersion)
            .append("; ")
            .append(javaVersion).append("/").append(javaVmName)
            .append(")");
        return sb.toString();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy