Merge branch 'main' into dk/956-alternative-domains-subheadings

This commit is contained in:
David Kennedy 2024-01-22 10:45:46 -05:00
commit 569c3e7e50
No known key found for this signature in database
GPG key ID: 6528A5386E66B96B
36 changed files with 78 additions and 80 deletions

View file

@ -22,7 +22,7 @@ applications:
# Tell Django how much stuff to log # Tell Django how much stuff to log
DJANGO_LOG_LEVEL: INFO DJANGO_LOG_LEVEL: INFO
# default public site location # default public site location
GETGOV_PUBLIC_SITE_URL: https://beta.get.gov GETGOV_PUBLIC_SITE_URL: https://get.gov
# Flag to disable/enable features in prod environments # Flag to disable/enable features in prod environments
IS_PRODUCTION: False IS_PRODUCTION: False
routes: routes:

View file

@ -22,7 +22,7 @@ applications:
# Tell Django how much stuff to log # Tell Django how much stuff to log
DJANGO_LOG_LEVEL: INFO DJANGO_LOG_LEVEL: INFO
# default public site location # default public site location
GETGOV_PUBLIC_SITE_URL: https://beta.get.gov GETGOV_PUBLIC_SITE_URL: https://get.gov
# Flag to disable/enable features in prod environments # Flag to disable/enable features in prod environments
IS_PRODUCTION: False IS_PRODUCTION: False
routes: routes:

View file

@ -22,7 +22,7 @@ applications:
# Tell Django how much stuff to log # Tell Django how much stuff to log
DJANGO_LOG_LEVEL: INFO DJANGO_LOG_LEVEL: INFO
# default public site location # default public site location
GETGOV_PUBLIC_SITE_URL: https://beta.get.gov GETGOV_PUBLIC_SITE_URL: https://get.gov
# Flag to disable/enable features in prod environments # Flag to disable/enable features in prod environments
IS_PRODUCTION: False IS_PRODUCTION: False
routes: routes:

View file

@ -22,7 +22,7 @@ applications:
# Tell Django how much stuff to log # Tell Django how much stuff to log
DJANGO_LOG_LEVEL: INFO DJANGO_LOG_LEVEL: INFO
# default public site location # default public site location
GETGOV_PUBLIC_SITE_URL: https://beta.get.gov GETGOV_PUBLIC_SITE_URL: https://get.gov
# Flag to disable/enable features in prod environments # Flag to disable/enable features in prod environments
IS_PRODUCTION: False IS_PRODUCTION: False
routes: routes:

View file

@ -22,7 +22,7 @@ applications:
# Tell Django how much stuff to log # Tell Django how much stuff to log
DJANGO_LOG_LEVEL: INFO DJANGO_LOG_LEVEL: INFO
# default public site location # default public site location
GETGOV_PUBLIC_SITE_URL: https://beta.get.gov GETGOV_PUBLIC_SITE_URL: https://get.gov
# Flag to disable/enable features in prod environments # Flag to disable/enable features in prod environments
IS_PRODUCTION: False IS_PRODUCTION: False
routes: routes:

View file

@ -22,7 +22,7 @@ applications:
# Tell Django how much stuff to log # Tell Django how much stuff to log
DJANGO_LOG_LEVEL: INFO DJANGO_LOG_LEVEL: INFO
# default public site location # default public site location
GETGOV_PUBLIC_SITE_URL: https://beta.get.gov GETGOV_PUBLIC_SITE_URL: https://get.gov
# Flag to disable/enable features in prod environments # Flag to disable/enable features in prod environments
IS_PRODUCTION: False IS_PRODUCTION: False
routes: routes:

View file

@ -22,7 +22,7 @@ applications:
# Tell Django how much stuff to log # Tell Django how much stuff to log
DJANGO_LOG_LEVEL: INFO DJANGO_LOG_LEVEL: INFO
# default public site location # default public site location
GETGOV_PUBLIC_SITE_URL: https://beta.get.gov GETGOV_PUBLIC_SITE_URL: https://get.gov
# Flag to disable/enable features in prod environments # Flag to disable/enable features in prod environments
IS_PRODUCTION: False IS_PRODUCTION: False
routes: routes:

