Panagiotis Triantafyllou

version 4.5.4

...@@ -2,7 +2,7 @@ apply plugin: 'com.android.library' ...@@ -2,7 +2,7 @@ apply plugin: 'com.android.library'
2 2
3 ext { 3 ext {
4 PUBLISH_GROUP_ID = 'ly.warp' 4 PUBLISH_GROUP_ID = 'ly.warp'
5 - PUBLISH_VERSION = '4.5.3.1' 5 + PUBLISH_VERSION = '4.5.4'
6 PUBLISH_ARTIFACT_ID = 'warply-android-sdk' 6 PUBLISH_ARTIFACT_ID = 'warply-android-sdk'
7 } 7 }
8 8
...@@ -37,7 +37,7 @@ dependencies { ...@@ -37,7 +37,7 @@ dependencies {
37 api 'androidx.appcompat:appcompat:1.4.1' 37 api 'androidx.appcompat:appcompat:1.4.1'
38 api 'androidx.recyclerview:recyclerview:1.2.1' 38 api 'androidx.recyclerview:recyclerview:1.2.1'
39 api 'androidx.cardview:cardview:1.0.0' 39 api 'androidx.cardview:cardview:1.0.0'
40 - 40 + api "androidx.security:security-crypto:1.1.0-alpha03" // For minSDK 23 use 1.0.0, for minSDK 21 use 1.1.0 that is currently in alpha
41 api 'org.altbeacon:android-beacon-library:2.19.3' 41 api 'org.altbeacon:android-beacon-library:2.19.3'
42 api 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2' 42 api 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
43 api "commons-logging:commons-logging:1.2" 43 api "commons-logging:commons-logging:1.2"
......
1 +package ly.warp.sdk.utils;
2 +
3 +import android.app.Application;
4 +import android.content.Context;
5 +import android.content.SharedPreferences;
6 +import android.preference.PreferenceManager;
7 +
8 +import androidx.security.crypto.EncryptedSharedPreferences;
9 +import androidx.security.crypto.MasterKey;
10 +
11 +import java.io.IOException;
12 +import java.lang.ref.WeakReference;
13 +import java.security.GeneralSecurityException;
14 +
15 +/**
16 + * Created by Panagiotis Triantafyllou on 21-Nov-18.
17 + */
18 +
19 +public class PrefsUtils {
20 +
21 + // ===========================================================
22 + // Constants
23 + // ===========================================================
24 + private static final String FILE_SECURE_SHARED_PREFS = "com.gr.gapp.obfuscatepreferences";
25 + private static final String KEY_ACC_TOKEN = "key_acc_token";
26 + private static final String KEY_REF_TOKEN = "key_ref_token";
27 + private static final String KEY_CL_SECRET = "key_cl_secret";
28 + private static final String KEY_CID = "key_cid";
29 +
30 + // ===========================================================
31 + // Fields
32 + // ===========================================================
33 +
34 + private static WeakReference<Application> sContext;
35 + private static SharedPreferences mSecurePref;
36 +
37 + // ===========================================================
38 + // Methods
39 + // ===========================================================
40 +
41 + public static void initialize(Application application) {
42 + sContext = new WeakReference<>(application);
43 + }
44 +
45 + private static SharedPreferences getPrefs() {
46 + return PreferenceManager.getDefaultSharedPreferences(sContext.get());
47 + }
48 +
49 + private static SharedPreferences getPrefs(Context context) {
50 + try {
51 + MasterKey masterKey = new
52 + MasterKey.Builder(context, MasterKey.DEFAULT_MASTER_KEY_ALIAS).
53 + setKeyScheme(MasterKey.KeyScheme.AES256_GCM).build();
54 +
55 + SharedPreferences encryptedSharedPreferences = EncryptedSharedPreferences.create(
56 + context,
57 + context.getPackageName() + "_preferences",
58 + masterKey,
59 + EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
60 + EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
61 + );
62 +
63 + return encryptedSharedPreferences;
64 + } catch (GeneralSecurityException | IOException e) {
65 + WarpUtils.log("PrefUtils Get Encrypted Shared Preferences Error", e);
66 + return PreferenceManager.getDefaultSharedPreferences(context);
67 + }
68 + }
69 +
70 + // ===========================================================
71 + // Getter & Setter
72 + // ===========================================================
73 +
74 + /**
75 + * Removes all user preferences.
76 + */
77 + public static void clearPrefs() {
78 + getPrefs().edit().clear().apply();
79 + }
80 +
81 + public static String getAccToken(Context context) {
82 + return getPrefs(context).getString(KEY_ACC_TOKEN, "");
83 + }
84 +
85 + public static void setAccToken(Context context, String at) {
86 + getPrefs(context).edit().putString(KEY_ACC_TOKEN, at).apply();
87 + }
88 +
89 + public static String getRefToken(Context context) {
90 + return getPrefs(context).getString(KEY_REF_TOKEN, "");
91 + }
92 +
93 + public static void setRefToken(Context context, String rt) {
94 + getPrefs(context).edit().putString(KEY_REF_TOKEN, rt).apply();
95 + }
96 +
97 + public static String getClSecret(Context context) {
98 + return getPrefs(context).getString(KEY_CL_SECRET, "");
99 + }
100 +
101 + public static void setClSecret(Context context, String cs) {
102 + getPrefs(context).edit().putString(KEY_CL_SECRET, cs).apply();
103 + }
104 +
105 + public static String getCid(Context context) {
106 + return getPrefs(context).getString(KEY_CID, "");
107 + }
108 +
109 + public static void setCid(Context context, String cid) {
110 + getPrefs(context).edit().putString(KEY_CID, cid).apply();
111 + }
112 +}
...@@ -49,6 +49,9 @@ import android.view.View; ...@@ -49,6 +49,9 @@ import android.view.View;
49 import android.view.animation.Animation; 49 import android.view.animation.Animation;
50 import android.view.animation.ScaleAnimation; 50 import android.view.animation.ScaleAnimation;
51 51
52 +import androidx.security.crypto.EncryptedSharedPreferences;
53 +import androidx.security.crypto.MasterKey;
54 +
52 import org.apache.http.client.HttpClient; 55 import org.apache.http.client.HttpClient;
53 import org.apache.http.client.methods.HttpRequestBase; 56 import org.apache.http.client.methods.HttpRequestBase;
54 import org.apache.http.params.HttpProtocolParams; 57 import org.apache.http.params.HttpProtocolParams;
...@@ -59,6 +62,7 @@ import java.io.IOException; ...@@ -59,6 +62,7 @@ import java.io.IOException;
59 import java.io.InputStream; 62 import java.io.InputStream;
60 import java.io.InputStreamReader; 63 import java.io.InputStreamReader;
61 import java.nio.charset.Charset; 64 import java.nio.charset.Charset;
65 +import java.security.GeneralSecurityException;
62 import java.security.MessageDigest; 66 import java.security.MessageDigest;
63 import java.security.NoSuchAlgorithmException; 67 import java.security.NoSuchAlgorithmException;
64 import java.util.zip.GZIPInputStream; 68 import java.util.zip.GZIPInputStream;
...@@ -190,11 +194,26 @@ public class WarpUtils { ...@@ -190,11 +194,26 @@ public class WarpUtils {
190 } 194 }
191 195
192 private static SharedPreferences getPreferences(Context context) { 196 private static SharedPreferences getPreferences(Context context) {
193 -
194 if (_prefs == null) { 197 if (_prefs == null) {
195 - 198 + try {
196 - _prefs = context.getSharedPreferences(PREFERENCES_NAME, 199 + MasterKey masterKey = new
197 - Context.MODE_PRIVATE); 200 + MasterKey.Builder(context, MasterKey.DEFAULT_MASTER_KEY_ALIAS).
201 + setKeyScheme(MasterKey.KeyScheme.AES256_GCM).build();
202 +
203 + SharedPreferences encryptedSharedPreferences = EncryptedSharedPreferences.create(
204 + context,
205 + PREFERENCES_NAME,
206 + masterKey,
207 + EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
208 + EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
209 + );
210 +
211 + _prefs = encryptedSharedPreferences;
212 + } catch (GeneralSecurityException | IOException e) {
213 + WarpUtils.log("WarpUtils Get Encrypted Shared Preferences Error", e);
214 + _prefs = context.getSharedPreferences(PREFERENCES_NAME,
215 + Context.MODE_PRIVATE);
216 + }
198 } 217 }
199 218
200 return _prefs; 219 return _prefs;
......
...@@ -5,10 +5,15 @@ import android.content.Context; ...@@ -5,10 +5,15 @@ import android.content.Context;
5 import android.content.SharedPreferences; 5 import android.content.SharedPreferences;
6 import android.text.TextUtils; 6 import android.text.TextUtils;
7 7
8 +import androidx.security.crypto.EncryptedSharedPreferences;
9 +import androidx.security.crypto.MasterKey;
10 +
8 import org.json.JSONArray; 11 import org.json.JSONArray;
9 import org.json.JSONException; 12 import org.json.JSONException;
10 import org.json.JSONObject; 13 import org.json.JSONObject;
11 14
15 +import java.io.IOException;
16 +import java.security.GeneralSecurityException;
12 import java.util.Map; 17 import java.util.Map;
13 import java.util.Set; 18 import java.util.Set;
14 19
...@@ -20,8 +25,25 @@ public class WarplyPreferences { ...@@ -20,8 +25,25 @@ public class WarplyPreferences {
20 private SharedPreferences warplySharedPrefs; 25 private SharedPreferences warplySharedPrefs;
21 26
22 public WarplyPreferences(Context context) { 27 public WarplyPreferences(Context context) {
23 - this.warplySharedPrefs = context. 28 + try {
24 - getSharedPreferences(WARPLY_SHARED_PREFS, Activity.MODE_PRIVATE); 29 + MasterKey masterKey = new
30 + MasterKey.Builder(context, MasterKey.DEFAULT_MASTER_KEY_ALIAS).
31 + setKeyScheme(MasterKey.KeyScheme.AES256_GCM).build();
32 +
33 + SharedPreferences encryptedSharedPreferences = EncryptedSharedPreferences.create(
34 + context,
35 + WARPLY_SHARED_PREFS,
36 + masterKey,
37 + EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
38 + EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
39 + );
40 +
41 + this.warplySharedPrefs = encryptedSharedPreferences;
42 + } catch (GeneralSecurityException | IOException e) {
43 + WarpUtils.log("WarplyPreferences Encrypted Shared Preferences Error", e);
44 + this.warplySharedPrefs = context.
45 + getSharedPreferences(WARPLY_SHARED_PREFS, Activity.MODE_PRIVATE);
46 + }
25 } 47 }
26 48
27 public void saveLocationChangedReceiverStatus(String status) { 49 public void saveLocationChangedReceiverStatus(String status) {
...@@ -48,7 +70,8 @@ public class WarplyPreferences { ...@@ -48,7 +70,8 @@ public class WarplyPreferences {
48 public String getAppStatus() { 70 public String getAppStatus() {
49 return warplySharedPrefs.getString("appStatus", "background"); 71 return warplySharedPrefs.getString("appStatus", "background");
50 } 72 }
51 - public boolean isForeground(){ 73 +
74 + public boolean isForeground() {
52 return !getAppStatus().equals("background"); 75 return !getAppStatus().equals("background");
53 } 76 }
54 77
......
...@@ -30,7 +30,7 @@ public class WarpConstants { ...@@ -30,7 +30,7 @@ public class WarpConstants {
30 /** 30 /**
31 * The version of the SDK installed in the device 31 * The version of the SDK installed in the device
32 */ 32 */
33 - public static final String SDK_VERSION = "4.5.3"; 33 + public static final String SDK_VERSION = "4.5.4";
34 34
35 /** 35 /**
36 * The URL of the server where it should ping 36 * The URL of the server where it should ping
......