package net.whydah.admin.application; import net.whydah.admin.AuthenticationFailedException; import net.whydah.admin.config.AppConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.ws.rs.BadRequestException; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Entity; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; /** * @author <a href="bard.lind@gmail.com">Bard Lind</a> */ @Component public class UibApplicationConnection { private static final Logger log = LoggerFactory.getLogger(UibApplicationConnection.class); private static final int STATUS_BAD_REQUEST = 400; //Response.Status.BAD_REQUEST.getStatusCode(); private static final int STATUS_OK = 200; //Response.Status.OK.getStatusCode(); private final WebTarget uib; private final String userIdentityBackendUri = "http://localhost:9995/uib"; @Autowired public UibApplicationConnection(AppConfig appConfig) { Client client = ClientBuilder.newClient(); // URI useridbackendUri = URI.create(appConfig.getProperty("useridentitybackend")); // uib = client.target(userIdentityBackendUri); String uibUrl = appConfig.getProperty("useridentitybackend"); log.info("Connection to UserIdentityBackend on {}" , uibUrl); uib = client.target(uibUrl); } public Application addApplication(String userAdminServiceTokenId, String userTokenId, String applicationJson) { WebTarget webResource = uib.path("/" + userAdminServiceTokenId + "/" + userTokenId + "/application"); Application application = null; Response response = webResource.request(MediaType.APPLICATION_JSON).post(Entity.entity(applicationJson,MediaType.APPLICATION_JSON)); int statusCode = response.getStatus(); switch (statusCode) { case STATUS_OK: log.trace("Response from UIB {}", response.readEntity(String.class)); application = buildApplication(applicationJson); break; case STATUS_BAD_REQUEST: log.error("Response from UIB: {}: {}", response.getStatus(), response.readEntity(String.class)); throw new BadRequestException("BadRequest for Json " + applicationJson + ", Status code " + response.getStatus()); default: log.error("Response from UIB: {}: {}", response.getStatus(), response.readEntity(String.class)); throw new AuthenticationFailedException("Authentication failed. Status code " + response.getStatus()); } return application; } private Application buildApplication(String applicationJson) { log.debug("build json from {}", applicationJson); return Application.fromJson(applicationJson); } public Application getApplication(String userAdminServiceTokenId, String userTokenId, String applicationId) { WebTarget webResource = uib.path("/" + userAdminServiceTokenId + "/" + userTokenId + "/application/" + applicationId); Application application = null; Response response = webResource.request(MediaType.APPLICATION_JSON).get(); int statusCode = response.getStatus(); switch (statusCode) { case STATUS_OK: application = buildApplication(response.readEntity(String.class)); break; case STATUS_BAD_REQUEST: log.error("Response from UIB: {}: {}", response.getStatus(), response.readEntity(String.class)); throw new BadRequestException("BadRequest for Json " + response.toString() + ", Status code " + response.getStatus()); default: log.error("Response from UIB: {}: {}", response.getStatus(), response.readEntity(String.class)); throw new AuthenticationFailedException("Authentication failed. Status code " + response.getStatus()); } return application; } }