diff --git a/src/main/java/com/owncloud/android/ui/dialog/SetupEncryptionDialogFragment.java b/src/main/java/com/owncloud/android/ui/dialog/SetupEncryptionDialogFragment.java index 779d741391..81a0ea8350 100644 --- a/src/main/java/com/owncloud/android/ui/dialog/SetupEncryptionDialogFragment.java +++ b/src/main/java/com/owncloud/android/ui/dialog/SetupEncryptionDialogFragment.java @@ -34,6 +34,7 @@ import android.view.View; import android.widget.Button; import android.widget.TextView; +import com.nextcloud.client.account.User; import com.owncloud.android.R; import com.owncloud.android.datamodel.ArbitraryDataProvider; import com.owncloud.android.lib.common.accounts.AccountUtils; @@ -70,15 +71,15 @@ public class SetupEncryptionDialogFragment extends DialogFragment { public static final String SETUP_ENCRYPTION_DIALOG_TAG = "SETUP_ENCRYPTION_DIALOG_TAG"; public static final String ARG_POSITION = "ARG_POSITION"; - private static String ARG_ACCOUNT = "ARG_ACCOUNT"; - private static String TAG = SetupEncryptionDialogFragment.class.getSimpleName(); + private static final String ARG_USER = "ARG_USER"; + private static final String TAG = SetupEncryptionDialogFragment.class.getSimpleName(); private static final String KEY_CREATED = "KEY_CREATED"; private static final String KEY_EXISTING_USED = "KEY_EXISTING_USED"; private static final String KEY_FAILED = "KEY_FAILED"; private static final String KEY_GENERATE = "KEY_GENERATE"; - private Account account; + private User user; private TextView textView; private TextView passphraseTextView; private ArbitraryDataProvider arbitraryDataProvider; @@ -94,10 +95,10 @@ public class SetupEncryptionDialogFragment extends DialogFragment { * * @return Dialog ready to show. */ - public static SetupEncryptionDialogFragment newInstance(Account account, int position) { + public static SetupEncryptionDialogFragment newInstance(User user, int position) { SetupEncryptionDialogFragment fragment = new SetupEncryptionDialogFragment(); Bundle args = new Bundle(); - args.putParcelable(ARG_ACCOUNT, account); + args.putParcelable(ARG_USER, user); args.putInt(ARG_POSITION, position); fragment.setArguments(args); return fragment; @@ -125,7 +126,7 @@ public class SetupEncryptionDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { int primaryColor = ThemeUtils.primaryColor(getContext()); - account = getArguments().getParcelable(ARG_ACCOUNT); + user = getArguments().getParcelable(ARG_USER); arbitraryDataProvider = new ArbitraryDataProvider(getContext().getContentResolver()); @@ -192,13 +193,13 @@ public class SetupEncryptionDialogFragment extends DialogFragment { String decryptedPrivateKey = EncryptionUtils.decryptPrivateKey(privateKey, mnemonic); - arbitraryDataProvider.storeOrUpdateKeyValue(account.name, + arbitraryDataProvider.storeOrUpdateKeyValue(user.getAccountName(), EncryptionUtils.PRIVATE_KEY, decryptedPrivateKey); dialog.dismiss(); Log_OC.d(TAG, "Private key successfully decrypted and stored"); - arbitraryDataProvider.storeOrUpdateKeyValue(account.name, EncryptionUtils.MNEMONIC, + arbitraryDataProvider.storeOrUpdateKeyValue(user.getAccountName(), EncryptionUtils.MNEMONIC, mnemonicUnchanged); Intent intentExisting = new Intent(); @@ -254,23 +255,23 @@ public class SetupEncryptionDialogFragment extends DialogFragment { // - decrypt private key, store unencrypted private key in database GetPublicKeyOperation publicKeyOperation = new GetPublicKeyOperation(); - RemoteOperationResult publicKeyResult = publicKeyOperation.execute(account, getContext()); + RemoteOperationResult publicKeyResult = publicKeyOperation.execute(user.toPlatformAccount(), getContext()); if (publicKeyResult.isSuccess()) { - Log_OC.d(TAG, "public key successful downloaded for " + account.name); + Log_OC.d(TAG, "public key successful downloaded for " + user.getAccountName()); String publicKeyFromServer = (String) publicKeyResult.getData().get(0); - arbitraryDataProvider.storeOrUpdateKeyValue(account.name, EncryptionUtils.PUBLIC_KEY, + arbitraryDataProvider.storeOrUpdateKeyValue(user.getAccountName(), EncryptionUtils.PUBLIC_KEY, publicKeyFromServer); } else { return null; } GetPrivateKeyOperation privateKeyOperation = new GetPrivateKeyOperation(); - RemoteOperationResult privateKeyResult = privateKeyOperation.execute(account, getContext()); + RemoteOperationResult privateKeyResult = privateKeyOperation.execute(user.toPlatformAccount(), getContext()); if (privateKeyResult.isSuccess()) { - Log_OC.d(TAG, "private key successful downloaded for " + account.name); + Log_OC.d(TAG, "private key successful downloaded for " + user.getAccountName()); keyResult = KEY_EXISTING_USED; return (String) privateKeyResult.getData().get(0); @@ -337,11 +338,11 @@ public class SetupEncryptionDialogFragment extends DialogFragment { // create CSR AccountManager accountManager = AccountManager.get(getContext()); - String userId = accountManager.getUserData(account, AccountUtils.Constants.KEY_USER_ID); + String userId = accountManager.getUserData(user.toPlatformAccount(), AccountUtils.Constants.KEY_USER_ID); String urlEncoded = CsrHelper.generateCsrPemEncodedString(keyPair, userId); SendCSROperation operation = new SendCSROperation(urlEncoded); - RemoteOperationResult result = operation.execute(account, getContext()); + RemoteOperationResult result = operation.execute(user.toPlatformAccount(), getContext()); if (result.isSuccess()) { Log_OC.d(TAG, "public key success"); @@ -359,22 +360,23 @@ public class SetupEncryptionDialogFragment extends DialogFragment { // upload encryptedPrivateKey StorePrivateKeyOperation storePrivateKeyOperation = new StorePrivateKeyOperation(encryptedPrivateKey); - RemoteOperationResult storePrivateKeyResult = storePrivateKeyOperation.execute(account, getContext()); + RemoteOperationResult storePrivateKeyResult = storePrivateKeyOperation.execute(user.toPlatformAccount(), + getContext()); if (storePrivateKeyResult.isSuccess()) { Log_OC.d(TAG, "private key success"); - arbitraryDataProvider.storeOrUpdateKeyValue(account.name, EncryptionUtils.PRIVATE_KEY, + arbitraryDataProvider.storeOrUpdateKeyValue(user.getAccountName(), EncryptionUtils.PRIVATE_KEY, privateKeyString); - arbitraryDataProvider.storeOrUpdateKeyValue(account.name, EncryptionUtils.PUBLIC_KEY, publicKey); - arbitraryDataProvider.storeOrUpdateKeyValue(account.name, EncryptionUtils.MNEMONIC, + arbitraryDataProvider.storeOrUpdateKeyValue(user.getAccountName(), EncryptionUtils.PUBLIC_KEY, publicKey); + arbitraryDataProvider.storeOrUpdateKeyValue(user.getAccountName(), EncryptionUtils.MNEMONIC, generateMnemonicString(true)); keyResult = KEY_CREATED; return (String) storePrivateKeyResult.getData().get(0); } else { DeletePublicKeyOperation deletePublicKeyOperation = new DeletePublicKeyOperation(); - deletePublicKeyOperation.execute(account, getContext()); + deletePublicKeyOperation.execute(user.toPlatformAccount(), getContext()); } } catch (Exception e) { Log_OC.e(TAG, e.getMessage()); diff --git a/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java b/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java index a8ed6ff6ea..f0302652cb 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -910,10 +910,11 @@ public class OCFileListFragment extends ExtendedListFragment implements return; } - Account account = ((FileActivity) mContainerActivity).getAccount(); + User user = ((FileActivity) mContainerActivity).getUser().orElseThrow(RuntimeException::new); // check if e2e app is enabled - OCCapability ocCapability = mContainerActivity.getStorageManager().getCapability(account.name); + OCCapability ocCapability = mContainerActivity.getStorageManager() + .getCapability(user.getAccountName()); if (ocCapability.getEndToEndEncryption().isFalse() || ocCapability.getEndToEndEncryption().isUnknown()) { @@ -925,14 +926,16 @@ public class OCFileListFragment extends ExtendedListFragment implements getContext().getContentResolver()); - String publicKey = arbitraryDataProvider.getValue(account, EncryptionUtils.PUBLIC_KEY); - String privateKey = arbitraryDataProvider.getValue(account, EncryptionUtils.PRIVATE_KEY); + String publicKey = arbitraryDataProvider.getValue(user.toPlatformAccount(), + EncryptionUtils.PUBLIC_KEY); + String privateKey = arbitraryDataProvider.getValue(user.toPlatformAccount(), + EncryptionUtils.PRIVATE_KEY); if (publicKey.isEmpty() || privateKey.isEmpty()) { - Log_OC.d(TAG, "no public key for " + account.name); + Log_OC.d(TAG, "no public key for " + user.getAccountName()); - SetupEncryptionDialogFragment dialog = SetupEncryptionDialogFragment.newInstance(account, - position); + SetupEncryptionDialogFragment dialog = SetupEncryptionDialogFragment.newInstance(user, + position); dialog.setTargetFragment(this, SetupEncryptionDialogFragment.SETUP_ENCRYPTION_REQUEST_CODE); dialog.show(getFragmentManager(), SetupEncryptionDialogFragment.SETUP_ENCRYPTION_DIALOG_TAG); } else {