Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(131)

Unified Diff: tools/android/kerberos/SpnegoAuthenticator/src/org/chromium/tools/spnegoauthenticator/AccountData.java

Issue 1416443003: [tool] SpnegoAuth: add multi account, credential confirmation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments: Refactor AccountData, get rid of statics Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698