Search in sources :

Example 11 with PasswordAuthentication

use of java.net.PasswordAuthentication in project bazel by bazelbuild.

the class ProxyHelper method createProxy.

/**
   * This method takes a proxyAddress as a String (ex.
   * http://userId:password@proxyhost.domain.com:8000) and sets JVM arguments for http and https
   * proxy as well as returns a java.net.Proxy object for optional use.
   *
   * @param proxyAddress The fully qualified address of the proxy server
   * @return Proxy
   * @throws IOException
   */
public static Proxy createProxy(@Nullable String proxyAddress) throws IOException {
    if (Strings.isNullOrEmpty(proxyAddress)) {
        return Proxy.NO_PROXY;
    }
    // Here there be dragons.
    Pattern urlPattern = Pattern.compile("^(https?)://(([^:@]+?)(?::([^@]+?))?@)?([^:]+)(?::(\\d+))?/?$");
    Matcher matcher = urlPattern.matcher(proxyAddress);
    if (!matcher.matches()) {
        throw new IOException("Proxy address " + proxyAddress + " is not a valid URL");
    }
    final String protocol = matcher.group(1);
    final String idAndPassword = matcher.group(2);
    final String username = matcher.group(3);
    final String password = matcher.group(4);
    final String hostname = matcher.group(5);
    final String portRaw = matcher.group(6);
    String cleanProxyAddress = proxyAddress;
    if (idAndPassword != null) {
        cleanProxyAddress = // Used to remove id+pwd from logging
        proxyAddress.replace(idAndPassword, "");
    }
    boolean https;
    switch(protocol) {
        case "https":
            https = true;
            break;
        case "http":
            https = false;
            break;
        default:
            throw new IOException("Invalid proxy protocol for " + cleanProxyAddress);
    }
    // Default port numbers
    int port = https ? 443 : 80;
    if (portRaw != null) {
        try {
            port = Integer.parseInt(portRaw);
        } catch (NumberFormatException e) {
            throw new IOException("Error parsing proxy port: " + cleanProxyAddress);
        }
    }
    // We need to set both of these because jgit uses whichever the resource dictates
    System.setProperty("https.proxyHost", hostname);
    System.setProperty("https.proxyPort", Integer.toString(port));
    System.setProperty("http.proxyHost", hostname);
    System.setProperty("http.proxyPort", Integer.toString(port));
    if (username != null) {
        if (password == null) {
            throw new IOException("No password given for proxy " + cleanProxyAddress);
        }
        // We need to make sure the proxy password is not url encoded; some special characters in
        // proxy passwords require url encoding for shells and other tools to properly consume.
        final String decodedPassword = URLDecoder.decode(password, "UTF-8");
        System.setProperty("http.proxyUser", username);
        System.setProperty("http.proxyPassword", decodedPassword);
        System.setProperty("https.proxyUser", username);
        System.setProperty("https.proxyPassword", decodedPassword);
        Authenticator.setDefault(new Authenticator() {

            @Override
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, decodedPassword.toCharArray());
            }
        });
    }
    return new Proxy(Proxy.Type.HTTP, new InetSocketAddress(hostname, port));
}
Also used : Pattern(java.util.regex.Pattern) Proxy(java.net.Proxy) Matcher(java.util.regex.Matcher) InetSocketAddress(java.net.InetSocketAddress) IOException(java.io.IOException) Authenticator(java.net.Authenticator) PasswordAuthentication(java.net.PasswordAuthentication)

Example 12 with PasswordAuthentication

use of java.net.PasswordAuthentication in project j2objc by google.

the class OldAuthenticatorTest method test_setDefault.

public void test_setDefault() throws UnknownHostException {
    InetAddress addr = InetAddress.getLocalHost();
    PasswordAuthentication pa = Authenticator.requestPasswordAuthentication(addr, 8080, "http", "promt", "HTTP");
    assertNull(pa);
    MockAuthenticator mock = new MockAuthenticator();
    Authenticator.setDefault(mock);
    addr = InetAddress.getLocalHost();
    pa = Authenticator.requestPasswordAuthentication(addr, 80, "http", "promt", "HTTP");
    assertNull(pa);
    Authenticator.setDefault(null);
}
Also used : InetAddress(java.net.InetAddress) PasswordAuthentication(java.net.PasswordAuthentication)

