<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> *  Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<span class="sourceLineNo">003</span> *  or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
<span class="sourceLineNo">004</span> *  distributed with this work for additional information<a name="line.4"></a>
<span class="sourceLineNo">005</span> *  regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
<span class="sourceLineNo">006</span> *  to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
<span class="sourceLineNo">007</span> *  "License"); you may not use this file except in compliance<a name="line.7"></a>
<span class="sourceLineNo">008</span> *  with the License.  You may obtain a copy of the License at<a name="line.8"></a>
<span class="sourceLineNo">009</span> *<a name="line.9"></a>
<span class="sourceLineNo">010</span> *    http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> *  Unless required by applicable law or agreed to in writing,<a name="line.12"></a>
<span class="sourceLineNo">013</span> *  software distributed under the License is distributed on an<a name="line.13"></a>
<span class="sourceLineNo">014</span> *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.14"></a>
<span class="sourceLineNo">015</span> *  KIND, either express or implied.  See the License for the<a name="line.15"></a>
<span class="sourceLineNo">016</span> *  specific language governing permissions and limitations<a name="line.16"></a>
<span class="sourceLineNo">017</span> *  under the License.<a name="line.17"></a>
<span class="sourceLineNo">018</span> *<a name="line.18"></a>
<span class="sourceLineNo">019</span> */<a name="line.19"></a>
<span class="sourceLineNo">020</span>package org.apache.mina.proxy.handlers.http;<a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.util.HashMap;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.util.List;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.util.Map;<a name="line.24"></a>
<span class="sourceLineNo">025</span><a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.apache.mina.core.filterchain.IoFilter.NextFilter;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.apache.mina.proxy.ProxyAuthException;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.apache.mina.proxy.session.ProxyIoSession;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.mina.proxy.utils.StringUtilities;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.slf4j.Logger;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import org.slf4j.LoggerFactory;<a name="line.31"></a>
<span class="sourceLineNo">032</span><a name="line.32"></a>
<span class="sourceLineNo">033</span>/**<a name="line.33"></a>
<span class="sourceLineNo">034</span> * HttpSmartProxyHandler.java - HTTP proxy handler that automatically handles forwarding a request <a name="line.34"></a>
<span class="sourceLineNo">035</span> * to the appropriate authentication mechanism logic handler.<a name="line.35"></a>
<span class="sourceLineNo">036</span> * <a name="line.36"></a>
<span class="sourceLineNo">037</span> * @author &lt;a href="http://mina.apache.org"&gt;Apache MINA Project&lt;/a&gt;<a name="line.37"></a>
<span class="sourceLineNo">038</span> * @since MINA 2.0.0-M3<a name="line.38"></a>
<span class="sourceLineNo">039</span> */<a name="line.39"></a>
<span class="sourceLineNo">040</span>public class HttpSmartProxyHandler extends AbstractHttpLogicHandler {<a name="line.40"></a>
<span class="sourceLineNo">041</span>    private final static Logger logger = LoggerFactory.getLogger(HttpSmartProxyHandler.class);<a name="line.41"></a>
<span class="sourceLineNo">042</span><a name="line.42"></a>
<span class="sourceLineNo">043</span>    /**<a name="line.43"></a>
<span class="sourceLineNo">044</span>     * Has the HTTP proxy request been sent ?<a name="line.44"></a>
<span class="sourceLineNo">045</span>     */<a name="line.45"></a>
<span class="sourceLineNo">046</span>    private boolean requestSent = false;<a name="line.46"></a>
<span class="sourceLineNo">047</span><a name="line.47"></a>
<span class="sourceLineNo">048</span>    /**<a name="line.48"></a>
<span class="sourceLineNo">049</span>     * The automatically selected http authentication logic handler. <a name="line.49"></a>
<span class="sourceLineNo">050</span>     */<a name="line.50"></a>
<span class="sourceLineNo">051</span>    private AbstractAuthLogicHandler authHandler;<a name="line.51"></a>
<span class="sourceLineNo">052</span><a name="line.52"></a>
<span class="sourceLineNo">053</span>    public HttpSmartProxyHandler(final ProxyIoSession proxyIoSession) {<a name="line.53"></a>
<span class="sourceLineNo">054</span>        super(proxyIoSession);<a name="line.54"></a>
<span class="sourceLineNo">055</span>    }<a name="line.55"></a>
<span class="sourceLineNo">056</span><a name="line.56"></a>
<span class="sourceLineNo">057</span>    /**<a name="line.57"></a>
<span class="sourceLineNo">058</span>     * Performs the handshake processing.<a name="line.58"></a>
<span class="sourceLineNo">059</span>     * <a name="line.59"></a>
<span class="sourceLineNo">060</span>     * @param nextFilter the next filter<a name="line.60"></a>
<span class="sourceLineNo">061</span>     */<a name="line.61"></a>
<span class="sourceLineNo">062</span>    public void doHandshake(final NextFilter nextFilter) throws ProxyAuthException {<a name="line.62"></a>
<span class="sourceLineNo">063</span>        logger.debug(" doHandshake()");<a name="line.63"></a>
<span class="sourceLineNo">064</span><a name="line.64"></a>
<span class="sourceLineNo">065</span>        if (authHandler != null) {<a name="line.65"></a>
<span class="sourceLineNo">066</span>            authHandler.doHandshake(nextFilter);<a name="line.66"></a>
<span class="sourceLineNo">067</span>        } else {<a name="line.67"></a>
<span class="sourceLineNo">068</span>            if (requestSent) {<a name="line.68"></a>
<span class="sourceLineNo">069</span>                // Safety check<a name="line.69"></a>
<span class="sourceLineNo">070</span>                throw new ProxyAuthException("Authentication request already sent");<a name="line.70"></a>
<span class="sourceLineNo">071</span>            }<a name="line.71"></a>
<span class="sourceLineNo">072</span><a name="line.72"></a>
<span class="sourceLineNo">073</span>            logger.debug("  sending HTTP request");<a name="line.73"></a>
<span class="sourceLineNo">074</span><a name="line.74"></a>
<span class="sourceLineNo">075</span>            // Compute request headers<a name="line.75"></a>
<span class="sourceLineNo">076</span>            HttpProxyRequest req = (HttpProxyRequest) getProxyIoSession().getRequest();<a name="line.76"></a>
<span class="sourceLineNo">077</span>            Map&lt;String, List&lt;String&gt;&gt; headers = req.getHeaders() != null ? req.getHeaders()<a name="line.77"></a>
<span class="sourceLineNo">078</span>                    : new HashMap&lt;String, List&lt;String&gt;&gt;();<a name="line.78"></a>
<span class="sourceLineNo">079</span><a name="line.79"></a>
<span class="sourceLineNo">080</span>            AbstractAuthLogicHandler.addKeepAliveHeaders(headers);<a name="line.80"></a>
<span class="sourceLineNo">081</span>            req.setHeaders(headers);<a name="line.81"></a>
<span class="sourceLineNo">082</span><a name="line.82"></a>
<span class="sourceLineNo">083</span>            // Write request to the proxy<a name="line.83"></a>
<span class="sourceLineNo">084</span>            writeRequest(nextFilter, req);<a name="line.84"></a>
<span class="sourceLineNo">085</span>            requestSent = true;<a name="line.85"></a>
<span class="sourceLineNo">086</span>        }<a name="line.86"></a>
<span class="sourceLineNo">087</span>    }<a name="line.87"></a>
<span class="sourceLineNo">088</span><a name="line.88"></a>
<span class="sourceLineNo">089</span>    /**<a name="line.89"></a>
<span class="sourceLineNo">090</span>     * Automatic selection of the authentication algorithm. If &lt;code&gt;preferedOrder&lt;/code&gt; is set then<a name="line.90"></a>
<span class="sourceLineNo">091</span>     * algorithms are selected from the list order otherwise the algorithm tries to select the most <a name="line.91"></a>
<span class="sourceLineNo">092</span>     * secured algorithm available first.<a name="line.92"></a>
<span class="sourceLineNo">093</span>     * <a name="line.93"></a>
<span class="sourceLineNo">094</span>     * @param response the proxy response<a name="line.94"></a>
<span class="sourceLineNo">095</span>     */<a name="line.95"></a>
<span class="sourceLineNo">096</span>    private void autoSelectAuthHandler(final HttpProxyResponse response) throws ProxyAuthException {<a name="line.96"></a>
<span class="sourceLineNo">097</span>        // Get the Proxy-Authenticate header<a name="line.97"></a>
<span class="sourceLineNo">098</span>        List&lt;String&gt; values = response.getHeaders().get("Proxy-Authenticate");<a name="line.98"></a>
<span class="sourceLineNo">099</span>        ProxyIoSession proxyIoSession = getProxyIoSession();<a name="line.99"></a>
<span class="sourceLineNo">100</span><a name="line.100"></a>
<span class="sourceLineNo">101</span>        if (values == null || values.size() == 0) {<a name="line.101"></a>
<span class="sourceLineNo">102</span>            authHandler = HttpAuthenticationMethods.NO_AUTH.getNewHandler(proxyIoSession);<a name="line.102"></a>
<span class="sourceLineNo">103</span><a name="line.103"></a>
<span class="sourceLineNo">104</span>        } else if (getProxyIoSession().getPreferedOrder() == null) {<a name="line.104"></a>
<span class="sourceLineNo">105</span>            // No preference order set for auth mechanisms<a name="line.105"></a>
<span class="sourceLineNo">106</span>            int method = -1;<a name="line.106"></a>
<span class="sourceLineNo">107</span><a name="line.107"></a>
<span class="sourceLineNo">108</span>            // Test which auth mechanism to use. First found is the first used<a name="line.108"></a>
<span class="sourceLineNo">109</span>            // that's why we test in a decreasing security quality order.<a name="line.109"></a>
<span class="sourceLineNo">110</span>            for (String proxyAuthHeader : values) {<a name="line.110"></a>
<span class="sourceLineNo">111</span>                proxyAuthHeader = proxyAuthHeader.toLowerCase();<a name="line.111"></a>
<span class="sourceLineNo">112</span><a name="line.112"></a>
<span class="sourceLineNo">113</span>                if (proxyAuthHeader.contains("ntlm")) {<a name="line.113"></a>
<span class="sourceLineNo">114</span>                    method = HttpAuthenticationMethods.NTLM.getId();<a name="line.114"></a>
<span class="sourceLineNo">115</span>                    break;<a name="line.115"></a>
<span class="sourceLineNo">116</span>                } else if (proxyAuthHeader.contains("digest") &amp;&amp; method != HttpAuthenticationMethods.NTLM.getId()) {<a name="line.116"></a>
<span class="sourceLineNo">117</span>                    method = HttpAuthenticationMethods.DIGEST.getId();<a name="line.117"></a>
<span class="sourceLineNo">118</span>                } else if (proxyAuthHeader.contains("basic") &amp;&amp; method == -1) {<a name="line.118"></a>
<span class="sourceLineNo">119</span>                    method = HttpAuthenticationMethods.BASIC.getId();<a name="line.119"></a>
<span class="sourceLineNo">120</span>                }<a name="line.120"></a>
<span class="sourceLineNo">121</span>            }<a name="line.121"></a>
<span class="sourceLineNo">122</span><a name="line.122"></a>
<span class="sourceLineNo">123</span>            if (method != -1) {<a name="line.123"></a>
<span class="sourceLineNo">124</span>                try {<a name="line.124"></a>
<span class="sourceLineNo">125</span>                    authHandler = HttpAuthenticationMethods.getNewHandler(method, proxyIoSession);<a name="line.125"></a>
<span class="sourceLineNo">126</span>                } catch (Exception ex) {<a name="line.126"></a>
<span class="sourceLineNo">127</span>                    logger.debug("Following exception occured:", ex);<a name="line.127"></a>
<span class="sourceLineNo">128</span>                }<a name="line.128"></a>
<span class="sourceLineNo">129</span>            }<a name="line.129"></a>
<span class="sourceLineNo">130</span><a name="line.130"></a>
<span class="sourceLineNo">131</span>            if (authHandler == null) {<a name="line.131"></a>
<span class="sourceLineNo">132</span>                authHandler = HttpAuthenticationMethods.NO_AUTH.getNewHandler(proxyIoSession);<a name="line.132"></a>
<span class="sourceLineNo">133</span>            }<a name="line.133"></a>
<span class="sourceLineNo">134</span><a name="line.134"></a>
<span class="sourceLineNo">135</span>        } else {<a name="line.135"></a>
<span class="sourceLineNo">136</span>            for (HttpAuthenticationMethods method : proxyIoSession.getPreferedOrder()) {<a name="line.136"></a>
<span class="sourceLineNo">137</span>                if (authHandler != null) {<a name="line.137"></a>
<span class="sourceLineNo">138</span>                    break;<a name="line.138"></a>
<span class="sourceLineNo">139</span>                }<a name="line.139"></a>
<span class="sourceLineNo">140</span><a name="line.140"></a>
<span class="sourceLineNo">141</span>                if (method == HttpAuthenticationMethods.NO_AUTH) {<a name="line.141"></a>
<span class="sourceLineNo">142</span>                    authHandler = HttpAuthenticationMethods.NO_AUTH.getNewHandler(proxyIoSession);<a name="line.142"></a>
<span class="sourceLineNo">143</span>                    break;<a name="line.143"></a>
<span class="sourceLineNo">144</span>                }<a name="line.144"></a>
<span class="sourceLineNo">145</span><a name="line.145"></a>
<span class="sourceLineNo">146</span>                for (String proxyAuthHeader : values) {<a name="line.146"></a>
<span class="sourceLineNo">147</span>                    proxyAuthHeader = proxyAuthHeader.toLowerCase();<a name="line.147"></a>
<span class="sourceLineNo">148</span><a name="line.148"></a>
<span class="sourceLineNo">149</span>                    try {<a name="line.149"></a>
<span class="sourceLineNo">150</span>                        // test which auth mechanism to use<a name="line.150"></a>
<span class="sourceLineNo">151</span>                        if (proxyAuthHeader.contains("basic") &amp;&amp; method == HttpAuthenticationMethods.BASIC) {<a name="line.151"></a>
<span class="sourceLineNo">152</span>                            authHandler = HttpAuthenticationMethods.BASIC.getNewHandler(proxyIoSession);<a name="line.152"></a>
<span class="sourceLineNo">153</span>                            break;<a name="line.153"></a>
<span class="sourceLineNo">154</span>                        } else if (proxyAuthHeader.contains("digest") &amp;&amp; method == HttpAuthenticationMethods.DIGEST) {<a name="line.154"></a>
<span class="sourceLineNo">155</span>                            authHandler = HttpAuthenticationMethods.DIGEST.getNewHandler(proxyIoSession);<a name="line.155"></a>
<span class="sourceLineNo">156</span>                            break;<a name="line.156"></a>
<span class="sourceLineNo">157</span>                        } else if (proxyAuthHeader.contains("ntlm") &amp;&amp; method == HttpAuthenticationMethods.NTLM) {<a name="line.157"></a>
<span class="sourceLineNo">158</span>                            authHandler = HttpAuthenticationMethods.NTLM.getNewHandler(proxyIoSession);<a name="line.158"></a>
<span class="sourceLineNo">159</span>                            break;<a name="line.159"></a>
<span class="sourceLineNo">160</span>                        }<a name="line.160"></a>
<span class="sourceLineNo">161</span>                    } catch (Exception ex) {<a name="line.161"></a>
<span class="sourceLineNo">162</span>                        logger.debug("Following exception occured:", ex);<a name="line.162"></a>
<span class="sourceLineNo">163</span>                    }<a name="line.163"></a>
<span class="sourceLineNo">164</span>                }<a name="line.164"></a>
<span class="sourceLineNo">165</span>            }<a name="line.165"></a>
<span class="sourceLineNo">166</span><a name="line.166"></a>
<span class="sourceLineNo">167</span>        }<a name="line.167"></a>
<span class="sourceLineNo">168</span><a name="line.168"></a>
<span class="sourceLineNo">169</span>        if (authHandler == null) {<a name="line.169"></a>
<span class="sourceLineNo">170</span>            throw new ProxyAuthException("Unknown authentication mechanism(s): " + values);<a name="line.170"></a>
<span class="sourceLineNo">171</span>        }<a name="line.171"></a>
<span class="sourceLineNo">172</span>    }<a name="line.172"></a>
<span class="sourceLineNo">173</span><a name="line.173"></a>
<span class="sourceLineNo">174</span>    /**<a name="line.174"></a>
<span class="sourceLineNo">175</span>     * Handle a HTTP response from the proxy server.<a name="line.175"></a>
<span class="sourceLineNo">176</span>     * <a name="line.176"></a>
<span class="sourceLineNo">177</span>     * @param response The proxy response.<a name="line.177"></a>
<span class="sourceLineNo">178</span>     */<a name="line.178"></a>
<span class="sourceLineNo">179</span>    @Override<a name="line.179"></a>
<span class="sourceLineNo">180</span>    public void handleResponse(final HttpProxyResponse response) throws ProxyAuthException {<a name="line.180"></a>
<span class="sourceLineNo">181</span>        if (!isHandshakeComplete()<a name="line.181"></a>
<span class="sourceLineNo">182</span>                &amp;&amp; ("close".equalsIgnoreCase(StringUtilities.getSingleValuedHeader(response.getHeaders(),<a name="line.182"></a>
<span class="sourceLineNo">183</span>                        "Proxy-Connection")) || "close".equalsIgnoreCase(StringUtilities.getSingleValuedHeader(<a name="line.183"></a>
<span class="sourceLineNo">184</span>                        response.getHeaders(), "Connection")))) {<a name="line.184"></a>
<span class="sourceLineNo">185</span>            getProxyIoSession().setReconnectionNeeded(true);<a name="line.185"></a>
<span class="sourceLineNo">186</span>        }<a name="line.186"></a>
<span class="sourceLineNo">187</span><a name="line.187"></a>
<span class="sourceLineNo">188</span>        if (response.getStatusCode() == 407) {<a name="line.188"></a>
<span class="sourceLineNo">189</span>            if (authHandler == null) {<a name="line.189"></a>
<span class="sourceLineNo">190</span>                autoSelectAuthHandler(response);<a name="line.190"></a>
<span class="sourceLineNo">191</span>            }<a name="line.191"></a>
<span class="sourceLineNo">192</span>            authHandler.handleResponse(response);<a name="line.192"></a>
<span class="sourceLineNo">193</span>        } else {<a name="line.193"></a>
<span class="sourceLineNo">194</span>            throw new ProxyAuthException("Error: unexpected response code " + response.getStatusLine()<a name="line.194"></a>
<span class="sourceLineNo">195</span>                    + " received from proxy.");<a name="line.195"></a>
<span class="sourceLineNo">196</span>        }<a name="line.196"></a>
<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
<span class="sourceLineNo">198</span>}<a name="line.198"></a>




























































</pre>
</div>
</body>
</html>
