Migrate web view login from requery to room

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
Andy Scherzinger 2022-07-17 18:11:23 +02:00
parent fe8c7d468a
commit 036e67027c
No known key found for this signature in database
GPG Key ID: 6CADC7E3523C308B

View File

@ -57,18 +57,16 @@ import com.nextcloud.talk.databinding.ControllerWebViewLoginBinding
import com.nextcloud.talk.events.CertificateEvent import com.nextcloud.talk.events.CertificateEvent
import com.nextcloud.talk.jobs.PushRegistrationWorker import com.nextcloud.talk.jobs.PushRegistrationWorker
import com.nextcloud.talk.models.LoginData import com.nextcloud.talk.models.LoginData
import com.nextcloud.talk.users.UserManager
import com.nextcloud.talk.utils.DisplayUtils import com.nextcloud.talk.utils.DisplayUtils
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_BASE_URL import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_BASE_URL
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ORIGINAL_PROTOCOL import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ORIGINAL_PROTOCOL
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_TOKEN import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_TOKEN
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_USERNAME import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_USERNAME
import com.nextcloud.talk.utils.database.user.UserUtils
import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder
import com.nextcloud.talk.utils.ssl.MagicTrustManager import com.nextcloud.talk.utils.ssl.MagicTrustManager
import de.cotech.hw.fido.WebViewFidoBridge import de.cotech.hw.fido.WebViewFidoBridge
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
import io.requery.Persistable import io.requery.Persistable
import io.requery.reactivex.ReactiveEntityStore import io.requery.reactivex.ReactiveEntityStore
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
@ -89,7 +87,7 @@ class WebViewLoginController(args: Bundle? = null) : NewBaseController(
private val binding: ControllerWebViewLoginBinding by viewBinding(ControllerWebViewLoginBinding::bind) private val binding: ControllerWebViewLoginBinding by viewBinding(ControllerWebViewLoginBinding::bind)
@Inject @Inject
lateinit var userUtils: UserUtils lateinit var userManager: UserManager
@Inject @Inject
lateinit var dataStore: ReactiveEntityStore<Persistable> lateinit var dataStore: ReactiveEntityStore<Persistable>
@ -223,13 +221,13 @@ class WebViewLoginController(args: Bundle? = null) : NewBaseController(
} }
override fun onReceivedClientCertRequest(view: WebView, request: ClientCertRequest) { override fun onReceivedClientCertRequest(view: WebView, request: ClientCertRequest) {
val userEntity = userUtils.currentUser val user = userManager.currentUser.blockingGet()
var alias: String? = null var alias: String? = null
if (!isPasswordUpdate) { if (!isPasswordUpdate) {
alias = appPreferences!!.temporaryClientCertAlias alias = appPreferences!!.temporaryClientCertAlias
} }
if (TextUtils.isEmpty(alias) && userEntity != null) { if (TextUtils.isEmpty(alias) && user != null) {
alias = userEntity.clientCertificate alias = user.clientCertificate
} }
if (!TextUtils.isEmpty(alias)) { if (!TextUtils.isEmpty(alias)) {
val finalAlias = alias val finalAlias = alias
@ -327,15 +325,16 @@ class WebViewLoginController(args: Bundle? = null) : NewBaseController(
val loginData = parseLoginData(assembledPrefix, dataString) val loginData = parseLoginData(assembledPrefix, dataString)
if (loginData != null) { if (loginData != null) {
dispose() dispose()
val currentUser = userUtils.currentUser val currentUser = userManager.currentUser.blockingGet()
var messageType: ApplicationWideMessageHolder.MessageType? = null var messageType: ApplicationWideMessageHolder.MessageType? = null
if (!isPasswordUpdate && userUtils.getIfUserWithUsernameAndServer(loginData.username, baseUrl)) { if (!isPasswordUpdate &&
userManager.getIfUserWithUsernameAndServer(loginData.username!!, baseUrl!!).blockingGet()
) {
messageType = ApplicationWideMessageHolder.MessageType.ACCOUNT_UPDATED_NOT_ADDED messageType = ApplicationWideMessageHolder.MessageType.ACCOUNT_UPDATED_NOT_ADDED
} }
if (userUtils.checkIfUserIsScheduledForDeletion(loginData.username, baseUrl)) { if (userManager.checkIfUserIsScheduledForDeletion(loginData.username!!, baseUrl!!).blockingGet()) {
ApplicationWideMessageHolder.getInstance().setMessageType( ApplicationWideMessageHolder.getInstance().messageType =
ApplicationWideMessageHolder.MessageType.ACCOUNT_SCHEDULED_FOR_DELETION ApplicationWideMessageHolder.MessageType.ACCOUNT_SCHEDULED_FOR_DELETION
)
if (!isPasswordUpdate) { if (!isPasswordUpdate) {
router.popToRoot() router.popToRoot()
} else { } else {
@ -366,47 +365,35 @@ class WebViewLoginController(args: Bundle? = null) : NewBaseController(
} else { } else {
if (isPasswordUpdate) { if (isPasswordUpdate) {
if (currentUser != null) { if (currentUser != null) {
userQueryDisposable = userUtils.createOrUpdateUser( currentUser.clientCertificate = appPreferences!!.temporaryClientCertAlias
null, currentUser.token = loginData.token
loginData.token, val rowsUpdated = userManager.updateUser(currentUser).blockingGet()
null, Log.d(TAG, "User rows updated: $rowsUpdated")
null,
"", if (finalMessageType != null) {
java.lang.Boolean.TRUE, ApplicationWideMessageHolder.getInstance().messageType = finalMessageType
null, }
currentUser.id,
null, val data = Data.Builder().putString(
appPreferences!!.temporaryClientCertAlias, PushRegistrationWorker.ORIGIN,
null "WebViewLoginController#parseAndLoginFromWebView"
).build()
val pushRegistrationWork = OneTimeWorkRequest.Builder(
PushRegistrationWorker::class.java
) )
.subscribeOn(Schedulers.io()) .setInputData(data)
.observeOn(AndroidSchedulers.mainThread()) .build()
.subscribe(
{ WorkManager.getInstance().enqueue(pushRegistrationWork)
if (finalMessageType != null) { router.popCurrentController()
ApplicationWideMessageHolder.getInstance().setMessageType(finalMessageType)
}
val data = Data.Builder().putString(
PushRegistrationWorker.ORIGIN,
"WebViewLoginController#parseAndLoginFromWebView"
).build()
val pushRegistrationWork = OneTimeWorkRequest.Builder(
PushRegistrationWorker::class.java
)
.setInputData(data)
.build()
WorkManager.getInstance().enqueue(pushRegistrationWork)
router.popCurrentController()
},
{ dispose() }
) { dispose() }
} }
} else { } else {
if (finalMessageType != null) { if (finalMessageType != null) {
// FIXME when the user registers a new account that was setup before (aka // FIXME when the user registers a new account that was setup before (aka
// ApplicationWideMessageHolder.MessageType.ACCOUNT_UPDATED_NOT_ADDED) // ApplicationWideMessageHolder.MessageType.ACCOUNT_UPDATED_NOT_ADDED)
// The token is not updated in the database and therefor the account not visible/usable // The token is not updated in the database and therefore the account not visible/usable
ApplicationWideMessageHolder.getInstance().setMessageType(finalMessageType) ApplicationWideMessageHolder.getInstance().messageType = finalMessageType
} }
router.popToRoot() router.popToRoot()
} }