mirror of
https://github.com/nextcloud/android.git
synced 2024-11-29 02:38:58 +03:00
Merge pull request #6421 from nextcloud/ezaquarii/migrate-setup-encryption-dialog-fragment-to-user-model
Migrate SetupEncryptionDialogFragment to User model
This commit is contained in:
commit
fd1d391d2b
2 changed files with 32 additions and 27 deletions
|
@ -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());
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in a new issue