package br.gov.servicos.config; import br.gov.servicos.piwik.PiwikClient; import br.gov.servicos.piwik.RestTemplateErrorLogger; import lombok.*; import lombok.experimental.FieldDefaults; import lombok.experimental.Wither; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.DefaultResponseErrorHandler; import org.springframework.web.client.RestTemplate; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; @Configuration @ConfigurationProperties("pds.piwik") @FieldDefaults(level = AccessLevel.PRIVATE) @Getter @Wither @Setter(/* usado pelo Spring */) @AllArgsConstructor @NoArgsConstructor public class PiwikConfig { Boolean enabled; String url; String token; int site; @Bean public PiwikClient piwikClient(PiwikConfig config, @Qualifier("piwikRestTemplate") RestTemplate restTemplate) { trustSelfSignedSSL(); return new PiwikClient(restTemplate, config); } @Bean public RestTemplate piwikRestTemplate() { RestTemplate restTemplate = new RestTemplate(); restTemplate.setErrorHandler(new RestTemplateErrorLogger(new DefaultResponseErrorHandler())); return restTemplate; } @SneakyThrows private void trustSelfSignedSSL() { SSLContext ctx = SSLContext.getInstance("TLS"); X509TrustManager tm = new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] xcs, String string) throws CertificateException { // não implementa nenhuma checagem } @Override public void checkServerTrusted(X509Certificate[] xcs, String string) throws CertificateException { // não implementa nenhuma checagem } @Override public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } }; ctx.init(null, new TrustManager[]{tm}, null); SSLContext.setDefault(ctx); } public Boolean isEnabled() { return getEnabled(); } }