private void doLogin()

in src/main/java/org/apache/sling/testing/clients/interceptors/FormBasedAuthInterceptor.java [120:178]


    private void doLogin(HttpRequest request, HttpContext context) throws IOException {
        // get host
        final HttpHost host = HttpClientContext.adapt(context).getTargetHost();

        // get the username and password from the credentials provider
        final CredentialsProvider credsProvider = HttpClientContext.adapt(context).getCredentialsProvider();
        final AuthScope scope = new AuthScope(host.getHostName(), host.getPort());
        final String username = Optional.ofNullable(credsProvider.getCredentials(scope))
                .map(Credentials::getUserPrincipal)
                .map(Principal::getName)
                .orElse(null);
        if (username == null) {
            return;
        }
        final String password = Optional.ofNullable(credsProvider.getCredentials(scope))
                .map(Credentials::getPassword)
                .orElse(null);
        List<NameValuePair> parameters = new LinkedList<>();
        parameters.add(new BasicNameValuePair("j_username", username));
        parameters.add(new BasicNameValuePair("j_password", password));
        HttpEntity httpEntity = new UrlEncodedFormEntity(parameters, "utf-8");

        URI loginURI = URI.create(request.getRequestLine().getUri()).resolve(loginPath);
        HttpPost loginPost = new HttpPost(loginURI);
        loginPost.setEntity(httpEntity);

        try (CloseableHttpClient client = HttpClientBuilder.create()
                .useSystemProperties()
                .setServiceUnavailableRetryStrategy(new ServerErrorRetryStrategy())
                .disableRedirectHandling()
                .build()) {

            try (CloseableHttpResponse response = client.execute(host, loginPost, context)){
                StatusLine sl = response.getStatusLine();

                if (sl.getStatusCode() >= HttpStatus.SC_BAD_REQUEST) {
                    LOG.error("Got error login response code {} from '{}'", sl.getStatusCode(), loginURI);

                    LOG.error("Dumping headers: ");
                    for(Header header : response.getAllHeaders()) {
                        LOG.error("\t '{}' = '{}'", header.getName(), header.getValue());
                    }

                    try (InputStream inputStream = response.getEntity().getContent()){
                        String responseText = new BufferedReader(
                            new InputStreamReader(inputStream, StandardCharsets.UTF_8))
                              .lines()
                              .collect(Collectors.joining("\n"));

                        LOG.error("Error response body was : '{}'", responseText);
                    }
                } else if (getLoginCookie(context, loginTokenName) == null) {
                    LOG.error("Login response {} from '{}' did not include cookie '{}'.", sl.getStatusCode(), loginURI, loginTokenName);
                } else {
                    LOG.debug("Login response {} from '{}'", sl.getStatusCode(), loginURI);
                }
            }
        }
    }