From dcd6fce41e2aed471e160db5616ea219a902015c Mon Sep 17 00:00:00 2001 From: Philipp Schaefer Date: Sat, 17 May 2014 10:54:40 +0200 Subject: [PATCH 1/2] cache script info in script update class --- .../iitc_mobile/async/UpdateScript.java | 20 +++++++++++-------- .../prefs/ForceUpdatePreference.java | 5 ----- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/mobile/src/com/cradle/iitc_mobile/async/UpdateScript.java b/mobile/src/com/cradle/iitc_mobile/async/UpdateScript.java index aca03e42..e8b48236 100644 --- a/mobile/src/com/cradle/iitc_mobile/async/UpdateScript.java +++ b/mobile/src/com/cradle/iitc_mobile/async/UpdateScript.java @@ -17,12 +17,14 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; +import java.util.HashMap; public class UpdateScript extends AsyncTask { private final Activity mActivity; private String mFilePath; private String mScript; + private HashMap mScriptInfo; public UpdateScript(final Activity activity) { mActivity = activity; @@ -34,20 +36,22 @@ public class UpdateScript extends AsyncTask { mFilePath = urls[0]; // get local script meta information mScript = IITC_FileManager.readStream(new FileInputStream(new File(mFilePath))); - final String updateURL = IITC_FileManager.getScriptInfo(mScript).get("updateURL"); - final String downloadURL = IITC_FileManager.getScriptInfo(mScript).get("downloadURL"); + mScriptInfo = IITC_FileManager.getScriptInfo(mScript); + String updateURL = mScriptInfo.get("updateURL"); + final String downloadURL = mScriptInfo.get("downloadURL"); + if (updateURL == null) updateURL = downloadURL; // get remote script meta information - final File file_old = new File(mFilePath); + final File local_file = new File(mFilePath); final InputStream is = new URL(updateURL).openStream(); - final String old_version = IITC_FileManager.getScriptInfo(mScript).get("version"); - final String new_version = IITC_FileManager.getScriptInfo(IITC_FileManager.readStream(is)).get("version"); + final String local_version = mScriptInfo.get("version"); + final String remote_version = IITC_FileManager.getScriptInfo(IITC_FileManager.readStream(is)).get("version"); // update script if neccessary - if (old_version.compareTo(new_version) < 0) { - Log.d("plugin " + mFilePath + " outdated\n" + old_version + " vs " + new_version); + if (local_version.compareTo(remote_version) < 0) { + Log.d("plugin " + mFilePath + " outdated\n" + local_version + " vs " + remote_version); Log.d("updating file...."); - IITC_FileManager.copyStream(new URL(downloadURL).openStream(), new FileOutputStream(file_old), true); + IITC_FileManager.copyStream(new URL(downloadURL).openStream(), new FileOutputStream(local_file), true); Log.d("...done"); return true; } diff --git a/mobile/src/com/cradle/iitc_mobile/prefs/ForceUpdatePreference.java b/mobile/src/com/cradle/iitc_mobile/prefs/ForceUpdatePreference.java index 1cb5bcb2..f0341b6a 100644 --- a/mobile/src/com/cradle/iitc_mobile/prefs/ForceUpdatePreference.java +++ b/mobile/src/com/cradle/iitc_mobile/prefs/ForceUpdatePreference.java @@ -9,11 +9,6 @@ import android.util.AttributeSet; import com.cradle.iitc_mobile.R; -/** - * The OptionDialogPreference will display a dialog, and will persist the - * true when pressing the positive button and false - * otherwise. It will persist to the android:key specified in xml-preference. - */ public class ForceUpdatePreference extends Preference { public ForceUpdatePreference(Context context, AttributeSet attrs) { From 2a3441003b96381029f8dcc1f5bb0cb863db5e5d Mon Sep 17 00:00:00 2001 From: Philipp Schaefer Date: Sat, 17 May 2014 11:17:02 +0200 Subject: [PATCH 2/2] added GM/TM option 'require secure updates' for plugin updates --- mobile/res/values/strings.xml | 2 ++ mobile/res/xml/preferences.xml | 5 +++++ mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java | 1 + .../com/cradle/iitc_mobile/async/UpdateScript.java | 12 +++++++++--- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/mobile/res/values/strings.xml b/mobile/res/values/strings.xml index 0f84061c..bbbb5fb8 100644 --- a/mobile/res/values/strings.xml +++ b/mobile/res/values/strings.xml @@ -135,6 +135,8 @@ How often IITCm should search for new plugin versions Force plugin update Update all enabled user plugins + Require secure updates + If enabled, only https updates are handled System Bar diff --git a/mobile/res/xml/preferences.xml b/mobile/res/xml/preferences.xml index 5978e5f1..c3d8e6ef 100644 --- a/mobile/res/xml/preferences.xml +++ b/mobile/res/xml/preferences.xml @@ -106,6 +106,11 @@ android:key="pref_force_plugin_update" android:title="@string/pref_force_plugin_update" android:summary="@string/pref_force_plugin_update_sum"/> + { final String downloadURL = mScriptInfo.get("downloadURL"); if (updateURL == null) updateURL = downloadURL; + // check for https protocol + final URL url = new URL(updateURL); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mActivity); + Boolean secureUpdates = prefs.getBoolean("pref_secure_updates", true); + if (!url.getProtocol().equals("https") && secureUpdates) return false; + // get remote script meta information - final File local_file = new File(mFilePath); - final InputStream is = new URL(updateURL).openStream(); - final String local_version = mScriptInfo.get("version"); + final InputStream is = url.openStream(); final String remote_version = IITC_FileManager.getScriptInfo(IITC_FileManager.readStream(is)).get("version"); + final File local_file = new File(mFilePath); + final String local_version = mScriptInfo.get("version"); // update script if neccessary if (local_version.compareTo(remote_version) < 0) {