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"/> + { private final Activity mActivity; private String mFilePath; private String mScript; + private HashMap mScriptInfo; public UpdateScript(final Activity activity) { mActivity = activity; @@ -34,20 +36,28 @@ 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; + + // 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 file_old = 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 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 (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) {