package org.xlrnet.metadict.web.health; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xlrnet.metadict.web.auth.entities.Credentials; import ru.vyarus.dropwizard.guice.module.installer.feature.health.NamedHealthCheck; import javax.inject.Inject; import javax.ws.rs.client.Entity; import javax.ws.rs.core.NewCookie; import javax.ws.rs.core.Response; /** * Health check which tests whether the session login / logout works correctly by perform a REST call to the local * session resource. */ public class SessionHealthCheck extends NamedHealthCheck { private static final Logger LOGGER = LoggerFactory.getLogger(SessionHealthCheck.class); private final SessionHealthCheckHelper sessionHealthCheckHelper; @Inject public SessionHealthCheck(SessionHealthCheckHelper sessionHealthCheckHelper) { this.sessionHealthCheckHelper = sessionHealthCheckHelper; } @Override public String getName() { return "session"; } @Override protected Result check() throws Exception { LOGGER.info("Begin session health check"); // Login: Credentials credentials = new Credentials(sessionHealthCheckHelper.getTechnicalUserName(), sessionHealthCheckHelper.getTechnicalUserPassword(), false); Response loginResponse = sessionHealthCheckHelper.getSessionResource().request().post(Entity.json(credentials)); if (Response.Status.OK.getStatusCode() != loginResponse.getStatus()) { LOGGER.warn("Login request failed: {}", loginResponse.getStatus()); return Result.unhealthy("Login request failed", loginResponse); } NewCookie loginCookie = loginResponse.getCookies().get("sessionToken"); // Check if protected resource is accessible Response sessionLoggedIn = sessionHealthCheckHelper.getSessionResource().request().cookie(loginCookie).get(); if (Response.Status.OK.getStatusCode() != sessionLoggedIn.getStatus()) { LOGGER.warn("User wasn't logged in after successful login response: {}", sessionLoggedIn.getStatus()); return Result.unhealthy("User wasn't logged in after successful login response", sessionLoggedIn); } LOGGER.info("Session health check finished successfully"); return Result.healthy(); } }