View file

@ -22,7 +22,7 @@ applications:
# Tell Django how much stuff to log # Tell Django how much stuff to log
DJANGO_LOG_LEVEL: INFO DJANGO_LOG_LEVEL: INFO
# default public site location # default public site location
GETGOV_PUBLIC_SITE_URL: https://beta.get.gov GETGOV_PUBLIC_SITE_URL: https://get.gov
# Flag to disable/enable features in prod environments # Flag to disable/enable features in prod environments
IS_PRODUCTION: False IS_PRODUCTION: False
routes: routes:

View file

@ -22,7 +22,7 @@ applications:
# Tell Django how much stuff to log # Tell Django how much stuff to log
DJANGO_LOG_LEVEL: INFO DJANGO_LOG_LEVEL: INFO
# default public site location # default public site location
GETGOV_PUBLIC_SITE_URL: https://beta.get.gov GETGOV_PUBLIC_SITE_URL: https://get.gov
# Flag to disable/enable features in prod environments # Flag to disable/enable features in prod environments
IS_PRODUCTION: False IS_PRODUCTION: False
routes: routes:

View file

@ -22,7 +22,7 @@ applications:
# Tell Django how much stuff to log # Tell Django how much stuff to log
DJANGO_LOG_LEVEL: INFO DJANGO_LOG_LEVEL: INFO
# default public site location # default public site location
GETGOV_PUBLIC_SITE_URL: https://beta.get.gov GETGOV_PUBLIC_SITE_URL: https://get.gov
# Flag to disable/enable features in prod environments # Flag to disable/enable features in prod environments
IS_PRODUCTION: False IS_PRODUCTION: False
routes: routes:

View file

@ -22,7 +22,7 @@ applications:
# Tell Django how much stuff to log # Tell Django how much stuff to log
DJANGO_LOG_LEVEL: INFO DJANGO_LOG_LEVEL: INFO
# default public site location # default public site location
GETGOV_PUBLIC_SITE_URL: https://beta.get.gov GETGOV_PUBLIC_SITE_URL: https://get.gov
# Flag to disable/enable features in prod environments # Flag to disable/enable features in prod environments
IS_PRODUCTION: False IS_PRODUCTION: False
routes: routes:

View file

@ -22,7 +22,7 @@ applications:
# Tell Django how much stuff to log # Tell Django how much stuff to log
DJANGO_LOG_LEVEL: INFO DJANGO_LOG_LEVEL: INFO
# default public site location # default public site location
GETGOV_PUBLIC_SITE_URL: https://beta.get.gov GETGOV_PUBLIC_SITE_URL: https://get.gov
# Flag to disable/enable features in prod environments # Flag to disable/enable features in prod environments
IS_PRODUCTION: False IS_PRODUCTION: False
routes: routes:

View file

@ -22,7 +22,7 @@ applications:
# Tell Django how much stuff to log # Tell Django how much stuff to log
DJANGO_LOG_LEVEL: INFO DJANGO_LOG_LEVEL: INFO
# default public site location # default public site location
GETGOV_PUBLIC_SITE_URL: https://beta.get.gov GETGOV_PUBLIC_SITE_URL: https://get.gov
# Flag to disable/enable features in prod environments # Flag to disable/enable features in prod environments
IS_PRODUCTION: False IS_PRODUCTION: False
routes: routes:

View file

@ -22,7 +22,7 @@ applications:
# Tell Django how much stuff to log # Tell Django how much stuff to log
DJANGO_LOG_LEVEL: INFO DJANGO_LOG_LEVEL: INFO
# default public site location # default public site location
GETGOV_PUBLIC_SITE_URL: https://beta.get.gov GETGOV_PUBLIC_SITE_URL: https://get.gov
# Which OIDC provider to use # Which OIDC provider to use
OIDC_ACTIVE_PROVIDER: login.gov production OIDC_ACTIVE_PROVIDER: login.gov production
# Flag to disable/enable features in prod environments # Flag to disable/enable features in prod environments

