Guest User

TokenHelper.class

a guest
Apr 11th, 2019
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.99 KB | None | 0 0
  1. package com.bmwgroup.connected.util.token;
  2.  
  3. import android.content.Context;
  4. import android.content.SharedPreferences;
  5. import android.content.SharedPreferences.Editor;
  6. import android.text.TextUtils;
  7. import com.bmwgroup.connected.internal.util.Logger;
  8. import java.util.Date;
  9. import java.util.concurrent.Callable;
  10. import java.util.concurrent.ExecutorService;
  11. import java.util.concurrent.Executors;
  12. import java.util.concurrent.FutureTask;
  13. import org.json.JSONException;
  14. import org.json.JSONObject;
  15.  
  16. public class TokenHelper
  17. {
  18. private static final String ACCESS_TOKEN = "access_token";
  19. private static final int MS_TO_SECONDS = 1000;
  20. private static final String ONLINESEARCH = "Onlinesearch";
  21. private static final String REFRESH_TOKEN = "refresh_token";
  22. private static final String SHAREDPREFS_BASE64_AUTHORIZATION = "base64";
  23. private static final String SHAREDPREFS_EMAIL = "email";
  24. private static final String SHAREDPREFS_EXPIRES = "expires";
  25. private static final String SHAREDPREFS_EXPIRES_IN = "expires_in";
  26. private static final String SHAREDPREFS_NEXT_REFRESH = "next_refresh";
  27. private static ExecutorService executor;
  28. private static Context mContext;
  29. protected static final Logger sLogger = Logger.getLogger(TokenHelper.class.getSimpleName());
  30.  
  31. public static void cancelDownload()
  32. {
  33. if (executor != null) {
  34. executor.shutdownNow();
  35. }
  36. }
  37.  
  38. public static void deleteAccessToken(Context paramContext)
  39. {
  40. sLogger.d("deleteAccessToken", new Object[0]);
  41. paramContext = paramContext.getSharedPreferences("Onlinesearch", 0);
  42. if (paramContext.contains("access_token"))
  43. {
  44. paramContext = paramContext.edit();
  45. paramContext.remove("access_token");
  46. paramContext.apply();
  47. }
  48. }
  49.  
  50. public static void downloadAccessToken(Context paramContext, TokenData paramTokenData)
  51. {
  52. downloadAccessToken(paramContext, paramTokenData, null);
  53. }
  54.  
  55. public static void downloadAccessToken(Context paramContext, final TokenData paramTokenData, final ProfileLoginHandler paramProfileLoginHandler)
  56. {
  57. Object localObject1 = paramContext.getSharedPreferences("Onlinesearch", 0);
  58. Object localObject2 = ((SharedPreferences)localObject1).edit();
  59. ((SharedPreferences.Editor)localObject2).putString("base64", paramTokenData.getAuthorization());
  60. ((SharedPreferences.Editor)localObject2).commit();
  61. TokenDownloader localTokenDownloader = new TokenDownloader();
  62. if (TextUtils.isEmpty(((SharedPreferences)localObject1).getString("access_token", null)))
  63. {
  64. localObject2 = paramTokenData.getUrl();
  65. localObject1 = localObject2;
  66. if (TextUtils.isEmpty((CharSequence)localObject2))
  67. {
  68. localObject1 = new StringBuilder();
  69. ((StringBuilder)localObject1).append(TokenConstants.getServerUrl());
  70. ((StringBuilder)localObject1).append("/nlp/oauth/token");
  71. localObject1 = ((StringBuilder)localObject1).toString();
  72. }
  73. executor = null;
  74. paramContext = new ProfileLoginHandler()
  75. {
  76. public void onAccountDisabled()
  77. {
  78. if (paramProfileLoginHandler != null) {
  79. paramProfileLoginHandler.onAccountDisabled();
  80. }
  81. }
  82.  
  83. public void onLoginFailed()
  84. {
  85. if (paramProfileLoginHandler != null) {
  86. paramProfileLoginHandler.onLoginFailed();
  87. }
  88. }
  89.  
  90. public void onNoConnection()
  91. {
  92. if (paramProfileLoginHandler != null) {
  93. paramProfileLoginHandler.onNoConnection();
  94. }
  95. }
  96.  
  97. public void onSuccess(String paramAnonymousString)
  98. {
  99. if (!TokenHelper.hasError(paramAnonymousString))
  100. {
  101. TokenHelper.saveToken(this.val$context, paramAnonymousString, paramTokenData.getUserEmail());
  102. if (paramProfileLoginHandler != null) {
  103. paramProfileLoginHandler.onSuccess(paramAnonymousString);
  104. }
  105. }
  106. else
  107. {
  108. TokenHelper.sLogger.d("Login failed -->", new Object[0]);
  109. if (paramProfileLoginHandler != null) {
  110. paramProfileLoginHandler.onLoginFailed();
  111. }
  112. }
  113. }
  114. };
  115. paramContext = new FutureTask(new TokenDownloadTask((String)localObject1, paramTokenData.getUserEmail(), paramTokenData.getUserPassword(), paramTokenData.getAuthorization(), null, paramContext, localTokenDownloader));
  116. executor = Executors.newFixedThreadPool(1);
  117. executor.execute(paramContext);
  118. shutdownExecutor(executor);
  119. }
  120. }
  121.  
  122. public static String getAccessToken(Context paramContext)
  123. {
  124. return paramContext.getSharedPreferences("Onlinesearch", 0).getString("access_token", null);
  125. }
  126.  
  127. public static void getAccessToken(TokenRefreshHandler paramTokenRefreshHandler)
  128. {
  129. try
  130. {
  131. if (getContext() == null)
  132. {
  133. sLogger.d("Please set the Android context first (via TokenHelper.setAndroidContext(final Context context))", new Object[0]);
  134. return;
  135. }
  136. Object localObject = getContext().getSharedPreferences("Onlinesearch", 0);
  137. long l = ((SharedPreferences)localObject).getLong("next_refresh", -1L);
  138. localObject = ((SharedPreferences)localObject).getString("base64", null);
  139. if ((l > 0L) && (System.currentTimeMillis() >= l))
  140. {
  141. if (!TextUtils.isEmpty((CharSequence)localObject))
  142. {
  143. sLogger.d("Token has to be refreshed ...", new Object[0]);
  144. refreshToken((String)localObject, paramTokenRefreshHandler);
  145. }
  146. }
  147. else {
  148. paramTokenRefreshHandler.onSuccess(getAccessToken(getContext()));
  149. }
  150. return;
  151. }
  152. finally {}
  153. }
  154.  
  155. private static Context getContext()
  156. {
  157. return mContext;
  158. }
  159.  
  160. public static long getExpireDateTime(Context paramContext)
  161. {
  162. return paramContext.getSharedPreferences("Onlinesearch", 0).getLong("next_refresh", -1L);
  163. }
  164.  
  165. public static boolean hasError(String paramString)
  166. {
  167. try
  168. {
  169. if (new JSONObject(paramString).has("error"))
  170. {
  171. sLogger.d("--> Error ", new Object[0]);
  172. return true;
  173. }
  174. return false;
  175. }
  176. catch (JSONException paramString)
  177. {
  178. sLogger.d(paramString, paramString.getMessage(), new Object[0]);
  179. }
  180. return true;
  181. }
  182.  
  183. public static void refreshToken(Context paramContext, String paramString, final TokenRefreshHandler paramTokenRefreshHandler)
  184. {
  185. Object localObject = new StringBuilder();
  186. ((StringBuilder)localObject).append(TokenConstants.getServerUrl());
  187. ((StringBuilder)localObject).append("/nlp/oauth/token");
  188. localObject = ((StringBuilder)localObject).toString();
  189. paramContext = paramContext.getSharedPreferences("Onlinesearch", 0);
  190. String str = paramContext.getString("refresh_token", "");
  191. TokenRefresher localTokenRefresher = new TokenRefresher();
  192. localTokenRefresher.setRefreshToken(str);
  193. paramContext = new FutureTask(new TokenRefreshTask((String)localObject, paramString, localTokenRefresher, new TokenRefreshHandler()
  194. {
  195. public void onFail()
  196. {
  197. paramTokenRefreshHandler.onFail();
  198. }
  199.  
  200. public void onSuccess(String paramAnonymousString)
  201. {
  202. try
  203. {
  204. Object localObject = new JSONObject(paramAnonymousString);
  205. paramAnonymousString = ((JSONObject)localObject).getString("access_token");
  206. long l = ((JSONObject)localObject).getLong("expires_in");
  207. localObject = ((JSONObject)localObject).getString("refresh_token");
  208. SharedPreferences.Editor localEditor = this.val$sharedPrefs.edit();
  209. localEditor.putString("access_token", paramAnonymousString);
  210. localEditor.putLong("expires", Long.valueOf(l).longValue());
  211. TokenHelper.sLogger.d("Expires %d", new Object[] { Long.valueOf(l) });
  212. l = System.currentTimeMillis() + l * 1000L;
  213. localEditor.putLong("next_refresh", l);
  214. TokenHelper.sLogger.d("Next refresh %d", new Object[] { Long.valueOf(l) });
  215. TokenHelper.sLogger.d("Next refresh %s", new Object[] { new Date(l).toString() });
  216. localEditor.putString("refresh_token", (String)localObject);
  217. TokenHelper.sLogger.d("Refresh Token = %s", new Object[] { localObject });
  218. localEditor.apply();
  219. paramTokenRefreshHandler.onSuccess(paramAnonymousString);
  220. return;
  221. }
  222. catch (JSONException paramAnonymousString)
  223. {
  224. TokenHelper.sLogger.e(paramAnonymousString, paramAnonymousString.getMessage(), new Object[0]);
  225. onFail();
  226. return;
  227. }
  228. catch (NumberFormatException paramAnonymousString)
  229. {
  230. TokenHelper.sLogger.e(paramAnonymousString, paramAnonymousString.getMessage(), new Object[0]);
  231. onFail();
  232. }
  233. }
  234. }));
  235. paramString = Executors.newFixedThreadPool(1);
  236. paramString.execute(paramContext);
  237. paramString.shutdown();
  238. }
  239.  
  240. public static void refreshToken(String paramString, TokenRefreshHandler paramTokenRefreshHandler)
  241. {
  242. if (getContext() == null)
  243. {
  244. sLogger.d("Please set the Android context first (via TokenHelper.setAndroidContext(final Context context))", new Object[0]);
  245. return;
  246. }
  247. refreshToken(getContext(), paramString, paramTokenRefreshHandler);
  248. }
  249.  
  250. public static void saveToken(Context paramContext, String paramString1, String paramString2)
  251. {
  252. try
  253. {
  254. Object localObject = new JSONObject(paramString1);
  255. paramString1 = ((JSONObject)localObject).getString("access_token");
  256. long l = ((JSONObject)localObject).getLong("expires_in");
  257. localObject = ((JSONObject)localObject).getString("refresh_token");
  258. paramContext = paramContext.getSharedPreferences("Onlinesearch", 0).edit();
  259. paramContext.putString("access_token", paramString1);
  260. paramContext.putLong("expires", Long.valueOf(l).longValue());
  261. sLogger.d("Expires %d", new Object[] { Long.valueOf(l) });
  262. l = System.currentTimeMillis() + l * 1000L / 2L;
  263. paramContext.putLong("next_refresh", l);
  264. sLogger.d("Next refresh %d", new Object[] { Long.valueOf(l) });
  265. sLogger.d("Next refresh %s", new Object[] { new Date(l).toString() });
  266. paramContext.putString("refresh_token", (String)localObject);
  267. sLogger.d("Refresh Token = %s", new Object[] { localObject });
  268. paramContext.putString("email", paramString2);
  269. paramContext.apply();
  270. return;
  271. }
  272. catch (JSONException paramContext)
  273. {
  274. sLogger.e(paramContext, paramContext.getMessage(), new Object[0]);
  275. return;
  276. }
  277. catch (NumberFormatException paramContext)
  278. {
  279. sLogger.e(paramContext, paramContext.getMessage(), new Object[0]);
  280. }
  281. }
  282.  
  283. public static void setAndroidContext(Context paramContext)
  284. {
  285. mContext = paramContext;
  286. }
  287.  
  288. private static void shutdownExecutor(ExecutorService paramExecutorService)
  289. {
  290. paramExecutorService.shutdown();
  291. }
  292.  
  293. private static class TokenDownloadTask
  294. implements Callable<Void>
  295. {
  296. private final String authorization;
  297. private final ProfileLoginHandler handler;
  298. private final TokenDownloader tokenDownloader;
  299. private final String url;
  300. private final String userEmail;
  301. private final String userPassword;
  302. private final String vin;
  303.  
  304. public TokenDownloadTask(String paramString1, String paramString2, String paramString3, String paramString4, String paramString5, ProfileLoginHandler paramProfileLoginHandler, TokenDownloader paramTokenDownloader)
  305. {
  306. this.url = paramString1;
  307. this.userEmail = paramString2;
  308. this.userPassword = paramString3;
  309. this.authorization = paramString4;
  310. this.tokenDownloader = paramTokenDownloader;
  311. this.vin = paramString5;
  312. this.handler = paramProfileLoginHandler;
  313. }
  314.  
  315. public Void call()
  316. throws Exception
  317. {
  318. this.tokenDownloader.download(this.url, this.userEmail, this.userPassword, this.authorization, this.vin, this.handler);
  319. return null;
  320. }
  321. }
  322.  
  323. private static class TokenRefreshTask
  324. implements Callable<Void>
  325. {
  326. private final String authorization;
  327. private final TokenRefreshHandler tHandler;
  328. private final TokenRefresher tokenRefresher;
  329. private final String url;
  330.  
  331. public TokenRefreshTask(String paramString1, String paramString2, TokenRefresher paramTokenRefresher, TokenRefreshHandler paramTokenRefreshHandler)
  332. {
  333. this.url = paramString1;
  334. this.authorization = paramString2;
  335. this.tokenRefresher = paramTokenRefresher;
  336. this.tHandler = paramTokenRefreshHandler;
  337. }
  338.  
  339. public Void call()
  340. throws Exception
  341. {
  342. String str = this.tokenRefresher.refresh(new String[] { this.url, this.authorization });
  343. if (str == null) {
  344. this.tHandler.onFail();
  345. } else {
  346. this.tHandler.onSuccess(str);
  347. }
  348. return null;
  349. }
  350. }
Advertisement
Add Comment
Please, Sign In to add comment