diff --git a/ops/manifests/manifest-ab.yaml b/ops/manifests/manifest-ab.yaml index 38109bdcb..3ca800392 100644 --- a/ops/manifests/manifest-ab.yaml +++ b/ops/manifests/manifest-ab.yaml @@ -22,7 +22,7 @@ applications: # Tell Django how much stuff to log DJANGO_LOG_LEVEL: INFO # 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 IS_PRODUCTION: False routes: diff --git a/ops/manifests/manifest-backup.yaml b/ops/manifests/manifest-backup.yaml index c4615d1d5..ab9e36d68 100644 --- a/ops/manifests/manifest-backup.yaml +++ b/ops/manifests/manifest-backup.yaml @@ -22,7 +22,7 @@ applications: # Tell Django how much stuff to log DJANGO_LOG_LEVEL: INFO # 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 IS_PRODUCTION: False routes: diff --git a/ops/manifests/manifest-bl.yaml b/ops/manifests/manifest-bl.yaml index 59529278b..ea0617427 100644 --- a/ops/manifests/manifest-bl.yaml +++ b/ops/manifests/manifest-bl.yaml @@ -22,7 +22,7 @@ applications: # Tell Django how much stuff to log DJANGO_LOG_LEVEL: INFO # 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 IS_PRODUCTION: False routes: diff --git a/ops/manifests/manifest-development.yaml b/ops/manifests/manifest-development.yaml index 0a1f30ffa..08244cf08 100644 --- a/ops/manifests/manifest-development.yaml +++ b/ops/manifests/manifest-development.yaml @@ -22,7 +22,7 @@ applications: # Tell Django how much stuff to log DJANGO_LOG_LEVEL: INFO # 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 IS_PRODUCTION: False routes: diff --git a/ops/manifests/manifest-dk.yaml b/ops/manifests/manifest-dk.yaml index 256beeda2..071efb416 100644 --- a/ops/manifests/manifest-dk.yaml +++ b/ops/manifests/manifest-dk.yaml @@ -22,7 +22,7 @@ applications: # Tell Django how much stuff to log DJANGO_LOG_LEVEL: INFO # 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 IS_PRODUCTION: False routes: diff --git a/ops/manifests/manifest-es.yaml b/ops/manifests/manifest-es.yaml index 47c78ce1b..7fd19b7a0 100644 --- a/ops/manifests/manifest-es.yaml +++ b/ops/manifests/manifest-es.yaml @@ -22,7 +22,7 @@ applications: # Tell Django how much stuff to log DJANGO_LOG_LEVEL: INFO # 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 IS_PRODUCTION: False routes: diff --git a/ops/manifests/manifest-gd.yaml b/ops/manifests/manifest-gd.yaml index 0c4b2535f..89a7c2169 100644 --- a/ops/manifests/manifest-gd.yaml +++ b/ops/manifests/manifest-gd.yaml @@ -22,7 +22,7 @@ applications: # Tell Django how much stuff to log DJANGO_LOG_LEVEL: INFO # 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 IS_PRODUCTION: False routes: diff --git a/ops/manifests/manifest-ko.yaml b/ops/manifests/manifest-ko.yaml index cc6a09337..a69493f9b 100644 --- a/ops/manifests/manifest-ko.yaml +++ b/ops/manifests/manifest-ko.yaml @@ -22,7 +22,7 @@ applications: # Tell Django how much stuff to log DJANGO_LOG_LEVEL: INFO # 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 IS_PRODUCTION: False routes: diff --git a/ops/manifests/manifest-ky.yaml b/ops/manifests/manifest-ky.yaml index 31d67cfb3..f416d7385 100644 --- a/ops/manifests/manifest-ky.yaml +++ b/ops/manifests/manifest-ky.yaml @@ -22,7 +22,7 @@ applications: # Tell Django how much stuff to log DJANGO_LOG_LEVEL: INFO # 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 IS_PRODUCTION: False routes: diff --git a/ops/manifests/manifest-nl.yaml b/ops/manifests/manifest-nl.yaml index ca6fb4693..d74174e7d 100644 --- a/ops/manifests/manifest-nl.yaml +++ b/ops/manifests/manifest-nl.yaml @@ -22,7 +22,7 @@ applications: # Tell Django how much stuff to log DJANGO_LOG_LEVEL: INFO # 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 IS_PRODUCTION: False routes: diff --git a/ops/manifests/manifest-rb.yaml b/ops/manifests/manifest-rb.yaml index 62f243513..570b49dde 100644 --- a/ops/manifests/manifest-rb.yaml +++ b/ops/manifests/manifest-rb.yaml @@ -22,7 +22,7 @@ applications: # Tell Django how much stuff to log DJANGO_LOG_LEVEL: INFO # 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 IS_PRODUCTION: False routes: diff --git a/ops/manifests/manifest-rh.yaml b/ops/manifests/manifest-rh.yaml index 4985f3261..f44894ce8 100644 --- a/ops/manifests/manifest-rh.yaml +++ b/ops/manifests/manifest-rh.yaml @@ -22,7 +22,7 @@ applications: # Tell Django how much stuff to log DJANGO_LOG_LEVEL: INFO # 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 IS_PRODUCTION: False routes: diff --git a/ops/manifests/manifest-rjm.yaml b/ops/manifests/manifest-rjm.yaml index 7d72e7835..048b44e95 100644 --- a/ops/manifests/manifest-rjm.yaml +++ b/ops/manifests/manifest-rjm.yaml @@ -22,7 +22,7 @@ applications: # Tell Django how much stuff to log DJANGO_LOG_LEVEL: INFO # 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 IS_PRODUCTION: False routes: diff --git a/ops/manifests/manifest-stable.yaml b/ops/manifests/manifest-stable.yaml index d8502c625..a70035445 100644 --- a/ops/manifests/manifest-stable.yaml +++ b/ops/manifests/manifest-stable.yaml @@ -22,7 +22,7 @@ applications: # Tell Django how much stuff to log DJANGO_LOG_LEVEL: INFO # default public site location - GETGOV_PUBLIC_SITE_URL: https://beta.get.gov + GETGOV_PUBLIC_SITE_URL: https://get.gov # Which OIDC provider to use OIDC_ACTIVE_PROVIDER: login.gov production # Flag to disable/enable features in prod environments diff --git a/ops/manifests/manifest-staging.yaml b/ops/manifests/manifest-staging.yaml index b616973ac..38099cf17 100644 --- a/ops/manifests/manifest-staging.yaml +++ b/ops/manifests/manifest-staging.yaml @@ -22,7 +22,7 @@ applications: # Tell Django how much stuff to log DJANGO_LOG_LEVEL: INFO # 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 IS_PRODUCTION: False routes: diff --git a/ops/manifests/manifest-za.yaml b/ops/manifests/manifest-za.yaml index 1b84a74a1..271f49da9 100644 --- a/ops/manifests/manifest-za.yaml +++ b/ops/manifests/manifest-za.yaml @@ -22,7 +22,7 @@ applications: # Tell Django how much stuff to log DJANGO_LOG_LEVEL: INFO # 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 IS_PRODUCTION: False routes: diff --git a/ops/scripts/manifest-sandbox-template-migrate.yaml b/ops/scripts/manifest-sandbox-template-migrate.yaml index dfebed766..9054e9494 100644 --- a/ops/scripts/manifest-sandbox-template-migrate.yaml +++ b/ops/scripts/manifest-sandbox-template-migrate.yaml @@ -22,7 +22,7 @@ applications: # Tell Django how much stuff to log DJANGO_LOG_LEVEL: INFO # 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 routes: - route: getgov-ENVIRONMENT-migrate.app.cloud.gov diff --git a/ops/scripts/manifest-sandbox-template.yaml b/ops/scripts/manifest-sandbox-template.yaml index 8cdb8d71b..f0aee9664 100644 --- a/ops/scripts/manifest-sandbox-template.yaml +++ b/ops/scripts/manifest-sandbox-template.yaml @@ -22,7 +22,7 @@ applications: # Tell Django how much stuff to log DJANGO_LOG_LEVEL: INFO # 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 IS_PRODUCTION: False routes: diff --git a/src/docker-compose.yml b/src/docker-compose.yml index c9b78fd8e..ba6530674 100644 --- a/src/docker-compose.yml +++ b/src/docker-compose.yml @@ -32,7 +32,7 @@ services: # Is this a production environment - IS_PRODUCTION # 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 - REGISTRY_CL_ID=nothing # Set a password for accessing the registry diff --git a/src/registrar/admin.py b/src/registrar/admin.py index 8d3b1d29f..3c1823f83 100644 --- a/src/registrar/admin.py +++ b/src/registrar/admin.py @@ -610,7 +610,7 @@ class DomainInformationAdmin(ListHeaderAdmin): ), ("Anything else?", {"fields": ["anything_else"]}), ( - "Requirements for operating .gov domains", + "Requirements for operating a .gov domain", {"fields": ["is_policy_acknowledged"]}, ), ] @@ -779,7 +779,7 @@ class DomainApplicationAdmin(ListHeaderAdmin): ), ("Anything else?", {"fields": ["anything_else"]}), ( - "Requirements for operating .gov domains", + "Requirements for operating a .gov domain", {"fields": ["is_policy_acknowledged"]}, ), ] diff --git a/src/registrar/assets/js/get-gov.js b/src/registrar/assets/js/get-gov.js index f38fc3813..29a1289a6 100644 --- a/src/registrar/assets/js/get-gov.js +++ b/src/registrar/assets/js/get-gov.js @@ -308,10 +308,22 @@ function removeForm(e, formLabel, isNameserversForm, addButton, formIdentifier){ // h2 and legend for DS form, label for nameservers 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) // inject the USWDS required markup and make sure the INPUT is required 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 const newElement = document.createElement('abbr'); newElement.textContent = '*'; @@ -334,13 +346,8 @@ function removeForm(e, formLabel, isNameserversForm, addButton, formIdentifier){ 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 @@ -563,16 +570,24 @@ function hideDeletedForms() { formNum++; 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) { + // 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; newForm.innerHTML = newForm.innerHTML.replace(formLabelRegex, `${formLabel} ${totalShownForms + 1}`); } 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(/\n/g, ''); // Remove newline characters + newForm.innerHTML = newForm.innerHTML.replace(/>\s*<'); // Remove spaces between tags container.insertBefore(newForm, addButton); newForm.style.display = 'block'; diff --git a/src/registrar/assets/sass/_theme/_tables.scss b/src/registrar/assets/sass/_theme/_tables.scss index 6dcc6f3bc..84c4791e5 100644 --- a/src/registrar/assets/sass/_theme/_tables.scss +++ b/src/registrar/assets/sass/_theme/_tables.scss @@ -25,6 +25,22 @@ color: color('primary-darker'); padding-bottom: units(2px); } + + // Ticket #1510 + // @include at-media('desktop') { + // th:first-child { + // width: 220px; + // } + // th:nth-child(2) { + // width: 175px; + // } + // th:nth-child(3) { + // width: 130px; + // } + // th:nth-child(5) { + // width: 130px; + // } + // } } .dotgov-table { diff --git a/src/registrar/config/settings.py b/src/registrar/config/settings.py index 2de7e6eb2..efa512f22 100644 --- a/src/registrar/config/settings.py +++ b/src/registrar/config/settings.py @@ -335,7 +335,7 @@ CSP_INCLUDE_NONCE_IN = ["script-src-elem"] # Cross-Origin Resource Sharing (CORS) configuration # Sets clients that allow access control to manage.get.gov # 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"] # Content-Length header is set by django.middleware.common.CommonMiddleware diff --git a/src/registrar/config/urls.py b/src/registrar/config/urls.py index a01707faa..ba5ae22cc 100644 --- a/src/registrar/config/urls.py +++ b/src/registrar/config/urls.py @@ -137,6 +137,11 @@ urlpatterns = [ views.DomainInvitationDeleteView.as_view(http_method_names=["post"]), name="invitation-delete", ), + path( + "application//delete", + views.DomainApplicationDeleteView.as_view(http_method_names=["post"]), + name="application-delete", + ), ] # we normally would guard these with `if settings.DEBUG` but tests run with diff --git a/src/registrar/forms/application_wizard.py b/src/registrar/forms/application_wizard.py index 284705a9a..1ee7e0036 100644 --- a/src/registrar/forms/application_wizard.py +++ b/src/registrar/forms/application_wizard.py @@ -487,7 +487,8 @@ class DotGovDomainForm(RegistrarForm): values = {} requested_domain = getattr(obj, "requested_domain", None) if requested_domain is not None: - values["requested_domain"] = Domain.sld(requested_domain.name) + domain_name = requested_domain.name + values["requested_domain"] = Domain.sld(domain_name) return values def clean_requested_domain(self): @@ -837,8 +838,8 @@ class AnythingElseForm(RegistrarForm): class RequirementsForm(RegistrarForm): is_policy_acknowledged = forms.BooleanField( - label="I read and agree to the requirements for operating .gov domains.", + label="I read and agree to the requirements for operating a .gov domain.", error_messages={ - "required": ("Check the box if you read and agree to the requirements for operating .gov domains.") + "required": ("Check the box if you read and agree to the requirements for operating a .gov domain.") }, ) diff --git a/src/registrar/management/commands/disclose_security_emails.py b/src/registrar/management/commands/disclose_security_emails.py new file mode 100644 index 000000000..62989e4c0 --- /dev/null +++ b/src/registrar/management/commands/disclose_security_emails.py @@ -0,0 +1,69 @@ +"""" +Converts all ready and DNS needed domains with a non-default public contact +to disclose their public contact. Created for Issue#1535 to resolve + disclose issue of domains with missing security emails. +""" + +import logging +import copy + +from django.core.management import BaseCommand +from registrar.models import Domain + +logger = logging.getLogger(__name__) + + +class Command(BaseCommand): + help = "Disclose all nondefault domain security emails." + + def __init__(self): + """Sets global variables for code tidiness""" + super().__init__() + # domains with errors, which are not successfully updated to disclose + self.domains_with_errors: list[str] = [] + # domains that are successfully disclosed + self.disclosed_domain_contacts_count = 0 + # domains that skip disclose due to having contact registrar@dotgov.gov + self.skipped_domain_contacts_count = 0 + + def handle(self, **options): + """ + Converts all ready and DNS needed domains with a non-default public contact + to disclose their public contact. + """ + logger.info("Updating security emails to public") + + # Initializes domains that need to be disclosed + + statuses = [Domain.State.READY, Domain.State.DNS_NEEDED] + domains = Domain.objects.filter(state__in=statuses) + + logger.info(f"Found {len(domains)} domains with status Ready or DNS Needed.") + + # Update EPP contact for domains with a security contact + for domain in domains: + try: + contact = domain.security_contact # noqa on these items as we only want to call security_contact + logger.info(f"Domain {domain.name} security contact: {domain.security_contact.email}") + if domain.security_contact.email != "registrar@dotgov.gov": + domain._update_epp_contact(contact=domain.security_contact) + self.disclosed_domain_contacts_count += 1 + else: + logger.info( + f"Skipping disclose for {domain.name} security contact {domain.security_contact.email}." + ) + self.skipped_domain_contacts_count += 1 + except Exception as err: + # error condition if domain not in database + self.domains_with_errors.append(copy.deepcopy(domain.name)) + logger.error(f"error retrieving domain {domain.name} contact {domain.security_contact}: {err}") + + # Inform user how many contacts were disclosed, skipped, and errored + logger.info(f"Updated {self.disclosed_domain_contacts_count} contacts to disclosed.") + logger.info( + f"Skipped disclosing {self.skipped_domain_contacts_count} contacts with security email " + f"registrar@dotgov.gov." + ) + logger.info( + f"Error disclosing the following {len(self.domains_with_errors)} contacts: {self.domains_with_errors}" + ) diff --git a/src/registrar/models/domain.py b/src/registrar/models/domain.py index 001937b89..1a581a4ec 100644 --- a/src/registrar/models/domain.py +++ b/src/registrar/models/domain.py @@ -1396,11 +1396,13 @@ class Domain(TimeStampedModel, DomainHelper): def _disclose_fields(self, contact: PublicContact): """creates a disclose object that can be added to a contact Create using .disclose= on the command before sending. - if item is security email then make sure email is visable""" + if item is security email then make sure email is visible""" is_security = contact.contact_type == contact.ContactTypeChoices.SECURITY DF = epp.DiscloseField fields = {DF.EMAIL} disclose = is_security and contact.email != PublicContact.get_default_security().email + # Delete after testing on other devices + logger.info("Updated domain contact %s to disclose: %s", contact.email, disclose) # Will only disclose DF.EMAIL if its not the default return epp.Disclose( flag=disclose, diff --git a/src/registrar/templates/application_form.html b/src/registrar/templates/application_form.html index c34ddf5bc..524045fbe 100644 --- a/src/registrar/templates/application_form.html +++ b/src/registrar/templates/application_form.html @@ -1,7 +1,7 @@ {% extends 'base.html' %} {% load static form_helpers url_helpers %} -{% block title %}Apply for a .gov domain | {{form_titles|get_item:steps.current}} | {% endblock %} +{% block title %}Request a .gov domain | {{form_titles|get_item:steps.current}} | {% endblock %} {% block content %}
diff --git a/src/registrar/templates/application_org_contact.html b/src/registrar/templates/application_org_contact.html index 01b55d03d..e8e8f50bf 100644 --- a/src/registrar/templates/application_org_contact.html +++ b/src/registrar/templates/application_org_contact.html @@ -1,8 +1,8 @@ {% extends 'application_form.html' %} -{% load field_helpers %} +{% load field_helpers url_helpers %} {% block form_instructions %} -