View file

@ -22,7 +22,7 @@ applications:
# Tell Django how much stuff to log # Tell Django how much stuff to log
DJANGO_LOG_LEVEL: INFO DJANGO_LOG_LEVEL: INFO
# default public site location # default public site location
GETGOV_PUBLIC_SITE_URL: https://beta.get.gov GETGOV_PUBLIC_SITE_URL: https://get.gov
# Flag to disable/enable features in prod environments # Flag to disable/enable features in prod environments
IS_PRODUCTION: False IS_PRODUCTION: False
routes: routes:

View file

@ -22,7 +22,7 @@ applications:
# Tell Django how much stuff to log # Tell Django how much stuff to log
DJANGO_LOG_LEVEL: INFO DJANGO_LOG_LEVEL: INFO
# default public site location # default public site location
GETGOV_PUBLIC_SITE_URL: https://beta.get.gov GETGOV_PUBLIC_SITE_URL: https://get.gov
# Flag to disable/enable features in prod environments # Flag to disable/enable features in prod environments
IS_PRODUCTION: False IS_PRODUCTION: False
routes: routes:

View file

@ -22,7 +22,7 @@ applications:
# Tell Django how much stuff to log # Tell Django how much stuff to log
DJANGO_LOG_LEVEL: INFO DJANGO_LOG_LEVEL: INFO
# default public site location # default public site location
GETGOV_PUBLIC_SITE_URL: https://beta.get.gov GETGOV_PUBLIC_SITE_URL: https://get.gov
# use a non-default route to avoid conflicts # use a non-default route to avoid conflicts
routes: routes:
- route: getgov-ENVIRONMENT-migrate.app.cloud.gov - route: getgov-ENVIRONMENT-migrate.app.cloud.gov

View file

@ -22,7 +22,7 @@ applications:
# Tell Django how much stuff to log # Tell Django how much stuff to log
DJANGO_LOG_LEVEL: INFO DJANGO_LOG_LEVEL: INFO
# default public site location # default public site location
GETGOV_PUBLIC_SITE_URL: https://beta.get.gov GETGOV_PUBLIC_SITE_URL: https://get.gov
# Flag to disable/enable features in prod environments # Flag to disable/enable features in prod environments
IS_PRODUCTION: False IS_PRODUCTION: False
routes: routes:

View file

@ -32,7 +32,7 @@ services:
# Is this a production environment # Is this a production environment
- IS_PRODUCTION - IS_PRODUCTION
# Public site URL link # Public site URL link
- GETGOV_PUBLIC_SITE_URL=https://beta.get.gov - GETGOV_PUBLIC_SITE_URL=https://get.gov
# Set a username for accessing the registry # Set a username for accessing the registry
- REGISTRY_CL_ID=nothing - REGISTRY_CL_ID=nothing
# Set a password for accessing the registry # Set a password for accessing the registry

View file

