diff --git a/src/com/owncloud/android/lib/common/OwnCloudAccount.java b/src/com/owncloud/android/lib/common/OwnCloudAccount.java index aa34f2e3..60fb2e7f 100644 --- a/src/com/owncloud/android/lib/common/OwnCloudAccount.java +++ b/src/com/owncloud/android/lib/common/OwnCloudAccount.java @@ -31,6 +31,7 @@ import com.owncloud.android.lib.common.accounts.AccountUtils; import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException; import android.accounts.Account; +import android.accounts.AccountManager; import android.accounts.AuthenticatorException; import android.accounts.OperationCanceledException; import android.content.Context; @@ -46,6 +47,8 @@ public class OwnCloudAccount { private Uri mBaseUri; private OwnCloudCredentials mCredentials; + + private String mDisplayName; private String mSavedAccountName; @@ -68,10 +71,40 @@ public class OwnCloudAccount { mSavedAccount = savedAccount; mSavedAccountName = savedAccount.name; + mCredentials = null; // load of credentials is delayed + + AccountManager ama = AccountManager.get(context.getApplicationContext()); + String baseUrl = ama.getUserData(mSavedAccount, AccountUtils.Constants.KEY_OC_BASE_URL); + if (baseUrl == null ) { + throw new AccountNotFoundException(mSavedAccount, "Account not found", null); + } mBaseUri = Uri.parse(AccountUtils.getBaseUrlForAccount(context, mSavedAccount)); - mCredentials = null; + mDisplayName = ama.getUserData(mSavedAccount, AccountUtils.Constants.KEY_DISPLAY_NAME); } + + /** + * Constructor for non yet saved OC accounts. + * + * @param baseUri URI to the OC server to get access to. + * @param credentials Credentials to authenticate in the server. NULL is valid for anonymous credentials. + */ + public OwnCloudAccount(Uri baseUri, OwnCloudCredentials credentials) { + if (baseUri == null) { + throw new IllegalArgumentException("Parameter 'baseUri' cannot be null"); + } + mSavedAccount = null; + mSavedAccountName = null; + mBaseUri = baseUri; + mCredentials = credentials != null ? + credentials : OwnCloudCredentialsFactory.getAnonymousCredentials(); + String username = mCredentials.getUsername(); + if (username != null) { + mSavedAccountName = AccountUtils.buildAccountName(mBaseUri, username); + } + } + + /** * Method for deferred load of account attributes from AccountManager * @@ -94,53 +127,6 @@ public class OwnCloudAccount { } } - /* - public OwnCloudAccount(Account savedAccount, Context context) - throws AccountNotFoundException, AuthenticatorException, - IOException, OperationCanceledException { - - if (savedAccount == null) { - throw new IllegalArgumentException("Parameter 'savedAccount' cannot be null"); - } - if (context == null) { - throw new IllegalArgumentException("Parameter 'context' cannot be null"); - } - - mSavedAccountName = savedAccount.name; - mBaseUri = Uri.parse(AccountUtils.getBaseUrlForAccount(context, savedAccount)); - mCredentials = AccountUtils.getCredentialsForAccount(context, savedAccount); - if (mCredentials == null) { - mCredentials = OwnCloudCredentialsFactory.getAnonymousCredentials(); - } - } - */ - - /** - * Constructor for non yet saved OC accounts. - * - * @param baseUri URI to the OC server to get access to. - * @param credentials Credentials to authenticate in the server. NULL is valid for anonymous credentials. - */ - public OwnCloudAccount(Uri baseUri, OwnCloudCredentials credentials) { - if (baseUri == null) { - throw new IllegalArgumentException("Parameter 'baseUri' cannot be null"); - } - mSavedAccount = null; - mSavedAccountName = null; - mBaseUri = baseUri; - mCredentials = credentials != null ? - credentials : OwnCloudCredentialsFactory.getAnonymousCredentials(); - String username = mCredentials.getUsername(); - if (username != null) { - mSavedAccountName = AccountUtils.buildAccountName(mBaseUri, username); - } - } - - - public boolean isAnonymous() { - return (mCredentials == null); - } // TODO no more - public Uri getBaseUri() { return mBaseUri; } @@ -153,5 +139,16 @@ public class OwnCloudAccount { return mSavedAccountName; } - + public String getDisplayName() { + if (mDisplayName != null && mDisplayName.length() > 0) { + return mDisplayName; + } else if (mCredentials != null) { + return mCredentials.getUsername(); + } else if (mSavedAccount != null) { + return AccountUtils.getUsernameForAccount(mSavedAccount); + } else { + return null; + } + } + } \ No newline at end of file diff --git a/src/com/owncloud/android/lib/common/accounts/AccountUtils.java b/src/com/owncloud/android/lib/common/accounts/AccountUtils.java index a13225ce..8b020ab9 100644 --- a/src/com/owncloud/android/lib/common/accounts/AccountUtils.java +++ b/src/com/owncloud/android/lib/common/accounts/AccountUtils.java @@ -379,6 +379,12 @@ public class AccountUtils { * OC account version */ public static final String KEY_OC_ACCOUNT_VERSION = "oc_account_version"; + + /** + * User's display name + */ + public static final String KEY_DISPLAY_NAME = "oc_display_name"; + } } diff --git a/src/com/owncloud/android/lib/resources/users/GetRemoteUserInfoOperation.java b/src/com/owncloud/android/lib/resources/users/GetRemoteUserInfoOperation.java new file mode 100644 index 00000000..c726a6ce --- /dev/null +++ b/src/com/owncloud/android/lib/resources/users/GetRemoteUserInfoOperation.java @@ -0,0 +1,129 @@ +/* ownCloud Android Library is available under MIT license + * Copyright (C) 2015 ownCloud Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ + +package com.owncloud.android.lib.resources.users; + +import java.util.ArrayList; + +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.json.JSONObject; + +import com.owncloud.android.lib.common.OwnCloudClient; +import com.owncloud.android.lib.common.operations.RemoteOperation; +import com.owncloud.android.lib.common.operations.RemoteOperationResult; +import com.owncloud.android.lib.common.utils.Log_OC; + + +/** + * Gets information (id, display name, and e-mail address) about the user logged in. + * + * @author masensio + * @author David A. Velasco + */ + +public class GetRemoteUserInfoOperation extends RemoteOperation { + + private static final String TAG = GetRemoteUserInfoOperation.class.getSimpleName(); + + // OCS Route + private static final String OCS_ROUTE = "/index.php/ocs/cloud/user?format=json"; + + // JSON Node names + private static final String NODE_OCS = "ocs"; + private static final String NODE_DATA = "data"; + private static final String NODE_ID = "id"; + private static final String NODE_DISPLAY_NAME = "display-name"; + private static final String NODE_EMAIL = "email"; + + public GetRemoteUserInfoOperation() { + } + + @Override + protected RemoteOperationResult run(OwnCloudClient client) { + RemoteOperationResult result = null; + int status = -1; + GetMethod get = null; + + //Get the user + try { + get = new GetMethod(client.getBaseUri() + OCS_ROUTE); + get.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE); + status = client.executeMethod(get); + if (isSuccess(status)) { + String response = get.getResponseBodyAsString(); + Log_OC.d(TAG, "Successful response: " + response); + + // Parse the response + JSONObject respJSON = new JSONObject(response); + JSONObject respOCS = respJSON.getJSONObject(NODE_OCS); + JSONObject respData = respOCS.getJSONObject(NODE_DATA); + + UserInfo userInfo = new UserInfo(); + userInfo.mId = respData.getString(NODE_ID); + userInfo.mDisplayName = respData.getString(NODE_DISPLAY_NAME); + userInfo.mEmail = respData.getString(NODE_EMAIL); + + // Result + result = new RemoteOperationResult(true, status, get.getResponseHeaders()); + // Username in result.data + ArrayList data = new ArrayList(); + data.add(userInfo); + result.setData(data); + + } else { + result = new RemoteOperationResult(false, status, get.getResponseHeaders()); + String response = get.getResponseBodyAsString(); + Log_OC.e(TAG, "Failed response while getting user information "); + if (response != null) { + Log_OC.e(TAG, "*** status code: " + status + " ; response message: " + response); + } else { + Log_OC.e(TAG, "*** status code: " + status); + } + } + } catch (Exception e) { + result = new RemoteOperationResult(e); + Log_OC.e(TAG, "Exception while getting OC user information", e); + + } finally { + if (get != null) { + get.releaseConnection(); + } + } + + return result; + } + + private boolean isSuccess(int status) { + return (status == HttpStatus.SC_OK); + } + + + public static class UserInfo { + public String mId = ""; + public String mDisplayName = ""; + public String mEmail = ""; + } + +} diff --git a/src/com/owncloud/android/lib/resources/users/GetRemoteUserNameOperation.java b/src/com/owncloud/android/lib/resources/users/GetRemoteUserNameOperation.java deleted file mode 100644 index e9676e70..00000000 --- a/src/com/owncloud/android/lib/resources/users/GetRemoteUserNameOperation.java +++ /dev/null @@ -1,130 +0,0 @@ -/* ownCloud Android Library is available under MIT license - * Copyright (C) 2015 ownCloud Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - */ - -package com.owncloud.android.lib.resources.users; - -import java.util.ArrayList; - -import org.apache.commons.httpclient.HttpStatus; -import org.apache.commons.httpclient.methods.GetMethod; -import org.json.JSONObject; - -import com.owncloud.android.lib.common.OwnCloudClient; -import com.owncloud.android.lib.common.operations.RemoteOperation; -import com.owncloud.android.lib.common.operations.RemoteOperationResult; -import com.owncloud.android.lib.common.utils.Log_OC; - - -/** - * @author masensio - * - * Get the UserName for a SAML connection, from a JSON with the format: - * id - * display-name - * email - */ - -public class GetRemoteUserNameOperation extends RemoteOperation { - - private static final String TAG = GetRemoteUserNameOperation.class.getSimpleName(); - - // OCS Route - private static final String OCS_ROUTE ="/index.php/ocs/cloud/user?format=json"; - - // JSON Node names - private static final String NODE_OCS = "ocs"; - private static final String NODE_DATA = "data"; - private static final String NODE_ID = "id"; - private static final String NODE_DISPLAY_NAME= "display-name"; - private static final String NODE_EMAIL= "email"; - - private String mUserName; - - public String getUserName() { - return mUserName; - } - - - public GetRemoteUserNameOperation() { - } - - @Override - protected RemoteOperationResult run(OwnCloudClient client) { - RemoteOperationResult result = null; - int status = -1; - GetMethod get = null; - - //Get the user - try { - get = new GetMethod(client.getBaseUri() + OCS_ROUTE); - get.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE); - status = client.executeMethod(get); - if(isSuccess(status)) { - String response = get.getResponseBodyAsString(); - Log_OC.d(TAG, "Successful response: " + response); - - // Parse the response - JSONObject respJSON = new JSONObject(response); - JSONObject respOCS = respJSON.getJSONObject(NODE_OCS); - JSONObject respData = respOCS.getJSONObject(NODE_DATA); - String id = respData.getString(NODE_ID); - String displayName = respData.getString(NODE_DISPLAY_NAME); - String email = respData.getString(NODE_EMAIL); - - // Result - result = new RemoteOperationResult(true, status, get.getResponseHeaders()); - // Username in result.data - ArrayList data = new ArrayList(); - data.add(displayName); - result.setData(data); - mUserName = displayName; - - Log_OC.d(TAG, "*** Parsed user information: " + id + " - " + displayName + " - " + email); - - } else { - result = new RemoteOperationResult(false, status, get.getResponseHeaders()); - String response = get.getResponseBodyAsString(); - Log_OC.e(TAG, "Failed response while getting user information "); - if (response != null) { - Log_OC.e(TAG, "*** status code: " + status + " ; response message: " + response); - } else { - Log_OC.e(TAG, "*** status code: " + status); - } - } - } catch (Exception e) { - result = new RemoteOperationResult(e); - Log_OC.e(TAG, "Exception while getting OC user information", e); - - } finally { - get.releaseConnection(); - } - - return result; - } - - private boolean isSuccess(int status) { - return (status == HttpStatus.SC_OK); - } - -}