Example 13 with PasswordAuthentication

use of java.net.PasswordAuthentication in project j2objc by google.

the class OldPasswordAuthenticationTest method test_ConstructorLjava_lang_String$C.

public void test_ConstructorLjava_lang_String$C() {
    String name = "name";
    char[] password = "hunter2".toCharArray();
    try {
        new PasswordAuthentication(name, null);
        fail("NullPointerException was not thrown.");
    } catch (NullPointerException npe) {
    //expected
    }
    PasswordAuthentication pa = new PasswordAuthentication(null, password);
    assertNull(pa.getUserName());
    assertEquals(password.length, pa.getPassword().length);
}
Also used : PasswordAuthentication(java.net.PasswordAuthentication)

Example 14 with PasswordAuthentication

use of java.net.PasswordAuthentication in project perun by CESNET.

the class PerunAuthenticatorImpl method getPasswordAuthentication.

/**
	 * {@inheritDoc}
	 * @see Authenticator#getPasswordAuthentication()
	 */
protected PasswordAuthentication getPasswordAuthentication() {
    URL url = getRequestingURL();
    PasswordAuthentication passwordAuthentication = passwordAuthenticationsForURL.get(url.toExternalForm());
    if (passwordAuthentication == null)
        log.info("No authenticator provided for url {}", url);
    return passwordAuthentication;
}
Also used : URL(java.net.URL) PasswordAuthentication(java.net.PasswordAuthentication)

Example 15 with PasswordAuthentication

use of java.net.PasswordAuthentication in project jdk8u_jdk by JetBrains.

the class EmptyInputStream method getInputStream0.

