Search in sources :

Example 1 with PwmHttpClientRequest

use of password.pwm.http.client.PwmHttpClientRequest in project pwm by pwm-project.

the class ApplianceStatusChecker method readApplianceHealthStatus.

private List<HealthRecord> readApplianceHealthStatus(final PwmApplication pwmApplication) throws IOException, PwmUnrecoverableException, PwmOperationalException {
    final List<HealthRecord> healthRecords = new ArrayList<>();
    final String url = figureUrl(pwmApplication);
    final Map<String, String> requestHeaders = Collections.singletonMap("sspr-authorization-token", getApplianceAccessToken(pwmApplication));
    final PwmHttpClientConfiguration pwmHttpClientConfiguration = PwmHttpClientConfiguration.builder().promiscuous(true).build();
    final PwmHttpClient pwmHttpClient = new PwmHttpClient(pwmApplication, SessionLabel.HEALTH_SESSION_LABEL, pwmHttpClientConfiguration);
    final PwmHttpClientRequest pwmHttpClientRequest = new PwmHttpClientRequest(HttpMethod.GET, url, null, requestHeaders);
    final PwmHttpClientResponse response = pwmHttpClient.makeRequest(pwmHttpClientRequest);
    LOGGER.trace(SessionLabel.HEALTH_SESSION_LABEL, "https response from appliance server request: " + response.getBody());
    final String jsonString = response.getBody();
    LOGGER.debug("response from /sspr/appliance-update-status: " + jsonString);
    final UpdateStatus updateStatus = JsonUtil.deserialize(jsonString, UpdateStatus.class);
    if (updateStatus.pendingInstallation) {
        healthRecords.add(HealthRecord.forMessage(HealthMessage.Appliance_PendingUpdates));
    }
    if (!updateStatus.autoUpdatesEnabled) {
        healthRecords.add(HealthRecord.forMessage(HealthMessage.Appliance_UpdatesNotEnabled));
    }
    if (!updateStatus.updateServiceConfigured) {
        healthRecords.add(HealthRecord.forMessage(HealthMessage.Appliance_UpdateServiceNotConfigured));
    }
    return healthRecords;
}
Also used : PwmHttpClient(password.pwm.http.client.PwmHttpClient) PwmHttpClientRequest(password.pwm.http.client.PwmHttpClientRequest) ArrayList(java.util.ArrayList) PwmHttpClientConfiguration(password.pwm.http.client.PwmHttpClientConfiguration) PwmHttpClientResponse(password.pwm.http.client.PwmHttpClientResponse)

Example 2 with PwmHttpClientRequest

use of password.pwm.http.client.PwmHttpClientRequest in project pwm by pwm-project.

the class RemoteVerificationMethod method sendRemoteRequest.