If your domain request is approved, the name of your organization and your city/state will be listed in .gov’s public data.

+

If your domain request is approved, the name of your organization and your city/state will be listed in .gov’s public data.

What is the name and mailing address of the organization you represent?

diff --git a/src/registrar/templates/application_other_contacts.html b/src/registrar/templates/application_other_contacts.html index c8810edce..4e13f705b 100644 --- a/src/registrar/templates/application_other_contacts.html +++ b/src/registrar/templates/application_other_contacts.html @@ -2,11 +2,11 @@ {% load static field_helpers %} {% block form_instructions %} -

To help us assess your eligibility for a .gov domain, please provide contact information for other employees from your organization. +

To help us determine your organization’s eligibility for a .gov domain, it’s helpful to have contact information for other employees from your organization.

    -
  • They should be clearly and publicly affiliated with your organization and familiar with your domain request.
  • -
  • They don't need to be involved with the technical management of your domain (although they can be).
  • -
  • We typically don’t reach out to these employees, but if contact is necessary, our practice is to coordinate first with you, the requestor.
  • +
  • They should be clearly and publicly affiliated with your organization and familiar with your domain request.
  • +
  • They don’t need to be involved with the technical management of your domain (although they can be).
  • +
  • We typically don’t reach out to these employees, but if contact is necessary, our practice is to coordinate with you first.

