001/*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements.  See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership.  The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License.  You may obtain a copy of the License at
009 *
010 *   http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing,
013 * software distributed under the License is distributed on an
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 * KIND, either express or implied.  See the License for the
016 * specific language governing permissions and limitations
017 * under the License.
018 */
019package org.eclipse.aether.transport.apache;
020
021import org.eclipse.aether.ConfigurationProperties;
022import org.eclipse.aether.RepositorySystemSession;
023
024/**
025 * Configuration for Apache Transport.
026 *
027 * @since 2.0.0
028 */
029public final class ApacheTransporterConfigurationKeys {
030    private ApacheTransporterConfigurationKeys() {}
031
032    static final String CONFIG_PROPS_PREFIX =
033            ConfigurationProperties.PREFIX_TRANSPORT + ApacheTransporterFactory.NAME + ".";
034
035    /**
036     * If enabled, underlying Apache HttpClient will use system properties as well to configure itself (typically
037     * used to set up HTTP Proxy via Java system properties). See HttpClientBuilder for used properties. This mode
038     * is not recommended, better use documented ways of configuration instead. Proxy authentication may use
039     * {@code http.proxyUser}/{@code http.proxyPassword} or {@code https.proxyUser}/{@code https.proxyPassword}
040     * when the corresponding proxy host and port match. Explicit Resolver credentials take precedence;
041     * system proxy credentials are never used for repository authentication.
042     *
043     * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
044     * @configurationType {@link java.lang.Boolean}
045     * @configurationDefaultValue {@link #DEFAULT_USE_SYSTEM_PROPERTIES}
046     * @configurationRepoIdSuffix Yes
047     */
048    public static final String CONFIG_PROP_USE_SYSTEM_PROPERTIES = CONFIG_PROPS_PREFIX + "useSystemProperties";
049
050    public static final boolean DEFAULT_USE_SYSTEM_PROPERTIES = false;
051
052    /**
053     * The name of retryHandler, supported values are “standard”, that obeys RFC-2616, regarding idempotent methods,
054     * and “default” that considers requests w/o payload as idempotent.
055     *
056     * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
057     * @configurationType {@link java.lang.String}
058     * @configurationDefaultValue {@link #HTTP_RETRY_HANDLER_NAME_STANDARD}
059     * @configurationRepoIdSuffix Yes
060     */
061    public static final String CONFIG_PROP_HTTP_RETRY_HANDLER_NAME = CONFIG_PROPS_PREFIX + "retryHandler.name";
062
063    public static final String HTTP_RETRY_HANDLER_NAME_STANDARD = "standard";
064
065    public static final String HTTP_RETRY_HANDLER_NAME_DEFAULT = "default";
066
067    /**
068     * Set to true if it is acceptable to retry non-idempotent requests, that have been sent.
069     *
070     * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
071     * @configurationType {@link java.lang.Boolean}
072     * @configurationDefaultValue {@link #DEFAULT_HTTP_RETRY_HANDLER_REQUEST_SENT_ENABLED}
073     * @configurationRepoIdSuffix Yes
074     */
075    public static final String CONFIG_PROP_HTTP_RETRY_HANDLER_REQUEST_SENT_ENABLED =
076            CONFIG_PROPS_PREFIX + "retryHandler.requestSentEnabled";
077
078    public static final boolean DEFAULT_HTTP_RETRY_HANDLER_REQUEST_SENT_ENABLED = false;
079
080    /**
081     * Comma-separated list of
082     * <a href="https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#ciphersuites">Cipher
083     * Suites</a> which are enabled for HTTPS connections.
084     *
085     * @since 2.0.0
086     * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
087     * @configurationType {@link java.lang.String}
088     */
089    public static final String CONFIG_PROP_CIPHER_SUITES = CONFIG_PROPS_PREFIX + "https.cipherSuites";
090
091    /**
092     * Comma-separated list of
093     * <a href="https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#jssenames">Protocols
094     * </a> which are enabled for HTTPS connections.
095     *
096     * @since 2.0.0
097     * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
098     * @configurationType {@link java.lang.String}
099     */
100    public static final String CONFIG_PROP_PROTOCOLS = CONFIG_PROPS_PREFIX + "https.protocols";
101
102    /**
103     * If enabled, Apache HttpClient will follow HTTP redirects.
104     *
105     * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
106     * @configurationType {@link Boolean}
107     * @configurationDefaultValue {@link #DEFAULT_FOLLOW_REDIRECTS}
108     * @configurationRepoIdSuffix Yes
109     * @since 2.0.2
110     * @deprecated Use {@link ConfigurationProperties#HTTP_REDIRECT_MODE} instead.
111     */
112    @Deprecated
113    public static final String CONFIG_PROP_FOLLOW_REDIRECTS = CONFIG_PROPS_PREFIX + "followRedirects";
114
115    public static final boolean DEFAULT_FOLLOW_REDIRECTS = true;
116
117    /**
118     * If enabled (default), operator-configured request headers ({@code aether.transport.http.headers}) are only
119     * sent on requests targeting the repository origin (the scheme, host and port the repository URL denotes).
120     * Apache HttpClient re-sends the original request headers on redirects, so without origin scoping a
121     * cross-origin redirect replays the configured headers - which frequently carry credentials such as
122     * {@code Authorization}, cookies or private token headers - to the redirect target host. Disable only when a
123     * redirect target legitimately requires the configured headers.
124     *
125     * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
126     * @configurationType {@link Boolean}
127     * @configurationDefaultValue {@link #DEFAULT_ORIGIN_SCOPED_HEADERS}
128     * @configurationRepoIdSuffix Yes
129     * @since 2.0.23
130     * @deprecated Use {@link ConfigurationProperties#HTTP_ORIGIN_SCOPED_HEADERS} instead.
131     */
132    @Deprecated
133    public static final String CONFIG_PROP_ORIGIN_SCOPED_HEADERS = CONFIG_PROPS_PREFIX + "originScopedHeaders";
134
135    /** @deprecated Use {@link ConfigurationProperties#DEFAULT_HTTP_ORIGIN_SCOPED_HEADERS} instead. */
136    @Deprecated
137    public static final boolean DEFAULT_ORIGIN_SCOPED_HEADERS = true;
138
139    /**
140     * The max redirect count to follow.
141     *
142     * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
143     * @configurationType {@link java.lang.Integer}
144     * @configurationDefaultValue {@link #DEFAULT_MAX_REDIRECTS}
145     * @configurationRepoIdSuffix Yes
146     * @since 2.0.2
147     */
148    public static final String CONFIG_PROP_MAX_REDIRECTS = CONFIG_PROPS_PREFIX + "maxRedirects";
149
150    public static final int DEFAULT_MAX_REDIRECTS = 5;
151
152    /**
153     * If enabled, Apache HttpClient will follow redirects that downgrade the protocol from https to http. Disabled
154     * by default: such a downgrade strips transport encryption from artifact and checksum bytes and makes repository
155     * credentials eligible for transmission over plaintext, so a downgrading redirect fails the transfer instead.
156     *
157     * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
158     * @configurationType {@link Boolean}
159     * @configurationDefaultValue {@link #DEFAULT_FOLLOW_INSECURE_REDIRECTS}
160     * @configurationRepoIdSuffix Yes
161     * @since 2.0.23
162     * @deprecated Use {@link ConfigurationProperties#HTTP_FOLLOW_INSECURE_REDIRECT} instead.
163     */
164    @Deprecated
165    public static final String CONFIG_PROP_FOLLOW_INSECURE_REDIRECTS = CONFIG_PROPS_PREFIX + "followInsecureRedirects";
166
167    /** @deprecated Use {@link ConfigurationProperties#DEFAULT_HTTP_FOLLOW_INSECURE_REDIRECT} instead. */
168    @Deprecated
169    public static final boolean DEFAULT_FOLLOW_INSECURE_REDIRECTS = false;
170}