private void sendRemoteRequest(final Map<String, String> userResponses) throws PwmUnrecoverableException {
    lastResponse = null;
    final Map<String, String> headers = new LinkedHashMap<>();
    headers.put(HttpHeader.Content_Type.getHttpName(), HttpContentType.json.getHeaderValue());
    headers.put(HttpHeader.Accept_Language.getHttpName(), locale.toLanguageTag());
    final RemoteVerificationRequestBean remoteVerificationRequestBean = new RemoteVerificationRequestBean();
    remoteVerificationRequestBean.setResponseSessionID(this.remoteSessionID);
    final MacroMachine macroMachine = MacroMachine.forUser(pwmApplication, PwmConstants.DEFAULT_LOCALE, SessionLabel.SYSTEM_LABEL, userInfo.getUserIdentity());
    remoteVerificationRequestBean.setUserInfo(PublicUserInfoBean.fromUserInfoBean(userInfo, pwmApplication.getConfig(), locale, macroMachine));
    remoteVerificationRequestBean.setUserResponses(userResponses);
    final PwmHttpClientRequest pwmHttpClientRequest = new PwmHttpClientRequest(HttpMethod.POST, url, JsonUtil.serialize(remoteVerificationRequestBean), headers);
    try {
        final PwmHttpClientResponse response = pwmHttpClient.makeRequest(pwmHttpClientRequest);
        final String responseBodyStr = response.getBody();
        this.lastResponse = JsonUtil.deserialize(responseBodyStr, RemoteVerificationResponseBean.class);
    } catch (PwmException e) {
        LOGGER.error(sessionLabel, e.getErrorInformation());
        throw new PwmUnrecoverableException(e.getErrorInformation());
    } catch (Exception e) {
        final String errorMsg = "error reading remote responses web service response: " + e.getMessage();
        final ErrorInformation errorInformation = new ErrorInformation(PwmError.ERROR_SERVICE_NOT_AVAILABLE, errorMsg);
        LOGGER.error(sessionLabel, errorInformation);
        throw new PwmUnrecoverableException(errorInformation);
    }
}
Also used : RemoteVerificationRequestBean(password.pwm.bean.RemoteVerificationRequestBean) PwmException(password.pwm.error.PwmException) RemoteVerificationResponseBean(password.pwm.bean.RemoteVerificationResponseBean) ErrorInformation(password.pwm.error.ErrorInformation) PwmHttpClientRequest(password.pwm.http.client.PwmHttpClientRequest) MacroMachine(password.pwm.util.macro.MacroMachine) PwmUnrecoverableException(password.pwm.error.PwmUnrecoverableException) PwmHttpClientResponse(password.pwm.http.client.PwmHttpClientResponse) PwmUnrecoverableException(password.pwm.error.PwmUnrecoverableException) PwmException(password.pwm.error.PwmException) LinkedHashMap(java.util.LinkedHashMap)

Example 3 with PwmHttpClientRequest

use of password.pwm.http.client.PwmHttpClientRequest in project pwm by pwm-project.

the class CaptchaUtility method verifyReCaptcha.

public static boolean verifyReCaptcha(final PwmRequest pwmRequest, final String recaptchaResponse) throws PwmUnrecoverableException {
    if (!captchaEnabledForRequest(pwmRequest)) {
        return true;
    }
    final PwmApplication pwmApplication = pwmRequest.getPwmApplication();
    final PasswordData privateKey = pwmApplication.getConfig().readSettingAsPassword(PwmSetting.RECAPTCHA_KEY_PRIVATE);
    final StringBuilder bodyText = new StringBuilder();
    bodyText.append("secret=").append(privateKey.getStringValue());
    bodyText.append("&");
    bodyText.append("remoteip=").append(pwmRequest.getSessionLabel().getSrcAddress());
    bodyText.append("&");
    bodyText.append("response=").append(recaptchaResponse);
    try {
        final PwmHttpClientRequest clientRequest = new PwmHttpClientRequest(HttpMethod.POST, pwmApplication.getConfig().readAppProperty(AppProperty.RECAPTCHA_VALIDATE_URL), bodyText.toString(), Collections.singletonMap("Content-Type", HttpContentType.form.getHeaderValue()));
        LOGGER.debug(pwmRequest, "sending reCaptcha verification request");
        final PwmHttpClient client = new PwmHttpClient(pwmRequest.getPwmApplication(), pwmRequest.getSessionLabel());
        final PwmHttpClientResponse clientResponse = client.makeRequest(clientRequest);
        if (clientResponse.getStatusCode() != HttpServletResponse.SC_OK) {
            throw new PwmUnrecoverableException(new ErrorInformation(PwmError.ERROR_CAPTCHA_API_ERROR, "unexpected HTTP status code (" + clientResponse.getStatusCode() + ")"));
        }
        final JsonElement responseJson = new JsonParser().parse(clientResponse.getBody());
        final JsonObject topObject = responseJson.getAsJsonObject();
        if (topObject != null && topObject.has("success")) {
            final boolean success = topObject.get("success").getAsBoolean();
            if (success) {
                writeCaptchaSkipCookie(pwmRequest);
                return true;
            }
            if (topObject.has("error-codes")) {
                final List<String> errorCodes = new ArrayList<>();
                for (final JsonElement element : topObject.get("error-codes").getAsJsonArray()) {
                    final String errorCode = element.getAsString();
                    errorCodes.add(errorCode);
                }
                LOGGER.debug(pwmRequest, "recaptcha error codes: " + JsonUtil.serializeCollection(errorCodes));
            }
        }
    } catch (Exception e) {
        final String errorMsg = "unexpected error during reCaptcha API execution: " + e.getMessage();
        LOGGER.error(errorMsg, e);
        final ErrorInformation errorInfo = new ErrorInformation(PwmError.ERROR_CAPTCHA_API_ERROR, errorMsg);
        final PwmUnrecoverableException pwmE = new PwmUnrecoverableException(errorInfo);
        pwmE.initCause(e);
        throw pwmE;
    }
    return false;
}
Also used : PwmApplication(password.pwm.PwmApplication) PwmHttpClientRequest(password.pwm.http.client.PwmHttpClientRequest) ArrayList(java.util.ArrayList) JsonObject(com.google.gson.JsonObject) PwmUnrecoverableException(password.pwm.error.PwmUnrecoverableException) PwmHttpClientResponse(password.pwm.http.client.PwmHttpClientResponse) ServletException(javax.servlet.ServletException) PwmUnrecoverableException(password.pwm.error.PwmUnrecoverableException) IOException(java.io.IOException) ErrorInformation(password.pwm.error.ErrorInformation) PwmHttpClient(password.pwm.http.client.PwmHttpClient) JsonElement(com.google.gson.JsonElement) JsonParser(com.google.gson.JsonParser)

