public final HttpResponse post()

in src/com/intellij/idea/plugin/hybris/tools/remote/http/AbstractHybrisHacHttpClient.java [142:212]


    public final HttpResponse post(
        @NotNull final Project project,
        @NotNull final String actionUrl,
        @NotNull final List<BasicNameValuePair> params,
        final boolean canReLoginIfNeeded,
        final long timeout,
        final RemoteConnectionSettings settings
    ) {
        var cookies = cookiesPerSettings.get(settings);
        if (cookies == null || !cookies.containsKey(COOKIE_JSESSIONID)) {
            final String errorMessage = login(project, settings);
            if (StringUtils.isNotBlank(errorMessage)) {
                return createErrorResponse(errorMessage);
            }
        }
        cookies = cookiesPerSettings.get(settings);
        final var sessionId = cookies.get(COOKIE_JSESSIONID);
        final var csrfToken = getCsrfToken(settings.getGeneratedURL(), settings);
        if (csrfToken == null) {
            cookiesPerSettings.remove(settings);

            if (canReLoginIfNeeded) {
                return post(project, actionUrl, params, false, timeout, settings);
            }
            return createErrorResponse("Unable to obtain csrfToken for sessionId=" + sessionId);
        }
        final var client = createAllowAllClient(timeout);
        if (client == null) {
            return createErrorResponse("Unable to create HttpClient");
        }
        final var post = new HttpPost(actionUrl);
        final var cookie = cookies.entrySet().stream()
            .map(it -> it.getKey() + '=' + it.getValue())
            .collect(Collectors.joining("; "));
        post.setHeader("User-Agent", HttpHeaders.USER_AGENT);
        post.setHeader("X-CSRF-TOKEN", csrfToken);
        post.setHeader("Cookie", cookie);
        post.setHeader("Accept", "application/json");
        post.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
        post.setHeader("Sec-Fetch-Dest", "empty");
        post.setHeader("Sec-Fetch-Mode", "cors");
        post.setHeader("Sec-Fetch-Site", "same-origin");

        final HttpResponse response;
        try {
            post.setEntity(new UrlEncodedFormEntity(params, StandardCharsets.UTF_8));
            response = client.execute(post);
        } catch (IOException e) {
            LOG.warn(e.getMessage(), e);
            return createErrorResponse(e.getMessage());
        }

        final var statusCode = response.getStatusLine().getStatusCode();
        final var needsLogin = switch (statusCode) {
            case HttpStatus.SC_FORBIDDEN,
                 HttpStatus.SC_METHOD_NOT_ALLOWED -> true;
            case HttpStatus.SC_MOVED_TEMPORARILY -> {
                final var location = response.getFirstHeader("Location");
                yield location != null && location.getValue().contains("login");
            }
            default -> false;
        };

        if (needsLogin) {
            cookiesPerSettings.remove(settings);
            if (canReLoginIfNeeded) {
                return post(project, actionUrl, params, false, DEFAULT_HAC_TIMEOUT, settings);
            }
        }
        return response;
    }