diff --git a/.changeset/bright-geese-upgrade.md b/.changeset/bright-geese-upgrade.md new file mode 100644 index 00000000000..f8ee0c25b8d --- /dev/null +++ b/.changeset/bright-geese-upgrade.md @@ -0,0 +1,7 @@ +--- +'@clerk/localizations': patch +'@clerk/shared': patch +'@clerk/ui': patch +--- + +Allow existing affiliation-verified organization domains to be upgraded with ownership verification during self-serve SSO setup. diff --git a/packages/localizations/src/ar-SA.ts b/packages/localizations/src/ar-SA.ts index 1ba1b904de0..3ef88f4644d 100644 --- a/packages/localizations/src/ar-SA.ts +++ b/packages/localizations/src/ar-SA.ts @@ -637,11 +637,14 @@ export const arSA: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'لم يتم التحقق', badge__verified: 'تم التحقق', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -663,9 +666,13 @@ export const arSA: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'أضِف نطاقات مؤسستك المستخدمة لتسجيل الدخول وتحقّق من ملكيتها.', title: 'إضافة نطاقات SSO', diff --git a/packages/localizations/src/be-BY.ts b/packages/localizations/src/be-BY.ts index 507be784eb5..ee9fb8df350 100644 --- a/packages/localizations/src/be-BY.ts +++ b/packages/localizations/src/be-BY.ts @@ -637,11 +637,14 @@ export const beBY: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Не пацверджана', badge__verified: 'Пацверджана', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -664,9 +667,13 @@ export const beBY: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Дадайце і пацвердзіце права ўласнасці на дамены, якія ваша арганізацыя выкарыстоўвае для ўваходу.', title: 'Дадаць дамены SSO', diff --git a/packages/localizations/src/bg-BG.ts b/packages/localizations/src/bg-BG.ts index 72af2e579f8..ddaf1385be6 100644 --- a/packages/localizations/src/bg-BG.ts +++ b/packages/localizations/src/bg-BG.ts @@ -638,11 +638,14 @@ export const bgBG: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Непотвърден', badge__verified: 'Потвърден', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -665,9 +668,13 @@ export const bgBG: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Добавете и потвърдете собствеността върху домейните, които вашата организация използва за вход.', title: 'Добавяне на SSO домейни', diff --git a/packages/localizations/src/bn-IN.ts b/packages/localizations/src/bn-IN.ts index 50d7f11f77c..e5bb5ca3606 100644 --- a/packages/localizations/src/bn-IN.ts +++ b/packages/localizations/src/bn-IN.ts @@ -643,11 +643,14 @@ export const bnIN: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'যাচাই করা হয়নি', badge__verified: 'যাচাই করা হয়েছে', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -670,9 +673,13 @@ export const bnIN: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'আপনার প্রতিষ্ঠান সাইন ইন করতে যে ডোমেইনগুলি ব্যবহার করে তার মালিকানা যোগ করুন এবং যাচাই করুন।', title: 'SSO ডোমেইন যোগ করুন', diff --git a/packages/localizations/src/ca-ES.ts b/packages/localizations/src/ca-ES.ts index 74fe181dda4..3044ec8aafd 100644 --- a/packages/localizations/src/ca-ES.ts +++ b/packages/localizations/src/ca-ES.ts @@ -644,11 +644,14 @@ export const caES: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Sense verificar', badge__verified: 'Verificat', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -671,9 +674,13 @@ export const caES: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Afegeix i verifica la propietat dels dominis que la teva organització utilitza per iniciar sessió.', title: 'Afegeix dominis SSO', diff --git a/packages/localizations/src/cs-CZ.ts b/packages/localizations/src/cs-CZ.ts index 2b0ada91bd6..1fddc22efb8 100644 --- a/packages/localizations/src/cs-CZ.ts +++ b/packages/localizations/src/cs-CZ.ts @@ -641,11 +641,14 @@ export const csCZ: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Neověřeno', badge__verified: 'Ověřeno', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -668,9 +671,13 @@ export const csCZ: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Přidejte a ověřte vlastnictví domén, které vaše organizace používá k přihlášení.', title: 'Přidat domény SSO', diff --git a/packages/localizations/src/da-DK.ts b/packages/localizations/src/da-DK.ts index cd1c1d6056b..d17d0740eed 100644 --- a/packages/localizations/src/da-DK.ts +++ b/packages/localizations/src/da-DK.ts @@ -637,11 +637,14 @@ export const daDK: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Ikke bekræftet', badge__verified: 'Bekræftet', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -663,9 +666,13 @@ export const daDK: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Tilføj og bekræft ejerskabet af de domæner, din organisation bruger til at logge ind.', title: 'Tilføj SSO-domæner', diff --git a/packages/localizations/src/de-DE.ts b/packages/localizations/src/de-DE.ts index f0c1b41dd1c..1a84c0a7626 100644 --- a/packages/localizations/src/de-DE.ts +++ b/packages/localizations/src/de-DE.ts @@ -643,11 +643,14 @@ export const deDE: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Nicht verifiziert', badge__verified: 'Verifiziert', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -670,9 +673,13 @@ export const deDE: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Fügen Sie die Domains hinzu, die Ihre Organisation zur Anmeldung verwendet, und verifizieren Sie deren Eigentümerschaft.', diff --git a/packages/localizations/src/el-GR.ts b/packages/localizations/src/el-GR.ts index f97b52aae28..75b7bc21a85 100644 --- a/packages/localizations/src/el-GR.ts +++ b/packages/localizations/src/el-GR.ts @@ -637,11 +637,14 @@ export const elGR: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Μη επαληθευμένο', badge__verified: 'Επαληθευμένο', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -664,9 +667,13 @@ export const elGR: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Προσθέστε και επαληθεύστε την κυριότητα των τομέων που χρησιμοποιεί ο οργανισμός σας για σύνδεση.', title: 'Προσθήκη τομέων SSO', diff --git a/packages/localizations/src/en-GB.ts b/packages/localizations/src/en-GB.ts index c6c0a1c6818..4b847021780 100644 --- a/packages/localizations/src/en-GB.ts +++ b/packages/localizations/src/en-GB.ts @@ -637,11 +637,14 @@ export const enGB: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Unverified', badge__verified: 'Verified', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -663,9 +666,13 @@ export const enGB: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Add and verify ownership of the domains your organisation uses to sign in.', title: 'Add SSO domains', diff --git a/packages/localizations/src/en-US.ts b/packages/localizations/src/en-US.ts index 9f5c9abcc5f..fda8395f272 100644 --- a/packages/localizations/src/en-US.ts +++ b/packages/localizations/src/en-US.ts @@ -650,12 +650,15 @@ export const enUS: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: 'Affiliation', badge__expired: 'Expired', badge__unverified: 'Unverified', badge__verified: 'Verified', expiredAtLabel: "Domain verification expired on {{ date | shortDate('en-US') }}. Verify again to generate a new DNS record.", expiredLabel: 'Domain verification expired. Verify again to generate a new DNS record.', + ownershipLabel: 'Ownership', + proveOwnershipButton: 'Prove ownership', removeButtonTooltip__lastVerifiedDomain: 'At least one verified domain is required to set up SSO.', removeButtonTooltip__lastVerifiedDomainActive: 'At least one verified domain is required to keep SSO enabled.', txtRecord: { @@ -677,10 +680,16 @@ export const enUS: LocalizationResource = { removeDomainDialog: { cancelButton: 'Cancel', removeButton: 'Remove domain', + removeFromSSOButton: 'Remove from SSO', subtitle__active: "You're about to remove {{domain}} from this enterprise connection. Users won't be able to sign-in with {{domain}} anymore.", + subtitle__activePreserveAffiliation: + "You're about to remove {{domain}} from this enterprise connection. Users won't be able to sign-in with {{domain}} anymore, but its existing affiliation verification will remain active.", subtitle__inactive: "You're about to remove {{domain}} from this enterprise connection.", + subtitle__preserveAffiliation: + "You're about to remove {{domain}} from this enterprise connection. Its existing affiliation verification will remain active.", title: 'Removing domain', + title__preserveAffiliation: 'Remove from SSO', }, subtitle: 'Add and verify ownership of the domains your organization uses to sign in.', title: 'Add SSO domains', diff --git a/packages/localizations/src/es-CR.ts b/packages/localizations/src/es-CR.ts index e91b5452bbf..b601b5f38d5 100644 --- a/packages/localizations/src/es-CR.ts +++ b/packages/localizations/src/es-CR.ts @@ -637,11 +637,14 @@ export const esCR: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Sin verificar', badge__verified: 'Verificado', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -664,9 +667,13 @@ export const esCR: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Agrega y verifica la propiedad de los dominios que tu organización usa para iniciar sesión.', title: 'Agregar dominios SSO', diff --git a/packages/localizations/src/es-ES.ts b/packages/localizations/src/es-ES.ts index 5a7885986b1..14bad2a9cdb 100644 --- a/packages/localizations/src/es-ES.ts +++ b/packages/localizations/src/es-ES.ts @@ -643,11 +643,14 @@ export const esES: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Sin verificar', badge__verified: 'Verificado', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -670,9 +673,13 @@ export const esES: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Añade y verifica la propiedad de los dominios que tu organización usa para iniciar sesión.', title: 'Añadir dominios SSO', diff --git a/packages/localizations/src/es-MX.ts b/packages/localizations/src/es-MX.ts index 9607e87a56a..0d2100b476b 100644 --- a/packages/localizations/src/es-MX.ts +++ b/packages/localizations/src/es-MX.ts @@ -638,11 +638,14 @@ export const esMX: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Sin verificar', badge__verified: 'Verificado', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -665,9 +668,13 @@ export const esMX: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Agrega y verifica la propiedad de los dominios que tu organización usa para iniciar sesión.', title: 'Agregar dominios SSO', diff --git a/packages/localizations/src/es-UY.ts b/packages/localizations/src/es-UY.ts index 51084f69606..95d7c6218dd 100644 --- a/packages/localizations/src/es-UY.ts +++ b/packages/localizations/src/es-UY.ts @@ -637,11 +637,14 @@ export const esUY: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Sin verificar', badge__verified: 'Verificado', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -664,9 +667,13 @@ export const esUY: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Agregá y verificá la propiedad de los dominios que tu organización usa para iniciar sesión.', title: 'Agregar dominios SSO', diff --git a/packages/localizations/src/fa-IR.ts b/packages/localizations/src/fa-IR.ts index 0e472f1745f..594b4f59a72 100644 --- a/packages/localizations/src/fa-IR.ts +++ b/packages/localizations/src/fa-IR.ts @@ -642,11 +642,14 @@ export const faIR: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'تأییدنشده', badge__verified: 'تأییدشده', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -669,9 +672,13 @@ export const faIR: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'مالکیت دامنه‌هایی را که سازمان شما برای ورود استفاده می‌کند، اضافه و تأیید کنید.', title: 'افزودن دامنه‌های SSO', diff --git a/packages/localizations/src/fi-FI.ts b/packages/localizations/src/fi-FI.ts index 7d68f3789f3..250c866faf8 100644 --- a/packages/localizations/src/fi-FI.ts +++ b/packages/localizations/src/fi-FI.ts @@ -643,11 +643,14 @@ export const fiFI: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Vahvistamaton', badge__verified: 'Vahvistettu', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -670,9 +673,13 @@ export const fiFI: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Lisää ja vahvista niiden verkkotunnusten omistajuus, joita organisaatiosi käyttää kirjautumiseen.', title: 'Lisää SSO-verkkotunnuksia', diff --git a/packages/localizations/src/fr-FR.ts b/packages/localizations/src/fr-FR.ts index d1aeb515082..b43faffff13 100644 --- a/packages/localizations/src/fr-FR.ts +++ b/packages/localizations/src/fr-FR.ts @@ -645,11 +645,14 @@ export const frFR: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Non vérifié', badge__verified: 'Vérifié', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -672,9 +675,13 @@ export const frFR: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Ajoutez et vérifiez la propriété des domaines que votre organisation utilise pour se connecter.', title: 'Ajouter des domaines SSO', diff --git a/packages/localizations/src/he-IL.ts b/packages/localizations/src/he-IL.ts index 030d4df1157..8ead9a5051b 100644 --- a/packages/localizations/src/he-IL.ts +++ b/packages/localizations/src/he-IL.ts @@ -637,11 +637,14 @@ export const heIL: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'לא מאומת', badge__verified: 'מאומת', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -663,9 +666,13 @@ export const heIL: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'הוסף ואמת בעלות על הדומיינים שהארגון שלך משתמש בהם כדי להתחבר.', title: 'הוספת דומיינים של SSO', diff --git a/packages/localizations/src/hi-IN.ts b/packages/localizations/src/hi-IN.ts index cb9ddad1db6..52c64c0e826 100644 --- a/packages/localizations/src/hi-IN.ts +++ b/packages/localizations/src/hi-IN.ts @@ -643,11 +643,14 @@ export const hiIN: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'असत्यापित', badge__verified: 'सत्यापित', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -670,9 +673,13 @@ export const hiIN: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'अपने संगठन द्वारा साइन इन के लिए उपयोग किए जाने वाले डोमेन का स्वामित्व जोड़ें और सत्यापित करें।', title: 'SSO डोमेन जोड़ें', diff --git a/packages/localizations/src/hr-HR.ts b/packages/localizations/src/hr-HR.ts index 46061f89292..46879bb13e1 100644 --- a/packages/localizations/src/hr-HR.ts +++ b/packages/localizations/src/hr-HR.ts @@ -644,11 +644,14 @@ export const hrHR: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Nepotvrđeno', badge__verified: 'Potvrđeno', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -671,9 +674,13 @@ export const hrHR: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Dodajte i potvrdite vlasništvo nad domenama koje vaša organizacija koristi za prijavu.', title: 'Dodaj SSO domene', diff --git a/packages/localizations/src/hu-HU.ts b/packages/localizations/src/hu-HU.ts index 075c0cc71f9..9180de2cbb9 100644 --- a/packages/localizations/src/hu-HU.ts +++ b/packages/localizations/src/hu-HU.ts @@ -644,11 +644,14 @@ export const huHU: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Nincs igazolva', badge__verified: 'Igazolva', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -671,9 +674,13 @@ export const huHU: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Adja hozzá és igazolja azon tartományok tulajdonjogát, amelyeket szervezete a bejelentkezéshez használ.', diff --git a/packages/localizations/src/id-ID.ts b/packages/localizations/src/id-ID.ts index 740bdc0dbd1..f1e1202ca3c 100644 --- a/packages/localizations/src/id-ID.ts +++ b/packages/localizations/src/id-ID.ts @@ -637,11 +637,14 @@ export const idID: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Belum terverifikasi', badge__verified: 'Terverifikasi', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -664,9 +667,13 @@ export const idID: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Tambahkan dan verifikasi kepemilikan domain yang digunakan organisasi Anda untuk masuk.', title: 'Tambahkan domain SSO', diff --git a/packages/localizations/src/is-IS.ts b/packages/localizations/src/is-IS.ts index 3f9fd7f8f20..bebf5a52692 100644 --- a/packages/localizations/src/is-IS.ts +++ b/packages/localizations/src/is-IS.ts @@ -643,11 +643,14 @@ export const isIS: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Óstaðfest', badge__verified: 'Staðfest', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -670,9 +673,13 @@ export const isIS: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Bættu við og staðfestu eignarhald á lénunum sem fyrirtækið þitt notar til að skrá sig inn.', title: 'Bæta við SSO-lénum', diff --git a/packages/localizations/src/it-IT.ts b/packages/localizations/src/it-IT.ts index 725555948eb..8f91840eaee 100644 --- a/packages/localizations/src/it-IT.ts +++ b/packages/localizations/src/it-IT.ts @@ -643,11 +643,14 @@ export const itIT: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Non verificato', badge__verified: 'Verificato', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -670,9 +673,13 @@ export const itIT: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Aggiungi e verifica la proprietà dei domini che la tua organizzazione utilizza per accedere.', title: 'Aggiungi domini SSO', diff --git a/packages/localizations/src/ja-JP.ts b/packages/localizations/src/ja-JP.ts index 7650af51fd1..a19b4594950 100644 --- a/packages/localizations/src/ja-JP.ts +++ b/packages/localizations/src/ja-JP.ts @@ -644,11 +644,14 @@ export const jaJP: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: '未確認', badge__verified: '確認済み', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -671,9 +674,13 @@ export const jaJP: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: '組織がサインインに使用するドメインを追加し、所有権を確認します。', title: 'SSO ドメインを追加', diff --git a/packages/localizations/src/kk-KZ.ts b/packages/localizations/src/kk-KZ.ts index 61c51ac5a68..189e7a3fe40 100644 --- a/packages/localizations/src/kk-KZ.ts +++ b/packages/localizations/src/kk-KZ.ts @@ -637,11 +637,14 @@ export const kkKZ: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Расталмаған', badge__verified: 'Расталған', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -664,9 +667,13 @@ export const kkKZ: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Ұйымыңыз кіру үшін пайдаланатын домендердің меншігін қосып, растаңыз.', title: 'SSO домендерін қосу', diff --git a/packages/localizations/src/ko-KR.ts b/packages/localizations/src/ko-KR.ts index e58be892784..e4197d13cb4 100644 --- a/packages/localizations/src/ko-KR.ts +++ b/packages/localizations/src/ko-KR.ts @@ -641,11 +641,14 @@ export const koKR: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: '미확인', badge__verified: '확인됨', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -667,9 +670,13 @@ export const koKR: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: '조직에서 로그인에 사용하는 도메인의 소유권을 추가하고 확인하세요.', title: 'SSO 도메인 추가', diff --git a/packages/localizations/src/mn-MN.ts b/packages/localizations/src/mn-MN.ts index f7cb628da22..43dde211c82 100644 --- a/packages/localizations/src/mn-MN.ts +++ b/packages/localizations/src/mn-MN.ts @@ -637,11 +637,14 @@ export const mnMN: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Баталгаажаагүй', badge__verified: 'Баталгаажсан', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -664,9 +667,13 @@ export const mnMN: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Танай байгууллагын нэвтрэхэд ашигладаг домэйнуудын эзэмшлийг нэмж баталгаажуулна уу.', title: 'SSO домэйн нэмэх', diff --git a/packages/localizations/src/ms-MY.ts b/packages/localizations/src/ms-MY.ts index 666b3e8ef9b..864ce97d1a6 100644 --- a/packages/localizations/src/ms-MY.ts +++ b/packages/localizations/src/ms-MY.ts @@ -645,11 +645,14 @@ export const msMY: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Belum disahkan', badge__verified: 'Disahkan', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -672,9 +675,13 @@ export const msMY: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Tambah dan sahkan pemilikan domain yang digunakan organisasi anda untuk log masuk.', title: 'Tambah domain SSO', diff --git a/packages/localizations/src/nb-NO.ts b/packages/localizations/src/nb-NO.ts index b8aa65cde7f..64c30864123 100644 --- a/packages/localizations/src/nb-NO.ts +++ b/packages/localizations/src/nb-NO.ts @@ -644,11 +644,14 @@ export const nbNO: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Ikke verifisert', badge__verified: 'Verifisert', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -671,9 +674,13 @@ export const nbNO: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Legg til og bekreft eierskapet til domenene organisasjonen din bruker for å logge på.', title: 'Legg til SSO-domener', diff --git a/packages/localizations/src/nl-BE.ts b/packages/localizations/src/nl-BE.ts index b68a542214a..f000de42265 100644 --- a/packages/localizations/src/nl-BE.ts +++ b/packages/localizations/src/nl-BE.ts @@ -637,11 +637,14 @@ export const nlBE: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Niet geverifieerd', badge__verified: 'Geverifieerd', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -664,9 +667,13 @@ export const nlBE: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Voeg de domeinen toe die je organisatie gebruikt om aan te melden en verifieer het eigendom ervan.', title: 'SSO-domeinen toevoegen', diff --git a/packages/localizations/src/nl-NL.ts b/packages/localizations/src/nl-NL.ts index 4d4ee65b96d..73754809249 100644 --- a/packages/localizations/src/nl-NL.ts +++ b/packages/localizations/src/nl-NL.ts @@ -637,11 +637,14 @@ export const nlNL: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Niet geverifieerd', badge__verified: 'Geverifieerd', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -664,9 +667,13 @@ export const nlNL: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Voeg de domeinen toe die je organisatie gebruikt om in te loggen en verifieer het eigendom ervan.', title: 'SSO-domeinen toevoegen', diff --git a/packages/localizations/src/pl-PL.ts b/packages/localizations/src/pl-PL.ts index 882d79fb7bc..c434e07bbad 100644 --- a/packages/localizations/src/pl-PL.ts +++ b/packages/localizations/src/pl-PL.ts @@ -637,11 +637,14 @@ export const plPL: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Niezweryfikowano', badge__verified: 'Zweryfikowano', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -664,9 +667,13 @@ export const plPL: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Dodaj i zweryfikuj własność domen, których Twoja organizacja używa do logowania.', title: 'Dodaj domeny SSO', diff --git a/packages/localizations/src/pt-BR.ts b/packages/localizations/src/pt-BR.ts index db52fe300a0..1a125b79f38 100644 --- a/packages/localizations/src/pt-BR.ts +++ b/packages/localizations/src/pt-BR.ts @@ -643,11 +643,14 @@ export const ptBR: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Não verificado', badge__verified: 'Verificado', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -670,9 +673,13 @@ export const ptBR: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Adicione e verifique a propriedade dos domínios que sua organização usa para fazer login.', title: 'Adicionar domínios de SSO', diff --git a/packages/localizations/src/pt-PT.ts b/packages/localizations/src/pt-PT.ts index cd17667f106..a4a9c4ef1a0 100644 --- a/packages/localizations/src/pt-PT.ts +++ b/packages/localizations/src/pt-PT.ts @@ -645,11 +645,14 @@ export const ptPT: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Não verificado', badge__verified: 'Verificado', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -672,9 +675,13 @@ export const ptPT: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Adicione e verifique a propriedade dos domínios que a sua organização utiliza para iniciar sessão.', title: 'Adicionar domínios de SSO', diff --git a/packages/localizations/src/ro-RO.ts b/packages/localizations/src/ro-RO.ts index 770217ef56f..08d617dfad3 100644 --- a/packages/localizations/src/ro-RO.ts +++ b/packages/localizations/src/ro-RO.ts @@ -643,11 +643,14 @@ export const roRO: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Neverificat', badge__verified: 'Verificat', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -670,9 +673,13 @@ export const roRO: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Adaugă și verifică dreptul de proprietate asupra domeniilor pe care organizația ta le folosește pentru autentificare.', diff --git a/packages/localizations/src/ru-RU.ts b/packages/localizations/src/ru-RU.ts index 80a74813621..b9be661f6aa 100644 --- a/packages/localizations/src/ru-RU.ts +++ b/packages/localizations/src/ru-RU.ts @@ -637,11 +637,14 @@ export const ruRU: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Не подтверждён', badge__verified: 'Подтверждён', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -664,9 +667,13 @@ export const ruRU: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Добавьте и подтвердите право собственности на домены, которые ваша организация использует для входа.', title: 'Добавить домены SSO', diff --git a/packages/localizations/src/sk-SK.ts b/packages/localizations/src/sk-SK.ts index 00d5dbb4db0..10134c0f459 100644 --- a/packages/localizations/src/sk-SK.ts +++ b/packages/localizations/src/sk-SK.ts @@ -637,11 +637,14 @@ export const skSK: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Neoverené', badge__verified: 'Overené', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -664,9 +667,13 @@ export const skSK: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Pridajte a overte vlastníctvo domén, ktoré vaša organizácia používa na prihlásenie.', title: 'Pridať SSO domény', diff --git a/packages/localizations/src/sr-RS.ts b/packages/localizations/src/sr-RS.ts index d3bde5446ab..994eef9ad1c 100644 --- a/packages/localizations/src/sr-RS.ts +++ b/packages/localizations/src/sr-RS.ts @@ -637,11 +637,14 @@ export const srRS: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Nepotvrđeno', badge__verified: 'Potvrđeno', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -664,9 +667,13 @@ export const srRS: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Dodajte i potvrdite vlasništvo nad domenima koje vaša organizacija koristi za prijavu.', title: 'Dodaj SSO domene', diff --git a/packages/localizations/src/sv-SE.ts b/packages/localizations/src/sv-SE.ts index 9347df7a469..a29324d72c4 100644 --- a/packages/localizations/src/sv-SE.ts +++ b/packages/localizations/src/sv-SE.ts @@ -637,11 +637,14 @@ export const svSE: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Overifierad', badge__verified: 'Verifierad', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -664,9 +667,13 @@ export const svSE: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Lägg till och verifiera ägarskapet för de domäner som din organisation använder för att logga in.', title: 'Lägg till SSO-domäner', diff --git a/packages/localizations/src/ta-IN.ts b/packages/localizations/src/ta-IN.ts index deb81aea490..bc5e2d5fc05 100644 --- a/packages/localizations/src/ta-IN.ts +++ b/packages/localizations/src/ta-IN.ts @@ -645,11 +645,14 @@ export const taIN: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'சரிபார்க்கப்படவில்லை', badge__verified: 'சரிபார்க்கப்பட்டது', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -672,9 +675,13 @@ export const taIN: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'உங்கள் நிறுவனம் உள்நுழைய பயன்படுத்தும் டொமைன்களின் உரிமையைச் சேர்த்து சரிபார்க்கவும்.', title: 'SSO டொமைன்களைச் சேர்க்கவும்', diff --git a/packages/localizations/src/te-IN.ts b/packages/localizations/src/te-IN.ts index 3370d5b1d4c..9cdff759899 100644 --- a/packages/localizations/src/te-IN.ts +++ b/packages/localizations/src/te-IN.ts @@ -644,11 +644,14 @@ export const teIN: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'ధృవీకరించబడలేదు', badge__verified: 'ధృవీకరించబడింది', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -671,9 +674,13 @@ export const teIN: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'మీ సంస్థ సైన్ ఇన్ చేయడానికి ఉపయోగించే డొమైన్‌ల యాజమాన్యాన్ని జోడించి ధృవీకరించండి.', title: 'SSO డొమైన్‌లను జోడించండి', diff --git a/packages/localizations/src/th-TH.ts b/packages/localizations/src/th-TH.ts index f3604cbf52f..ad7dc87a0ed 100644 --- a/packages/localizations/src/th-TH.ts +++ b/packages/localizations/src/th-TH.ts @@ -641,11 +641,14 @@ export const thTH: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'ยังไม่ได้ยืนยัน', badge__verified: 'ยืนยันแล้ว', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -667,9 +670,13 @@ export const thTH: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'เพิ่มและยืนยันความเป็นเจ้าของโดเมนที่องค์กรของคุณใช้ในการลงชื่อเข้าใช้', title: 'เพิ่มโดเมน SSO', diff --git a/packages/localizations/src/tr-TR.ts b/packages/localizations/src/tr-TR.ts index 2e097ea1d5c..dfcc9ebc390 100644 --- a/packages/localizations/src/tr-TR.ts +++ b/packages/localizations/src/tr-TR.ts @@ -637,11 +637,14 @@ export const trTR: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Doğrulanmadı', badge__verified: 'Doğrulandı', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -664,9 +667,13 @@ export const trTR: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Kuruluşunuzun oturum açmak için kullandığı alan adlarının sahipliğini ekleyin ve doğrulayın.', title: 'SSO alan adları ekle', diff --git a/packages/localizations/src/uk-UA.ts b/packages/localizations/src/uk-UA.ts index 9401aeaa48c..d8c04d7fff9 100644 --- a/packages/localizations/src/uk-UA.ts +++ b/packages/localizations/src/uk-UA.ts @@ -637,11 +637,14 @@ export const ukUA: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Не підтверджено', badge__verified: 'Підтверджено', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -664,9 +667,13 @@ export const ukUA: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Додайте та підтвердьте право власності на домени, які ваша організація використовує для входу.', title: 'Додати домени SSO', diff --git a/packages/localizations/src/vi-VN.ts b/packages/localizations/src/vi-VN.ts index 7a1f375f3ad..dad452a73fe 100644 --- a/packages/localizations/src/vi-VN.ts +++ b/packages/localizations/src/vi-VN.ts @@ -643,11 +643,14 @@ export const viVN: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: 'Chưa xác minh', badge__verified: 'Đã xác minh', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -670,9 +673,13 @@ export const viVN: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: 'Thêm và xác minh quyền sở hữu các tên miền mà tổ chức của bạn dùng để đăng nhập.', title: 'Thêm tên miền SSO', diff --git a/packages/localizations/src/zh-CN.ts b/packages/localizations/src/zh-CN.ts index f4d6a3bd447..d9edd32d42c 100644 --- a/packages/localizations/src/zh-CN.ts +++ b/packages/localizations/src/zh-CN.ts @@ -637,11 +637,14 @@ export const zhCN: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: '未验证', badge__verified: '已验证', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -663,9 +666,13 @@ export const zhCN: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: '添加并验证贵组织用于登录的域名的所有权。', title: '添加 SSO 域名', diff --git a/packages/localizations/src/zh-TW.ts b/packages/localizations/src/zh-TW.ts index 2ca1facbad5..9fe15aa26b6 100644 --- a/packages/localizations/src/zh-TW.ts +++ b/packages/localizations/src/zh-TW.ts @@ -640,11 +640,14 @@ export const zhTW: LocalizationResource = { }, organizationDomainsStep: { domainCard: { + affiliationLabel: undefined, badge__expired: undefined, badge__unverified: '未驗證', badge__verified: '已驗證', expiredAtLabel: undefined, expiredLabel: undefined, + ownershipLabel: undefined, + proveOwnershipButton: undefined, removeButtonTooltip__lastVerifiedDomain: undefined, removeButtonTooltip__lastVerifiedDomainActive: undefined, txtRecord: { @@ -666,9 +669,13 @@ export const zhTW: LocalizationResource = { removeDomainDialog: { cancelButton: undefined, removeButton: undefined, + removeFromSSOButton: undefined, subtitle__active: undefined, + subtitle__activePreserveAffiliation: undefined, subtitle__inactive: undefined, + subtitle__preserveAffiliation: undefined, title: undefined, + title__preserveAffiliation: undefined, }, subtitle: '新增並驗證貴組織用於登入的網域的所有權。', title: '新增 SSO 網域', diff --git a/packages/shared/src/react/hooks/useOrganizationDomains.tsx b/packages/shared/src/react/hooks/useOrganizationDomains.tsx index 427f90a9e8b..7381636a7b1 100644 --- a/packages/shared/src/react/hooks/useOrganizationDomains.tsx +++ b/packages/shared/src/react/hooks/useOrganizationDomains.tsx @@ -24,6 +24,7 @@ export type UseOrganizationDomainsParams = { * Filter the returned domains by enrollment mode. */ enrollmentMode?: OrganizationEnrollmentMode; + createEnrollmentMode?: OrganizationEnrollmentMode; /** * Invoked from the ownership-verification poll whenever an `attempt` resolves * one or more domains as `verified`. @@ -64,7 +65,13 @@ export type UseOrganizationDomainsReturn = { * @internal */ function useOrganizationDomains(params: UseOrganizationDomainsParams = {}): UseOrganizationDomainsReturn { - const { keepPreviousData = true, enabled = true, enrollmentMode, onOwnershipVerified } = params; + const { + keepPreviousData = true, + enabled = true, + enrollmentMode, + createEnrollmentMode = enrollmentMode, + onOwnershipVerified, + } = params; const clerk = useClerkInstanceContext(); const organization = useOrganizationBase(); const [queryClient] = useClerkQueryClient(); @@ -101,9 +108,12 @@ function useOrganizationDomains(params: UseOrganizationDomainsParams = {}): UseO const createDomain = useCallback( async (name: string) => { - let created = await organization?.createDomain(name, enrollmentMode ? { enrollmentMode } : undefined); + let created = await organization?.createDomain( + name, + createEnrollmentMode ? { enrollmentMode: createEnrollmentMode } : undefined, + ); - if (created && enrollmentMode === 'enterprise_sso') { + if (created && createEnrollmentMode === 'enterprise_sso') { const prepared = await organization?.prepareOwnershipVerification([created.id]); created = prepared?.data[0] ?? created; } @@ -111,7 +121,7 @@ function useOrganizationDomains(params: UseOrganizationDomainsParams = {}): UseO await revalidate(); return created; }, - [organization, revalidate, enrollmentMode], + [organization, revalidate, createEnrollmentMode], ); const prepareOwnershipVerification = useCallback( diff --git a/packages/shared/src/types/localization.ts b/packages/shared/src/types/localization.ts index b4ac66d3d2c..bdbe6817ab4 100644 --- a/packages/shared/src/types/localization.ts +++ b/packages/shared/src/types/localization.ts @@ -1432,6 +1432,9 @@ export type __internal_LocalizationResource = { verifyAgainButton: LocalizationValue; removeButtonTooltip__lastVerifiedDomain: LocalizationValue; removeButtonTooltip__lastVerifiedDomainActive: LocalizationValue; + affiliationLabel: LocalizationValue; + ownershipLabel: LocalizationValue; + proveOwnershipButton: LocalizationValue; txtRecord: { instructions: LocalizationValue; typeLabel: LocalizationValue; @@ -1441,10 +1444,14 @@ export type __internal_LocalizationResource = { }; removeDomainDialog: { title: LocalizationValue; + title__preserveAffiliation: LocalizationValue; subtitle__active: LocalizationValue<'domain'>; + subtitle__activePreserveAffiliation: LocalizationValue<'domain'>; subtitle__inactive: LocalizationValue<'domain'>; + subtitle__preserveAffiliation: LocalizationValue<'domain'>; cancelButton: LocalizationValue; removeButton: LocalizationValue; + removeFromSSOButton: LocalizationValue; }; }; testConfigurationStep: { diff --git a/packages/ui/src/components/ConfigureSSO/RemoveDomainDialog.tsx b/packages/ui/src/components/ConfigureSSO/RemoveDomainDialog.tsx index 90644d60e87..151a39b5858 100644 --- a/packages/ui/src/components/ConfigureSSO/RemoveDomainDialog.tsx +++ b/packages/ui/src/components/ConfigureSSO/RemoveDomainDialog.tsx @@ -1,5 +1,3 @@ -import { useMemo } from 'react'; - import { Col, descriptors, localizationKeys } from '@/customizables'; import { Card } from '@/elements/Card'; import { useCardState, withCardStateProvider } from '@/elements/contexts'; @@ -14,6 +12,7 @@ type RemoveDomainDialogProps = { onClose: () => void; domain: string; isConnectionActive: boolean; + preserveAffiliationVerification: boolean; onRemove: () => Promise; contentRef: React.RefObject; }; @@ -47,18 +46,15 @@ const RemoveDomainDialogContent = withCardStateProvider((props: RemoveDomainDial const { onClose, onRemove } = props; const card = useCardState(); - const subtitle = useMemo( - () => - props.isConnectionActive - ? localizationKeys('configureSSO.organizationDomainsStep.removeDomainDialog.subtitle__active', { - domain: props.domain, - }) - : localizationKeys('configureSSO.organizationDomainsStep.removeDomainDialog.subtitle__inactive', { - domain: props.domain, - }), - // eslint-disable-next-line react-hooks/exhaustive-deps - [], - ); + const subtitleKey = props.preserveAffiliationVerification + ? props.isConnectionActive + ? 'configureSSO.organizationDomainsStep.removeDomainDialog.subtitle__activePreserveAffiliation' + : 'configureSSO.organizationDomainsStep.removeDomainDialog.subtitle__preserveAffiliation' + : props.isConnectionActive + ? 'configureSSO.organizationDomainsStep.removeDomainDialog.subtitle__active' + : 'configureSSO.organizationDomainsStep.removeDomainDialog.subtitle__inactive'; + + const subtitle = localizationKeys(subtitleKey, { domain: props.domain }); const onSubmit = async () => { try { @@ -76,7 +72,11 @@ const RemoveDomainDialogContent = withCardStateProvider((props: RemoveDomainDial > ({ textAlign: 'start', padding: t.sizes.$5 })}> ({ gap: t.space.$4 })} > @@ -88,7 +88,9 @@ const RemoveDomainDialogContent = withCardStateProvider((props: RemoveDomainDial block={false} colorScheme='danger' localizationKey={localizationKeys( - 'configureSSO.organizationDomainsStep.removeDomainDialog.removeButton', + props.preserveAffiliationVerification + ? 'configureSSO.organizationDomainsStep.removeDomainDialog.removeFromSSOButton' + : 'configureSSO.organizationDomainsStep.removeDomainDialog.removeButton', )} /> fixtures.clerk.organization?.getDomains.mockResolvedValue({ data: domains, total_count: domains.length } as any); @@ -117,6 +126,33 @@ describe('ConfigureSSO', () => { }); describe('state machine mounts on the right step', () => { + it('starts ownership verification for an existing affiliation-verified domain', async () => { + const { wrapper, fixtures } = await createFixtures(f => { + f.withEnterpriseSso({ selfServeSSO: true }); + f.withEmailAddress(); + f.withOrganizations(); + f.withUser({ + email_addresses: ['test@clerk.com'], + organization_memberships: [{ name: 'Org1', permissions: ['org:sys_entconns:manage'] }], + }); + }); + + fixtures.clerk.organization?.getEnterpriseConnections.mockResolvedValue([]); + mockOrganizationDomains(fixtures, [affiliationVerifiedDomain]); + + const { findByRole, findByText, userEvent } = render(, { wrapper }); + + await findByText('Affiliation'); + await findByText('legacy.example'); + await findByText('Ownership'); + await userEvent.click(await findByRole('button', { name: /prove ownership/i })); + + expect(fixtures.clerk.organization?.getDomains).toHaveBeenCalledWith(undefined); + expect(fixtures.clerk.organization?.prepareOwnershipVerification).toHaveBeenCalledWith([ + affiliationVerifiedDomain.id, + ]); + }); + it('mounts on select-provider when all organization domains are verified and there is no connection', async () => { const { wrapper, fixtures } = await createFixtures(f => { f.withEnterpriseSso({ selfServeSSO: true }); diff --git a/packages/ui/src/components/ConfigureSSO/__tests__/RemoveDomainDialog.test.tsx b/packages/ui/src/components/ConfigureSSO/__tests__/RemoveDomainDialog.test.tsx index 3a02bef01ed..2fe0bdc9333 100644 --- a/packages/ui/src/components/ConfigureSSO/__tests__/RemoveDomainDialog.test.tsx +++ b/packages/ui/src/components/ConfigureSSO/__tests__/RemoveDomainDialog.test.tsx @@ -18,6 +18,7 @@ const renderDialog = ( onClose?: () => void; domain?: string; isConnectionActive?: boolean; + preserveAffiliationVerification?: boolean; } = {}, ) => { const onClose = props.onClose ?? vi.fn(); @@ -28,6 +29,7 @@ const renderDialog = ( onClose={onClose} domain={props.domain ?? 'acme.com'} isConnectionActive={props.isConnectionActive ?? false} + preserveAffiliationVerification={props.preserveAffiliationVerification ?? false} onRemove={() => onRemove()} contentRef={{ current: null }} /> @@ -80,6 +82,30 @@ describe('RemoveDomainDialog', () => { expect(screen.queryByText(/Users won't be able to sign-in/i)).not.toBeInTheDocument(); }); + it('keeps affiliation verification when removing a domain from SSO', async () => { + resetMocks(); + const { wrapper } = await createFixtures(); + renderDialog(wrapper, { domain: 'acme.com', preserveAffiliationVerification: true }); + + expect(screen.getByRole('heading', { name: 'Remove from SSO' })).toBeInTheDocument(); + expect(screen.getByRole('button', { name: 'Remove from SSO' })).toBeInTheDocument(); + expect(screen.getByText(/existing affiliation verification will remain active/i)).toBeInTheDocument(); + expect(screen.queryByText(/Users won't be able to sign-in/i)).not.toBeInTheDocument(); + }); + + it('warns about sign-in impact while preserving affiliation when the connection is active', async () => { + resetMocks(); + const { wrapper } = await createFixtures(); + renderDialog(wrapper, { domain: 'acme.com', isConnectionActive: true, preserveAffiliationVerification: true }); + + expect(screen.getByRole('heading', { name: 'Remove from SSO' })).toBeInTheDocument(); + expect( + screen.getByText( + /Users won't be able to sign-in with acme\.com anymore, but its existing affiliation verification will remain active/i, + ), + ).toBeInTheDocument(); + }); + it('invokes onClose when Cancel is clicked', async () => { resetMocks(); const onClose = vi.fn(); diff --git a/packages/ui/src/components/ConfigureSSO/domain/__tests__/organizationEnterpriseConnection.test.ts b/packages/ui/src/components/ConfigureSSO/domain/__tests__/organizationEnterpriseConnection.test.ts index a0189c74311..d1af3e0f21c 100644 --- a/packages/ui/src/components/ConfigureSSO/domain/__tests__/organizationEnterpriseConnection.test.ts +++ b/packages/ui/src/components/ConfigureSSO/domain/__tests__/organizationEnterpriseConnection.test.ts @@ -282,6 +282,10 @@ describe('areAllOrganizationDomainsVerified', () => { it('domain without ownership verification → false', () => { expect(areAllOrganizationDomainsVerified([makeDomain(null)])).toBe(false); }); + + it('ignores affiliation-only domains that were not selected for ownership verification', () => { + expect(areAllOrganizationDomainsVerified([makeDomain('verified'), makeDomain(null)])).toBe(true); + }); }); describe('connectionBackingEmail', () => { diff --git a/packages/ui/src/components/ConfigureSSO/domain/organizationEnterpriseConnection.ts b/packages/ui/src/components/ConfigureSSO/domain/organizationEnterpriseConnection.ts index fd9f7c7bd56..ae4c4b1a5e1 100644 --- a/packages/ui/src/components/ConfigureSSO/domain/organizationEnterpriseConnection.ts +++ b/packages/ui/src/components/ConfigureSSO/domain/organizationEnterpriseConnection.ts @@ -53,8 +53,14 @@ export const isEnterpriseConnectionConfigured = ( connection: EnterpriseConnectionResource | null | undefined, ): boolean => Boolean(connection?.samlConnection?.idpSsoUrl && connection?.samlConnection?.idpEntityId); -export const areAllOrganizationDomainsVerified = (domains: OrganizationDomainResource[] | null | undefined): boolean => - !!domains?.length && domains.every(domain => domain.ownershipVerification?.status === 'verified'); +export const areAllOrganizationDomainsVerified = ( + domains: OrganizationDomainResource[] | null | undefined, +): boolean => { + const ownershipDomains = domains?.filter(domain => domain.ownershipVerification) ?? []; + return ( + !!ownershipDomains.length && ownershipDomains.every(domain => domain.ownershipVerification?.status === 'verified') + ); +}; const connectionStatus = ({ hasConnection, diff --git a/packages/ui/src/components/ConfigureSSO/hooks/__tests__/useOrganizationEnterpriseConnection.test.tsx b/packages/ui/src/components/ConfigureSSO/hooks/__tests__/useOrganizationEnterpriseConnection.test.tsx index bb9579ad215..5552fe4b1d7 100644 --- a/packages/ui/src/components/ConfigureSSO/hooks/__tests__/useOrganizationEnterpriseConnection.test.tsx +++ b/packages/ui/src/components/ConfigureSSO/hooks/__tests__/useOrganizationEnterpriseConnection.test.tsx @@ -47,7 +47,9 @@ const mutationSpies = vi.hoisted(() => ({ })); const domainsState = vi.hoisted(() => ({ - data: undefined as Array<{ name: string }> | undefined, + affiliation: undefined as Array<{ id: string; name: string; ownershipVerification: unknown }> | undefined, + enterpriseSSO: undefined as Array<{ id: string; name: string; ownershipVerification: unknown }> | undefined, + calls: [] as Array<{ enrollmentMode?: string }>, isLoading: false, })); @@ -59,14 +61,17 @@ vi.mock('@clerk/shared/react', () => ({ updateEnterpriseConnection: mutationSpies.update, deleteEnterpriseConnection: mutationSpies.delete, }), - __internal_useOrganizationDomains: () => ({ - data: domainsState.data, - isLoading: domainsState.isLoading, - createDomain: vi.fn(), - prepareOwnershipVerification: vi.fn(), - attemptOwnershipVerification: vi.fn(), - revalidate: vi.fn(() => Promise.resolve()), - }), + __internal_useOrganizationDomains: (params: { enrollmentMode?: string }) => { + domainsState.calls.push({ enrollmentMode: params.enrollmentMode }); + return { + data: params.enrollmentMode === 'enterprise_sso' ? domainsState.enterpriseSSO : domainsState.affiliation, + isLoading: domainsState.isLoading, + createDomain: vi.fn(), + prepareOwnershipVerification: vi.fn(), + attemptOwnershipVerification: vi.fn(), + revalidate: vi.fn(() => Promise.resolve()), + }; + }, __internal_useOrganizationEnterpriseConnectionTestRuns: (params: { enabled?: boolean }) => { testRunsState.calls.push({ enabled: params.enabled }); return { @@ -91,7 +96,9 @@ import { useOrganizationEnterpriseConnection } from '../useOrganizationEnterpris beforeEach(() => { connectionsState.data = []; connectionsState.isLoading = false; - domainsState.data = undefined; + domainsState.affiliation = undefined; + domainsState.enterpriseSSO = undefined; + domainsState.calls = []; domainsState.isLoading = false; testRunsState.calls = []; testRunsState.isLoading = false; @@ -185,25 +192,26 @@ describe('useOrganizationEnterpriseConnection — test-runs gating', () => { }); describe('useOrganizationEnterpriseConnection — mutations', () => { - it('createConnection forwards the provider and the organization domains', async () => { - domainsState.data = [{ name: 'acme.com' }, { name: 'example.com' }]; + it('createConnection forwards the provider and ownership-verified organization domains', async () => { + domainsState.affiliation = [{ id: 'dmn_affiliation', name: 'example.com', ownershipVerification: null }]; + domainsState.enterpriseSSO = [ + { id: 'dmn_ownership', name: 'acme.com', ownershipVerification: { status: 'verified' } }, + ]; const { result } = renderHook(() => useOrganizationEnterpriseConnection()); await result.current.enterpriseConnectionMutations.createConnection('saml_okta'); expect(mutationSpies.create).toHaveBeenCalledTimes(1); - // `name` is derived by FAPI, so it is not sent from the client; `domains` - // are the verified organization domains passed straight through by the - // caller. expect(mutationSpies.create).toHaveBeenCalledWith({ provider: 'saml_okta', - domains: ['acme.com', 'example.com'], + domains: ['acme.com'], }); }); it('createConnection forwards undefined domains when the organization has none', async () => { - domainsState.data = undefined; + domainsState.affiliation = undefined; + domainsState.enterpriseSSO = undefined; const { result } = renderHook(() => useOrganizationEnterpriseConnection()); @@ -223,4 +231,16 @@ describe('useOrganizationEnterpriseConnection — mutations', () => { expect(mutationSpies.update).toHaveBeenCalledWith('ent_1', { active: true }); }); + + it('merges affiliation and enterprise SSO domain responses', () => { + domainsState.affiliation = [{ id: 'dmn_affiliation', name: 'example.com', ownershipVerification: null }]; + domainsState.enterpriseSSO = [ + { id: 'dmn_enterprise_sso', name: 'acme.com', ownershipVerification: { status: 'unverified' } }, + ]; + + const { result } = renderHook(() => useOrganizationEnterpriseConnection()); + + expect(result.current.organizationDomains?.map(domain => domain.name)).toEqual(['example.com', 'acme.com']); + expect(domainsState.calls).toEqual([{ enrollmentMode: undefined }, { enrollmentMode: 'enterprise_sso' }]); + }); }); diff --git a/packages/ui/src/components/ConfigureSSO/hooks/useOrganizationEnterpriseConnection.ts b/packages/ui/src/components/ConfigureSSO/hooks/useOrganizationEnterpriseConnection.ts index 0337366b0cb..bdf60d6a5bb 100644 --- a/packages/ui/src/components/ConfigureSSO/hooks/useOrganizationEnterpriseConnection.ts +++ b/packages/ui/src/components/ConfigureSSO/hooks/useOrganizationEnterpriseConnection.ts @@ -204,17 +204,62 @@ export const useOrganizationEnterpriseConnection = (): UseOrganizationEnterprise ); const { - isLoading: isLoadingOrganizationDomains, - data: organizationDomains, + isLoading: isLoadingAffiliationDomains, + data: affiliationDomains, + prepareOwnershipVerification: prepareAffiliationOwnershipVerification, + attemptOwnershipVerification: attemptAffiliationOwnershipVerification, + revalidate: revalidateAffiliationDomains, + } = __internal_useOrganizationDomains({ + onOwnershipVerified: handleDomainOwnershipVerified, + }); + + const { + isLoading: isLoadingEnterpriseSSODomains, + data: enterpriseSSODomains, createDomain, - prepareOwnershipVerification, - attemptOwnershipVerification, - revalidate: revalidateDomains, + revalidate: revalidateEnterpriseSSODomains, } = __internal_useOrganizationDomains({ enrollmentMode: 'enterprise_sso', onOwnershipVerified: handleDomainOwnershipVerified, }); + const organizationDomains = useMemo(() => { + const domains = [...(affiliationDomains ?? []), ...(enterpriseSSODomains ?? [])]; + if (!domains.length) { + return undefined; + } + + return Array.from(new Map(domains.map(domain => [domain.id, domain])).values()); + }, [affiliationDomains, enterpriseSSODomains]); + + const revalidateDomains = useCallback( + () => Promise.all([revalidateAffiliationDomains(), revalidateEnterpriseSSODomains()]).then(() => undefined), + [revalidateAffiliationDomains, revalidateEnterpriseSSODomains], + ); + + const prepareOwnershipVerification = useCallback( + async (domains: OrganizationDomainResource[]) => { + const prepared = await prepareAffiliationOwnershipVerification(domains); + await revalidateEnterpriseSSODomains(); + return prepared; + }, + [prepareAffiliationOwnershipVerification, revalidateEnterpriseSSODomains], + ); + + const attemptOwnershipVerification = useCallback( + async (domains: OrganizationDomainResource[]) => { + const attempted = await attemptAffiliationOwnershipVerification(domains); + await revalidateEnterpriseSSODomains(); + return attempted; + }, + [attemptAffiliationOwnershipVerification, revalidateEnterpriseSSODomains], + ); + + const verifiedOwnershipDomains = useMemo( + () => organizationDomains?.filter(domain => domain.ownershipVerification?.status === 'verified'), + [organizationDomains], + ); + const organizationDomainMutations = useMemo( () => ({ createDomain, @@ -229,7 +274,7 @@ export const useOrganizationEnterpriseConnection = (): UseOrganizationEnterprise const createConnection: EnterpriseConnectionMutations['createConnection'] = provider => { return createEnterpriseConnection({ provider, - domains: organizationDomains?.map(domain => domain.name), + domains: verifiedOwnershipDomains?.map(domain => domain.name), }); }; @@ -243,7 +288,7 @@ export const useOrganizationEnterpriseConnection = (): UseOrganizationEnterprise await deleteEnterpriseConnection(enterpriseConnection.id); } - const domains = enterpriseConnection?.domains ?? organizationDomains?.map(domain => domain.name); + const domains = enterpriseConnection?.domains ?? verifiedOwnershipDomains?.map(domain => domain.name); return createEnterpriseConnection({ provider, @@ -281,7 +326,7 @@ export const useOrganizationEnterpriseConnection = (): UseOrganizationEnterprise }; }, [ organization, - organizationDomains, + verifiedOwnershipDomains, enterpriseConnection, createEnterpriseConnection, updateEnterpriseConnection, @@ -333,7 +378,10 @@ export const useOrganizationEnterpriseConnection = (): UseOrganizationEnterprise // fresh-start path they stay dormant until the connection is configured, and // landing on the test step then shows table-level loading, never the global isLoading: - isLoadingEnterpriseConnections || isLoadingOrganizationDomains || (hadInitialConnection && isLoadingTestRuns), + isLoadingEnterpriseConnections || + isLoadingAffiliationDomains || + isLoadingEnterpriseSSODomains || + (hadInitialConnection && isLoadingTestRuns), enterpriseConnection, organizationEnterpriseConnection, enterpriseConnectionMutations, diff --git a/packages/ui/src/components/ConfigureSSO/steps/OrganizationDomainsStep.tsx b/packages/ui/src/components/ConfigureSSO/steps/OrganizationDomainsStep.tsx index 8c449089080..116b3466ff0 100644 --- a/packages/ui/src/components/ConfigureSSO/steps/OrganizationDomainsStep.tsx +++ b/packages/ui/src/components/ConfigureSSO/steps/OrganizationDomainsStep.tsx @@ -25,7 +25,7 @@ import { useCardState } from '@/elements/contexts'; import { Field } from '@/elements/FieldControl'; import { Form } from '@/elements/Form'; import { Tooltip } from '@/elements/Tooltip'; -import { Checkmark, Clipboard, Close, RotateLeftRight } from '@/icons'; +import { ArrowRight, Checkmark, Clipboard, Close, RotateLeftRight } from '@/icons'; import { common } from '@/styledSystem'; import { useFormControl } from '@/ui/utils/useFormControl'; import { getFieldError, getGlobalError } from '@/utils/errorHandler'; @@ -36,6 +36,9 @@ import { Step } from '../elements/Step'; import { useWizard } from '../elements/Wizard/WizardContext'; import { RemoveDomainDialog } from '../RemoveDomainDialog'; +const hasVerifiedAffiliation = (domain: OrganizationDomainResource): boolean => + (domain.affiliationVerification ?? domain.verification)?.status === 'verified'; + export const OrganizationDomainsStep = (): JSX.Element => { const { t } = useLocalizations(); const { @@ -98,6 +101,11 @@ export const OrganizationDomainsStep = (): JSX.Element => { await updateConnection(enterpriseConnection.id, { domains }); } + if (hasVerifiedAffiliation(domain)) { + await revalidate(); + return; + } + await domain.delete(); await revalidate(); }; @@ -164,11 +172,12 @@ export const OrganizationDomainsStep = (): JSX.Element => { const isVerified = domain.ownershipVerification?.status === 'verified'; const isLastVerifiedDomain = isVerified && verifiedDomainCount === 1; const isRemoveDisabled = lockLastVerifiedDomain && isLastVerifiedDomain; + const canRemove = domain.enrollmentMode === 'enterprise_sso' || Boolean(enterpriseConnection); return ( setDomainToRemove(domain)} + onRemove={canRemove ? () => setDomainToRemove(domain) : undefined} onPrepareOwnershipVerification={() => handlePrepareOwnershipVerification(domain)} isRemoveDisabled={isRemoveDisabled} removeDisabledTooltip={lastVerifiedDomainTooltip} @@ -198,6 +207,7 @@ export const OrganizationDomainsStep = (): JSX.Element => { onClose={() => setDomainToRemove(null)} domain={domainToRemove.name} isConnectionActive={Boolean(enterpriseConnection?.active)} + preserveAffiliationVerification={hasVerifiedAffiliation(domainToRemove)} onRemove={() => handleRemoveDomain(domainToRemove)} contentRef={contentRef} /> @@ -370,7 +380,7 @@ const DomainCard = ({ removeDisabledTooltip, }: { domain: OrganizationDomainResource; - onRemove: () => void; + onRemove?: () => void; onPrepareOwnershipVerification: () => Promise; isRemoveDisabled?: boolean; removeDisabledTooltip?: ReturnType; @@ -382,9 +392,11 @@ const DomainCard = ({ const ownershipVerification = domain.ownershipVerification; const isVerified = ownershipVerification?.status === 'verified'; const isExpired = ownershipVerification?.status === 'expired'; + const hasOwnershipVerification = Boolean(ownershipVerification); + const isAffiliationVerified = hasVerifiedAffiliation(domain); const cardId = ownershipVerification?.status ?? 'unverified'; - const removeButton = ( + const removeButton = onRemove ? ( - ); + ) : null; return ( + {isAffiliationVerified && ( + <> + ({ fontSize: t.fontSizes.$xs })} + /> + + + ({ fontSize: t.fontSizes.$xs })} + /> + + )} + - {!isVerified && !isExpired && ( + {!isVerified && !isExpired && hasOwnershipVerification && ( - {isRemoveDisabled && removeDisabledTooltip ? ( + {removeButton && isRemoveDisabled && removeDisabledTooltip ? ( {removeButton} @@ -468,7 +514,12 @@ const DomainCard = ({ - {isExpired ? ( + {!hasOwnershipVerification ? ( + + ) : isExpired ? ( Promise; +}): JSX.Element => { + const [isPreparing, setIsPreparing] = useState(false); + + const handleProveOwnership = () => { + setIsPreparing(true); + void onPrepareOwnershipVerification().finally(() => setIsPreparing(false)); + }; + + return ( + ({ + paddingInline: t.space.$4, + paddingBottom: t.space.$4, + paddingTop: t.space.$2, + })} + > + + + ); +}; + const ExpiredNotice = ({ expiresAt, onPrepareOwnershipVerification, diff --git a/packages/ui/src/customizables/elementDescriptors.ts b/packages/ui/src/customizables/elementDescriptors.ts index 901af416f8a..0836953b781 100644 --- a/packages/ui/src/customizables/elementDescriptors.ts +++ b/packages/ui/src/customizables/elementDescriptors.ts @@ -587,6 +587,10 @@ export const APPEARANCE_KEYS = containsAllElementsConfigKeys([ 'configureSSOVerifyDomainSuggestion', 'configureSSOVerifyDomainCard', 'configureSSOVerifyDomainCardBadge', + 'configureSSOVerifyDomainCardAffiliationLabel', + 'configureSSOVerifyDomainCardAffiliationBadge', + 'configureSSOVerifyDomainCardOwnershipArrow', + 'configureSSOVerifyDomainCardOwnershipLabel', 'configureSSOVerifyDomainCardRemoveButton', 'configureSSOVerifyDomainCardTxtRecord', 'configureSSOVerifyDomainCardTxtRecordValue', diff --git a/packages/ui/src/internal/appearance.ts b/packages/ui/src/internal/appearance.ts index c8b28964f0b..51dfdce0acf 100644 --- a/packages/ui/src/internal/appearance.ts +++ b/packages/ui/src/internal/appearance.ts @@ -723,6 +723,10 @@ export type ElementsConfig = { configureSSOVerifyDomainSuggestion: WithOptions; configureSSOVerifyDomainCard: WithOptions<'verified' | 'unverified' | 'expired'>; configureSSOVerifyDomainCardBadge: WithOptions<'verified' | 'unverified' | 'expired'>; + configureSSOVerifyDomainCardAffiliationLabel: WithOptions<'verified' | 'unverified' | 'expired'>; + configureSSOVerifyDomainCardAffiliationBadge: WithOptions<'verified' | 'unverified' | 'expired'>; + configureSSOVerifyDomainCardOwnershipArrow: WithOptions<'verified' | 'unverified' | 'expired'>; + configureSSOVerifyDomainCardOwnershipLabel: WithOptions<'verified' | 'unverified' | 'expired'>; configureSSOVerifyDomainCardRemoveButton: WithOptions; configureSSOVerifyDomainCardTxtRecord: WithOptions; configureSSOVerifyDomainCardTxtRecordValue: WithOptions;