Example 4 with PwmHttpClientRequest

use of password.pwm.http.client.PwmHttpClientRequest in project pwm by pwm-project.

the class HttpTelemetrySender method publish.

@Override
public void publish(final TelemetryPublishBean statsPublishBean) throws PwmUnrecoverableException {
    final PwmHttpClientConfiguration pwmHttpClientConfiguration = PwmHttpClientConfiguration.builder().promiscuous(true).build();
    final PwmHttpClient pwmHttpClient = new PwmHttpClient(pwmApplication, SessionLabel.TELEMETRY_SESSION_LABEL, pwmHttpClientConfiguration);
    final String body = JsonUtil.serialize(statsPublishBean);
    final Map<String, String> headers = new HashMap<>();
    headers.put(HttpHeader.Content_Type.getHttpName(), HttpContentType.json.getHeaderValue());
    headers.put(HttpHeader.Accept.getHttpName(), PwmConstants.AcceptValue.json.getHeaderValue());
    final PwmHttpClientRequest pwmHttpClientRequest = new PwmHttpClientRequest(HttpMethod.POST, settings.getUrl(), body, headers);
    LOGGER.trace(SessionLabel.TELEMETRY_SESSION_LABEL, "preparing to send telemetry data to '" + settings.getUrl() + ")");
    pwmHttpClient.makeRequest(pwmHttpClientRequest);
    LOGGER.trace(SessionLabel.TELEMETRY_SESSION_LABEL, "sent telemetry data to '" + settings.getUrl() + ")");
}
Also used : PwmHttpClient(password.pwm.http.client.PwmHttpClient) PwmHttpClientRequest(password.pwm.http.client.PwmHttpClientRequest) HashMap(java.util.HashMap) PwmHttpClientConfiguration(password.pwm.http.client.PwmHttpClientConfiguration)

Example 5 with PwmHttpClientRequest

use of password.pwm.http.client.PwmHttpClientRequest in project pwm by pwm-project.

the class OAuthMachine method makeHttpRequest.

