mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-10 22:34:15 +01:00
Migrate web view login from requery to room
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
parent
fe8c7d468a
commit
036e67027c
@ -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,
|
|
||||||
"",
|
|
||||||
java.lang.Boolean.TRUE,
|
|
||||||
null,
|
|
||||||
currentUser.id,
|
|
||||||
null,
|
|
||||||
appPreferences!!.temporaryClientCertAlias,
|
|
||||||
null
|
|
||||||
)
|
|
||||||
.subscribeOn(Schedulers.io())
|
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe(
|
|
||||||
{
|
|
||||||
if (finalMessageType != null) {
|
if (finalMessageType != null) {
|
||||||
ApplicationWideMessageHolder.getInstance().setMessageType(finalMessageType)
|
ApplicationWideMessageHolder.getInstance().messageType = finalMessageType
|
||||||
}
|
}
|
||||||
|
|
||||||
val data = Data.Builder().putString(
|
val data = Data.Builder().putString(
|
||||||
PushRegistrationWorker.ORIGIN,
|
PushRegistrationWorker.ORIGIN,
|
||||||
"WebViewLoginController#parseAndLoginFromWebView"
|
"WebViewLoginController#parseAndLoginFromWebView"
|
||||||
).build()
|
).build()
|
||||||
|
|
||||||
val pushRegistrationWork = OneTimeWorkRequest.Builder(
|
val pushRegistrationWork = OneTimeWorkRequest.Builder(
|
||||||
PushRegistrationWorker::class.java
|
PushRegistrationWorker::class.java
|
||||||
)
|
)
|
||||||
.setInputData(data)
|
.setInputData(data)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
WorkManager.getInstance().enqueue(pushRegistrationWork)
|
WorkManager.getInstance().enqueue(pushRegistrationWork)
|
||||||
router.popCurrentController()
|
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()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user