@@ -88,9 +88,7 @@

No other employees from your organization?

-

You don't 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.

+

You don’t 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.

{% with attr_maxlength=1000 add_label_class="usa-sr-only" %} {% input_with_errors forms.2.no_other_contacts_rationale %} {% endwith %} diff --git a/src/registrar/templates/application_requirements.html b/src/registrar/templates/application_requirements.html index d16edf963..ef0bf00f2 100644 --- a/src/registrar/templates/application_requirements.html +++ b/src/registrar/templates/application_requirements.html @@ -2,7 +2,7 @@ {% load field_helpers %} {% block form_instructions %} -

Please read this page. Check the box at the bottom to show that you agree to the requirements for operating .gov domains.

+

Please read this page. Check the box at the bottom to show that you agree to the requirements for operating a .gov domain.

The .gov domain space exists to support a broad diversity of government missions. Generally, we don’t review or audit how government organizations use their registered domains. However, misuse of a .gov domain can reflect upon the integrity of the entire .gov space. There are categories of misuse that are statutorily prohibited or abusive in nature.

diff --git a/src/registrar/templates/application_status.html b/src/registrar/templates/application_status.html index fbabf39a7..590d00b28 100644 --- a/src/registrar/templates/application_status.html +++ b/src/registrar/templates/application_status.html @@ -90,7 +90,7 @@ {% endif %} {% 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 %} {% if domainapplication.requested_domain %} diff --git a/src/registrar/templates/base.html b/src/registrar/templates/base.html index a07bf67ee..2786cca22 100644 --- a/src/registrar/templates/base.html +++ b/src/registrar/templates/base.html @@ -70,19 +70,6 @@ Skip to main content - {% if IS_DEMO_SITE %} -
-
-
-

