// Path: http/src/main/java/org/kaazing/netx/http/auth/ChallengeResponse.java
// public class ChallengeResponse {
// 
//     private char[] credentials;
//     private ChallengeHandler nextChallengeHandler;
// 
//     /**
//      * Constructor from a set of credentials to send to the server in an 'Authorization:' header
//      * and the next challenge handler responsible for handling any further challenges for the request.
//      *
//      * @param credentials a set of credentials to send to the server in an 'Authorization:' header
//      * @param nextChallengeHandler the next challenge handler responsible for handling any further challenges for the request.
//      */
//     public ChallengeResponse(char[] credentials, ChallengeHandler nextChallengeHandler) {
//         this.credentials = credentials;
//         this.nextChallengeHandler = nextChallengeHandler;
//     }
// 
//     /**
//      * Return the next challenge handler responsible for handling any further challenges for the request.
//      *
//      * @return the next challenge handler responsible for handling any further challenges for the request.
//      */
//     public ChallengeHandler getNextChallengeHandler() {
//         return nextChallengeHandler;
//     }
// 
//     /**
//      * Return a set of credentials to send to the server in an 'Authorization:' header.
//      *
//      * @return a set of credentials to send to the server in an 'Authorization:' header.
//      */
//     public char[] getCredentials() {
//         return credentials;
//     }
// 
//     /**
//      * Establish the credentials for this response.
//      *
//      * @param credentials the credentials to be used for this challenge response.
//      */
//     public void setCredentials(char[] credentials) {
//         this.credentials = credentials;
//     }
// 
//     /**
//      * Establish the next challenge handler responsible for handling any further challenges for the request.
//      *
//      * @param nextChallengeHandler the next challenge handler responsible for handling any further challenges for the request.
//      */
//     public void setNextChallengeHandler(ChallengeHandler nextChallengeHandler) {
//         this.nextChallengeHandler = nextChallengeHandler;
//     }
// 
//     /**
//      * Clear the credentials of this response.
//      * <p>
//      * Calling this method once the credentials have been communicated to the network layer
//      * protects credentials in memory.
//      */
//     public void clearCredentials() {
//         if (getCredentials() != null) {
//                 Arrays.fill(getCredentials(), (char) 0);
//         }
//     }
// }
// 
// Path: http/src/main/java/org/kaazing/netx/http/auth/LoginHandler.java
// public abstract class LoginHandler {
// 
//     /**
//      * Default constructor.
//      */
//     protected LoginHandler() {
//     }
// 
//     /**
//      * Gets the password authentication credentials from an arbitrary source.
//      * @return the password authentication obtained.
//      */
//     public abstract PasswordAuthentication getCredentials();
// 
// }
// 
// Path: http/src/main/java/org/kaazing/netx/http/auth/LoginHandlerProvider.java
// public interface LoginHandlerProvider {
// 
//     /**
//      * Get the login handler associated with this challenge handler.
//      * A login handler is used to assist in obtaining credentials to respond to challenge requests.
//      *
//      * @return a login handler to assist in providing credentials, or {@code null} if none has been established yet.
//      */
//     LoginHandler getLoginHandler();
// }


import java.net.PasswordAuthentication;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger;
import org.kaazing.netx.http.auth.ApplicationBasicChallengeHandler;
import org.kaazing.netx.http.auth.ChallengeRequest;
import org.kaazing.netx.http.auth.ChallengeResponse;
import org.kaazing.netx.http.auth.LoginHandler;
import org.kaazing.netx.http.auth.LoginHandlerProvider;
/**
 * Copyright 2007-2015, Kaazing Corporation. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.kaazing.netx.http.internal.auth;




/**
 * Challenge handler for Basic authentication. See RFC 2617.
 */
public class DefaultApplicationBasicChallengeHandler extends ApplicationBasicChallengeHandler implements LoginHandlerProvider {

// ------------------------------ FIELDS ------------------------------

