From ed5c340fc779da8fcd3b71a942c614ef1429aedd Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Wed, 20 Oct 2021 10:03:28 +0200 Subject: [PATCH 1/2] Allow setting Accounts.ui.config from settings --- History.md | 1 + docs/source/api/accounts.md | 4 +- packages/accounts-ui-unstyled/accounts_ui.js | 69 ++++++++++++++------ 3 files changed, 52 insertions(+), 22 deletions(-) diff --git a/History.md b/History.md index 6a85357a22..411890253d 100644 --- a/History.md +++ b/History.md @@ -39,6 +39,7 @@ * `accounts-ui-unstyled@1.6.0` - Add support for `accounts-passwordless`. + - `Accounts.ui.config` can now be set via `Meteor.settings.public.packages.accounts-ui-unstyled`. * `service-configuration@1.3.0` - You can now define services configuration via `Meteor.settings.packages.service-configuration` by adding keys as service names and their objects being the service settings. You will need to refer to the specific service for the settings that are expected, most commonly those will be `secret` and `appId`. diff --git a/docs/source/api/accounts.md b/docs/source/api/accounts.md index f09edd7718..38d31772ad 100644 --- a/docs/source/api/accounts.md +++ b/docs/source/api/accounts.md @@ -316,4 +316,6 @@ Accounts.ui.config({ }, passwordSignupFields: 'USERNAME_AND_OPTIONAL_EMAIL' }); -``` \ No newline at end of file +``` + +Since Meteor 2.5 you can configure these in your Meteor settings under `Meteor.settings.public.packages.accounts-ui-unstyled`. diff --git a/packages/accounts-ui-unstyled/accounts_ui.js b/packages/accounts-ui-unstyled/accounts_ui.js index fbf9413834..a078ab0d98 100644 --- a/packages/accounts-ui-unstyled/accounts_ui.js +++ b/packages/accounts-ui-unstyled/accounts_ui.js @@ -20,18 +20,18 @@ const VALID_OPTIONS = new Set() .add('passwordlessSignupFields'); const VALID_PASSWORD_SIGNUP_FIELDS = new Set() - .add("USERNAME_AND_EMAIL") - .add("USERNAME_AND_OPTIONAL_EMAIL") - .add("USERNAME_ONLY") - .add("EMAIL_ONLY"); + .add('USERNAME_AND_EMAIL') + .add('USERNAME_AND_OPTIONAL_EMAIL') + .add('USERNAME_ONLY') + .add('EMAIL_ONLY'); function isValidPasswordSignupField(field) { return VALID_PASSWORD_SIGNUP_FIELDS.has(field); } const VALID_PASSWORDLESS_SIGNUP_FIELDS = new Set() - .add("USERNAME_AND_EMAIL") - .add("EMAIL_ONLY") + .add('USERNAME_AND_EMAIL') + .add('EMAIL_ONLY'); function isValidPasswordlessSignupField(field) { return VALID_PASSWORDLESS_SIGNUP_FIELDS.has(field); @@ -62,15 +62,25 @@ Accounts.ui.config = options => { handleForceApprovalPrompt(options); }; +Meteor.startup(function() { + const settings = Meteor.settings.public?.packages?.['accounts-ui-unstyled']; + + if (settings) { + Accounts.ui.config(settings); + } +}); + function handlePasswordlessSignupFields(options) { let { passwordlessSignupFields } = options; if (passwordlessSignupFields) { const reportInvalid = () => { - throw new Error(`Accounts.ui.config: Invalid option for \`passwordlessSignupFields\`: ${passwordlessSignupFields}`); + throw new Error( + `Accounts.ui.config: Invalid option for \`passwordlessSignupFields\`: ${passwordlessSignupFields}` + ); }; - if (typeof passwordlessSignupFields === "string") { + if (typeof passwordlessSignupFields === 'string') { passwordlessSignupFields = [passwordlessSignupFields]; } else if (!Array.isArray(passwordlessSignupFields)) { reportInvalid(); @@ -78,7 +88,9 @@ function handlePasswordlessSignupFields(options) { if (passwordlessSignupFields.every(isValidPasswordlessSignupField)) { if (Accounts.ui._options.passwordlessSignupFields) { - throw new Error("Accounts.ui.config: Can't set `passwordlessSignupFields` more than once"); + throw new Error( + "Accounts.ui.config: Can't set `passwordlessSignupFields` more than once" + ); } Object.assign(Accounts.ui._options, { passwordlessSignupFields }); return; @@ -93,10 +105,12 @@ function handlePasswordSignupFields(options) { if (passwordSignupFields) { const reportInvalid = () => { - throw new Error(`Accounts.ui.config: Invalid option for \`passwordSignupFields\`: ${passwordSignupFields}`); + throw new Error( + `Accounts.ui.config: Invalid option for \`passwordSignupFields\`: ${passwordSignupFields}` + ); }; - if (typeof passwordSignupFields === "string") { + if (typeof passwordSignupFields === 'string') { passwordSignupFields = [passwordSignupFields]; } else if (!Array.isArray(passwordSignupFields)) { reportInvalid(); @@ -104,7 +118,9 @@ function handlePasswordSignupFields(options) { if (passwordSignupFields.every(isValidPasswordSignupField)) { if (Accounts.ui._options.passwordSignupFields) { - throw new Error("Accounts.ui.config: Can't set `passwordSignupFields` more than once"); + throw new Error( + "Accounts.ui.config: Can't set `passwordSignupFields` more than once" + ); } Object.assign(Accounts.ui._options, { passwordSignupFields }); return; @@ -125,7 +141,7 @@ export function passwordSignupFields() { return [passwordSignupFields]; } - return ["EMAIL_ONLY"]; + return ['EMAIL_ONLY']; } export function passwordlessSignupFields() { @@ -139,21 +155,24 @@ export function passwordlessSignupFields() { return [passwordlessSignupFields]; } - return ["EMAIL_ONLY"]; + return ['EMAIL_ONLY']; } - function handleRequestPermissions({ requestPermissions }) { if (requestPermissions) { Object.keys(requestPermissions).forEach(service => { if (Accounts.ui._options.requestPermissions[service]) { - throw new Error(`Accounts.ui.config: Can't set \`requestPermissions\` more than once for ${service}`); + throw new Error( + `Accounts.ui.config: Can't set \`requestPermissions\` more than once for ${service}` + ); } const scope = requestPermissions[service]; if (!Array.isArray(scope)) { - throw new Error("Accounts.ui.config: Value for `requestPermissions` must be an array"); + throw new Error( + 'Accounts.ui.config: Value for `requestPermissions` must be an array' + ); } Accounts.ui._options.requestPermissions[service] = scope; @@ -165,11 +184,15 @@ function handleRequestOfflineToken({ requestOfflineToken }) { if (requestOfflineToken) { Object.keys(requestOfflineToken).forEach(service => { if (service !== 'google') { - throw new Error("Accounts.ui.config: `requestOfflineToken` only supported for Google login at the moment."); + throw new Error( + 'Accounts.ui.config: `requestOfflineToken` only supported for Google login at the moment.' + ); } if (Accounts.ui._options.requestOfflineToken[service]) { - throw new Error(`Accounts.ui.config: Can't set \`requestOfflineToken\` more than once for ${service}`); + throw new Error( + `Accounts.ui.config: Can't set \`requestOfflineToken\` more than once for ${service}` + ); } Accounts.ui._options.requestOfflineToken[service] = @@ -182,11 +205,15 @@ function handleForceApprovalPrompt({ forceApprovalPrompt }) { if (forceApprovalPrompt) { Object.keys(forceApprovalPrompt).forEach(service => { if (service !== 'google') { - throw new Error("Accounts.ui.config: `forceApprovalPrompt` only supported for Google login at the moment."); + throw new Error( + 'Accounts.ui.config: `forceApprovalPrompt` only supported for Google login at the moment.' + ); } if (Accounts.ui._options.forceApprovalPrompt[service]) { - throw new Error(`Accounts.ui.config: Can't set \`forceApprovalPrompt\` more than once for ${service}`); + throw new Error( + `Accounts.ui.config: Can't set \`forceApprovalPrompt\` more than once for ${service}` + ); } Accounts.ui._options.forceApprovalPrompt[service] = From 5c510e22b1daf01db3649f6e9ba91cb24c94ae1b Mon Sep 17 00:00:00 2001 From: denihs Date: Fri, 4 Feb 2022 10:25:28 -0400 Subject: [PATCH 2/2] Merge branch 'feature/accounts-ui-config-via-settings' into release-2.6.1 # Conflicts: # History.md # docs --- docs/history.md | 3 +++ packages/accounts-ui-unstyled/package.js | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/history.md b/docs/history.md index a734549ab8..34bdbf5733 100644 --- a/docs/history.md +++ b/docs/history.md @@ -20,6 +20,9 @@ * `typescript@4.5.4` - Upgrade TypeScript to `4.5.4` [PR](https://github.com/meteor/meteor/pull/11846) +* `accounts-ui-unstyled@1.6.0` + - `Accounts.ui.config` can now be set via `Meteor.settings.public.packages.accounts-ui-unstyled`. + #### Independent Releases `email@2.2.1` diff --git a/packages/accounts-ui-unstyled/package.js b/packages/accounts-ui-unstyled/package.js index e9e1c2af5e..e6985bd1e0 100644 --- a/packages/accounts-ui-unstyled/package.js +++ b/packages/accounts-ui-unstyled/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Unstyled version of login widgets', - version: '1.6.0', + version: '1.7.0', }); Package.onUse(function(api) {