New domain requests are paused

-

- This is the new registrar for managing .gov domains. Note that we’re not accepting requests for new .gov domains until January 2024. Follow .gov updates at get.gov/updates/. -

-
-
-
- {% endif %} -
diff --git a/src/registrar/templates/django/forms/label.html b/src/registrar/templates/django/forms/label.html index 18d24a7bd..545ccf781 100644 --- a/src/registrar/templates/django/forms/label.html +++ b/src/registrar/templates/django/forms/label.html @@ -10,7 +10,7 @@ {% if widget.attrs.required %} - {% if field.label == "Is your organization an election office?" or field.label == "What .gov domain do you want?" or field.label == "I read and agree to the requirements for operating .gov domains." or field.label == "Please explain why there are no other employees from your organization we can contact to help us assess your eligibility for a .gov domain." %} + {% if field.label == "Is your organization an election office?" or field.label == "What .gov domain do you want?" or field.label == "I read and agree to the requirements for operating a .gov domain." or field.label == "Please explain why there are no other employees from your organization we can contact to help us assess your eligibility for a .gov domain." %} {% else %} * {% endif %} diff --git a/src/registrar/templates/domain_add_user.html b/src/registrar/templates/domain_add_user.html index 4bad529a7..d67c343a6 100644 --- a/src/registrar/templates/domain_add_user.html +++ b/src/registrar/templates/domain_add_user.html @@ -1,7 +1,7 @@ {% extends "domain_base.html" %} {% load static field_helpers %} -{% block title %}Add another user | {% endblock %} +{% block title %}Add a domain manager | {% endblock %} {% block domain_content %}