@SuppressWarnings("empty-statement")
private synchronized InputStream getInputStream0() throws IOException {
    if (!doInput) {
        throw new ProtocolException("Cannot read from URLConnection" + " if doInput=false (call setDoInput(true))");
    }
    if (rememberedException != null) {
        if (rememberedException instanceof RuntimeException)
            throw new RuntimeException(rememberedException);
        else {
            throw getChainedException((IOException) rememberedException);
        }
    }
    if (inputStream != null) {
        return inputStream;
    }
    if (streaming()) {
        if (strOutputStream == null) {
            getOutputStream();
        }
        /* make sure stream is closed */
        strOutputStream.close();
        if (!strOutputStream.writtenOK()) {
            throw new IOException("Incomplete output stream");
        }
    }
    int redirects = 0;
    int respCode = 0;
    long cl = -1;
    AuthenticationInfo serverAuthentication = null;
    AuthenticationInfo proxyAuthentication = null;
    AuthenticationHeader srvHdr = null;
    /**
         * Failed Negotiate
         *
         * In some cases, the Negotiate auth is supported for the
         * remote host but the negotiate process still fails (For
         * example, if the web page is located on a backend server
         * and delegation is needed but fails). The authentication
         * process will start again, and we need to detect this
         * kind of failure and do proper fallback (say, to NTLM).
         *
         * In order to achieve this, the inNegotiate flag is set
         * when the first negotiate challenge is met (and reset
         * if authentication is finished). If a fresh new negotiate
         * challenge (no parameter) is found while inNegotiate is
         * set, we know there's a failed auth attempt recently.
         * Here we'll ignore the header line so that fallback
         * can be practiced.
         *
         * inNegotiateProxy is for proxy authentication.
         */
    boolean inNegotiate = false;
    boolean inNegotiateProxy = false;
    // If the user has set either of these headers then do not remove them
    isUserServerAuth = requests.getKey("Authorization") != -1;
    isUserProxyAuth = requests.getKey("Proxy-Authorization") != -1;
    try {
        do {
            if (!checkReuseConnection())
                connect();
            if (cachedInputStream != null) {
                return cachedInputStream;
            }
            // Check if URL should be metered
            boolean meteredInput = ProgressMonitor.getDefault().shouldMeterInput(url, method);
            if (meteredInput) {
                pi = new ProgressSource(url, method);
                pi.beginTracking();
            }
            /* REMIND: This exists to fix the HttpsURLConnection subclass.
                 * Hotjava needs to run on JDK1.1FCS.  Do proper fix once a
                 * proper solution for SSL can be found.
                 */
            ps = (PrintStream) http.getOutputStream();
            if (!streaming()) {
                writeRequests();
            }
            http.parseHTTP(responses, pi, this);
            if (logger.isLoggable(PlatformLogger.Level.FINE)) {
                logger.fine(responses.toString());
            }
            boolean b1 = responses.filterNTLMResponses("WWW-Authenticate");
            boolean b2 = responses.filterNTLMResponses("Proxy-Authenticate");
            if (b1 || b2) {
                if (logger.isLoggable(PlatformLogger.Level.FINE)) {
                    logger.fine(">>>> Headers are filtered");
                    logger.fine(responses.toString());
                }
            }
            inputStream = http.getInputStream();
            respCode = getResponseCode();
            if (respCode == -1) {
                disconnectInternal();
                throw new IOException("Invalid Http response");
            }
            if (respCode == HTTP_PROXY_AUTH) {
                if (streaming()) {
                    disconnectInternal();
                    throw new HttpRetryException(RETRY_MSG1, HTTP_PROXY_AUTH);
                }
                // Read comments labeled "Failed Negotiate" for details.
                boolean dontUseNegotiate = false;
                Iterator<String> iter = responses.multiValueIterator("Proxy-Authenticate");
                while (iter.hasNext()) {
                    String value = iter.next().trim();
                    if (value.equalsIgnoreCase("Negotiate") || value.equalsIgnoreCase("Kerberos")) {
                        if (!inNegotiateProxy) {
                            inNegotiateProxy = true;
                        } else {
                            dontUseNegotiate = true;
                            doingNTLMp2ndStage = false;
                            proxyAuthentication = null;
                        }
                        break;
                    }
                }
                // changes: add a 3rd parameter to the constructor of
                // AuthenticationHeader, so that NegotiateAuthentication.
                // isSupported can be tested.
                // The other 2 appearances of "new AuthenticationHeader" is
                // altered in similar ways.
                AuthenticationHeader authhdr = new AuthenticationHeader("Proxy-Authenticate", responses, new HttpCallerInfo(url, http.getProxyHostUsed(), http.getProxyPortUsed()), dontUseNegotiate, disabledProxyingSchemes);
                if (!doingNTLMp2ndStage) {
                    proxyAuthentication = resetProxyAuthentication(proxyAuthentication, authhdr);
                    if (proxyAuthentication != null) {
                        redirects++;
                        disconnectInternal();
                        continue;
                    }
                } else {
                    /* in this case, only one header field will be present */
                    String raw = responses.findValue("Proxy-Authenticate");
                    reset();
                    if (!proxyAuthentication.setHeaders(this, authhdr.headerParser(), raw)) {
                        disconnectInternal();
                        throw new IOException("Authentication failure");
                    }
                    if (serverAuthentication != null && srvHdr != null && !serverAuthentication.setHeaders(this, srvHdr.headerParser(), raw)) {
                        disconnectInternal();
                        throw new IOException("Authentication failure");
                    }
                    authObj = null;
                    doingNTLMp2ndStage = false;
                    continue;
                }
            } else {
                inNegotiateProxy = false;
                doingNTLMp2ndStage = false;
                if (!isUserProxyAuth)
                    requests.remove("Proxy-Authorization");
            }
            // cache proxy authentication info
            if (proxyAuthentication != null) {
                // cache auth info on success, domain header not relevant.
                proxyAuthentication.addToCache();
            }
            if (respCode == HTTP_UNAUTHORIZED) {
                if (streaming()) {
                    disconnectInternal();
                    throw new HttpRetryException(RETRY_MSG2, HTTP_UNAUTHORIZED);
                }
                // Read comments labeled "Failed Negotiate" for details.
                boolean dontUseNegotiate = false;
                Iterator<String> iter = responses.multiValueIterator("WWW-Authenticate");
                while (iter.hasNext()) {
                    String value = iter.next().trim();
                    if (value.equalsIgnoreCase("Negotiate") || value.equalsIgnoreCase("Kerberos")) {
                        if (!inNegotiate) {
                            inNegotiate = true;
                        } else {
                            dontUseNegotiate = true;
                            doingNTLM2ndStage = false;
                            serverAuthentication = null;
                        }
                        break;
                    }
                }
                srvHdr = new AuthenticationHeader("WWW-Authenticate", responses, new HttpCallerInfo(url), dontUseNegotiate);
                String raw = srvHdr.raw();
                if (!doingNTLM2ndStage) {
                    if ((serverAuthentication != null) && serverAuthentication.getAuthScheme() != NTLM) {
                        if (serverAuthentication.isAuthorizationStale(raw)) {
                            /* we can retry with the current credentials */
                            disconnectWeb();
                            redirects++;
                            requests.set(serverAuthentication.getHeaderName(), serverAuthentication.getHeaderValue(url, method));
                            currentServerCredentials = serverAuthentication;
                            setCookieHeader();
                            continue;
                        } else {
                            serverAuthentication.removeFromCache();
                        }
                    }
                    serverAuthentication = getServerAuthentication(srvHdr);
                    currentServerCredentials = serverAuthentication;
                    if (serverAuthentication != null) {
                        disconnectWeb();
                        // don't let things loop ad nauseum
                        redirects++;
                        setCookieHeader();
                        continue;
                    }
                } else {
                    reset();
                    /* header not used for ntlm */
                    if (!serverAuthentication.setHeaders(this, null, raw)) {
                        disconnectWeb();
                        throw new IOException("Authentication failure");
                    }
                    doingNTLM2ndStage = false;
                    authObj = null;
                    setCookieHeader();
                    continue;
                }
            }
            // cache server authentication info
            if (serverAuthentication != null) {
                // cache auth info on success
                if (!(serverAuthentication instanceof DigestAuthentication) || (domain == null)) {
                    if (serverAuthentication instanceof BasicAuthentication) {
                        // check if the path is shorter than the existing entry
                        String npath = AuthenticationInfo.reducePath(url.getPath());
                        String opath = serverAuthentication.path;
                        if (!opath.startsWith(npath) || npath.length() >= opath.length()) {
                            /* npath is longer, there must be a common root */
                            npath = BasicAuthentication.getRootPath(opath, npath);
                        }
                        // remove the entry and create a new one
                        BasicAuthentication a = (BasicAuthentication) serverAuthentication.clone();
                        serverAuthentication.removeFromCache();
                        a.path = npath;
                        serverAuthentication = a;
                    }
                    serverAuthentication.addToCache();
                } else {
                    // what we cache is based on the domain list in the request
                    DigestAuthentication srv = (DigestAuthentication) serverAuthentication;
                    StringTokenizer tok = new StringTokenizer(domain, " ");
                    String realm = srv.realm;
                    PasswordAuthentication pw = srv.pw;
                    digestparams = srv.params;
                    while (tok.hasMoreTokens()) {
                        String path = tok.nextToken();
                        try {
                            /* path could be an abs_path or a complete URI */
                            URL u = new URL(url, path);
                            DigestAuthentication d = new DigestAuthentication(false, u, realm, "Digest", pw, digestparams);
                            d.addToCache();
                        } catch (Exception e) {
                        }
                    }
                }
            }
            // some flags should be reset to its initialized form so that
            // even after a redirect the necessary checks can still be
            // preformed.
            inNegotiate = false;
            inNegotiateProxy = false;
            //serverAuthentication = null;
            doingNTLMp2ndStage = false;
            doingNTLM2ndStage = false;
            if (!isUserServerAuth)
                requests.remove("Authorization");
            if (!isUserProxyAuth)
                requests.remove("Proxy-Authorization");
            if (respCode == HTTP_OK) {
                checkResponseCredentials(false);
            } else {
                needToCheck = false;
            }
            // a flag need to clean
            needToCheck = true;
            if (followRedirect()) {
                /* if we should follow a redirect, then the followRedirects()
                     * method will disconnect() and re-connect us to the new
                     * location
                     */
                redirects++;
                // redirecting HTTP response may have set cookie, so
                // need to re-generate request header
                setCookieHeader();
                continue;
            }
            try {
                cl = Long.parseLong(responses.findValue("content-length"));
            } catch (Exception exc) {
            }
            ;
            if (method.equals("HEAD") || cl == 0 || respCode == HTTP_NOT_MODIFIED || respCode == HTTP_NO_CONTENT) {
                if (pi != null) {
                    pi.finishTracking();
                    pi = null;
                }
                http.finished();
                http = null;
                inputStream = new EmptyInputStream();
                connected = false;
            }
            if (respCode == 200 || respCode == 203 || respCode == 206 || respCode == 300 || respCode == 301 || respCode == 410) {
                if (cacheHandler != null && getUseCaches()) {
                    // give cache a chance to save response in cache
                    URI uri = ParseUtil.toURI(url);
                    if (uri != null) {
                        URLConnection uconn = this;
                        if ("https".equalsIgnoreCase(uri.getScheme())) {
                            try {
                                // use reflection to get to the public
                                // HttpsURLConnection instance saved in
                                // DelegateHttpsURLConnection
                                uconn = (URLConnection) this.getClass().getField("httpsURLConnection").get(this);
                            } catch (IllegalAccessException | NoSuchFieldException e) {
                            // ignored; use 'this'
                            }
                        }
                        CacheRequest cacheRequest = cacheHandler.put(uri, uconn);
                        if (cacheRequest != null && http != null) {
                            http.setCacheRequest(cacheRequest);
                            inputStream = new HttpInputStream(inputStream, cacheRequest);
                        }
                    }
                }
            }
            if (!(inputStream instanceof HttpInputStream)) {
                inputStream = new HttpInputStream(inputStream);
            }
            if (respCode >= 400) {
                if (respCode == 404 || respCode == 410) {
                    throw new FileNotFoundException(url.toString());
                } else {
                    throw new java.io.IOException("Server returned HTTP" + " response code: " + respCode + " for URL: " + url.toString());
                }
            }
            poster = null;
            strOutputStream = null;
            return inputStream;
        } while (redirects < maxRedirects);
        throw new ProtocolException("Server redirected too many " + " times (" + redirects + ")");
    } catch (RuntimeException e) {
        disconnectInternal();
        rememberedException = e;
        throw e;
    } catch (IOException e) {
        rememberedException = e;
        // buffer the error stream if bytes < 4k
        // and it can be buffered within 1 second
        String te = responses.findValue("Transfer-Encoding");
        if (http != null && http.isKeepingAlive() && enableESBuffer && (cl > 0 || (te != null && te.equalsIgnoreCase("chunked")))) {
            errorStream = ErrorStream.getErrorStream(inputStream, cl, http);
        }
        throw e;
    } finally {
        if (proxyAuthKey != null) {
            AuthenticationInfo.endAuthRequest(proxyAuthKey);
        }
        if (serverAuthKey != null) {
            AuthenticationInfo.endAuthRequest(serverAuthKey);
        }
    }
}
Also used : URI(java.net.URI) URL(java.net.URL) PasswordAuthentication(java.net.PasswordAuthentication) ProtocolException(java.net.ProtocolException) HttpRetryException(java.net.HttpRetryException) HttpRetryException(java.net.HttpRetryException) SocketTimeoutException(java.net.SocketTimeoutException) PrivilegedActionException(java.security.PrivilegedActionException) MalformedURLException(java.net.MalformedURLException) UnknownHostException(java.net.UnknownHostException) ProtocolException(java.net.ProtocolException) URLConnection(java.net.URLConnection) StringTokenizer(java.util.StringTokenizer) CacheRequest(java.net.CacheRequest)

Aggregations

PasswordAuthentication (java.net.PasswordAuthentication)40 Authenticator (java.net.Authenticator)14 URL (java.net.URL)11 InetSocketAddress (java.net.InetSocketAddress)9 Proxy (java.net.Proxy)8 HttpURLConnection (java.net.HttpURLConnection)4 InetAddress (java.net.InetAddress)4 MalformedURLException (java.net.MalformedURLException)4 URI (java.net.URI)4 IOException (java.io.IOException)3 ServerSocket (java.net.ServerSocket)3 HttpsURLConnection (javax.net.ssl.HttpsURLConnection)3 Test (org.junit.Test)3 Dimension (java.awt.Dimension)2 Font (java.awt.Font)2 File (java.io.File)2 InputStream (java.io.InputStream)2 OutputStream (java.io.OutputStream)2 java.net (java.net)2 UnknownHostException (java.net.UnknownHostException)2