mobile/android/thirdparty/ch/boye/httpclientandroidlib/impl/client/BasicCredentialsProvider.java

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /*
     2  * ====================================================================
     3  *
     4  *  Licensed to the Apache Software Foundation (ASF) under one or more
     5  *  contributor license agreements.  See the NOTICE file distributed with
     6  *  this work for additional information regarding copyright ownership.
     7  *  The ASF licenses this file to You under the Apache License, Version 2.0
     8  *  (the "License"); you may not use this file except in compliance with
     9  *  the License.  You may obtain a copy of the License at
    10  *
    11  *      http://www.apache.org/licenses/LICENSE-2.0
    12  *
    13  *  Unless required by applicable law or agreed to in writing, software
    14  *  distributed under the License is distributed on an "AS IS" BASIS,
    15  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    16  *  See the License for the specific language governing permissions and
    17  *  limitations under the License.
    18  * ====================================================================
    19  *
    20  * This software consists of voluntary contributions made by many
    21  * individuals on behalf of the Apache Software Foundation.  For more
    22  * information on the Apache Software Foundation, please see
    23  * <http://www.apache.org/>.
    24  *
    25  */
    27 package ch.boye.httpclientandroidlib.impl.client;
    29 import java.util.Map;
    30 import java.util.concurrent.ConcurrentHashMap;
    32 import ch.boye.httpclientandroidlib.annotation.ThreadSafe;
    34 import ch.boye.httpclientandroidlib.auth.AuthScope;
    35 import ch.boye.httpclientandroidlib.auth.Credentials;
    36 import ch.boye.httpclientandroidlib.client.CredentialsProvider;
    38 /**
    39  * Default implementation of {@link CredentialsProvider}.
    40  *
    41  * @since 4.0
    42  */
    43 @ThreadSafe
    44 public class BasicCredentialsProvider implements CredentialsProvider {
    46     private final ConcurrentHashMap<AuthScope, Credentials> credMap;
    48     /**
    49      * Default constructor.
    50      */
    51     public BasicCredentialsProvider() {
    52         super();
    53         this.credMap = new ConcurrentHashMap<AuthScope, Credentials>();
    54     }
    56     public void setCredentials(
    57             final AuthScope authscope,
    58             final Credentials credentials) {
    59         if (authscope == null) {
    60             throw new IllegalArgumentException("Authentication scope may not be null");
    61         }
    62         credMap.put(authscope, credentials);
    63     }
    65     /**
    66      * Find matching {@link Credentials credentials} for the given authentication scope.
    67      *
    68      * @param map the credentials hash map
    69      * @param authscope the {@link AuthScope authentication scope}
    70      * @return the credentials
    71      *
    72      */
    73     private static Credentials matchCredentials(
    74             final Map<AuthScope, Credentials> map,
    75             final AuthScope authscope) {
    76         // see if we get a direct hit
    77         Credentials creds = map.get(authscope);
    78         if (creds == null) {
    79             // Nope.
    80             // Do a full scan
    81             int bestMatchFactor  = -1;
    82             AuthScope bestMatch  = null;
    83             for (AuthScope current: map.keySet()) {
    84                 int factor = authscope.match(current);
    85                 if (factor > bestMatchFactor) {
    86                     bestMatchFactor = factor;
    87                     bestMatch = current;
    88                 }
    89             }
    90             if (bestMatch != null) {
    91                 creds = map.get(bestMatch);
    92             }
    93         }
    94         return creds;
    95     }
    97     public Credentials getCredentials(final AuthScope authscope) {
    98         if (authscope == null) {
    99             throw new IllegalArgumentException("Authentication scope may not be null");
   100         }
   101         return matchCredentials(this.credMap, authscope);
   102     }
   104     public void clear() {
   105         this.credMap.clear();
   106     }
   108     @Override
   109     public String toString() {
   110         return credMap.toString();
   111     }
   113 }

mercurial