diff --git a/src/plugins/pluginContext/src/android/Tee.java b/src/plugins/pluginContext/src/android/Tee.java index be6b75f4b..16386b588 100644 --- a/src/plugins/pluginContext/src/android/Tee.java +++ b/src/plugins/pluginContext/src/android/Tee.java @@ -15,6 +15,9 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +//auth plugin +import com.foxdebug.acode.rk.auth.EncryptedPreferenceManager; + public class Tee extends CordovaPlugin { // pluginId : token @@ -26,10 +29,62 @@ public class Tee extends CordovaPlugin { // token : list of permissions private /*static*/ final Map> permissionStore = new ConcurrentHashMap<>(); + + + private Context context; + + + public void initialize(CordovaInterface cordova, CordovaWebView webView) { + super.initialize(cordova, webView); + this.context = cordova.getContext(); + } + @Override public boolean execute(String action, JSONArray args, CallbackContext callback) throws JSONException { + + if ("get_secret".equals(action)) { + String token = args.getString(0); + String key = args.getString(1); + String defaultValue = args.getString(2); + + String pluginId = getPluginIdFromToken(token); + + if (pluginId == null) { + callback.error("INVALID_TOKEN"); + return true; + } + + EncryptedPreferenceManager prefs = + new EncryptedPreferenceManager(context, pluginId); + + String value = prefs.getString(key, defaultValue); + callback.success(value); + return true; + } + + if ("set_secret".equals(action)) { + String token = args.getString(0); + String key = args.getString(1); + String value = args.getString(2); + + String pluginId = getPluginIdFromToken(token); + + if (pluginId == null) { + callback.error("INVALID_TOKEN"); + return true; + } + + EncryptedPreferenceManager prefs = + new EncryptedPreferenceManager(context, pluginId); + + prefs.setString(key, value); + callback.success(); + return true; + } + + if ("requestToken".equals(action)) { String pluginId = args.getString(0); String pluginJson = args.getString(1); @@ -69,6 +124,16 @@ public boolean execute(String action, JSONArray args, CallbackContext callback) return false; } + + private String getPluginIdFromToken(String token) { + for (Map.Entry entry : tokenStore.entrySet()) { + if (entry.getValue().equals(token)) { + return entry.getKey(); + } + } + return null; + } + //============================================================ //do not change function signatures public boolean isTokenValid(String token, String pluginId) { diff --git a/src/plugins/pluginContext/www/PluginContext.js b/src/plugins/pluginContext/www/PluginContext.js index 380dfbb9b..c7b52df21 100644 --- a/src/plugins/pluginContext/www/PluginContext.js +++ b/src/plugins/pluginContext/www/PluginContext.js @@ -34,6 +34,31 @@ const PluginContext = (function () { exec(resolve, reject, "Tee", "listAllPermissions", [this.uuid]); }); } + + getSecret(token, key, defaultValue = "") { + return new Promise((resolve, reject) => { + exec( + resolve, + reject, + "Tee", + "get_secret", + [token, key, defaultValue] + ); + }); + } + + + setSecret(token, key, value) { + return new Promise((resolve, reject) => { + exec( + resolve, + reject, + "Tee", + "set_secret", + [token, key, value] + ); + }); + } } //Object.freeze(this);