Index: tools/android/kerberos/SpnegoAuthenticator/src/org/chromium/tools/spnegoauthenticator/AccountData.java |
diff --git a/tools/android/kerberos/SpnegoAuthenticator/src/org/chromium/tools/spnegoauthenticator/AccountData.java b/tools/android/kerberos/SpnegoAuthenticator/src/org/chromium/tools/spnegoauthenticator/AccountData.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5c68378e2ac9bb350273f00e166e15e4a465c718 |
--- /dev/null |
+++ b/tools/android/kerberos/SpnegoAuthenticator/src/org/chromium/tools/spnegoauthenticator/AccountData.java |
@@ -0,0 +1,100 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.tools.spnegoauthenticator; |
+ |
+import android.accounts.Account; |
+import android.accounts.AccountManager; |
+import android.content.Context; |
+import android.content.Intent; |
+import android.text.TextUtils; |
+ |
+import org.chromium.base.Log; |
+import org.chromium.net.HttpNegotiateConstants; |
+ |
+/** Utility class to get and set account data. */ |
+class AccountData { |
+ private static final String TAG = Constants.TAG; |
+ private static final String OPT_KEY_AUTH = "isAuthenticated"; |
+ private static final String OPT_VALUE_AUTH = "YES"; |
+ private final Account mAccount; |
+ private final String mPassword; |
+ private boolean mIsAuthenticated; |
+ |
+ private AccountData(Account account, boolean isAuthenticated) { |
+ Log.d(TAG, "AccountData(name=%s, isAuthenticated=%s", account.name, isAuthenticated); |
+ mAccount = account; |
+ mIsAuthenticated = isAuthenticated; |
+ mPassword = "userPass"; |
+ } |
+ |
+ /** Creates some new account data. */ |
+ public static AccountData create(String name, Context context) { |
+ Account account = new Account(name, context.getString(R.string.account_type)); |
+ boolean isAuthenticated = Constants.ACCOUNT_1_NAME.equals(name); |
+ |
+ return new AccountData(account, isAuthenticated); |
+ } |
+ |
+ /** |
+ * Creates a new {@link AccountData} object, looking at previously saved data to |
+ * initialize it. |
+ */ |
+ public static AccountData get(String accountName, Context context) { |
+ Account account = new Account(accountName, context.getString(R.string.account_type)); |
+ |
+ AccountManager am = AccountManager.get(context); |
+ String authValue = am.getUserData(account, OPT_KEY_AUTH); |
+ boolean isAuthenticated = TextUtils.equals(authValue, OPT_VALUE_AUTH); |
+ |
+ return new AccountData(account, isAuthenticated); |
+ } |
+ |
+ /** |
+ * Saves the account data with the AccountManager. If the account did not previously |
+ * exist, it will be created. |
+ */ |
+ public void save(Context context) { |
+ AccountManager am = AccountManager.get(context); |
+ |
+ // Does nothing if the account already exists |
+ am.addAccountExplicitly(mAccount, mPassword, null); |
+ |
+ am.setUserData(mAccount, OPT_KEY_AUTH, mIsAuthenticated ? OPT_VALUE_AUTH : null); |
+ |
+ // Is supposed to be send by AccountsService when accounts are modified, but it looks like |
+ // the authenticator has to do it itself. |
+ context.sendBroadcast(new Intent(AccountManager.LOGIN_ACCOUNTS_CHANGED_ACTION)); |
+ } |
+ |
+ /** Returns an intent as expected for answers to {@link SpnegoAuthenticator#addAccount}. */ |
+ public Intent getAccountAddedIntent() { |
+ Intent intent = new Intent(); |
+ intent.putExtra(AccountManager.KEY_ACCOUNT_NAME, mAccount.name); |
+ intent.putExtra(AccountManager.KEY_ACCOUNT_TYPE, mAccount.type); |
+ return intent; |
+ } |
+ |
+ /** Returns an intent as expected for answers to {@link SpnegoAuthenticator#getAuthToken}. */ |
+ public Intent getCredentialsConfirmedIntent() { |
+ Intent intent = new Intent(); |
+ intent.putExtra(AccountManager.KEY_ACCOUNT_NAME, mAccount.name); |
+ intent.putExtra(AccountManager.KEY_ACCOUNT_TYPE, mAccount.type); |
+ intent.putExtra(AccountManager.KEY_AUTHTOKEN, Constants.AUTH_TOKEN); |
+ intent.putExtra(HttpNegotiateConstants.KEY_SPNEGO_RESULT, 0); |
+ return intent; |
+ } |
+ |
+ public boolean isAuthenticated() { |
+ return mIsAuthenticated; |
+ } |
+ |
+ public void setIsAuthenticated(boolean value) { |
+ mIsAuthenticated = value; |
+ } |
+ |
+ public Account getAccount() { |
+ return mAccount; |
+ } |
+} |