Add a domain manager

diff --git a/src/registrar/templates/domain_security_email.html b/src/registrar/templates/domain_security_email.html index 4054186da..e1755f85e 100644 --- a/src/registrar/templates/domain_security_email.html +++ b/src/registrar/templates/domain_security_email.html @@ -20,7 +20,7 @@ + >{% 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 %} {% endblock %} {# domain_content #} diff --git a/src/registrar/templates/emails/includes/application_summary.txt b/src/registrar/templates/emails/includes/application_summary.txt index c628e1074..ee2564613 100644 --- a/src/registrar/templates/emails/includes/application_summary.txt +++ b/src/registrar/templates/emails/includes/application_summary.txt @@ -17,7 +17,7 @@ About your organization: Authorizing official: {% spaceless %}{% include "emails/includes/contact.txt" with contact=application.authorizing_official %}{% endspaceless %} {% 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 %} {% endfor %}{% endif %} .gov domain: diff --git a/src/registrar/templates/emails/status_change_approved.txt b/src/registrar/templates/emails/status_change_approved.txt index bc548bfb6..8283f0e67 100644 --- a/src/registrar/templates/emails/status_change_approved.txt +++ b/src/registrar/templates/emails/status_change_approved.txt @@ -32,6 +32,14 @@ Learn more about: - Domain security best practices +WE’LL 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 you’ll need to support HTTPS anywhere the domain is used for websites – on the internet or internally. We’ll add your domain to the preload list soon. + +Learn more about: +- What preloading is +- Why we preload new domains + + THANK YOU .Gov helps the public identify official, trusted information. Thank you for using a .gov domain. diff --git a/src/registrar/templates/home.html b/src/registrar/templates/home.html index 138f83e04..c7a005f97 100644 --- a/src/registrar/templates/home.html +++ b/src/registrar/templates/home.html @@ -9,29 +9,17 @@ {% if user.is_authenticated %} {# the entire logged in page goes here #} -
+

Manage your domains

- {% if IS_PRODUCTION %} - - Start a new domain request - - {% else %} Start a new domain request - {% endif %}

-
+

Domains

{% if domains %} @@ -41,7 +29,12 @@ - + @@ -58,7 +51,7 @@ {% elif domain.state == domain.State.UNKNOWN or domain.state == domain.State.DNS_NEEDED %} DNS needed {% else %} - {{ domain.state|title }} + {{ domain.state|capfirst }} {% endif %}
Domain name Expires StatusAction + Action +
@@ -94,7 +87,7 @@ {% endif %} -
+

Domain requests

{% if domain_applications %} @@ -105,13 +98,23 @@ + {% if has_deletable_applications %} + + {% endif %} {% for application in domain_applications %} + {% if has_deletable_applications %} + + {% endif %} {% endfor %} diff --git a/src/registrar/templates/includes/modal.html b/src/registrar/templates/includes/modal.html index 1f9fbcfd4..8e6cb66d5 100644 --- a/src/registrar/templates/includes/modal.html +++ b/src/registrar/templates/includes/modal.html @@ -4,6 +4,11 @@
Date submitted Status ActionDelete Action
- {{ application.requested_domain.name|default:"New domain request" }} + {% if application.requested_domain is None %} + New domain request + {# Add a breakpoint #} + + ({{ application.created_at }} UTC) + {% else %} + {{ application.requested_domain.name }} + {% endif %} {% if application.submission_date %} @@ -122,22 +125,88 @@ {{ application.get_status_display }} - {% if application.status == "started" or application.status == "action needed" or application.status == "withdrawn" %} - - - Edit {{ application.requested_domain.name|default:"New domain request" }} - - {% else %} - - - Manage {{application.requested_domain.name}} - {% endif %} + {% with prefix="New domain request ("%} + {% with date=application.created_at|date:"DATETIME_FORMAT"%} + {% with name_default=prefix|add:date|add:" UTC)"%} + {% if application.status == application.ApplicationStatus.STARTED or application.status == application.ApplicationStatus.ACTION_NEEDED or application.status == application.ApplicationStatus.WITHDRAWN %} + + + {% if application.requested_domain is not None%} + Edit {{ application.requested_domain.name }} + {% else %} + Edit {{ name_default }} + {% endif %} + {% else %} + + + Manage {{ application.requested_domain.name|default:name_default }} + {% endif %} + {% endwith %} + {% endwith %} + {% endwith %} + {% if application.status == "started" or application.status == "withdrawn" %} + + + {% with prefix="New domain request ("%} + {% with date=application.created_at|date:"DATETIME_FORMAT"%} + {% with name_default=prefix|add:date|add:" UTC)"%} + {% if application.requested_domain is not None %} + Delete {{ application.requested_domain.name }} + {% else %} + Delete {{ name_default }} + {% endif %} + {% endwith %} + {% endwith %} + {% endwith %} + + +
+
+ {% if application.requested_domain is None %} + {% if application.created_at %} + {% with prefix="(created " %} + {% with formatted_date=application.created_at|date:"DATETIME_FORMAT" %} + {% with modal_content=prefix|add:formatted_date|add:" UTC)" %} + {% include 'includes/modal.html' with modal_heading="Are you sure you want to delete this domain request?" modal_description="This will remove the domain request "|add:modal_content|add:" from the .gov registrar. This action cannot be undone." modal_button=modal_button|safe %} + {% endwith %} + {% endwith %} + {% endwith %} + {% else %} + {% include 'includes/modal.html' with modal_heading="Are you sure you want to delete New domain request?" modal_description="This will remove the domain request from the .gov registrar. This action cannot be undone." modal_button=modal_button|safe %} + {% endif %} + {% else %} + {% with modal_heading_value=application.requested_domain.name|add:"?" %} + {% include 'includes/modal.html' with modal_heading="Are you sure you want to delete" heading_value=modal_heading_value modal_description="This will remove the domain request from the .gov registrar. This action cannot be undone." modal_button=modal_button|safe %} + {% endwith %} + {% endif %} +
+
+ {% endif %} +