mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2024-11-22 01:15:54 +03:00
Merge pull request #1655 from vector-im/feature/push_verif
Send verification request when the device is not new
This commit is contained in:
commit
44563e73e2
9 changed files with 55 additions and 6 deletions
|
@ -11,6 +11,7 @@ Improvements 🙌:
|
|||
|
||||
Bugfix 🐛:
|
||||
- Regression | Share action menu do not work (#1647)
|
||||
- verification issues on transition (#1555)
|
||||
|
||||
Translations 🗣:
|
||||
-
|
||||
|
|
|
@ -1234,7 +1234,7 @@ internal class DefaultVerificationService @Inject constructor(
|
|||
)
|
||||
|
||||
// We can SCAN or SHOW QR codes only if cross-signing is enabled
|
||||
val methodValues = if (crossSigningService.isCrossSigningVerified()) {
|
||||
val methodValues = if (crossSigningService.isCrossSigningInitialized()) {
|
||||
// Add reciprocate method if application declares it can scan or show QR codes
|
||||
// Not sure if it ok to do that (?)
|
||||
val reciprocateMethod = methods
|
||||
|
|
|
@ -250,7 +250,10 @@ class VerificationBottomSheet : VectorBaseBottomSheetDialogFragment() {
|
|||
is VerificationTxState.Started,
|
||||
is VerificationTxState.WaitingOtherReciprocateConfirm -> {
|
||||
showFragment(VerificationQRWaitingFragment::class, Bundle().apply {
|
||||
putParcelable(MvRx.KEY_ARG, VerificationQRWaitingFragment.Args(state.isMe, state.otherUserMxItem?.getBestName() ?: ""))
|
||||
putParcelable(MvRx.KEY_ARG, VerificationQRWaitingFragment.Args(
|
||||
isMe = state.isMe,
|
||||
otherUserName = state.otherUserMxItem?.getBestName() ?: ""
|
||||
))
|
||||
})
|
||||
return@withState
|
||||
}
|
||||
|
@ -353,6 +356,17 @@ class VerificationBottomSheet : VectorBaseBottomSheetDialogFragment() {
|
|||
}
|
||||
}
|
||||
}
|
||||
fun forSelfVerification(session: Session, outgoingRequest: String): VerificationBottomSheet {
|
||||
return VerificationBottomSheet().apply {
|
||||
arguments = Bundle().apply {
|
||||
putParcelable(MvRx.KEY_ARG, VerificationArgs(
|
||||
otherUserId = session.myUserId,
|
||||
selfVerificationMode = true,
|
||||
verificationId = outgoingRequest
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const val WAITING_SELF_VERIF_TAG: String = "WAITING_SELF_VERIF_TAG"
|
||||
}
|
||||
|
|
|
@ -177,7 +177,11 @@ class HomeActivity : VectorBaseActivity(), ToolbarConfigurable, UnknownDeviceDet
|
|||
R.string.crosssigning_verify_this_session,
|
||||
R.string.confirm_your_identity
|
||||
) {
|
||||
it.navigator.waitSessionVerification(it)
|
||||
if (event.waitForIncomingRequest) {
|
||||
it.navigator.waitSessionVerification(it)
|
||||
} else {
|
||||
it.navigator.requestSelfSessionVerification(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -21,5 +21,5 @@ import im.vector.riotx.core.platform.VectorViewEvents
|
|||
|
||||
sealed class HomeActivityViewEvents : VectorViewEvents {
|
||||
data class AskPasswordToInitCrossSigning(val userItem: MatrixItem.UserItem?) : HomeActivityViewEvents()
|
||||
data class OnNewSession(val userItem: MatrixItem.UserItem?) : HomeActivityViewEvents()
|
||||
data class OnNewSession(val userItem: MatrixItem.UserItem?, val waitForIncomingRequest: Boolean = true) : HomeActivityViewEvents()
|
||||
}
|
||||
|
|
|
@ -130,7 +130,14 @@ class HomeActivityViewModel @AssistedInject constructor(
|
|||
// Cross-signing is already set up for this user, is it trusted?
|
||||
if (!mxCrossSigningInfo.isTrusted()) {
|
||||
// New session
|
||||
_viewEvents.post(HomeActivityViewEvents.OnNewSession(session.getUser(session.myUserId)?.toMatrixItem()))
|
||||
_viewEvents.post(
|
||||
HomeActivityViewEvents.OnNewSession(
|
||||
session.getUser(session.myUserId)?.toMatrixItem(),
|
||||
// If it's an old unverified, we should send requests
|
||||
// instead of waiting for an incoming one
|
||||
reAuthHelper.data != null
|
||||
)
|
||||
)
|
||||
}
|
||||
} else {
|
||||
// Initialize cross-signing
|
||||
|
|
|
@ -116,6 +116,27 @@ class DefaultNavigator @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
override fun requestSelfSessionVerification(context: Context) {
|
||||
val session = sessionHolder.getSafeActiveSession() ?: return
|
||||
val otherSessions = session.cryptoService()
|
||||
.getCryptoDeviceInfo(session.myUserId)
|
||||
.filter { it.deviceId != session.sessionParams.deviceId }
|
||||
.map { it.deviceId }
|
||||
if (context is VectorBaseActivity) {
|
||||
if (otherSessions.isNotEmpty()) {
|
||||
val pr = session.cryptoService().verificationService().requestKeyVerification(
|
||||
supportedVerificationMethodsProvider.provide(),
|
||||
session.myUserId,
|
||||
otherSessions)
|
||||
VerificationBottomSheet.forSelfVerification(session, pr.transactionId ?: pr.localId)
|
||||
.show(context.supportFragmentManager, VerificationBottomSheet.WAITING_SELF_VERIF_TAG)
|
||||
} else {
|
||||
VerificationBottomSheet.forSelfVerification(session)
|
||||
.show(context.supportFragmentManager, VerificationBottomSheet.WAITING_SELF_VERIF_TAG)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun waitSessionVerification(context: Context) {
|
||||
val session = sessionHolder.getSafeActiveSession() ?: return
|
||||
if (context is VectorBaseActivity) {
|
||||
|
|
|
@ -40,6 +40,8 @@ interface Navigator {
|
|||
|
||||
fun requestSessionVerification(context: Context, otherSessionId: String)
|
||||
|
||||
fun requestSelfSessionVerification(context: Context)
|
||||
|
||||
fun waitSessionVerification(context: Context)
|
||||
|
||||
fun upgradeSessionSecurity(context: Context, initCrossSigningOnly: Boolean)
|
||||
|
|
|
@ -51,7 +51,7 @@ class CrossSigningSettingsFragment @Inject constructor(
|
|||
Unit
|
||||
}
|
||||
CrossSigningSettingsViewEvents.VerifySession -> {
|
||||
navigator.waitSessionVerification(requireActivity())
|
||||
navigator.requestSelfSessionVerification(requireActivity())
|
||||
}
|
||||
CrossSigningSettingsViewEvents.SetUpRecovery -> {
|
||||
navigator.upgradeSessionSecurity(requireActivity(), false)
|
||||
|
|
Loading…
Reference in a new issue