From d2982845ff6117ffda1b762860bdad76a1f7d390 Mon Sep 17 00:00:00 2001 From: misaochan Date: Wed, 14 Dec 2016 16:05:23 +1300 Subject: [PATCH] Refactor Utils.getSHA1 to produce SHA1 output instead of bool --- .../main/java/fr/free/nrw/commons/Utils.java | 37 +++++++++++++++++++ .../nrw/commons/upload/ShareActivity.java | 8 +++- 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/Utils.java b/app/src/main/java/fr/free/nrw/commons/Utils.java index 44fd805c5..414fd39dd 100644 --- a/app/src/main/java/fr/free/nrw/commons/Utils.java +++ b/app/src/main/java/fr/free/nrw/commons/Utils.java @@ -45,6 +45,43 @@ public class Utils { private static final String TAG = Utils.class.getName(); + public static String getSHA1(InputStream is) { + + MessageDigest digest; + try { + digest = MessageDigest.getInstance("SHA1"); + } catch (NoSuchAlgorithmException e) { + Log.e(TAG, "Exception while getting Digest", e); + return ""; + } + + byte[] buffer = new byte[8192]; + int read; + try { + while ((read = is.read(buffer)) > 0) { + digest.update(buffer, 0, read); + } + byte[] md5sum = digest.digest(); + BigInteger bigInt = new BigInteger(1, md5sum); + String output = bigInt.toString(16); + // Fill to 40 chars + output = String.format("%40s", output).replace(' ', '0'); + Log.i(TAG, "Generated: " + output); + + return output; + } catch (IOException e) { + Log.e(TAG, "IO Exception", e); + return ""; + } finally { + try { + is.close(); + } catch (IOException e) { + Log.e(TAG, "Exception on closing MD5 input stream", e); + } + } + + } + public static boolean testSHA1(String sha1, InputStream is) { MessageDigest digest; try { diff --git a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java index 1a18873e9..b82bb2658 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java @@ -249,8 +249,12 @@ public class ShareActivity //FIXME: Replace hardcoded string with call to Commons API instead (use TitleCategories.java as template) // https://commons.wikimedia.org/w/api.php?action=query&list=allimages&aisha1=801957214aba50cb63bb6eb1b0effa50188900ba - boolean sha1Bool = Utils.testSHA1("801957214aba50cb63bb6eb1b0effa50188900ba", inputStream); - Log.d(TAG, "SHA1Bool returns " + sha1Bool); + + String fileSHA1 = Utils.getSHA1(inputStream); + String debugSHA1 = "801957214aba50cb63bb6eb1b0effa50188900ba"; + + boolean fileSHA1Found = fileSHA1.equals(debugSHA1); + Log.d(TAG, "SHA1Bool returns " + fileSHA1Found); } catch (IOException e) { Log.d(TAG, "IO Exception: ", e);