mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-08 19:53:13 -04:00
Merge branch 'main' of https://github.com/GSA/notifications-admin into 1250-login-gov-add-new-user
This commit is contained in:
1
.github/workflows/deploy-demo.yml
vendored
1
.github/workflows/deploy-demo.yml
vendored
@@ -54,6 +54,7 @@ jobs:
|
|||||||
ADMIN_CLIENT_SECRET: ${{ secrets.ADMIN_CLIENT_SECRET }}
|
ADMIN_CLIENT_SECRET: ${{ secrets.ADMIN_CLIENT_SECRET }}
|
||||||
NEW_RELIC_LICENSE_KEY: ${{ secrets.NEW_RELIC_LICENSE_KEY }}
|
NEW_RELIC_LICENSE_KEY: ${{ secrets.NEW_RELIC_LICENSE_KEY }}
|
||||||
NR_BROWSER_KEY: ${{ secrets.NR_BROWSER_KEY }}
|
NR_BROWSER_KEY: ${{ secrets.NR_BROWSER_KEY }}
|
||||||
|
COMMIT_HASH: $(git rev-parse --short "$GITHUB_SHA")
|
||||||
LOGIN_PEM: ${{ secrets.LOGIN_PEM }}
|
LOGIN_PEM: ${{ secrets.LOGIN_PEM }}
|
||||||
LOGIN_DOT_GOV_CLIENT_ID: "urn:gov:gsa:openidconnect.profiles:sp:sso:gsa:notify-gov"
|
LOGIN_DOT_GOV_CLIENT_ID: "urn:gov:gsa:openidconnect.profiles:sp:sso:gsa:notify-gov"
|
||||||
LOGIN_DOT_GOV_USER_INFO_URL: "https://secure.login.gov/api/openid_connect/userinfo"
|
LOGIN_DOT_GOV_USER_INFO_URL: "https://secure.login.gov/api/openid_connect/userinfo"
|
||||||
|
|||||||
1
.github/workflows/deploy-prod.yml
vendored
1
.github/workflows/deploy-prod.yml
vendored
@@ -54,6 +54,7 @@ jobs:
|
|||||||
ADMIN_CLIENT_SECRET: ${{ secrets.ADMIN_CLIENT_SECRET }}
|
ADMIN_CLIENT_SECRET: ${{ secrets.ADMIN_CLIENT_SECRET }}
|
||||||
NEW_RELIC_LICENSE_KEY: ${{ secrets.NEW_RELIC_LICENSE_KEY }}
|
NEW_RELIC_LICENSE_KEY: ${{ secrets.NEW_RELIC_LICENSE_KEY }}
|
||||||
NR_BROWSER_KEY: ${{ secrets.NR_BROWSER_KEY }}
|
NR_BROWSER_KEY: ${{ secrets.NR_BROWSER_KEY }}
|
||||||
|
COMMIT_HASH: $(git rev-parse --short "$GITHUB_SHA")
|
||||||
LOGIN_PEM: ${{ secrets.LOGIN_PEM }}
|
LOGIN_PEM: ${{ secrets.LOGIN_PEM }}
|
||||||
LOGIN_DOT_GOV_CLIENT_ID: "urn:gov:gsa:openidconnect.profiles:sp:sso:gsa:notify-gov"
|
LOGIN_DOT_GOV_CLIENT_ID: "urn:gov:gsa:openidconnect.profiles:sp:sso:gsa:notify-gov"
|
||||||
LOGIN_DOT_GOV_USER_INFO_URL: "https://secure.login.gov/api/openid_connect/userinfo"
|
LOGIN_DOT_GOV_USER_INFO_URL: "https://secure.login.gov/api/openid_connect/userinfo"
|
||||||
|
|||||||
2
.github/workflows/deploy.yml
vendored
2
.github/workflows/deploy.yml
vendored
@@ -60,6 +60,7 @@ jobs:
|
|||||||
ADMIN_CLIENT_SECRET: ${{ secrets.ADMIN_CLIENT_SECRET }}
|
ADMIN_CLIENT_SECRET: ${{ secrets.ADMIN_CLIENT_SECRET }}
|
||||||
NEW_RELIC_LICENSE_KEY: ${{ secrets.NEW_RELIC_LICENSE_KEY }}
|
NEW_RELIC_LICENSE_KEY: ${{ secrets.NEW_RELIC_LICENSE_KEY }}
|
||||||
NR_BROWSER_KEY: ${{ secrets.NR_BROWSER_KEY }}
|
NR_BROWSER_KEY: ${{ secrets.NR_BROWSER_KEY }}
|
||||||
|
COMMIT_HASH: $(git rev-parse --short "$GITHUB_SHA")
|
||||||
LOGIN_PEM: ${{ secrets.LOGIN_PEM }}
|
LOGIN_PEM: ${{ secrets.LOGIN_PEM }}
|
||||||
LOGIN_DOT_GOV_CLIENT_ID: "urn:gov:gsa:openidconnect.profiles:sp:sso:gsa:notify-gov"
|
LOGIN_DOT_GOV_CLIENT_ID: "urn:gov:gsa:openidconnect.profiles:sp:sso:gsa:notify-gov"
|
||||||
LOGIN_DOT_GOV_USER_INFO_URL: "https://secure.login.gov/api/openid_connect/userinfo"
|
LOGIN_DOT_GOV_USER_INFO_URL: "https://secure.login.gov/api/openid_connect/userinfo"
|
||||||
@@ -81,6 +82,7 @@ jobs:
|
|||||||
--var ADMIN_CLIENT_SECRET="$ADMIN_CLIENT_SECRET"
|
--var ADMIN_CLIENT_SECRET="$ADMIN_CLIENT_SECRET"
|
||||||
--var NEW_RELIC_LICENSE_KEY="$NEW_RELIC_LICENSE_KEY"
|
--var NEW_RELIC_LICENSE_KEY="$NEW_RELIC_LICENSE_KEY"
|
||||||
--var NR_BROWSER_KEY="$NR_BROWSER_KEY"
|
--var NR_BROWSER_KEY="$NR_BROWSER_KEY"
|
||||||
|
--var COMMIT_HASH="$COMMIT_HASH"
|
||||||
--var LOGIN_PEM="$LOGIN_PEM"
|
--var LOGIN_PEM="$LOGIN_PEM"
|
||||||
--var LOGIN_DOT_GOV_CLIENT_ID="$LOGIN_DOT_GOV_CLIENT_ID"
|
--var LOGIN_DOT_GOV_CLIENT_ID="$LOGIN_DOT_GOV_CLIENT_ID"
|
||||||
--var LOGIN_DOT_GOV_USER_INFO_URL="$LOGIN_DOT_GOV_USER_INFO_URL"
|
--var LOGIN_DOT_GOV_USER_INFO_URL="$LOGIN_DOT_GOV_USER_INFO_URL"
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ class Config(object):
|
|||||||
NR_BROWSER_KEY = getenv("NR_BROWSER_KEY")
|
NR_BROWSER_KEY = getenv("NR_BROWSER_KEY")
|
||||||
settings = newrelic.agent.global_settings()
|
settings = newrelic.agent.global_settings()
|
||||||
NR_MONITOR_ON = settings and settings.monitor_mode
|
NR_MONITOR_ON = settings and settings.monitor_mode
|
||||||
|
COMMIT_HASH = getenv("COMMIT_HASH", "-----")
|
||||||
|
|
||||||
TEMPLATE_PREVIEW_API_HOST = getenv(
|
TEMPLATE_PREVIEW_API_HOST = getenv(
|
||||||
"TEMPLATE_PREVIEW_API_HOST", "http://localhost:9999"
|
"TEMPLATE_PREVIEW_API_HOST", "http://localhost:9999"
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import itertools
|
|
||||||
import time
|
import time
|
||||||
import uuid
|
import uuid
|
||||||
from string import ascii_uppercase
|
from string import ascii_uppercase
|
||||||
@@ -517,19 +516,27 @@ def _check_messages(service_id, template_id, upload_id, preview_row):
|
|||||||
current_service,
|
current_service,
|
||||||
show_recipient=False,
|
show_recipient=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
allow_list = []
|
||||||
|
if current_service.trial_mode:
|
||||||
|
# Adding the simulated numbers to allow list
|
||||||
|
# so they can be sent in trial mode
|
||||||
|
for user in Users(service_id):
|
||||||
|
allow_list.extend([user.name, user.mobile_number, user.email_address])
|
||||||
|
# Failed sms number
|
||||||
|
allow_list.extend(["simulated user (fail)", "+14254147167", "simulated@simulated.gov"])
|
||||||
|
# Success sms number
|
||||||
|
allow_list.extend(
|
||||||
|
["simulated user (success)", "+14254147755", "simulatedtwo@simulated.gov"]
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
allow_list = None
|
||||||
recipients = RecipientCSV(
|
recipients = RecipientCSV(
|
||||||
contents,
|
contents,
|
||||||
template=template or simplifed_template,
|
template=template or simplifed_template,
|
||||||
max_initial_rows_shown=50,
|
max_initial_rows_shown=50,
|
||||||
max_errors_shown=50,
|
max_errors_shown=50,
|
||||||
guestlist=(
|
guestlist=allow_list,
|
||||||
itertools.chain.from_iterable(
|
|
||||||
[user.name, user.mobile_number, user.email_address]
|
|
||||||
for user in Users(service_id)
|
|
||||||
)
|
|
||||||
if current_service.trial_mode
|
|
||||||
else None
|
|
||||||
),
|
|
||||||
remaining_messages=remaining_messages,
|
remaining_messages=remaining_messages,
|
||||||
allow_international_sms=current_service.has_permission("international_sms"),
|
allow_international_sms=current_service.has_permission("international_sms"),
|
||||||
)
|
)
|
||||||
@@ -560,7 +567,9 @@ def _check_messages(service_id, template_id, upload_id, preview_row):
|
|||||||
|
|
||||||
if preview_row < len(recipients) + 2:
|
if preview_row < len(recipients) + 2:
|
||||||
template.values = recipients[preview_row - 2].recipient_and_personalisation
|
template.values = recipients[preview_row - 2].recipient_and_personalisation
|
||||||
simplifed_template.values = recipients[preview_row - 2].recipient_and_personalisation
|
simplifed_template.values = recipients[
|
||||||
|
preview_row - 2
|
||||||
|
].recipient_and_personalisation
|
||||||
elif preview_row > 2:
|
elif preview_row > 2:
|
||||||
abort(404)
|
abort(404)
|
||||||
|
|
||||||
@@ -863,7 +872,7 @@ def _check_notification(service_id, template_id, exception=None):
|
|||||||
back_link_from_preview=back_link_from_preview,
|
back_link_from_preview=back_link_from_preview,
|
||||||
choose_time_form=choose_time_form,
|
choose_time_form=choose_time_form,
|
||||||
**(get_template_error_dict(exception) if exception else {}),
|
**(get_template_error_dict(exception) if exception else {}),
|
||||||
simplifed_template=simplifed_template
|
simplifed_template=simplifed_template,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -179,7 +179,9 @@
|
|||||||
{% if current_service and current_service.research_mode %}
|
{% if current_service and current_service.research_mode %}
|
||||||
{% set meta_suffix = 'Built by the <a href="https://www.gsa.gov/about-us/organization/federal-acquisition-service/technology-transformation-services/tts-solutions" class="usa-link">Technology Transformation Services</a><span id="research-mode" class="research-mode">research mode</span>' %}
|
{% set meta_suffix = 'Built by the <a href="https://www.gsa.gov/about-us/organization/federal-acquisition-service/technology-transformation-services/tts-solutions" class="usa-link">Technology Transformation Services</a><span id="research-mode" class="research-mode">research mode</span>' %}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% set meta_suffix = 'Built by the <a href="https://www.gsa.gov/about-us/organization/federal-acquisition-service/technology-transformation-services/tts-solutions" class="usa-link">Technology Transformation Services</a>' %}
|
{% set commit_hash = ", Latest version: " + config['COMMIT_HASH'] %}
|
||||||
|
{% set long_link = '<a href="https://www.gsa.gov/about-us/organization/federal-acquisition-service/technology-transformation-services/tts-solutions" class="usa-link">Technology Transformation Services</a>' %}
|
||||||
|
{% set meta_suffix = "Built by the " + long_link + commit_hash %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{{ usaFooter({
|
{{ usaFooter({
|
||||||
@@ -240,7 +242,7 @@
|
|||||||
{
|
{
|
||||||
"href": url_for('main.support'),
|
"href": url_for('main.support'),
|
||||||
"text": "Contact us"
|
"text": "Contact us"
|
||||||
},
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -41,7 +41,7 @@
|
|||||||
<h3>To create and format your message</h3>
|
<h3>To create and format your message</h3>
|
||||||
<ol class="list">
|
<ol class="list">
|
||||||
<li>All messages start from a template</li>
|
<li>All messages start from a template</li>
|
||||||
<li>Click “<a href={{ url_for('.choose_template', service_id=current_service.id) }}>Send Messages</a>”. You’ll see existing templates.</li>
|
<li>Click "<a href={{ url_for('.choose_template', service_id=current_service.id) }}>Send Messages</a>". You'll see existing templates.</li>
|
||||||
<li>Add a new template or choose an existing template and select Edit.</li>
|
<li>Add a new template or choose an existing template and select Edit.</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
@@ -69,7 +69,7 @@
|
|||||||
<h2 class="padding-top-1" id="personalize-content">Personalize your content</h2>
|
<h2 class="padding-top-1" id="personalize-content">Personalize your content</h2>
|
||||||
<p>Personalizing your content can increase response rates and help the recipient know the text is legitimate.</p>
|
<p>Personalizing your content can increase response rates and help the recipient know the text is legitimate.</p>
|
||||||
<ul class="list list-bullet">
|
<ul class="list list-bullet">
|
||||||
<li>Including a person’s first name increases response rates.</li>
|
<li>Including a person's first name increases response rates.</li>
|
||||||
<li>Specific details such as time and location of an appointment or where suspected fraud use occurred encourages action.</li>
|
<li>Specific details such as time and location of an appointment or where suspected fraud use occurred encourages action.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
@@ -82,7 +82,10 @@
|
|||||||
|
|
||||||
<h4>Example</h4>
|
<h4>Example</h4>
|
||||||
<p>To personalize with the recipient's first name and include a reference number:</p>
|
<p>To personalize with the recipient's first name and include a reference number:</p>
|
||||||
<p class="padding-2 bg-base-lightest">State WIC: Hello ((first name)), your reference is ((ref number)). Please provide this number when you call 123-123-1234 to make an appointment.</p>
|
<p class="padding-2 bg-base-lightest">State WIC: Hello ((first name)), your reference is ((ref number)). Please provide this number when you call 555-123-1234 to make an appointment.</p>
|
||||||
|
|
||||||
|
<p>Note that variations in the length of personalized content can impact the length of specific messages, and may affect
|
||||||
|
the number of parts used.</p>
|
||||||
|
|
||||||
{# Add conditional content #}
|
{# Add conditional content #}
|
||||||
<h2 class="padding-top-1" id="conditional-content">Add conditional content</h2>
|
<h2 class="padding-top-1" id="conditional-content">Add conditional content</h2>
|
||||||
@@ -106,7 +109,7 @@
|
|||||||
<li>
|
<li>
|
||||||
If you want to make people who are homebound aware of the option of virtual visits (but not other message recipients):
|
If you want to make people who are homebound aware of the option of virtual visits (but not other message recipients):
|
||||||
</br>
|
</br>
|
||||||
<p class="padding-2 bg-base-lightest">State Medicaid: Please call 123-123-1234 to schedule an appointment. ((homebound??Virtual visits are available.))</p>
|
<p class="padding-2 bg-base-lightest">State Medicaid: Please call 555-123-1234 to schedule an appointment. ((homebound??Virtual visits are available.))</p>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
If you want to send a messages in different languages to different recipients:
|
If you want to send a messages in different languages to different recipients:
|
||||||
@@ -231,7 +234,7 @@
|
|||||||
</li>
|
</li>
|
||||||
<li>Auto-response text:
|
<li>Auto-response text:
|
||||||
</br>
|
</br>
|
||||||
<p class="padding-2 bg-base-lightest">State Agency: This number is unmonitored. To contact us, call us at 123-123-1234. We will never ask for personal details
|
<p class="padding-2 bg-base-lightest">State Agency: This number is unmonitored. To contact us, call us at 555-123-1234. We will never ask for personal details
|
||||||
in a text. If you have questions about how to protect your privacy, see statename.gov/privacy.</p>
|
in a text. If you have questions about how to protect your privacy, see statename.gov/privacy.</p>
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
|||||||
@@ -6,16 +6,16 @@
|
|||||||
{% extends "content_template.html" %}
|
{% extends "content_template.html" %}
|
||||||
|
|
||||||
{% block per_page_title %}
|
{% block per_page_title %}
|
||||||
Pricing
|
Message parts
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block content_column_content %}
|
{% block content_column_content %}
|
||||||
|
|
||||||
<h1 class="font-body-2xl margin-bottom-3">Pricing</h1>
|
<h1 class="font-body-2xl margin-bottom-3">Message parts</h1>
|
||||||
|
|
||||||
{{ content_metadata(
|
{{ content_metadata(
|
||||||
data={
|
data={
|
||||||
"Last updated": "January 25, 2024"
|
"Last updated": "February 5, 2024"
|
||||||
}
|
}
|
||||||
) }}
|
) }}
|
||||||
|
|
||||||
@@ -30,7 +30,8 @@ more parts towards the allowance if you:</p>
|
|||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h3 class="font-body-lg" id="long-text-messages">Long text messages</h3>
|
<h3 class="font-body-lg" id="long-text-messages">Long text messages</h3>
|
||||||
<p>If a text message is longer than 160 characters (including spaces), it counts as more than one message part.</p>
|
<p>If a text message is longer than 160 characters (including spaces and service name), it counts as more than one message
|
||||||
|
part.</p>
|
||||||
|
|
||||||
<div class="bottom-gutter-3-2">
|
<div class="bottom-gutter-3-2">
|
||||||
{% call mapping_table(
|
{% call mapping_table(
|
||||||
@@ -55,6 +56,13 @@ more parts towards the allowance if you:</p>
|
|||||||
{% endcall %}
|
{% endcall %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<h3 class="font-body-lg" id="Personalization">Personalization</h3>
|
||||||
|
<p>Personalization can change the length of messages. For example, if you are personalizing with a first name, Fred is
|
||||||
|
significantly shorter than Alexander. When you are evaluating how long a message is, you need to consider variations in
|
||||||
|
message length based on personalization.</p>
|
||||||
|
<p>Before you send messages, Notify will let you know how many messages you are sending, the number of parts you are using,
|
||||||
|
and the number of parts you’ll have left.</p>
|
||||||
|
|
||||||
<h3 class="font-body-lg" id="symbols">Signs and symbols</h3>
|
<h3 class="font-body-lg" id="symbols">Signs and symbols</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@@ -158,9 +166,4 @@ more parts towards the allowance if you:</p>
|
|||||||
{% endcall %}
|
{% endcall %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h3 class="font-body-lg" id="international-numbers">Trial mode</h3>
|
|
||||||
<p>When a new service is added, it will start in <a href="/using-notify/trial-mode">trial mode</a>. Moving a service out of trial mode is subject to approval by
|
|
||||||
the Notify.gov team. Additional unique services may be added, although moving each service out of trial mode is subject
|
|
||||||
to approval by the Notify.gov team.</p>
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -47,6 +47,8 @@ applications:
|
|||||||
REQUESTS_CA_BUNDLE: "/etc/ssl/certs/ca-certificates.crt"
|
REQUESTS_CA_BUNDLE: "/etc/ssl/certs/ca-certificates.crt"
|
||||||
NEW_RELIC_CA_BUNDLE_PATH: "/etc/ssl/certs/ca-certificates.crt"
|
NEW_RELIC_CA_BUNDLE_PATH: "/etc/ssl/certs/ca-certificates.crt"
|
||||||
|
|
||||||
|
COMMIT_HASH: ((COMMIT_HASH))
|
||||||
|
|
||||||
# login.gov variables
|
# login.gov variables
|
||||||
|
|
||||||
LOGIN_PEM: ((LOGIN_PEM))
|
LOGIN_PEM: ((LOGIN_PEM))
|
||||||
|
|||||||
@@ -2612,8 +2612,10 @@ def test_preview_notification_shows_preview(
|
|||||||
session["placeholders"] = {}
|
session["placeholders"] = {}
|
||||||
|
|
||||||
page = client_request.post(
|
page = client_request.post(
|
||||||
"main.preview_notification", service_id=service_one["id"], template_id=fake_uuid,
|
"main.preview_notification",
|
||||||
_expected_status=200
|
service_id=service_one["id"],
|
||||||
|
template_id=fake_uuid,
|
||||||
|
_expected_status=200,
|
||||||
)
|
)
|
||||||
assert page.h1.text.strip() == "Preview"
|
assert page.h1.text.strip() == "Preview"
|
||||||
assert (page.find_all("a", {"class": "usa-back-link"})[0]["href"]) == url_for(
|
assert (page.find_all("a", {"class": "usa-back-link"})[0]["href"]) == url_for(
|
||||||
|
|||||||
Reference in New Issue
Block a user