Skip to content

Commit c05cc20

Browse files
authored
CMM-964 auto generate application password redirect to webview login if the cookie creation failed (#22353)
* Updating RS library * Providing the client with the new authentication method * Handling password creation * Handling authentication * Minor fix * Error handling * Refactor to get site info * updating rs version * Calling createForCurrentUser * Fixing AIBot api changes * Making a real call * Using null appId * Minor apiRootUrl fix * Using WPuuid * Minor refactor * Using custom okhttp client with cookie jat * Extracting into SiteFragment * Using a dialog for AP creation * String change * detekt and style * Claude PR suggestions * Adding and fixing tests * Using webview login as fallback * detekt
1 parent 79c4a3c commit c05cc20

File tree

3 files changed

+16
-7
lines changed

3 files changed

+16
-7
lines changed

WordPress/src/main/java/org/wordpress/android/ui/mysite/MySiteFragment.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ class MySiteFragment : Fragment(R.layout.my_site_fragment),
151151
private var binding: MySiteFragmentBinding? = null
152152
private var siteTitle: String? = null
153153
private var pendingApplicationPasswordSite: SiteModel? = null
154+
private var pendingApplicationPasswordUrl: String? = null
154155

155156
private val applicationPasswordAutoAuthLauncher = registerForActivityResult(
156157
ActivityResultContracts.StartActivityForResult()
@@ -161,13 +162,16 @@ class MySiteFragment : Fragment(R.layout.my_site_fragment),
161162
viewModel.onApplicationPasswordCreated(site)
162163
}
163164
ApplicationPasswordAutoAuthDialogActivity.RESULT_ERROR -> {
164-
viewModel.onApplicationPasswordCreationError(site)
165+
pendingApplicationPasswordUrl?.let {
166+
activityNavigator.openApplicationPasswordLogin(requireActivity(), it)
167+
} ?: viewModel.onApplicationPasswordCreationError(site)
165168
}
166169
ApplicationPasswordAutoAuthDialogActivity.RESULT_DISMISSED -> {
167170
// User dismissed the dialog, no action needed
168171
}
169172
}
170173
pendingApplicationPasswordSite = null
174+
pendingApplicationPasswordUrl = null
171175
}
172176
}
173177

@@ -766,6 +770,7 @@ class MySiteFragment : Fragment(R.layout.my_site_fragment),
766770
}
767771
is SiteNavigationAction.OpenApplicationPasswordAutoAuthentication -> {
768772
pendingApplicationPasswordSite = action.site
773+
pendingApplicationPasswordUrl = action.alternativeUrl
769774
val intent = ApplicationPasswordAutoAuthDialogActivity.createIntent(
770775
requireContext(),
771776
action.site

WordPress/src/main/java/org/wordpress/android/ui/mysite/SiteNavigationAction.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,11 @@ sealed class SiteNavigationAction {
9696

9797
object OpenApplicationPasswordsList : SiteNavigationAction()
9898
data class OpenApplicationPasswordAuthentication(val url: String) : SiteNavigationAction()
99-
data class OpenApplicationPasswordAutoAuthentication(val site: SiteModel) : SiteNavigationAction()
99+
// alternativeUrl used to open the web view authentication if necessary
100+
data class OpenApplicationPasswordAutoAuthentication(
101+
val site: SiteModel,
102+
val alternativeUrl: String
103+
) : SiteNavigationAction()
100104
}
101105

102106
sealed class BloggingPromptCardNavigationAction: SiteNavigationAction() {

WordPress/src/main/java/org/wordpress/android/ui/mysite/cards/applicationpassword/ApplicationPasswordViewModelSlice.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,19 +69,19 @@ class ApplicationPasswordViewModelSlice @Inject constructor(
6969
uiModelMutable.postValue(null)
7070
appLogWrapper.d(AppLog.T.MAIN, "AP: Hiding card for ${site.url} - bad discovery")
7171
} else {
72-
showApplicationPasswordCreateCard(site)
72+
showApplicationPasswordCreateCard(site, authorizationUrlComplete)
7373
}
7474
}
7575
}
7676

77-
private fun showApplicationPasswordCreateCard(site: SiteModel) {
77+
private fun showApplicationPasswordCreateCard(site: SiteModel, alternativeUrl: String) {
7878
uiModelMutable.postValue(
7979
MySiteCardAndItem.Card.QuickLinksItem(
8080
listOf(
8181
QuickLinkItem(
8282
label = UiStringRes(R.string.application_password_title),
8383
icon = R.drawable.ic_lock_white_24dp,
84-
onClick = ListItemInteraction.create { onClick(site) }
84+
onClick = ListItemInteraction.create { onClick(site, alternativeUrl) }
8585
)
8686
)
8787
)
@@ -90,10 +90,10 @@ class ApplicationPasswordViewModelSlice @Inject constructor(
9090
}
9191

9292

93-
private fun onClick(site: SiteModel) {
93+
private fun onClick(site: SiteModel, alternativeUrl: String) {
9494
_onNavigation.postValue(
9595
Event(
96-
SiteNavigationAction.OpenApplicationPasswordAutoAuthentication(site)
96+
SiteNavigationAction.OpenApplicationPasswordAutoAuthentication(site, alternativeUrl)
9797
)
9898
)
9999
}

0 commit comments

Comments
 (0)