/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package org.dlect.update; import com.google.common.base.Charsets; import com.google.common.collect.Lists; import com.google.common.io.CharStreams; import java.io.IOException; import java.io.InputStreamReader; import java.net.URI; import java.util.List; import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; public class OnlineUpdateCheckerImpl implements OnlineUpdateChecker { private static final URI UPDATE_CHECK_URI = URI.create("http://uqlectures.sourceforge.net/update.php"); private static final String UPDATE_REQUIRED_HEADER = "X-Update-Required"; private HttpEntity generateEntity(String selectedProvider, String uuid, String bbid) { List<BasicNameValuePair> postVars = Lists.newArrayList( of("thisver", ApplicationInformation.APPLICATION_VERSION), of("javaver", ApplicationInformation.JAVA_VERSION), of("bbid", bbid), of("uuid", uuid), of("provider", selectedProvider), of("osname", ApplicationInformation.OS_TYPE), of("osversion", ApplicationInformation.OS_VERSON), of("osarch", ApplicationInformation.OS_ARCHITECTURE) ); UpdateLogger.LOGGER.error("Posting: " + postVars); return new UrlEncodedFormEntity(postVars, Charsets.UTF_8); } private BasicNameValuePair of(String name, String value) { return new BasicNameValuePair(name, value); } @Override public boolean isUpdateAvaliable(String selectedProvider, String uuid, String bbid) throws UpdateException { try (CloseableHttpClient hc = HttpClients.createDefault()) { HttpPost r = new HttpPost(UPDATE_CHECK_URI); r.setEntity(generateEntity(selectedProvider, uuid, bbid)); CloseableHttpResponse response = hc.execute(r); UpdateLogger.LOGGER.error("{}", response.getStatusLine()); UpdateLogger.LOGGER.error("{}", CharStreams.toString(new InputStreamReader(response.getEntity().getContent(), Charsets.UTF_8))); Header updateNeeded = response.getLastHeader(UPDATE_REQUIRED_HEADER); if (updateNeeded != null) { boolean value = parseBooleanSafe(updateNeeded.getValue(), false); return value; } else { UpdateLogger.LOGGER.error("No update header. Headders follow"); for (Header header : response.getAllHeaders()) { UpdateLogger.LOGGER.error("H > {}", header); } return false; } } catch (IOException e) { throw new UpdateException(e); } } private boolean parseBooleanSafe(String value, boolean b) { try { return Boolean.parseBoolean(value); } catch (NullPointerException | IllegalArgumentException e) { return b; } } }