feat: make marketing email opt-in checkbox selectively ignorable#38042
feat: make marketing email opt-in checkbox selectively ignorable#38042iloveagent57 wants to merge 1 commit intomasterfrom
Conversation
|
Thanks for the pull request, @iloveagent57! This repository is currently maintained by Once you've gone through the following steps feel free to tag them in a comment and let them know that your changes are ready for engineering review. 🔘 Get product approvalIf you haven't already, check this list to see if your contribution needs to go through the product review process.
🔘 Provide contextTo help your reviewers and other members of the community understand the purpose and larger context of your changes, feel free to add as much of the following information to the PR description as you can:
🔘 Get a green buildIf one or more checks are failing, continue working on your changes until this is no longer the case and your build turns green. DetailsWhere can I find more information?If you'd like to get more details on all aspects of the review process for open source pull requests (OSPRs), check out the following resources: When can I expect my changes to be merged?Our goal is to get community contributions seen and reviewed as efficiently as possible. However, the amount of time that it takes to review and merge a PR can vary significantly based on factors such as:
💡 As a result it may take up to several weeks or months to complete a review and merge your PR. |
b36bac4 to
d2bee6d
Compare
kdmccormick
left a comment
There was a problem hiding this comment.
Is there any supporting information you can link to?
| "SAML provider config not found for idp_name: %s", | ||
| saml_provider_name | ||
| ) | ||
| except (ImportError, Exception) as e: # pylint: disable=broad-except |
There was a problem hiding this comment.
Does this except need to be so broad? As it's written it'll swallow even things like a misspelled variable name (NameError).
At the very least please use log.exception so that the stack trace is shown in the logs.
| log.debug( | ||
| "SAML provider config not found for idp_name: %s", | ||
| saml_provider_name | ||
| ) |
| try: | ||
| saml_config = SAMLProviderConfig.objects.current_set().get( | ||
| slug=saml_provider_name | ||
| ) |
| "If enabled, the marketing emails opt-in checkbox will be optional for users " | ||
| "registering via this provider instead of required. When disabled, marketing email opt-in " | ||
| "is determined by the global MARKETING_EMAILS_OPT_IN setting." |
There was a problem hiding this comment.
I'm having trouble understanding this. What does it mean for an opt-in to be optional?
There was a problem hiding this comment.
- I'd prefer a field name more like "marketing_emails_opt_in_disabled". To say the "opt-in" is "optional" is illogical because an opt-in is already optional by definition.
- This help text can be waay more clear about that:
| "If enabled, the marketing emails opt-in checkbox will be optional for users " | |
| "registering via this provider instead of required. When disabled, marketing email opt-in " | |
| "is determined by the global MARKETING_EMAILS_OPT_IN setting." | |
| "If True, the marketing emails opt-in checkbox will be hidden for users " | |
| "registering via this provider, and marketing emails are forced OFF. " | |
| "If False, the checkbox remains visible and the checked state defaults " | |
| "to the global MARKETING_EMAILS_OPT_IN setting." |
|
@kdmccormick Sorry for posting with empty description, I just updated it with what this code intends to support. good call on those exception handlers, we can clean that up. |
b719d8e to
e2044a6
Compare
e2044a6 to
316fcd5
Compare
316fcd5 to
db6b4f5
Compare
| field_default = field_overrides[field_name] | ||
| if field_name == 'marketing_emails_opt_in': | ||
| field_default = False | ||
| log.info( | ||
| "Hiding marketing_emails_opt_in field and setting default to False" | ||
| ) |
There was a problem hiding this comment.
Was this just a bug before any of these changes? This logic is insensitive to the value of skip_registration_optional_checkboxes. Seems unrelated to this PR and curious if it is an unintentional AI bugfix which we might consider for a separate PR.
| # Check if SAML provider wants to skip optional checkboxes | ||
| saml_config = self._get_saml_provider_config() | ||
| if saml_config and saml_config.skip_registration_optional_checkboxes: | ||
| log.info( | ||
| "SAML provider %s has skip_registration_optional_checkboxes=True, " | ||
| "setting default to False and required to False", | ||
| saml_config.slug | ||
| ) | ||
| default_value = False # When skipped, user opts out by default | ||
| field_required = False # Make field optional | ||
|
|
||
| # Set field override to ensure our SAML-specific values are used | ||
| # This will override any values set by the TPA provider | ||
| log.info( | ||
| "Setting field override for marketing_emails_opt_in to " | ||
| "defaultValue=False, required=False" | ||
| ) | ||
| # pylint: disable=protected-access | ||
| form_desc._field_overrides['marketing_emails_opt_in'] = { | ||
| 'defaultValue': False, | ||
| 'required': False | ||
| } | ||
|
|
There was a problem hiding this comment.
Have to ask, but is this entire section necessary? It seems like all the changes to _apply_third_party_auth_overrides() adequately override the default/required/hidden attributes of the fields we care about.
61eb27d to
0049ae5
Compare
…ignorable We want to support a flow for SSO-enabled Enterprise customers who have agreed off-platform that none of their learners will opt-in to marketing emails or sharing research data. This change proposes to do so by adding an optional field that, when enabled, disables the presence of the two checkboxes on this registration form and sets their values to false. ENT-11401
0049ae5 to
fdd2ea0
Compare
ported from #38022
We want to support a flow for SSO-enabled Enterprise customers who have agreed off-platform that none of their learners will opt-in to marketing emails or sharing research data. This change proposes to do so by adding an optional field that, when enabled, disables the presence of the two checkboxes on this registration form and sets their values to false.
Local Testing
See the added doc on how to test locally. Do one pass with the new model option disabled and
private.pysettings that haveVisit

http://localhost:18000/auth/idp_redirect/saml-default, be redirected to mocksaml.com, then click "Sign In".Now change your provider config to set "Skip registration optional checkboxes" to true.

Visit
http://localhost:18000/auth/idp_redirect/saml-defaultagain, be redirected to mocksaml.com, then click "Sign In".