Skip to content

Commit a1780ff

Browse files
authored
feat: GutenbergKit requires app password for self-hosted sites (#22194)
* feat: Gate GutenbergKit with app password An application password is necessary for sites without a Jetpack connection, otherwise REST API requests fail, as GutenbergKit does not support cookie authentication. * style: Disable return count warning Postpone larger refactors as technical debt.
1 parent 74656ab commit a1780ff

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

WordPress/src/main/java/org/wordpress/android/ui/posts/GutenbergKitActivity.kt

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ import org.wordpress.android.imageeditor.preview.PreviewImageFragment.Companion.
109109
import org.wordpress.android.support.ZendeskHelper
110110
import org.wordpress.android.ui.ActivityId
111111
import org.wordpress.android.ui.ActivityLauncher
112+
import org.wordpress.android.ui.ActivityNavigator
112113
import org.wordpress.android.ui.PrivateAtCookieRefreshProgressDialog.Companion.dismissIfNecessary
113114
import org.wordpress.android.ui.PrivateAtCookieRefreshProgressDialog.Companion.isShowing
114115
import org.wordpress.android.ui.PrivateAtCookieRefreshProgressDialog.Companion.showIfNecessary
@@ -377,6 +378,8 @@ class GutenbergKitActivity : BaseAppCompatActivity(), EditorImageSettingsListene
377378
@Inject lateinit var gutenbergKitPluginsFeature: GutenbergKitPluginsFeature
378379
@Inject lateinit var experimentalFeatures: ExperimentalFeatures
379380

381+
@Inject lateinit var activityNavigator: ActivityNavigator
382+
380383
@Inject lateinit var viewModelFactory: ViewModelProvider.Factory
381384
@Inject lateinit var storePostViewModel: StorePostViewModel
382385
@Inject lateinit var storageUtilsViewModel: StorageUtilsViewModel
@@ -470,7 +473,7 @@ class GutenbergKitActivity : BaseAppCompatActivity(), EditorImageSettingsListene
470473
}
471474
}
472475

473-
@Suppress("LongMethod", "ComplexMethod")
476+
@Suppress("LongMethod", "ComplexMethod", "ReturnCount")
474477
override fun onCreate(savedInstanceState: Bundle?) {
475478
super.onCreate(savedInstanceState)
476479
(application as WordPress).component().inject(this)
@@ -499,6 +502,16 @@ class GutenbergKitActivity : BaseAppCompatActivity(), EditorImageSettingsListene
499502
return
500503
}
501504

505+
if (shouldRequireApplicationPassword()) {
506+
activityNavigator.navigateToApplicationPasswordRequired(
507+
this,
508+
siteModel.url,
509+
resources.getString(R.string.application_password_required_block_editor)
510+
)
511+
finish()
512+
return
513+
}
514+
502515
isLandingEditor = intent.extras?.getBoolean(EditorConstants.EXTRA_IS_LANDING_EDITOR) ?: false
503516

504517
refreshMobileEditorFromSiteSetting()
@@ -615,6 +628,14 @@ class GutenbergKitActivity : BaseAppCompatActivity(), EditorImageSettingsListene
615628
return true
616629
}
617630

631+
private fun shouldRequireApplicationPassword(): Boolean {
632+
return site.apiRestPasswordPlain.isNullOrEmpty() &&
633+
!siteModel.isWPCom &&
634+
!siteModel.isJetpackConnected &&
635+
experimentalFeatures.isEnabled(Feature.EXPERIMENTAL_BLOCK_EDITOR) &&
636+
!experimentalFeatures.isEnabled(Feature.DISABLE_EXPERIMENTAL_BLOCK_EDITOR)
637+
}
638+
618639
private fun refreshMobileEditorFromSiteSetting() {
619640
// Make sure to use the latest fresh info about the site we've in the DB set only the editor setting for now
620641
siteStore.getSiteByLocalId(siteModel.id)?.let {

WordPress/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5061,6 +5061,7 @@ translators: %s: Select control option value e.g: "Auto, 25%". -->
50615061
<string name="application_password_invalid_description">Your application password no longer exists. Please sign in again to create a new application password </string>
50625062
<string name="application_password_required">Application Password Required</string>
50635063
<string name="application_password_required_description">Application passwords are a more secure way to connect to your self-hosted site, and enable support for features like %1$s.</string>
5064+
<string name="application_password_required_block_editor">Block Editor</string>
50645065
<string name="application_password_required_description_default">Application passwords are a more secure way to connect to your self-hosted site, and enable new features support.</string>
50655066
<string name="application_password_disable_feature_title">Disable Application Password?</string>
50665067
<string name="application_password_disable_feature_description">Disabling Application Password will remove the login for %1$s of your sites. You may need to re-add affected sites to login again.</string>

0 commit comments

Comments
 (0)