@ -269,10 +269,22 @@ function removeForm(e, formLabel, isNameserversForm, addButton, formIdentifier){
// h2 and legend for DS form, label for nameservers // h2 and legend for DS form, label for nameservers
Array.from(form.querySelectorAll('h2, legend, label, p')).forEach((node) => { Array.from(form.querySelectorAll('h2, legend, label, p')).forEach((node) => {
let innerSpan = node.querySelector('span')
if (innerSpan) {
innerSpan.textContent = innerSpan.textContent.replace(formLabelRegex, `${formLabel} ${index + 1}`);
} else {
node.textContent = node.textContent.replace(formLabelRegex, `${formLabel} ${index + 1}`);
node.textContent = node.textContent.replace(formExampleRegex, `ns${index + 1}`);
}
// If the node is a nameserver label, one of the first 2 which was previously 3 and up (not required) // If the node is a nameserver label, one of the first 2 which was previously 3 and up (not required)
// inject the USWDS required markup and make sure the INPUT is required // inject the USWDS required markup and make sure the INPUT is required
if (isNameserversForm && index <= 1 && node.innerHTML.includes('server') && !node.innerHTML.includes('*')) { if (isNameserversForm && index <= 1 && node.innerHTML.includes('server') && !node.innerHTML.includes('*')) {
// Remove the word optional
innerSpan.textContent = innerSpan.textContent.replace(/\s*\(\s*optional\s*\)\s*/, '');
// Create a new element // Create a new element
const newElement = document.createElement('abbr'); const newElement = document.createElement('abbr');
newElement.textContent = '*'; newElement.textContent = '*';
@ -295,13 +307,8 @@ function removeForm(e, formLabel, isNameserversForm, addButton, formIdentifier){
nextInputElement.required = true; nextInputElement.required = true;
} }
let innerSpan = node.querySelector('span')
if (innerSpan) {
innerSpan.textContent = innerSpan.textContent.replace(formLabelRegex, `${formLabel} ${index + 1}`);
} else {
node.textContent = node.textContent.replace(formLabelRegex, `${formLabel} ${index + 1}`);
node.textContent = node.textContent.replace(formExampleRegex, `ns${index + 1}`);
}
}); });
// Display the add more button if we have less than 13 forms // Display the add more button if we have less than 13 forms
@ -521,16 +528,24 @@ function hideDeletedForms() {
formNum++; formNum++;
newForm.innerHTML = newForm.innerHTML.replace(formNumberRegex, `${formIdentifier}-${formNum-1}-`); newForm.innerHTML = newForm.innerHTML.replace(formNumberRegex, `${formIdentifier}-${formNum-1}-`);
// For the other contacts form, we need to update the fieldset headers based on what's visible vs hidden,
// since the form on the backend employs Django's DELETE widget. For the other formsets, we delete the form
// in JS (completely remove from teh DOM) so we update the headers/labels based on total number of forms.
if (isOtherContactsForm) { if (isOtherContactsForm) {
// For the other contacts form, we need to update the fieldset headers based on what's visible vs hidden,
// since the form on the backend employs Django's DELETE widget.
let totalShownForms = document.querySelectorAll(`.repeatable-form:not([style*="display: none"])`).length; let totalShownForms = document.querySelectorAll(`.repeatable-form:not([style*="display: none"])`).length;
newForm.innerHTML = newForm.innerHTML.replace(formLabelRegex, `${formLabel} ${totalShownForms + 1}`); newForm.innerHTML = newForm.innerHTML.replace(formLabelRegex, `${formLabel} ${totalShownForms + 1}`);
} else { } else {
newForm.innerHTML = newForm.innerHTML.replace(formLabelRegex, `${formLabel} ${formNum}`); // Nameservers form is cloned from index 2 which has the word optional on init, does not have the word optional
// if indices 0 or 1 have been deleted
let containsOptional = newForm.innerHTML.includes('(optional)');
if (isNameserversForm && !containsOptional) {
newForm.innerHTML = newForm.innerHTML.replace(formLabelRegex, `${formLabel} ${formNum} (optional)`);
} else {
newForm.innerHTML = newForm.innerHTML.replace(formLabelRegex, `${formLabel} ${formNum}`);
}
} }
newForm.innerHTML = newForm.innerHTML.replace(formExampleRegex, `ns${formNum}`); newForm.innerHTML = newForm.innerHTML.replace(formExampleRegex, `ns${formNum}`);
newForm.innerHTML = newForm.innerHTML.replace(/\n/g, ''); // Remove newline characters
newForm.innerHTML = newForm.innerHTML.replace(/>\s*</g, '><'); // Remove spaces between tags
container.insertBefore(newForm, addButton); container.insertBefore(newForm, addButton);
newForm.style.display = 'block'; newForm.style.display = 'block';

View file

@ -335,7 +335,7 @@ CSP_INCLUDE_NONCE_IN = ["script-src-elem"]
# Cross-Origin Resource Sharing (CORS) configuration # Cross-Origin Resource Sharing (CORS) configuration
# Sets clients that allow access control to manage.get.gov # Sets clients that allow access control to manage.get.gov
# TODO: remove :8080 to see if we can have all localhost access # TODO: remove :8080 to see if we can have all localhost access
CORS_ALLOWED_ORIGINS = ["http://localhost:8080", "https://beta.get.gov"] CORS_ALLOWED_ORIGINS = ["http://localhost:8080", "https://beta.get.gov", "https://get.gov"]
CORS_ALLOWED_ORIGIN_REGEXES = [r"https://[\w-]+\.sites\.pages\.cloud\.gov"] CORS_ALLOWED_ORIGIN_REGEXES = [r"https://[\w-]+\.sites\.pages\.cloud\.gov"]
# Content-Length header is set by django.middleware.common.CommonMiddleware # Content-Length header is set by django.middleware.common.CommonMiddleware

View file

@ -1,8 +1,8 @@
{% extends 'application_form.html' %} {% extends 'application_form.html' %}
{% load field_helpers %} {% load field_helpers url_helpers %}
{% block form_instructions %} {% block form_instructions %}
<p>If your domain request is approved, the name of your organization and your city/state will be listed in <a href="https://beta.get.gov/about/data/" target="_blank">.govs public data.</a></p> <p>If your domain request is approved, the name of your organization and your city/state will be listed in <a href="{% public_site_url 'about/data/' %}" target="_blank">.govs public data.</a></p>
<h2>What is the name and mailing address of the organization you represent?</h2> <h2>What is the name and mailing address of the organization you represent?</h2>

View file

@ -2,11 +2,11 @@
{% load static field_helpers %} {% load static field_helpers %}
{% block form_instructions %} {% block form_instructions %}
<p>To help us assess your eligibility for a .gov domain, please provide contact information for other employees from your organization. <p>To help us determine your organizations eligibility for a .gov domain, its helpful to have contact information for other employees from your organization.
<ul class="usa-list"> <ul class="usa-list">
<li>They should be clearly and publicly affiliated with your organization and familiar with your domain request. </li> <li>They should be clearly and publicly affiliated with your organization and familiar with your domain request.</li>
<li>They don't need to be involved with the technical management of your domain (although they can be). </li> <li>They dont need to be involved with the technical management of your domain (although they can be).</li>
<li>We typically dont reach out to these employees, but if contact is necessary, our practice is to coordinate first with you, the requestor. </li> <li><strong>We typically dont reach out to these employees</strong>, but if contact is necessary, our practice is to coordinate with you first.</li>
</ul> </ul>
</p> </p>
@ -88,9 +88,7 @@
<legend> <legend>
<h2 class="margin-bottom-0">No other employees from your organization?</h2> <h2 class="margin-bottom-0">No other employees from your organization?</h2>
</legend> </legend>
<p>You don't need to provide names of other employees now, but it may <p>You dont need to provide names of other employees now, but it may slow down our assessment of your eligibility. Describe why there are no other employees who can help verify your request.</p>
slow down our assessment of your eligibility. Describe why there are
no other employees who can help verify your request.</p>
{% with attr_maxlength=1000 add_label_class="usa-sr-only" %} {% with attr_maxlength=1000 add_label_class="usa-sr-only" %}
{% input_with_errors forms.2.no_other_contacts_rationale %} {% input_with_errors forms.2.no_other_contacts_rationale %}
{% endwith %} {% endwith %}

View file

@ -90,7 +90,7 @@
{% endif %} {% endif %}
{% if domainapplication.current_websites.all %} {% if domainapplication.current_websites.all %}
{% include "includes/summary_item.html" with title='Current website for your organization' value=domainapplication.current_websites.all list='true' heading_level=heading_level %} {% include "includes/summary_item.html" with title='Current websites' value=domainapplication.current_websites.all list='true' heading_level=heading_level %}
{% endif %} {% endif %}
{% if domainapplication.requested_domain %} {% if domainapplication.requested_domain %}

View file

@ -70,19 +70,6 @@
<script src="{% static 'js/uswds.min.js' %}" defer></script> <script src="{% static 'js/uswds.min.js' %}" defer></script>
<a class="usa-skipnav" href="#main-content">Skip to main content</a> <a class="usa-skipnav" href="#main-content">Skip to main content</a>
{% if IS_DEMO_SITE %}
<section aria-label="Alert" >
<div class="usa-alert usa-alert--info">
<div class="usa-alert__body">
<h4 class="usa-alert__heading">New domain requests are paused</h4>
<p class="usa-alert__text measure-none">
This is the new registrar for managing .gov domains. Note that were not accepting requests for new .gov domains until January 2024. Follow .gov updates at <a href="https://get.gov/updates/" class="usa-link">get.gov/updates/</a>.
</p>
</div>
</div>
</section>
{% endif %}
<section class="usa-banner" aria-label="Official website of the United States government"> <section class="usa-banner" aria-label="Official website of the United States government">
<div class="usa-accordion"> <div class="usa-accordion">
<header class="usa-banner__header"> <header class="usa-banner__header">

View file

@ -1,7 +1,7 @@
{% extends "domain_base.html" %} {% extends "domain_base.html" %}
{% load static field_helpers %} {% load static field_helpers %}
{% block title %}Add another user | {% endblock %} {% block title %}Add a domain manager | {% endblock %}
{% block domain_content %} {% block domain_content %}
<h1>Add a domain manager</h1> <h1>Add a domain manager</h1>

View file

@ -20,7 +20,7 @@
<button <button
type="submit" type="submit"
class="usa-button" class="usa-button"
>{% if form.security_email.value is None or form.security_email.value == "dotgov@cisa.dhs.gov"%}Add security email{% else %}Save{% endif %}</button> >{% if form.security_email.value is None or form.security_email.value == "dotgov@cisa.dhs.gov" or form.security_email.value == "registrar@dotgov.gov"%}Add security email{% else %}Save{% endif %}</button>
</form> </form>
{% endblock %} {# domain_content #} {% endblock %} {# domain_content #}

View file

@ -17,7 +17,7 @@ About your organization:
Authorizing official: Authorizing official:
{% spaceless %}{% include "emails/includes/contact.txt" with contact=application.authorizing_official %}{% endspaceless %} {% spaceless %}{% include "emails/includes/contact.txt" with contact=application.authorizing_official %}{% endspaceless %}
{% if application.current_websites.exists %}{# if block makes a newline #} {% if application.current_websites.exists %}{# if block makes a newline #}
Current website for your organization: {% for site in application.current_websites.all %} Current websites: {% for site in application.current_websites.all %}
{% spaceless %}{{ site.website }}{% endspaceless %} {% spaceless %}{{ site.website }}{% endspaceless %}
{% endfor %}{% endif %} {% endfor %}{% endif %}
.gov domain: .gov domain:

View file

@ -32,6 +32,14 @@ Learn more about:
- Domain security best practices <https://get.gov/domains/security/> - Domain security best practices <https://get.gov/domains/security/>
WELL PRELOAD THIS DOMAIN
We add new .gov domains to the HSTS preload list each month. This requires browsers to use a secure HTTPS connection to any website at this domain and ensures the content you publish is exactly what your visitors get. It also means youll need to support HTTPS anywhere the domain is used for websites on the internet or internally. Well add your domain to the preload list soon.
Learn more about:
- What preloading is <https://get.gov/domains/security/#preload-your-domain>
- Why we preload new domains <https://get.gov/posts/2021-06-21-an-intent-to-preload/>
THANK YOU THANK YOU
.Gov helps the public identify official, trusted information. Thank you for using a .gov domain. .Gov helps the public identify official, trusted information. Thank you for using a .gov domain.

View file

@ -13,22 +13,10 @@
<h1>Manage your domains</h2> <h1>Manage your domains</h2>
<p class="margin-top-4"> <p class="margin-top-4">
{% if IS_PRODUCTION %}
<a href="javascript:void(0)"
class="usa-button usa-tooltip disabled-link"
data-position="right"
title="Coming in 2024"
aria-disabled="true"
data-tooltip="true"
>
Start a new domain request
</a>
{% else %}
<a href="{% url 'application:' %}" class="usa-button" <a href="{% url 'application:' %}" class="usa-button"
> >
Start a new domain request Start a new domain request
</a> </a>
{% endif %}
</p> </p>
<section class="section--outlined tablet:grid-col-11 desktop:grid-col-10"> <section class="section--outlined tablet:grid-col-11 desktop:grid-col-10">
@ -58,7 +46,7 @@
{% elif domain.state == domain.State.UNKNOWN or domain.state == domain.State.DNS_NEEDED %} {% elif domain.state == domain.State.UNKNOWN or domain.state == domain.State.DNS_NEEDED %}
DNS needed DNS needed
{% else %} {% else %}
{{ domain.state|title }} {{ domain.state|capfirst }}
{% endif %} {% endif %}
</td> </td>
<td> <td>

View file

@ -47,7 +47,7 @@ class TestEmails(TestCase):
# check for optional things # check for optional things
self.assertIn("Other employees from your organization:", body) self.assertIn("Other employees from your organization:", body)
self.assertIn("Testy2 Tester2", body) self.assertIn("Testy2 Tester2", body)
self.assertIn("Current website for your organization:", body) self.assertIn("Current websites:", body)
self.assertIn("city.com", body) self.assertIn("city.com", body)
self.assertIn("About your organization:", body) self.assertIn("About your organization:", body)
self.assertIn("Anything else", body) self.assertIn("Anything else", body)
@ -61,7 +61,7 @@ class TestEmails(TestCase):
application.submit() application.submit()
_, kwargs = self.mock_client.send_email.call_args _, kwargs = self.mock_client.send_email.call_args
body = kwargs["Content"]["Simple"]["Body"]["Text"]["Data"] body = kwargs["Content"]["Simple"]["Body"]["Text"]["Data"]
self.assertNotIn("Current website for your organization:", body) self.assertNotIn("Current websites:", body)
# spacing should be right between adjacent elements # spacing should be right between adjacent elements
self.assertRegex(body, r"5555\n\n.gov domain:") self.assertRegex(body, r"5555\n\n.gov domain:")
@ -74,9 +74,9 @@ class TestEmails(TestCase):
application.submit() application.submit()
_, kwargs = self.mock_client.send_email.call_args _, kwargs = self.mock_client.send_email.call_args
body = kwargs["Content"]["Simple"]["Body"]["Text"]["Data"] body = kwargs["Content"]["Simple"]["Body"]["Text"]["Data"]
self.assertIn("Current website for your organization:", body) self.assertIn("Current websites:", body)
# spacing should be right between adjacent elements # spacing should be right between adjacent elements
self.assertRegex(body, r"5555\n\nCurrent website for") self.assertRegex(body, r"5555\n\nCurrent websites:")
self.assertRegex(body, r"city.com\n\n.gov domain:") self.assertRegex(body, r"city.com\n\n.gov domain:")
@boto3_mocking.patching @boto3_mocking.patching

View file

@ -101,7 +101,7 @@ class TestFormValidation(MockEppLib):
( (
"whitehouse.gov", "whitehouse.gov",
"That domain isnt available. <a class='usa-link' " "That domain isnt available. <a class='usa-link' "
"href='https://beta.get.gov/domains/choosing' target='_blank'>Read more about " "href='https://get.gov/domains/choosing' target='_blank'>Read more about "
"choosing your .gov domain</a>.", "choosing your .gov domain</a>.",
), ),
] ]
@ -151,7 +151,7 @@ class TestFormValidation(MockEppLib):
( (
"whitehouse.gov", "whitehouse.gov",
"That domain isnt available. <a class='usa-link' " "That domain isnt available. <a class='usa-link' "
"href='https://beta.get.gov/domains/choosing' target='_blank'>Read more about " "href='https://get.gov/domains/choosing' target='_blank'>Read more about "
"choosing your .gov domain</a>.", "choosing your .gov domain</a>.",
), ),
] ]

View file

@ -399,7 +399,7 @@ class ExportDataTest(MockEppLib):
"adomain10.gov,Federal,Armed Forces Retirement Home,Ready\n" "adomain10.gov,Federal,Armed Forces Retirement Home,Ready\n"
"adomain2.gov,Interstate,(blank),Dns needed\n" "adomain2.gov,Interstate,(blank),Dns needed\n"
"ddomain3.gov,Federal,Armed Forces Retirement Home,123@mail.gov,On hold,2023-05-25\n" "ddomain3.gov,Federal,Armed Forces Retirement Home,123@mail.gov,On hold,2023-05-25\n"
"defaultsecurity.gov,Federal - Executive,World War I Centennial Commission,dotgov@cisa.dhs.gov,Ready" "defaultsecurity.gov,Federal - Executive,World War I Centennial Commission,(blank),Ready"
) )
# Normalize line endings and remove commas, # Normalize line endings and remove commas,

