From 715d658e11837db9ade69b5ed51e110d81096379 Mon Sep 17 00:00:00 2001 From: Simon Backx Date: Wed, 20 Sep 2023 17:35:10 +0200 Subject: [PATCH] Disabled one-click subscribe when Portal checkbox is required (#18252) fixes https://github.com/TryGhost/Product/issues/3911 For now we decided that we don't want to enable one-click-subscribe in case a site has a required checkbox (which isn't shown during the one-click-subscribe flow) --- .../src/api/external-ghost-site.ts | 19 +++++- .../AddRecommendationModal.tsx | 2 +- .../utils/serializers/output/site.js | 2 +- .../server/services/public-config/site.js | 2 +- .../admin/__snapshots__/site.test.js.snap | 2 +- .../members/__snapshots__/site.test.js.snap | 60 ++++++++++++++++++- ghost/core/test/e2e-api/members/site.test.js | 42 ++++++++++++- .../shared/__snapshots__/version.test.js.snap | 10 ++-- 8 files changed, 123 insertions(+), 16 deletions(-) diff --git a/apps/admin-x-settings/src/api/external-ghost-site.ts b/apps/admin-x-settings/src/api/external-ghost-site.ts index 9ccc071b43..52e61be47e 100644 --- a/apps/admin-x-settings/src/api/external-ghost-site.ts +++ b/apps/admin-x-settings/src/api/external-ghost-site.ts @@ -7,7 +7,7 @@ export type GhostSiteResponse = { logo: URL | null, icon: URL | null, cover_image : URL | null, - allow_self_signup: boolean, + allow_external_signup: boolean, url: URL, } } @@ -35,7 +35,20 @@ export const useExternalGhostSite = () => { }); // We need to validate all data types here for extra safety - if (typeof result !== 'object' || !result.site || typeof result.site !== 'object' || typeof result.site.title !== 'string' || typeof result.site.allow_self_signup !== 'boolean' || typeof result.site.url !== 'string') { + if (typeof result !== 'object' || !result.site || typeof result.site !== 'object') { + // eslint-disable-next-line no-console + console.warn('Received invalid response from external Ghost site API', result); + return null; + } + + // Temporary mapping (should get removed!) + // allow_self_signup was replaced by allow_external_signup + if (typeof result.site.allow_self_signup === 'boolean' && typeof result.site.allow_external_signup !== 'boolean') { + result.site.allow_external_signup = result.site.allow_self_signup; + } + + // We need to validate all data types here for extra safety + if (typeof result.site.title !== 'string' || typeof result.site.allow_external_signup !== 'boolean' || typeof result.site.url !== 'string') { // eslint-disable-next-line no-console console.warn('Received invalid response from external Ghost site API', result); return null; @@ -74,7 +87,7 @@ export const useExternalGhostSite = () => { logo: result.site.logo ? new URL(result.site.logo) : null, icon: result.site.icon ? new URL(result.site.icon) : null, cover_image: result.site.cover_image ? new URL(result.site.cover_image) : null, - allow_self_signup: result.site.allow_self_signup, + allow_external_signup: result.site.allow_external_signup, url: new URL(result.site.url) } }; diff --git a/apps/admin-x-settings/src/components/settings/site/recommendations/AddRecommendationModal.tsx b/apps/admin-x-settings/src/components/settings/site/recommendations/AddRecommendationModal.tsx index 0ea2a0d1fc..0cd615986c 100644 --- a/apps/admin-x-settings/src/components/settings/site/recommendations/AddRecommendationModal.tsx +++ b/apps/admin-x-settings/src/components/settings/site/recommendations/AddRecommendationModal.tsx @@ -58,7 +58,7 @@ const AddRecommendationModal: React.FC