Advertisement
Guest User

Untitled

a guest
Aug 1st, 2016
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.85 KB | None | 0 0
  1. public class AccountAuthenticator extends AbstractAccountAuthenticator {
  2. private final Context context;
  3. private String TAG = getClass().getSimpleName();
  4.  
  5. public AccountAuthenticator(Context context) {
  6. super(context);
  7. this.context = context;
  8. }
  9.  
  10. @Override
  11. public Bundle addAccount(AccountAuthenticatorResponse accountAuthenticatorResponse, String accountType,
  12. String authTokenType, String[] requiredFeatures, Bundle options) throws NetworkErrorException {
  13. System.out.println("SaveItAuthenticator addAccount....");
  14. final Intent intent = new Intent(context, LoginActivity.class);
  15. intent.putExtra(LoginActivity.ARG_ACCOUNT_TYPE, accountType);
  16. intent.putExtra(LoginActivity.ARG_AUTH_TYPE, authTokenType);
  17. intent.putExtra(LoginActivity.ARG_IS_ADDING_ACCOUNT, true);
  18. intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, accountAuthenticatorResponse);
  19.  
  20. System.out.println("SaveItAuthenticator addAccount mid");
  21. final Bundle bundle = new Bundle();
  22. if (options != null) {
  23. bundle.putAll(options);
  24. }
  25. bundle.putParcelable(AccountManager.KEY_INTENT, intent);
  26. System.out.println("SaveItAuthenticator addAccount end");
  27. return bundle;
  28. }
  29.  
  30. /* @Override
  31. public Bundle getAccountRemovalAllowed(AccountAuthenticatorResponse response, Account account) throws NetworkErrorException {
  32. Bundle bundle = new Bundle();
  33. boolean allowed = true;
  34. bundle.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, allowed);
  35. return bundle;
  36. } */
  37.  
  38. @Override
  39. public Bundle getAuthToken(AccountAuthenticatorResponse accountAuthenticatorResponse, Account account,
  40. String authTokenType, Bundle options) throws NetworkErrorException {
  41. System.out.println("SaveItAuthenticator getAuthToken....");
  42. if (!authTokenType.equals(AccountGeneral.AUTHTOKEN_TYPE_READ_ONLY) &&
  43. !authTokenType.equals(AccountGeneral.AUTHTOKEN_TYPE_FULL_ACCESS)) {
  44. final Bundle result = new Bundle();
  45. result.putString(AccountManager.KEY_ERROR_MESSAGE, "Invalid authTokenType");
  46. return result;
  47. }
  48.  
  49. final AccountManager manager = AccountManager.get(context.getApplicationContext());
  50.  
  51. String authToken = manager.peekAuthToken(account, authTokenType);
  52.  
  53. Log.d("SaveItAndroidOauth", TAG + " > peekAuthToken returned - " + authToken);
  54.  
  55. if (TextUtils.isEmpty(authToken)) {
  56. System.out.println("*************** if TextUtils.isEmpty(authToken) ******************");
  57. final String password = manager.getPassword(account);
  58. System.out.println("*************** password ****************** "+password);
  59. final String refreshToken = manager.getUserData(account, LoginActivity.KEY_REFRESH_TOKEN);
  60. if (password != null) {
  61. try {
  62. System.out.println("Discounty > re-authenticating with refresh token "+refreshToken);
  63. AccessToken accessToken = discountyService.getAccessToken(DiscountyService.ACCESS_GRANT_TYPE,
  64. username, password).toBlocking().first();
  65. authToken = accessToken.getValue();
  66. RefreshToken tokenRef = accessToken.getRefreshToken();
  67. String refreshtoken = tokenRef.getValue();
  68. // manager.setPassword(account,"password");
  69. manager.setUserData(account, LoginActivity.KEY_REFRESH_TOKEN, refreshtoken);
  70. } catch (Exception e) {
  71. e.printStackTrace();
  72. }
  73. }
  74. }
  75.  
  76. if (!TextUtils.isEmpty(authToken)) {
  77. final Bundle result = new Bundle();
  78. result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
  79. result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
  80. result.putString(AccountManager.KEY_AUTHTOKEN, authToken);
  81. return result;
  82. }
  83. // If we get here, then we couldn't access the user's password - so we
  84. // need to re-prompt them for their credentials. We do that by creating
  85. // an intent to display our AuthenticatorActivity.
  86. final Intent intent = new Intent(context, LoginActivity.class);
  87. intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, accountAuthenticatorResponse);
  88. intent.putExtra(LoginActivity.ARG_ACCOUNT_TYPE, account.type);
  89. intent.putExtra(LoginActivity.ARG_AUTH_TYPE, authTokenType);
  90. intent.putExtra(LoginActivity.ARG_ACCOUNT_NAME, account.name);
  91. final Bundle bundle = new Bundle();
  92. bundle.putParcelable(AccountManager.KEY_INTENT, intent);
  93. return bundle;
  94. }
  95.  
  96. @Override
  97. public String getAuthTokenLabel(String authTokenType) {
  98. if (AccountGeneral.AUTHTOKEN_TYPE_FULL_ACCESS.equals(authTokenType)) {
  99. return AccountGeneral.AUTHTOKEN_TYPE_FULL_ACCESS_LABEL;
  100. } else if (AccountGeneral.AUTHTOKEN_TYPE_READ_ONLY.equals(authTokenType)) {
  101. return AccountGeneral.AUTHTOKEN_TYPE_READ_ONLY_LABEL;
  102. } else {
  103. return authTokenType + " (Label)";
  104. }
  105. }
  106.  
  107. @Override
  108. public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) {
  109. return null;
  110. }
  111.  
  112. @Override
  113. public Bundle confirmCredentials(AccountAuthenticatorResponse response, Account account, Bundle options) throws NetworkErrorException {
  114. return null;
  115. }
  116.  
  117. @Override
  118. public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options) throws NetworkErrorException {
  119. return null;
  120. }
  121.  
  122. @Override
  123. public Bundle hasFeatures(AccountAuthenticatorResponse accountAuthenticatorResponse, Account account, String[] features) throws NetworkErrorException {
  124. final Bundle result = new Bundle();
  125. result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, false);
  126. return result;
  127. }
  128.  
  129. }
  130.  
  131. public class LoginActivity extends AccountAuthenticatorActivity {
  132.  
  133. public final static String ARG_ACCOUNT_TYPE = "ACCOUNT_TYPE";
  134.  
  135. public final static String ARG_AUTH_TYPE = "AUTH_TYPE";
  136.  
  137. public final static String ARG_ACCOUNT_NAME = "ACCOUNT_NAME";
  138.  
  139. public final static String ARG_IS_ADDING_ACCOUNT = "AS_ADDING_ACCOUNT";
  140.  
  141. public final static String KEY_ERROR_MESSAGE = "ERR_MSG";
  142.  
  143. public static final String PARAM_USER_PASS = "USER_PASS";
  144.  
  145. public static final String KEY_REFRESH_TOKEN = "REFRESH_TOKEN";
  146. /**
  147. * Id to identity READ_CONTACTS permission request.
  148. */
  149. private static final int REQUEST_READ_CONTACTS = 0;
  150. /**
  151. * A dummy authentication store containing known user names and passwords.
  152. * TODO: remove after connecting to a real authentication system.
  153. */
  154. private static final String[] DUMMY_CREDENTIALS = new String[]{
  155. "foo@example.com:hello", "bar@example.com:world",
  156. "yakovenko.denis.a@gmail.com:password", "a@:aaaaa"
  157. };
  158.  
  159. private final int REQ_SIGNUP = 1;
  160.  
  161. private final String TAG = this.getClass().getSimpleName();
  162. private AccountManager accountManager;
  163. // 60 seconds (1 minute) * 180 = 3 hours
  164. public static final int SYNC_INTERVAL = 60;
  165. public static final int SYNC_FLEXTIME = SYNC_INTERVAL / 3;
  166.  
  167. private String authTokenType;
  168. private EditText edtUserName,edtPassword;
  169. View mProgressView;
  170.  
  171. @Override
  172. protected void onCreate(Bundle savedInstanceState) {
  173. super.onCreate(savedInstanceState);
  174. setContentView(R.layout.activity_login);
  175. System.out.println("Login Activity starts....");
  176.  
  177. accountManager = AccountManager.get(getBaseContext());
  178.  
  179. String accountName = getIntent().getStringExtra(ARG_ACCOUNT_NAME);
  180. authTokenType = getIntent().getStringExtra(ARG_AUTH_TYPE);
  181.  
  182. edtUserName = (EditText)findViewById(R.id.edtUserName);
  183. edtPassword = (EditText)findViewById(R.id.edtPassword);
  184.  
  185. if (authTokenType != null) {
  186. authTokenType = AccountGeneral.AUTHTOKEN_TYPE_FULL_ACCESS;
  187. }
  188.  
  189. if (accountName != null) {
  190. edtUserName.setText(accountName);
  191. }
  192.  
  193. findViewById(R.id.submit).setOnClickListener(new View.OnClickListener() {
  194. @Override
  195. public void onClick(View v) {
  196. submit();
  197. }
  198. });
  199. findViewById(R.id.signUp).setOnClickListener(new View.OnClickListener() {
  200. @Override
  201. public void onClick(View v) {
  202. // Since there can only be one AuthenticatorActivity, we call the sign up activity, get his results,
  203. // and return them in setAccountAuthenticatorResult(). See finishLogin().
  204. Intent signup = new Intent(getBaseContext(), SignUpActivity.class);
  205. signup.putExtras(getIntent().getExtras());
  206. startActivityForResult(signup, REQ_SIGNUP);
  207. }
  208. });
  209. }
  210.  
  211. public void submit() {
  212. final String userName = edtUserName.getText().toString();
  213. final String password = edtPassword.getText().toString();
  214.  
  215. final String accountType = getIntent().getStringExtra(ARG_ACCOUNT_TYPE);
  216.  
  217. new AsyncTask<String, Void, Intent>() {
  218. @Override
  219. protected void onPreExecute() {
  220. super.onPreExecute();
  221. // showProgress(true);
  222. }
  223.  
  224. @Override
  225. protected Intent doInBackground(String... params) {
  226.  
  227. Log.d("Discounty", TAG + " > Started authenticating"); // 1
  228. String authtoken, refreshtoken;
  229. Bundle data = new Bundle();
  230.  
  231. try {
  232. // if (NetworkHelper.isInternetAvailable(getBaseContext())) {
  233. AccessToken accessToken = discountyService.getAccessToken(DiscountyService.ACCESS_GRANT_TYPE,
  234. username, password).toBlocking().first();
  235. authtoken = accessToken.getValue();
  236. RefreshToken tokenRef = accessToken.getRefreshToken();
  237. refreshtoken = tokenRef.getValue();
  238. System.out.println("refreshtoken to store is "+refreshtoken);
  239. data.putString(AccountManager.KEY_ACCOUNT_NAME, userName);
  240. data.putString(AccountManager.KEY_ACCOUNT_TYPE, accountType);
  241. data.putString(AccountManager.KEY_AUTHTOKEN, authtoken);
  242. data.putString(PARAM_USER_PASS, "password");//password
  243. data.putString(KEY_REFRESH_TOKEN, refreshtoken);
  244. // }
  245. } catch (Exception e) {
  246. data.putString(KEY_ERROR_MESSAGE, e.getMessage());
  247. }
  248.  
  249. final Intent result = new Intent();
  250. result.putExtras(data);
  251. return result;
  252. }
  253.  
  254. @Override
  255. protected void onPostExecute(Intent intent) {
  256. // showProgress(false);
  257. if (intent.hasExtra(KEY_ERROR_MESSAGE)) {
  258. Toast.makeText(getBaseContext(), intent.getStringExtra(KEY_ERROR_MESSAGE),
  259. Toast.LENGTH_LONG).show();
  260. } else {
  261. System.out.println("Now finish login"); // 3
  262. finishLogin(intent);
  263. }
  264. }
  265. }.execute();
  266. }
  267.  
  268. private void finishLogin(Intent intent) {
  269. String accountName = intent.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
  270. String accountPassword = intent.getStringExtra(PARAM_USER_PASS);
  271.  
  272. final Account account = new Account(accountName, intent.getStringExtra(AccountManager.KEY_ACCOUNT_TYPE));
  273.  
  274. if (getIntent().getBooleanExtra(ARG_IS_ADDING_ACCOUNT, false)) {
  275. String authtoken = intent.getStringExtra(AccountManager.KEY_AUTHTOKEN);
  276. String authtokenType = authTokenType;
  277. String refreshToken = intent.getStringExtra(KEY_REFRESH_TOKEN);
  278. Bundle userData = new Bundle();
  279. userData.putString(KEY_REFRESH_TOKEN, refreshToken);
  280. accountManager.addAccountExplicitly(account, accountPassword, userData);
  281. accountManager.setAuthToken(account, authtokenType, authtoken);
  282. accountManager.setUserData(account,KEY_REFRESH_TOKEN,refreshToken);
  283.  
  284. try {
  285.  
  286. } catch (Exception e) {
  287. e.printStackTrace();
  288. }
  289.  
  290.  
  291.  
  292. } else {
  293. System.out.println("condition else getIntent().getBooleanExtra(ARG_IS_ADDING_ACCOUNT, false)");
  294. accountManager.setPassword(account, accountPassword);
  295. }
  296. setAccountAuthenticatorResult(intent.getExtras());
  297. setResult(RESULT_OK, intent);
  298. finish();
  299. }
  300.  
  301. }
  302.  
  303. public class MainActivity extends Activity {
  304.  
  305. private static final String STATE_DIALOG = "state_dialog";
  306.  
  307. private static final String STATE_INVALIDATE = "state_invalidate";
  308.  
  309. private String TAG = this.getClass().getSimpleName();
  310.  
  311. private AccountManager accountManager;
  312.  
  313. private AlertDialog alertDialog;
  314.  
  315. private boolean invalidate;
  316.  
  317. Account mAccount;
  318.  
  319.  
  320.  
  321. @Override
  322. protected void onCreate(Bundle savedInstanceState) {
  323. super.onCreate(savedInstanceState);
  324.  
  325. accountManager = AccountManager.get(this);
  326.  
  327. if (accountManager.getAccountsByType(AccountGeneral.ACCOUNT_TYPE).length == 0) {
  328. addNewAccount(accountManager);
  329. } else {
  330. Account[] accountList = accountManager.getAccountsByType(AccountGeneral.ACCOUNT_TYPE);
  331. mAccount = accountList[0];
  332. System.out.println("There is an account...."+mAccount);
  333. setContentView(R.layout.activity_main);
  334. }
  335. }
  336.  
  337. @Override
  338. protected void onResume() {
  339. super.onResume();
  340.  
  341. }
  342.  
  343.  
  344. private void addNewAccount(AccountManager manager) {
  345.  
  346. final AccountManagerFuture<Bundle> accountManagerFuture = manager.addAccount(AccountGeneral.ACCOUNT_TYPE, AccountGeneral.AUTHTOKEN_TYPE_FULL_ACCESS, null, null, this,
  347. new AccountManagerCallback<Bundle>() {
  348. @Override
  349. public void run(AccountManagerFuture<Bundle> accountManagerFuture) {
  350. System.out.println("AccountManagerFuture starts running...."); // 6
  351. try {
  352. Bundle bnd = accountManagerFuture.getResult();
  353. } catch (Exception e) {
  354. e.printStackTrace();
  355. MainActivity.this.finish();
  356. }
  357. }
  358. }, null);
  359. }
  360.  
  361. private void performLogout() {
  362. try {
  363. Account[] accounts = accountManager.getAccountsByType(AccountGeneral.ACCOUNT_TYPE);
  364. if (accounts.length != 0) {
  365. ContentResolver.cancelSync(accounts[0],"com.fortune.saveitandroidoauth");
  366. final AccountManagerFuture<Bundle> future = accountManager.getAuthToken(accounts[0], AccountGeneral.AUTHTOKEN_TYPE_FULL_ACCESS, null, this, null,null);
  367.  
  368. new Thread(new Runnable() {
  369. @Override
  370. public void run() {
  371. try {
  372. Bundle bnd = future.getResult();
  373.  
  374. final String authtoken = bnd.getString(AccountManager.KEY_AUTHTOKEN);
  375. System.out.println("User is going to logout "+authtoken);
  376. serverAuthenticateService.logOut(authtoken);
  377. } catch (Exception e) {
  378. e.printStackTrace();
  379. }
  380. }
  381. }).start();
  382.  
  383. Log.d("ACCOUNT", accounts[0].toString());
  384. Log.d("ACCOUNT TOKEN TYPE", accounts[0].type);
  385. Log.d("ACCOUNT TOKEN NAME", accounts[0].name);//accountManagerFuture
  386.  
  387. accountManager.clearPassword(accounts[0]);
  388. // accountManager.setUserData(accounts[0],LoginActivity.KEY_REFRESH_TOKEN, null);
  389. String accessToken = accountManager.getAuthToken(accounts[0], AccountGeneral.AUTHTOKEN_TYPE_FULL_ACCESS, null, true,
  390. new AccountManagerCallback<Bundle>() {
  391. @Override
  392. public void run(AccountManagerFuture<Bundle> accountManagerFuture) {
  393. System.out.println("invalidate thread running....");
  394.  
  395. try {
  396. System.out.println("invalidateAuthToken...."+accountManagerFuture.getResult().toString());
  397. Log.d("invalidateAuthToken", accountManagerFuture.getResult().toString());
  398. } catch (android.accounts.OperationCanceledException | AuthenticatorException | IOException e) {
  399. e.printStackTrace();
  400. }
  401. }
  402. }, null).toString();
  403.  
  404. accountManager.invalidateAuthToken(AccountGeneral.ACCOUNT_TYPE,accessToken);
  405.  
  406. if (Build.VERSION.SDK_INT < 22) { // use deprecated method
  407. System.out.println("removeAccount .... SDK_INT < 22 ");
  408. accountManager.removeAccount(accounts[0], null, null);
  409. } else {
  410. System.out.println("removeAccountExplicitly .... SDK_INT >= 22 ");
  411. accountManager.removeAccountExplicitly(accounts[0]);
  412. }
  413. addNewAccount(accountManager);
  414. }
  415. } catch (Exception e) {
  416. e.printStackTrace();
  417. }
  418. }
  419.  
  420.  
  421. @Override
  422. public boolean onCreateOptionsMenu(Menu menu) {
  423. // Inflate the menu; this adds items to the action bar if it is present.
  424. getMenuInflater().inflate(R.menu.menu_main, menu);
  425. return true;
  426. }
  427.  
  428. @Override
  429. public boolean onOptionsItemSelected(MenuItem item) {
  430. // Handle action bar item clicks here. The action bar will
  431. // automatically handle clicks on the Home/Up button, so long
  432. // as you specify a parent activity in AndroidManifest.xml.
  433. int id = item.getItemId();
  434.  
  435. switch (id) {
  436. case android.R.id.home:
  437. return true;
  438. case R.id.action_settings:
  439. return true;
  440. case R.id.action_sync:
  441. return true;
  442. case R.id.action_logout:
  443. performLogout();
  444. return true;
  445. }
  446.  
  447. return super.onOptionsItemSelected(item);
  448. }
  449.  
  450. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement