package eu.dnetlib.repo.manager.utils; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.*; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; import java.nio.charset.Charset; import java.util.Map; @Component public class HttpUtils { private static final Logger logger = Logger.getLogger(HttpUtils.class); @Value("${services.provide.aai.registry.url}") private String registryUrl; @Value("${services.provide.aai.registry.username}") private String user; @Value("${services.provide.aai.registry.password}") private String password; public JsonElement post(String path, JsonObject body) { RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = createHeaders(user, password); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity request = new HttpEntity<>(body.toString(), headers); ResponseEntity responseEntity = restTemplate.exchange(registryUrl + path, HttpMethod.POST, request, String.class); return getResponseEntityAsJsonElement(responseEntity); } public JsonElement put(String path, JsonObject body) { RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = createHeaders(user, password); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity request = new HttpEntity<>(body.toString(), headers); ResponseEntity responseEntity = restTemplate.exchange(registryUrl + path, HttpMethod.PUT, request, String.class); return getResponseEntityAsJsonElement(responseEntity); } public JsonElement get(String path, Map params) { RestTemplate restTemplate = new RestTemplate(); String url = registryUrl + path + ((params != null) ? createParams(params) : null); ResponseEntity responseEntity = restTemplate.exchange (url, HttpMethod.GET, new HttpEntity<>(createHeaders(user, password)), String.class); return getResponseEntityAsJsonElement(responseEntity); } public JsonElement delete(String path) { RestTemplate restTemplate = new RestTemplate(); String url = registryUrl + path; ResponseEntity responseEntity = restTemplate.exchange (url, HttpMethod.DELETE, new HttpEntity<>(createHeaders(user, password)), String.class); return getResponseEntityAsJsonElement(responseEntity); } private String createParams(Map params) { StringBuilder ret = new StringBuilder("?"); int count = 0; for (Map.Entry param : params.entrySet()) { ret.append(param.getKey()).append("=").append(param.getValue()); count++; if (count != params.entrySet().size()) { ret.append("&"); } } return ret.toString(); } private HttpHeaders createHeaders(String username, String password) { return new HttpHeaders() {{ String auth = username + ":" + password; byte[] encodedAuth = Base64.encodeBase64( auth.getBytes(Charset.forName("US-ASCII"))); String authHeader = "Basic " + new String(encodedAuth); set("Authorization", authHeader); }}; } private JsonElement getResponseEntityAsJsonElement(ResponseEntity responseEntity) { if (responseEntity != null && responseEntity.getBody() != null) { logger.info(responseEntity.getBody()); try { return new JsonParser().parse(responseEntity.getBody()); } catch (Exception e) { logger.warn("Could not parse response body", e); } } return null; } }