    private static final String CLASS_NAME = DefaultApplicationBasicChallengeHandler.class.getName();
    private static final Logger LOG = Logger.getLogger(CLASS_NAME);
    private static final String AUTHENTICATION_SCHEME = "Application Basic";

// Path: http/src/main/java/org/kaazing/netx/http/auth/ChallengeResponse.java
// public class ChallengeResponse {
// 
//     private char[] credentials;
//     private ChallengeHandler nextChallengeHandler;
// 
//     /**
//      * Constructor from a set of credentials to send to the server in an 'Authorization:' header
//      * and the next challenge handler responsible for handling any further challenges for the request.
//      *
//      * @param credentials a set of credentials to send to the server in an 'Authorization:' header
//      * @param nextChallengeHandler the next challenge handler responsible for handling any further challenges for the request.
//      */
//     public ChallengeResponse(char[] credentials, ChallengeHandler nextChallengeHandler) {
//         this.credentials = credentials;
//         this.nextChallengeHandler = nextChallengeHandler;
//     }
// 
//     /**
//      * Return the next challenge handler responsible for handling any further challenges for the request.
//      *
//      * @return the next challenge handler responsible for handling any further challenges for the request.
//      */
//     public ChallengeHandler getNextChallengeHandler() {
//         return nextChallengeHandler;
//     }
// 
//     /**
//      * Return a set of credentials to send to the server in an 'Authorization:' header.
//      *
//      * @return a set of credentials to send to the server in an 'Authorization:' header.
//      */
//     public char[] getCredentials() {
//         return credentials;
//     }
// 
//     /**
//      * Establish the credentials for this response.
//      *
//      * @param credentials the credentials to be used for this challenge response.
//      */
//     public void setCredentials(char[] credentials) {
//         this.credentials = credentials;
//     }
// 
//     /**
//      * Establish the next challenge handler responsible for handling any further challenges for the request.
//      *
//      * @param nextChallengeHandler the next challenge handler responsible for handling any further challenges for the request.
//      */
//     public void setNextChallengeHandler(ChallengeHandler nextChallengeHandler) {
//         this.nextChallengeHandler = nextChallengeHandler;
//     }
// 
//     /**
//      * Clear the credentials of this response.
//      * <p>
//      * Calling this method once the credentials have been communicated to the network layer
//      * protects credentials in memory.
//      */
//     public void clearCredentials() {
//         if (getCredentials() != null) {
//                 Arrays.fill(getCredentials(), (char) 0);
//         }
//     }
// }
// 
// Path: http/src/main/java/org/kaazing/netx/http/auth/LoginHandler.java
// public abstract class LoginHandler {
// 
//     /**
//      * Default constructor.
//      */
//     protected LoginHandler() {
//     }
// 
//     /**
//      * Gets the password authentication credentials from an arbitrary source.
//      * @return the password authentication obtained.
//      */
//     public abstract PasswordAuthentication getCredentials();
// 
// }
// 
// Path: http/src/main/java/org/kaazing/netx/http/auth/LoginHandlerProvider.java
// public interface LoginHandlerProvider {
// 
//     /**
//      * Get the login handler associated with this challenge handler.
//      * A login handler is used to assist in obtaining credentials to respond to challenge requests.
//      *
//      * @return a login handler to assist in providing credentials, or {@code null} if none has been established yet.
//      */
//     LoginHandler getLoginHandler();
// }


// Path: http/src/main/java/org/kaazing/netx/http/internal/auth/DefaultApplicationBasicChallengeHandler.java
import java.net.PasswordAuthentication;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger;
import org.kaazing.netx.http.auth.ApplicationBasicChallengeHandler;
import org.kaazing.netx.http.auth.ChallengeRequest;
import org.kaazing.netx.http.auth.ChallengeResponse;
import org.kaazing.netx.http.auth.LoginHandler;
import org.kaazing.netx.http.auth.LoginHandlerProvider;

/**
 * Copyright 2007-2015, Kaazing Corporation. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.kaazing.netx.http.internal.auth;




/**
 * Challenge handler for Basic authentication. See RFC 2617.
 */
public class DefaultApplicationBasicChallengeHandler extends ApplicationBasicChallengeHandler implements LoginHandlerProvider {

// ------------------------------ FIELDS ------------------------------

    private static final String CLASS_NAME = DefaultApplicationBasicChallengeHandler.class.getName();
    private static final Logger LOG = Logger.getLogger(CLASS_NAME);
    private static final String AUTHENTICATION_SCHEME = "Application Basic";

    private final Map<String, LoginHandler> loginHandlersByRealm = new ConcurrentHashMap<String, LoginHandler>();