001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.commons.vfs2.provider.http; 018 019import java.time.Duration; 020 021import org.apache.commons.httpclient.Cookie; 022import org.apache.commons.httpclient.params.HttpConnectionManagerParams; 023import org.apache.commons.httpclient.params.HttpConnectionParams; 024import org.apache.commons.vfs2.FileSystem; 025import org.apache.commons.vfs2.FileSystemConfigBuilder; 026import org.apache.commons.vfs2.FileSystemOptions; 027import org.apache.commons.vfs2.UserAuthenticator; 028 029/** 030 * Configuration options for HTTP. 031 * 032 * @deprecated Use {@link org.apache.commons.vfs2.provider.http5}. 033 */ 034@Deprecated 035public class HttpFileSystemConfigBuilder extends FileSystemConfigBuilder { 036 037 /** 038 * Keys for FileSystemOptions. 039 */ 040 protected static final String KEY_FOLLOW_REDIRECT = "followRedirect"; 041 042 /** 043 * Keys for FileSystemOptions. 044 */ 045 protected static final String KEY_USER_AGENT = "userAgent"; 046 047 private static final HttpFileSystemConfigBuilder BUILDER = new HttpFileSystemConfigBuilder(); 048 049 private static final int DEFAULT_MAX_HOST_CONNECTIONS = 5; 050 051 private static final int DEFAULT_MAX_CONNECTIONS = 50; 052 053 private static final Duration DEFAULT_CONNECTION_TIMEOUT = Duration.ZERO; 054 055 private static final Duration DEFAULT_SO_TIMEOUT = Duration.ZERO; 056 057 private static final boolean DEFAULT_FOLLOW_REDIRECT = true; 058 059 private static final String DEFAULT_USER_AGENT = "Jakarta-Commons-VFS"; 060 061 private static final String KEY_PREEMPTIVE_AUTHENTICATION = "preemptiveAuth"; 062 063 /** 064 * Gets the singleton builder. 065 * 066 * @return the singleton builder. 067 */ 068 public static HttpFileSystemConfigBuilder getInstance() { 069 return BUILDER; 070 } 071 072 private HttpFileSystemConfigBuilder() { 073 super("http."); 074 } 075 076 /** 077 * Creates new config builder. 078 * 079 * @param prefix String for properties of this file system. 080 * @since 2.0 081 */ 082 protected HttpFileSystemConfigBuilder(final String prefix) { 083 super(prefix); 084 } 085 086 @Override 087 protected Class<? extends FileSystem> getConfigClass() { 088 return HttpFileSystem.class; 089 } 090 091 /** 092 * Gets the connection timeout. 093 * 094 * @param opts The FileSystem options. 095 * @return The connection timeout. 096 * @since 2.1 097 * @deprecated Use {@link #getConnectionTimeoutDuration(FileSystemOptions)}. 098 */ 099 @Deprecated 100 public int getConnectionTimeout(final FileSystemOptions opts) { 101 return getDurationInteger(opts, HttpConnectionParams.CONNECTION_TIMEOUT, DEFAULT_CONNECTION_TIMEOUT); 102 } 103 104 /** 105 * Gets the connection timeout. 106 * 107 * @param opts The FileSystem options. 108 * @return The connection timeout. 109 * @since 2.8.0 110 */ 111 public Duration getConnectionTimeoutDuration(final FileSystemOptions opts) { 112 return getDuration(opts, HttpConnectionParams.CONNECTION_TIMEOUT, DEFAULT_CONNECTION_TIMEOUT); 113 } 114 115 /** 116 * Gets the cookies to add to the request. 117 * 118 * @param opts The FileSystem options. 119 * @return the Cookie array. 120 */ 121 public Cookie[] getCookies(final FileSystemOptions opts) { 122 return getParam(opts, "cookies"); 123 } 124 125 /** 126 * Gets whether to follow redirects for the connection. 127 * 128 * @param opts The FileSystem options. 129 * @return {@code true} to follow redirects, {@code false} not to. 130 * @see #setFollowRedirect 131 * @since 2.1 132 */ 133 public boolean getFollowRedirect(final FileSystemOptions opts) { 134 return getBoolean(opts, KEY_FOLLOW_REDIRECT, DEFAULT_FOLLOW_REDIRECT); 135 } 136 137 /** 138 * Gets the maximum number of connections allowed per host. 139 * 140 * @param opts The FileSystemOptions. 141 * @return The maximum number of connections allowed per host. 142 * @since 2.0 143 */ 144 public int getMaxConnectionsPerHost(final FileSystemOptions opts) { 145 return getInteger(opts, HttpConnectionManagerParams.MAX_HOST_CONNECTIONS, DEFAULT_MAX_HOST_CONNECTIONS); 146 } 147 148 /** 149 * Gets the maximum number of connections allowed. 150 * 151 * @param opts The FileSystemOptions. 152 * @return The maximum number of connections allowed. 153 * @since 2.0 154 */ 155 public int getMaxTotalConnections(final FileSystemOptions opts) { 156 return getInteger(opts, HttpConnectionManagerParams.MAX_TOTAL_CONNECTIONS, DEFAULT_MAX_CONNECTIONS); 157 } 158 159 /** 160 * Gets the proxy authenticator where the system should get the credentials from. 161 * 162 * @param opts The FileSystem options. 163 * @return The UserAuthenticator. 164 */ 165 public UserAuthenticator getProxyAuthenticator(final FileSystemOptions opts) { 166 return getParam(opts, "proxyAuthenticator"); 167 } 168 169 /** 170 * Gets the proxy to use for http connection. You have to set the ProxyPort too if you would like to have the proxy 171 * really used. 172 * 173 * @param opts The FileSystem options. 174 * @return proxyHost 175 * @see #setProxyPort 176 */ 177 public String getProxyHost(final FileSystemOptions opts) { 178 return getString(opts, "proxyHost"); 179 } 180 181 /** 182 * Gets the proxy-port to use for http the connection. You have to set the ProxyHost too if you would like to have 183 * the proxy really used. 184 * 185 * @param opts The FileSystem options. 186 * @return proxyPort: the port number or 0 if it is not set 187 * @see #setProxyHost 188 */ 189 public int getProxyPort(final FileSystemOptions opts) { 190 return getInteger(opts, "proxyPort", 0); 191 } 192 193 /** 194 * Gets the socket timeout. 195 * 196 * @param opts The FileSystemOptions. 197 * @return The socket timeout. 198 * @since 2.1 199 * @deprecated Use {@link #getSoTimeoutDuration(FileSystemOptions)}. 200 */ 201 @Deprecated 202 public int getSoTimeout(final FileSystemOptions opts) { 203 return getDurationInteger(opts, HttpConnectionParams.SO_TIMEOUT, DEFAULT_SO_TIMEOUT); 204 } 205 206 /** 207 * Gets the socket timeout. 208 * 209 * @param opts The FileSystemOptions. 210 * @return The socket timeout. 211 * @since 2.8.0 212 */ 213 public Duration getSoTimeoutDuration(final FileSystemOptions opts) { 214 return getDuration(opts, HttpConnectionParams.SO_TIMEOUT, DEFAULT_SO_TIMEOUT); 215 } 216 217 /** 218 * Gets the charset used for url encoding. 219 * 220 * @param opts The FileSystem options. 221 * @return the charset name. 222 */ 223 public String getUrlCharset(final FileSystemOptions opts) { 224 return getString(opts, "urlCharset"); 225 } 226 227 /** 228 * Gets the user agent string. 229 * 230 * @param opts the file system options to modify 231 * @return User provided User-Agent string, otherwise default of: Commons-VFS 232 */ 233 public String getUserAgent(final FileSystemOptions opts) { 234 final String userAgent = getParam(opts, KEY_USER_AGENT); 235 return userAgent != null ? userAgent : DEFAULT_USER_AGENT; 236 } 237 238 /** 239 * Determines if the FileSystemOptions indicate that preemptive authentication is requested. 240 * 241 * @param opts The FileSystemOptions. 242 * @return true if preemptiveAuth is requested. 243 * @since 2.0 244 */ 245 public boolean isPreemptiveAuth(final FileSystemOptions opts) { 246 return getBoolean(opts, KEY_PREEMPTIVE_AUTHENTICATION, Boolean.FALSE).booleanValue(); 247 } 248 249 /** 250 * The connection timeout. 251 * 252 * @param opts The FileSystem options. 253 * @param timeout The connection timeout. 254 * @since 2.8.0 255 */ 256 public void setConnectionTimeout(final FileSystemOptions opts, final Duration timeout) { 257 setParam(opts, HttpConnectionParams.CONNECTION_TIMEOUT, timeout); 258 } 259 260 /** 261 * The connection timeout. 262 * 263 * @param opts The FileSystem options. 264 * @param timeout The connection timeout. 265 * @since 2.1 266 * @deprecated Use {@link #setConnectionTimeout(FileSystemOptions, Duration)}. 267 */ 268 @Deprecated 269 public void setConnectionTimeout(final FileSystemOptions opts, final int timeout) { 270 setConnectionTimeout(opts, Duration.ofMillis(timeout)); 271 } 272 273 /** 274 * The cookies to add to the request. 275 * 276 * @param opts The FileSystem options. 277 * @param cookies An array of Cookies. 278 */ 279 public void setCookies(final FileSystemOptions opts, final Cookie[] cookies) { 280 setParam(opts, "cookies", cookies); 281 } 282 283 /** 284 * Sets whether to follow redirects for the connection. 285 * 286 * @param opts The FileSystem options. 287 * @param redirect {@code true} to follow redirects, {@code false} not to. 288 * @see #setFollowRedirect 289 * @since 2.1 290 */ 291 public void setFollowRedirect(final FileSystemOptions opts, final boolean redirect) { 292 setParam(opts, KEY_FOLLOW_REDIRECT, redirect); 293 } 294 295 /** 296 * Sets the maximum number of connections allowed to any host. 297 * 298 * @param opts The FileSystem options. 299 * @param maxHostConnections The maximum number of connections to a host. 300 * @since 2.0 301 */ 302 public void setMaxConnectionsPerHost(final FileSystemOptions opts, final int maxHostConnections) { 303 setParam(opts, HttpConnectionManagerParams.MAX_HOST_CONNECTIONS, Integer.valueOf(maxHostConnections)); 304 } 305 306 /** 307 * Sets the maximum number of connections allowed. 308 * 309 * @param opts The FileSystem options. 310 * @param maxTotalConnections The maximum number of connections. 311 * @since 2.0 312 */ 313 public void setMaxTotalConnections(final FileSystemOptions opts, final int maxTotalConnections) { 314 setParam(opts, HttpConnectionManagerParams.MAX_TOTAL_CONNECTIONS, Integer.valueOf(maxTotalConnections)); 315 } 316 317 /** 318 * Sets the given value for preemptive HTTP authentication (using BASIC) on the given FileSystemOptions object. 319 * Defaults to false if not set. It may be appropriate to set to true in cases when the resulting chattiness of the 320 * conversation outweighs any architectural desire to use a stronger authentication scheme than basic/preemptive. 321 * 322 * @param opts The FileSystemOptions. 323 * @param preemptiveAuth the desired setting; true=enabled and false=disabled. 324 */ 325 public void setPreemptiveAuth(final FileSystemOptions opts, final boolean preemptiveAuth) { 326 setParam(opts, KEY_PREEMPTIVE_AUTHENTICATION, Boolean.valueOf(preemptiveAuth)); 327 } 328 329 /** 330 * Sets the proxy authenticator where the system should get the credentials from. 331 * 332 * @param opts The FileSystem options. 333 * @param authenticator The UserAuthenticator. 334 */ 335 public void setProxyAuthenticator(final FileSystemOptions opts, final UserAuthenticator authenticator) { 336 setParam(opts, "proxyAuthenticator", authenticator); 337 } 338 339 /** 340 * Sets the proxy to use for http connection. 341 * <p> 342 * You have to set the ProxyPort too if you would like to have the proxy really used. 343 * </p> 344 * 345 * @param opts The FileSystem options. 346 * @param proxyHost the host 347 * @see #setProxyPort 348 */ 349 public void setProxyHost(final FileSystemOptions opts, final String proxyHost) { 350 setParam(opts, "proxyHost", proxyHost); 351 } 352 353 /** 354 * Sets the proxy-port to use for http connection. You have to set the ProxyHost too if you would like to have the 355 * proxy really used. 356 * 357 * @param opts The FileSystem options. 358 * @param proxyPort the port 359 * @see #setProxyHost 360 */ 361 public void setProxyPort(final FileSystemOptions opts, final int proxyPort) { 362 setParam(opts, "proxyPort", Integer.valueOf(proxyPort)); 363 } 364 365 /** 366 * The socket timeout. 367 * 368 * @param opts The FileSystem options. 369 * @param timeout socket timeout. 370 * @since 2.8.0 371 */ 372 public void setSoTimeout(final FileSystemOptions opts, final Duration timeout) { 373 setParam(opts, HttpConnectionParams.SO_TIMEOUT, timeout); 374 } 375 376 /** 377 * The socket timeout. 378 * 379 * @param opts The FileSystem options. 380 * @param timeout socket timeout. 381 * @since 2.1 382 * @deprecated Use {@link #setSoTimeout(FileSystemOptions, Duration)}. 383 */ 384 @Deprecated 385 public void setSoTimeout(final FileSystemOptions opts, final int timeout) { 386 setSoTimeout(opts, Duration.ofMillis(timeout)); 387 } 388 389 /** 390 * Sets the charset used for url encoding. 391 * 392 * @param opts The FileSystem options. 393 * @param charset the charset name. 394 */ 395 public void setUrlCharset(final FileSystemOptions opts, final String charset) { 396 setParam(opts, "urlCharset", charset); 397 } 398 399 /** 400 * Sets the user agent to attach to the outgoing http methods. 401 * 402 * @param opts the file system options to modify 403 * @param userAgent User Agent String 404 */ 405 public void setUserAgent(final FileSystemOptions opts, final String userAgent) { 406 setParam(opts, "userAgent", userAgent); 407 } 408}