From e563746730a9890cea16b4a3d64be919241a1e98 Mon Sep 17 00:00:00 2001 From: pablodanswer Date: Mon, 9 Sep 2024 19:40:32 -0700 Subject: [PATCH] Consent screen (#2381) * update * add consent popup * rm --- .../server/enterprise_settings/models.py | 1 + web/src/app/admin/settings/interfaces.ts | 1 + web/src/app/chat/ChatPopup.tsx | 48 +++++++++++++----- .../admin/whitelabeling/WhitelabelingForm.tsx | 49 +++++++++++++++---- 4 files changed, 78 insertions(+), 21 deletions(-) diff --git a/backend/ee/danswer/server/enterprise_settings/models.py b/backend/ee/danswer/server/enterprise_settings/models.py index b5f8165f54..c770fbd73e 100644 --- a/backend/ee/danswer/server/enterprise_settings/models.py +++ b/backend/ee/danswer/server/enterprise_settings/models.py @@ -28,6 +28,7 @@ class EnterpriseSettings(BaseModel): custom_header_content: str | None = None custom_popup_header: str | None = None custom_popup_content: str | None = None + enable_consent_screen: bool | None = None def check_validity(self) -> None: return diff --git a/web/src/app/admin/settings/interfaces.ts b/web/src/app/admin/settings/interfaces.ts index 1986da9ab5..2c315f320e 100644 --- a/web/src/app/admin/settings/interfaces.ts +++ b/web/src/app/admin/settings/interfaces.ts @@ -35,6 +35,7 @@ export interface EnterpriseSettings { two_lines_for_chat_header: boolean | null; custom_popup_header: string | null; custom_popup_content: string | null; + enable_consent_screen: boolean | null; } export interface CombinedSettings { diff --git a/web/src/app/chat/ChatPopup.tsx b/web/src/app/chat/ChatPopup.tsx index ee4f47396d..b26bd19b9b 100644 --- a/web/src/app/chat/ChatPopup.tsx +++ b/web/src/app/chat/ChatPopup.tsx @@ -9,9 +9,9 @@ import remarkGfm from "remark-gfm"; const ALL_USERS_INITIAL_POPUP_FLOW_COMPLETED = "allUsersInitialPopupFlowCompleted"; - export function ChatPopup() { const [completedFlow, setCompletedFlow] = useState(true); + const [showConsentError, setShowConsentError] = useState(false); useEffect(() => { setCompletedFlow( @@ -20,16 +20,26 @@ export function ChatPopup() { }); const settings = useContext(SettingsContext); - if (!settings?.enterpriseSettings?.custom_popup_content || completedFlow) { + const enterpriseSettings = settings?.enterpriseSettings; + const isConsentScreen = enterpriseSettings?.enable_consent_screen; + if ( + (!enterpriseSettings?.custom_popup_content && !isConsentScreen) || + completedFlow + ) { return null; } - let popupTitle = settings.enterpriseSettings.custom_popup_header; - if (!popupTitle) { - popupTitle = `Welcome to ${ - settings.enterpriseSettings.application_name || "Danswer" - }!`; - } + const popupTitle = + enterpriseSettings?.custom_popup_header || + (isConsentScreen + ? "Terms of Use" + : `Welcome to ${enterpriseSettings?.application_name || "Danswer"}!`); + + const popupContent = + enterpriseSettings?.custom_popup_content || + (isConsentScreen + ? "By clicking 'I Agree', you acknowledge that you agree to the terms of use of this application and consent to proceed." + : ""); return ( @@ -49,12 +59,26 @@ export function ChatPopup() { }} remarkPlugins={[remarkGfm]} > - {settings.enterpriseSettings.custom_popup_content} + {popupContent} -
+ {showConsentError && ( +

+ You need to agree to the terms to access the application. +

+ )} + +
+ {isConsentScreen && ( + + )}
diff --git a/web/src/app/ee/admin/whitelabeling/WhitelabelingForm.tsx b/web/src/app/ee/admin/whitelabeling/WhitelabelingForm.tsx index 814e37058a..954d0ab8e4 100644 --- a/web/src/app/ee/admin/whitelabeling/WhitelabelingForm.tsx +++ b/web/src/app/ee/admin/whitelabeling/WhitelabelingForm.tsx @@ -65,6 +65,8 @@ export function WhitelabelingForm() { custom_lower_disclaimer_content: enterpriseSettings?.custom_lower_disclaimer_content || "", custom_nav_items: enterpriseSettings?.custom_nav_items || [], + enable_consent_screen: + enterpriseSettings?.enable_consent_screen || false, }} validationSchema={Yup.object().shape({ application_name: Yup.string().nullable(), @@ -75,6 +77,7 @@ export function WhitelabelingForm() { custom_popup_header: Yup.string().nullable(), custom_popup_content: Yup.string().nullable(), custom_lower_disclaimer_content: Yup.string().nullable(), + enable_consent_screen: Yup.boolean().nullable(), })} onSubmit={async (values, formikHelpers) => { formikHelpers.setSubmitting(true); @@ -217,25 +220,53 @@ export function WhitelabelingForm() { + +