migrate key manager from requery to room

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
Andy Scherzinger 2022-07-23 14:09:08 +02:00
parent 70ae6eb27d
commit 4513866c1d
No known key found for this signature in database
GPG Key ID: 6CADC7E3523C308B
2 changed files with 23 additions and 15 deletions

View File

@ -28,9 +28,9 @@ import com.nextcloud.talk.BuildConfig;
import com.nextcloud.talk.R; import com.nextcloud.talk.R;
import com.nextcloud.talk.api.NcApi; import com.nextcloud.talk.api.NcApi;
import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.application.NextcloudTalkApplication;
import com.nextcloud.talk.users.UserManager;
import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.ApiUtils;
import com.nextcloud.talk.utils.LoggingUtils; import com.nextcloud.talk.utils.LoggingUtils;
import com.nextcloud.talk.utils.database.user.UserUtils;
import com.nextcloud.talk.utils.preferences.AppPreferences; import com.nextcloud.talk.utils.preferences.AppPreferences;
import com.nextcloud.talk.utils.ssl.MagicKeyManager; import com.nextcloud.talk.utils.ssl.MagicKeyManager;
import com.nextcloud.talk.utils.ssl.MagicTrustManager; import com.nextcloud.talk.utils.ssl.MagicTrustManager;
@ -127,7 +127,7 @@ public class RestModule {
@Singleton @Singleton
@Provides @Provides
MagicKeyManager provideKeyManager(AppPreferences appPreferences, UserUtils userUtils) { MagicKeyManager provideKeyManager(AppPreferences appPreferences, UserManager userManager) {
KeyStore keyStore = null; KeyStore keyStore = null;
try { try {
keyStore = KeyStore.getInstance("AndroidKeyStore"); keyStore = KeyStore.getInstance("AndroidKeyStore");
@ -135,7 +135,7 @@ public class RestModule {
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(keyStore, null); kmf.init(keyStore, null);
X509KeyManager origKm = (X509KeyManager) kmf.getKeyManagers()[0]; X509KeyManager origKm = (X509KeyManager) kmf.getKeyManagers()[0];
return new MagicKeyManager(origKm, userUtils, appPreferences); return new MagicKeyManager(origKm, userManager, appPreferences);
} catch (KeyStoreException e) { } catch (KeyStoreException e) {
Log.e(TAG, "KeyStoreException " + e.getLocalizedMessage()); Log.e(TAG, "KeyStoreException " + e.getLocalizedMessage());
} catch (CertificateException e) { } catch (CertificateException e) {

View File

@ -25,30 +25,37 @@ import android.security.KeyChain;
import android.security.KeyChainException; import android.security.KeyChainException;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import androidx.annotation.Nullable;
import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.application.NextcloudTalkApplication;
import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.data.user.model.User;
import com.nextcloud.talk.utils.database.user.UserUtils; import com.nextcloud.talk.users.UserManager;
import com.nextcloud.talk.utils.preferences.AppPreferences; import com.nextcloud.talk.utils.preferences.AppPreferences;
import javax.net.ssl.X509KeyManager;
import java.net.Socket; import java.net.Socket;
import java.security.Principal; import java.security.Principal;
import java.security.PrivateKey; import java.security.PrivateKey;
import java.security.cert.X509Certificate; import java.security.cert.X509Certificate;
import java.util.*; import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.net.ssl.X509KeyManager;
import androidx.annotation.Nullable;
public class MagicKeyManager implements X509KeyManager { public class MagicKeyManager implements X509KeyManager {
private static final String TAG = "MagicKeyManager"; private static final String TAG = "MagicKeyManager";
private final X509KeyManager keyManager; private final X509KeyManager keyManager;
private UserUtils userUtils; private UserManager userManager;
private AppPreferences appPreferences; private AppPreferences appPreferences;
private Context context; private Context context;
public MagicKeyManager(X509KeyManager keyManager, UserUtils userUtils, AppPreferences appPreferences) { public MagicKeyManager(X509KeyManager keyManager, UserManager userManager, AppPreferences appPreferences) {
this.keyManager = keyManager; this.keyManager = keyManager;
this.userUtils = userUtils; this.userManager = userManager;
this.appPreferences = appPreferences; this.appPreferences = appPreferences;
context = NextcloudTalkApplication.Companion.getSharedApplication().getApplicationContext(); context = NextcloudTalkApplication.Companion.getSharedApplication().getApplicationContext();
@ -57,9 +64,10 @@ public class MagicKeyManager implements X509KeyManager {
@Override @Override
public String chooseClientAlias(String[] strings, Principal[] principals, Socket socket) { public String chooseClientAlias(String[] strings, Principal[] principals, Socket socket) {
String alias; String alias;
if ((userUtils.getCurrentUser() != null && !TextUtils.isEmpty(alias = userUtils.getCurrentUser().getClientCertificate())) || if ((userManager.getCurrentUser().blockingGet() != null &&
!TextUtils.isEmpty(alias = appPreferences.getTemporaryClientCertAlias()) !TextUtils.isEmpty(alias = userManager.getCurrentUser().blockingGet().getClientCertificate())) ||
&& new ArrayList<>(Arrays.asList(getClientAliases())).contains(alias)) { !TextUtils.isEmpty(alias = appPreferences.getTemporaryClientCertAlias())
&& new ArrayList<>(Arrays.asList(getClientAliases())).contains(alias)) {
return alias; return alias;
} }
@ -120,7 +128,7 @@ public class MagicKeyManager implements X509KeyManager {
aliases.add(alias); aliases.add(alias);
} }
List<UserEntity> userEntities = userUtils.getUsers(); List<User> userEntities = userManager.getUsers().blockingGet();
for (int i = 0; i < userEntities.size(); i++) { for (int i = 0; i < userEntities.size(); i++) {
if (!TextUtils.isEmpty(alias = userEntities.get(i).getClientCertificate())) { if (!TextUtils.isEmpty(alias = userEntities.get(i).getClientCertificate())) {
aliases.add(alias); aliases.add(alias);