1 /* 2 * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/auth/AuthScope.java $ 3 * $Revision: 652950 $ 4 * $Date: 2008-05-02 16:49:48 -0700 (Fri, 02 May 2008) $ 5 * 6 * ==================================================================== 7 * 8 * Licensed to the Apache Software Foundation (ASF) under one or more 9 * contributor license agreements. See the NOTICE file distributed with 10 * this work for additional information regarding copyright ownership. 11 * The ASF licenses this file to You under the Apache License, Version 2.0 12 * (the "License"); you may not use this file except in compliance with 13 * the License. You may obtain a copy of the License at 14 * 15 * http://www.apache.org/licenses/LICENSE-2.0 16 * 17 * Unless required by applicable law or agreed to in writing, software 18 * distributed under the License is distributed on an "AS IS" BASIS, 19 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 20 * See the License for the specific language governing permissions and 21 * limitations under the License. 22 * ==================================================================== 23 * 24 * This software consists of voluntary contributions made by many 25 * individuals on behalf of the Apache Software Foundation. For more 26 * information on the Apache Software Foundation, please see 27 * <http://www.apache.org/>. 28 * 29 */ 30 31 package org.apache.http.auth; 32 33 import java.util.Locale; 34 35 import org.apache.http.util.LangUtils; 36 37 /** 38 * The class represents an authentication scope consisting of a host name, 39 * a port number, a realm name and an authentication scheme name which 40 * {@link Credentials Credentials} apply to. 41 * 42 * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a> 43 * @author <a href="mailto:adrian@intencha.com">Adrian Sutton</a> 44 * 45 * @since 4.0 46 * 47 * @deprecated Please use {@link java.net.URL#openConnection} instead. 48 * Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a> 49 * for further details. 50 */ 51 @Deprecated 52 public class AuthScope { 53 54 /** 55 * The <tt>null</tt> value represents any host. In the future versions of 56 * HttpClient the use of this parameter will be discontinued. 57 */ 58 public static final String ANY_HOST = null; 59 60 /** 61 * The <tt>-1</tt> value represents any port. 62 */ 63 public static final int ANY_PORT = -1; 64 65 /** 66 * The <tt>null</tt> value represents any realm. 67 */ 68 public static final String ANY_REALM = null; 69 70 /** 71 * The <tt>null</tt> value represents any authentication scheme. 72 */ 73 public static final String ANY_SCHEME = null; 74 75 /** 76 * Default scope matching any host, port, realm and authentication scheme. 77 * In the future versions of HttpClient the use of this parameter will be 78 * discontinued. 79 */ 80 public static final AuthScope ANY = new AuthScope(ANY_HOST, ANY_PORT, ANY_REALM, ANY_SCHEME); 81 82 /** The authentication scheme the credentials apply to. */ 83 private final String scheme; 84 85 /** The realm the credentials apply to. */ 86 private final String realm; 87 88 /** The host the credentials apply to. */ 89 private final String host; 90 91 /** The port the credentials apply to. */ 92 private final int port; 93 94 /** Creates a new credentials scope for the given 95 * <tt>host</tt>, <tt>port</tt>, <tt>realm</tt>, and 96 * <tt>authentication scheme</tt>. 97 * 98 * @param host the host the credentials apply to. May be set 99 * to <tt>null</tt> if credenticals are applicable to 100 * any host. 101 * @param port the port the credentials apply to. May be set 102 * to negative value if credenticals are applicable to 103 * any port. 104 * @param realm the realm the credentials apply to. May be set 105 * to <tt>null</tt> if credenticals are applicable to 106 * any realm. 107 * @param scheme the authentication scheme the credentials apply to. 108 * May be set to <tt>null</tt> if credenticals are applicable to 109 * any authentication scheme. 110 */ AuthScope(final String host, int port, final String realm, final String scheme)111 public AuthScope(final String host, int port, 112 final String realm, final String scheme) 113 { 114 this.host = (host == null) ? ANY_HOST: host.toLowerCase(Locale.ENGLISH); 115 this.port = (port < 0) ? ANY_PORT: port; 116 this.realm = (realm == null) ? ANY_REALM: realm; 117 this.scheme = (scheme == null) ? ANY_SCHEME: scheme.toUpperCase(Locale.ENGLISH); 118 } 119 120 /** Creates a new credentials scope for the given 121 * <tt>host</tt>, <tt>port</tt>, <tt>realm</tt>, and any 122 * authentication scheme. 123 * 124 * @param host the host the credentials apply to. May be set 125 * to <tt>null</tt> if credenticals are applicable to 126 * any host. 127 * @param port the port the credentials apply to. May be set 128 * to negative value if credenticals are applicable to 129 * any port. 130 * @param realm the realm the credentials apply to. May be set 131 * to <tt>null</tt> if credenticals are applicable to 132 * any realm. 133 */ AuthScope(final String host, int port, final String realm)134 public AuthScope(final String host, int port, final String realm) { 135 this(host, port, realm, ANY_SCHEME); 136 } 137 138 /** Creates a new credentials scope for the given 139 * <tt>host</tt>, <tt>port</tt>, any realm name, and any 140 * authentication scheme. 141 * 142 * @param host the host the credentials apply to. May be set 143 * to <tt>null</tt> if credenticals are applicable to 144 * any host. 145 * @param port the port the credentials apply to. May be set 146 * to negative value if credenticals are applicable to 147 * any port. 148 */ AuthScope(final String host, int port)149 public AuthScope(final String host, int port) { 150 this(host, port, ANY_REALM, ANY_SCHEME); 151 } 152 153 /** 154 * Creates a copy of the given credentials scope. 155 */ AuthScope(final AuthScope authscope)156 public AuthScope(final AuthScope authscope) { 157 super(); 158 if (authscope == null) { 159 throw new IllegalArgumentException("Scope may not be null"); 160 } 161 this.host = authscope.getHost(); 162 this.port = authscope.getPort(); 163 this.realm = authscope.getRealm(); 164 this.scheme = authscope.getScheme(); 165 } 166 167 /** 168 * @return the host 169 */ getHost()170 public String getHost() { 171 return this.host; 172 } 173 174 /** 175 * @return the port 176 */ getPort()177 public int getPort() { 178 return this.port; 179 } 180 181 /** 182 * @return the realm name 183 */ getRealm()184 public String getRealm() { 185 return this.realm; 186 } 187 188 /** 189 * @return the scheme type 190 */ getScheme()191 public String getScheme() { 192 return this.scheme; 193 } 194 195 /** 196 * Tests if the authentication scopes match. 197 * 198 * @return the match factor. Negative value signifies no match. 199 * Non-negative signifies a match. The greater the returned value 200 * the closer the match. 201 */ match(final AuthScope that)202 public int match(final AuthScope that) { 203 int factor = 0; 204 if (LangUtils.equals(this.scheme, that.scheme)) { 205 factor += 1; 206 } else { 207 if (this.scheme != ANY_SCHEME && that.scheme != ANY_SCHEME) { 208 return -1; 209 } 210 } 211 if (LangUtils.equals(this.realm, that.realm)) { 212 factor += 2; 213 } else { 214 if (this.realm != ANY_REALM && that.realm != ANY_REALM) { 215 return -1; 216 } 217 } 218 if (this.port == that.port) { 219 factor += 4; 220 } else { 221 if (this.port != ANY_PORT && that.port != ANY_PORT) { 222 return -1; 223 } 224 } 225 if (LangUtils.equals(this.host, that.host)) { 226 factor += 8; 227 } else { 228 if (this.host != ANY_HOST && that.host != ANY_HOST) { 229 return -1; 230 } 231 } 232 return factor; 233 } 234 235 /** 236 * @see java.lang.Object#equals(Object) 237 */ 238 @Override equals(Object o)239 public boolean equals(Object o) { 240 if (o == null) { 241 return false; 242 } 243 if (o == this) { 244 return true; 245 } 246 if (!(o instanceof AuthScope)) { 247 return super.equals(o); 248 } 249 AuthScope that = (AuthScope) o; 250 return 251 LangUtils.equals(this.host, that.host) 252 && this.port == that.port 253 && LangUtils.equals(this.realm, that.realm) 254 && LangUtils.equals(this.scheme, that.scheme); 255 } 256 257 /** 258 * @see java.lang.Object#toString() 259 */ 260 @Override toString()261 public String toString() { 262 StringBuffer buffer = new StringBuffer(); 263 if (this.scheme != null) { 264 buffer.append(this.scheme.toUpperCase(Locale.ENGLISH)); 265 buffer.append(' '); 266 } 267 if (this.realm != null) { 268 buffer.append('\''); 269 buffer.append(this.realm); 270 buffer.append('\''); 271 } else { 272 buffer.append("<any realm>"); 273 } 274 if (this.host != null) { 275 buffer.append('@'); 276 buffer.append(this.host); 277 if (this.port >= 0) { 278 buffer.append(':'); 279 buffer.append(this.port); 280 } 281 } 282 return buffer.toString(); 283 } 284 285 /** 286 * @see java.lang.Object#hashCode() 287 */ 288 @Override hashCode()289 public int hashCode() { 290 int hash = LangUtils.HASH_SEED; 291 hash = LangUtils.hashCode(hash, this.host); 292 hash = LangUtils.hashCode(hash, this.port); 293 hash = LangUtils.hashCode(hash, this.realm); 294 hash = LangUtils.hashCode(hash, this.scheme); 295 return hash; 296 } 297 } 298