diff --git a/MasterPassword/Java/masterpassword-gui/pom.xml b/MasterPassword/Java/masterpassword-gui/pom.xml index 8cd78f27..df4548a0 100644 --- a/MasterPassword/Java/masterpassword-gui/pom.xml +++ b/MasterPassword/Java/masterpassword-gui/pom.xml @@ -48,7 +48,7 @@ - ${buildNumber} + ${buildNumber} diff --git a/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/GUI.java b/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/GUI.java index ef66cbf9..5750647f 100644 --- a/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/GUI.java +++ b/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/GUI.java @@ -18,8 +18,7 @@ package com.lyndir.masterpassword; import com.google.common.base.Charsets; -import com.google.common.io.ByteStreams; -import com.google.common.io.CharStreams; +import com.google.common.io.*; import com.lyndir.lhunath.opal.system.CodeUtils; import com.lyndir.lhunath.opal.system.MessageDigests; import com.lyndir.lhunath.opal.system.logging.Logger; @@ -27,6 +26,9 @@ import com.lyndir.lhunath.opal.system.util.TypeUtils; import java.io.*; import java.net.URI; import java.net.URL; +import java.util.Enumeration; +import java.util.List; +import java.util.jar.*; import javax.swing.*; @@ -47,18 +49,26 @@ public class GUI implements UnlockFrame.SignInCallback { throws IOException { try { - byte[] manifest = ByteStreams.toByteArray( GUI.class.getClassLoader().getResourceAsStream( "META-INF/MANIFEST.MF" ) ); - String manifestHash = CodeUtils.encodeHex( CodeUtils.digest( MessageDigests.SHA1, manifest ) ); - InputStream upstream = URI.create( "http://masterpasswordapp.com/masterpassword-gui.jar.mf.sha1" ).toURL().openStream(); - String upstreamHash = CharStreams.toString( new InputStreamReader( upstream, Charsets.UTF_8 ) ); - logger.inf( "Local Manifest Hash: %s", manifestHash ); - logger.inf( "Upstream Manifest Hash: %s", upstreamHash ); - if (!manifestHash.equalsIgnoreCase( upstreamHash )) { - logger.wrn( "You are not running the current official version. Please update from:\n" - + "http://masterpasswordapp.com/masterpassword-gui.jar" ); - JOptionPane.showMessageDialog( null, "A new version of Master Password is available.\n" - + "Please download the latest version from http://masterpasswordapp.com", - "Update Available", JOptionPane.WARNING_MESSAGE ); + Enumeration manifestURLs = Thread.currentThread().getContextClassLoader().getResources( JarFile.MANIFEST_NAME ); + while (manifestURLs.hasMoreElements()) { + InputStream manifestStream = manifestURLs.nextElement().openStream(); + Attributes attributes = new Manifest( manifestStream ).getMainAttributes(); + if (!GUI.class.getCanonicalName().equals( attributes.getValue( Attributes.Name.MAIN_CLASS ) )) + continue; + + String manifestRevision = attributes.getValue( Attributes.Name.IMPLEMENTATION_VERSION ); + String upstreamRevisionURL = "http://masterpasswordapp.com/masterpassword-gui.jar.rev"; + CharSource upstream = Resources.asCharSource( URI.create( upstreamRevisionURL ).toURL(), Charsets.UTF_8 ); + String upstreamRevision = upstream.readFirstLine(); + logger.inf( "Local Revision: <%s>", manifestRevision ); + logger.inf( "Upstream Revision: <%s>", upstreamRevision ); + if (!manifestRevision.equalsIgnoreCase( upstreamRevision )) { + logger.wrn( "You are not running the current official version. Please update from:\n" + + "http://masterpasswordapp.com/masterpassword-gui.jar" ); + JOptionPane.showMessageDialog( null, "A new version of Master Password is available.\n" + + "Please download the latest version from http://masterpasswordapp.com", + "Update Available", JOptionPane.WARNING_MESSAGE ); + } } } catch (IOException e) {