private static PwmHttpClientResponse makeHttpRequest(final PwmRequest pwmRequest, final String debugText, final OAuthSettings settings, final String requestUrl, final Map<String, String> requestParams) throws PwmUnrecoverableException {
    final String requestBody = PwmURL.appendAndEncodeUrlParameters("", requestParams);
    final List<X509Certificate> certs = settings.getCertificates();
    final PwmHttpClientRequest pwmHttpClientRequest;
    {
        final Map<String, String> headers = new HashMap<>();
        headers.put(HttpHeader.Authorization.getHttpName(), new BasicAuthInfo(settings.getClientID(), settings.getSecret()).toAuthHeader());
        headers.put(HttpHeader.Content_Type.getHttpName(), HttpContentType.form.getHeaderValue());
        pwmHttpClientRequest = new PwmHttpClientRequest(HttpMethod.POST, requestUrl, requestBody, headers);
    }
    final PwmHttpClientResponse pwmHttpClientResponse;
    try {
        final PwmHttpClientConfiguration config = PwmHttpClientConfiguration.builder().certificates(JavaHelper.isEmpty(certs) ? null : certs).maskBodyDebugOutput(true).build();
        final PwmHttpClient pwmHttpClient = new PwmHttpClient(pwmRequest.getPwmApplication(), pwmRequest.getSessionLabel(), config);
        pwmHttpClientResponse = pwmHttpClient.makeRequest(pwmHttpClientRequest);
    } catch (PwmException e) {
        final String errorMsg = "error during " + debugText + " http request to oauth server, remote error: " + e.getErrorInformation().toDebugStr();
        throw new PwmUnrecoverableException(new ErrorInformation(PwmError.ERROR_OAUTH_ERROR, errorMsg));
    }
    if (pwmHttpClientResponse.getStatusCode() != HttpStatus.SC_OK) {
        throw new PwmUnrecoverableException(new ErrorInformation(PwmError.ERROR_OAUTH_ERROR, "unexpected HTTP status code (" + pwmHttpClientResponse.getStatusCode() + ") during " + debugText + " request to " + requestUrl));
    }
    return pwmHttpClientResponse;
}
Also used : PwmHttpClientRequest(password.pwm.http.client.PwmHttpClientRequest) PwmUnrecoverableException(password.pwm.error.PwmUnrecoverableException) PwmHttpClientResponse(password.pwm.http.client.PwmHttpClientResponse) X509Certificate(java.security.cert.X509Certificate) PwmException(password.pwm.error.PwmException) ErrorInformation(password.pwm.error.ErrorInformation) PwmHttpClient(password.pwm.http.client.PwmHttpClient) PwmHttpClientConfiguration(password.pwm.http.client.PwmHttpClientConfiguration) BasicAuthInfo(password.pwm.util.BasicAuthInfo) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map)

Aggregations

PwmHttpClientRequest (password.pwm.http.client.PwmHttpClientRequest)7 PwmHttpClientResponse (password.pwm.http.client.PwmHttpClientResponse)6 ErrorInformation (password.pwm.error.ErrorInformation)5 PwmUnrecoverableException (password.pwm.error.PwmUnrecoverableException)5 PwmHttpClient (password.pwm.http.client.PwmHttpClient)5 LinkedHashMap (java.util.LinkedHashMap)4 PwmHttpClientConfiguration (password.pwm.http.client.PwmHttpClientConfiguration)4 Map (java.util.Map)3 PwmException (password.pwm.error.PwmException)3 BasicAuthInfo (password.pwm.util.BasicAuthInfo)3 ArrayList (java.util.ArrayList)2 HashMap (java.util.HashMap)2 PasswordData (password.pwm.util.PasswordData)2 MacroMachine (password.pwm.util.macro.MacroMachine)2 JsonElement (com.google.gson.JsonElement)1 JsonObject (com.google.gson.JsonObject)1 JsonParser (com.google.gson.JsonParser)1 IOException (java.io.IOException)1 X509Certificate (java.security.cert.X509Certificate)1 ServletException (javax.servlet.ServletException)1