View file

@ -38,7 +38,7 @@ def write_row(writer, columns, domain_info):
if security_contacts: if security_contacts:
security_email = security_contacts[0].email security_email = security_contacts[0].email
invalid_emails = {"registrar@dotgov.gov"} invalid_emails = {"registrar@dotgov.gov", "dotgov@cisa.dhs.gov"}
# These are default emails that should not be displayed in the csv report # These are default emails that should not be displayed in the csv report
if security_email is not None and security_email.lower() in invalid_emails: if security_email is not None and security_email.lower() in invalid_emails:
security_email = "(blank)" security_email = "(blank)"

View file

@ -83,7 +83,7 @@ class ApplicationWizard(ApplicationWizardPermissionView, TemplateView):
Step.ORGANIZATION_CONTACT: _("Organization name and mailing address"), Step.ORGANIZATION_CONTACT: _("Organization name and mailing address"),
Step.ABOUT_YOUR_ORGANIZATION: _("About your organization"), Step.ABOUT_YOUR_ORGANIZATION: _("About your organization"),
Step.AUTHORIZING_OFFICIAL: _("Authorizing official"), Step.AUTHORIZING_OFFICIAL: _("Authorizing official"),
Step.CURRENT_SITES: _("Current website for your organization"), Step.CURRENT_SITES: _("Current websites"),
Step.DOTGOV_DOMAIN: _(".gov domain"), Step.DOTGOV_DOMAIN: _(".gov domain"),
Step.PURPOSE: _("Purpose of your domain"), Step.PURPOSE: _("Purpose of your domain"),
Step.YOUR_CONTACT: _("Your contact information"), Step.YOUR_CONTACT: _("Your contact information"),

View file

@ -568,7 +568,9 @@ class DomainSecurityEmailView(DomainFormBaseView):
"""The initial value for the form.""" """The initial value for the form."""
initial = super().get_initial() initial = super().get_initial()
security_contact = self.object.security_contact security_contact = self.object.security_contact
if security_contact is None or security_contact.email == "dotgov@cisa.dhs.gov":
invalid_emails = ["dotgov@cisa.dhs.gov", "registrar@dotgov.gov"]
if security_contact is None or security_contact.email in invalid_emails:
initial["security_email"] = None initial["security_email"] = None
return initial return initial
initial["security_email"] = security_contact.email initial["security_email"] = security_contact.email