From cc865674ffe4625380241556d6be4e04811f4793 Mon Sep 17 00:00:00 2001
From: Dustin Ingram
Date: Thu, 4 Apr 2024 17:51:50 +0000
Subject: [PATCH] Unverified view: Add a note about account recovery
---
tests/unit/manage/test_views.py | 9 +-
warehouse/locale/messages.pot | 163 +++++++++---------
warehouse/manage/views/__init__.py | 2 +-
.../templates/manage/unverified-account.html | 6 +
4 files changed, 99 insertions(+), 81 deletions(-)
diff --git a/tests/unit/manage/test_views.py b/tests/unit/manage/test_views.py
index b2c593a37c97..7d55956d7495 100644
--- a/tests/unit/manage/test_views.py
+++ b/tests/unit/manage/test_views.py
@@ -101,11 +101,16 @@ def test_manage_account(self, monkeypatch):
user_service = pretend.stub()
name = pretend.stub()
request = pretend.stub(
- find_service=lambda *a, **kw: user_service, user=pretend.stub(name=name)
+ find_service=lambda *a, **kw: user_service,
+ user=pretend.stub(name=name),
+ help_url=pretend.call_recorder(lambda *a, **kw: "/the/url"),
)
view = views.ManageUnverifiedAccountViews(request)
- assert view.manage_unverified_account() == {}
+ assert view.manage_unverified_account() == {
+ "help_url": "/the/url",
+ }
+ assert request.help_url.calls == [pretend.call(_anchor="account-recovery")]
assert view.request == request
assert view.user_service == user_service
diff --git a/warehouse/locale/messages.pot b/warehouse/locale/messages.pot
index b7d3047794af..eb8db8d7e43c 100644
--- a/warehouse/locale/messages.pot
+++ b/warehouse/locale/messages.pot
@@ -1660,7 +1660,7 @@ msgstr ""
#: warehouse/templates/accounts/register.html:73
#: warehouse/templates/manage/account.html:336
-#: warehouse/templates/manage/unverified-account.html:221
+#: warehouse/templates/manage/unverified-account.html:227
msgid "Email address"
msgstr ""
@@ -3005,7 +3005,7 @@ msgstr ""
#: warehouse/templates/manage/organization/history.html:23
#: warehouse/templates/manage/project/history.html:23
#: warehouse/templates/manage/team/history.html:23
-#: warehouse/templates/manage/unverified-account.html:236
+#: warehouse/templates/manage/unverified-account.html:242
msgid "Security history"
msgstr ""
@@ -3355,7 +3355,7 @@ msgid "Update account"
msgstr ""
#: warehouse/templates/manage/account.html:320
-#: warehouse/templates/manage/unverified-account.html:205
+#: warehouse/templates/manage/unverified-account.html:211
msgid "Account emails"
msgstr ""
@@ -3369,12 +3369,12 @@ msgid ""
msgstr ""
#: warehouse/templates/manage/account.html:333
-#: warehouse/templates/manage/unverified-account.html:218
+#: warehouse/templates/manage/unverified-account.html:224
msgid "Emails associated with your account"
msgstr ""
#: warehouse/templates/manage/account.html:337
-#: warehouse/templates/manage/unverified-account.html:222
+#: warehouse/templates/manage/unverified-account.html:228
msgid "Status"
msgstr ""
@@ -3440,209 +3440,209 @@ msgstr ""
#: warehouse/templates/manage/account.html:513
#: warehouse/templates/manage/account.html:692
-#: warehouse/templates/manage/unverified-account.html:244
-#: warehouse/templates/manage/unverified-account.html:423
+#: warehouse/templates/manage/unverified-account.html:250
+#: warehouse/templates/manage/unverified-account.html:429
msgid "Token scope: entire account"
msgstr ""
#: warehouse/templates/manage/account.html:515
#: warehouse/templates/manage/account.html:694
-#: warehouse/templates/manage/unverified-account.html:246
-#: warehouse/templates/manage/unverified-account.html:425
+#: warehouse/templates/manage/unverified-account.html:252
+#: warehouse/templates/manage/unverified-account.html:431
#, python-format
msgid "Token scope: Project %(project_name)s"
msgstr ""
#: warehouse/templates/manage/account.html:518
-#: warehouse/templates/manage/unverified-account.html:249
+#: warehouse/templates/manage/unverified-account.html:255
#, python-format
msgid "Expires: %(exp)s"
msgstr ""
#: warehouse/templates/manage/account.html:524
-#: warehouse/templates/manage/unverified-account.html:255
+#: warehouse/templates/manage/unverified-account.html:261
msgid "Account created"
msgstr ""
#: warehouse/templates/manage/account.html:527
-#: warehouse/templates/manage/unverified-account.html:258
+#: warehouse/templates/manage/unverified-account.html:264
msgid "Logged in"
msgstr ""
#: warehouse/templates/manage/account.html:529
-#: warehouse/templates/manage/unverified-account.html:260
+#: warehouse/templates/manage/unverified-account.html:266
msgid "Two factor method:"
msgstr ""
#: warehouse/templates/manage/account.html:531
#: warehouse/templates/manage/project/release.html:77
-#: warehouse/templates/manage/unverified-account.html:262
+#: warehouse/templates/manage/unverified-account.html:268
msgid "None"
msgstr ""
#: warehouse/templates/manage/account.html:533
#: warehouse/templates/manage/manage_base.html:92
-#: warehouse/templates/manage/unverified-account.html:264
+#: warehouse/templates/manage/unverified-account.html:270
msgid "Security device (WebAuthn)"
msgstr ""
#: warehouse/templates/manage/account.html:535
#: warehouse/templates/manage/manage_base.html:70
-#: warehouse/templates/manage/unverified-account.html:266
+#: warehouse/templates/manage/unverified-account.html:272
msgid ""
"Authentication application (TOTP)"
msgstr ""
#: warehouse/templates/manage/account.html:537
-#: warehouse/templates/manage/unverified-account.html:268
+#: warehouse/templates/manage/unverified-account.html:274
msgid "Recovery code"
msgstr ""
#: warehouse/templates/manage/account.html:542
-#: warehouse/templates/manage/unverified-account.html:273
+#: warehouse/templates/manage/unverified-account.html:279
msgid "Login failed"
msgstr ""
#: warehouse/templates/manage/account.html:545
-#: warehouse/templates/manage/unverified-account.html:276
+#: warehouse/templates/manage/unverified-account.html:282
msgid "- Basic Auth (Upload endpoint)"
msgstr ""
#: warehouse/templates/manage/account.html:550
#: warehouse/templates/manage/account.html:569
#: warehouse/templates/manage/project/history.html:272
-#: warehouse/templates/manage/unverified-account.html:281
-#: warehouse/templates/manage/unverified-account.html:300
+#: warehouse/templates/manage/unverified-account.html:287
+#: warehouse/templates/manage/unverified-account.html:306
msgid "Reason:"
msgstr ""
#: warehouse/templates/manage/account.html:552
#: warehouse/templates/manage/account.html:571
-#: warehouse/templates/manage/unverified-account.html:283
-#: warehouse/templates/manage/unverified-account.html:302
+#: warehouse/templates/manage/unverified-account.html:289
+#: warehouse/templates/manage/unverified-account.html:308
msgid "Incorrect Password"
msgstr ""
#: warehouse/templates/manage/account.html:554
-#: warehouse/templates/manage/unverified-account.html:285
+#: warehouse/templates/manage/unverified-account.html:291
msgid "Invalid two factor (TOTP)"
msgstr ""
#: warehouse/templates/manage/account.html:556
-#: warehouse/templates/manage/unverified-account.html:287
+#: warehouse/templates/manage/unverified-account.html:293
msgid "Invalid two factor (WebAuthn)"
msgstr ""
#: warehouse/templates/manage/account.html:558
#: warehouse/templates/manage/account.html:560
-#: warehouse/templates/manage/unverified-account.html:289
-#: warehouse/templates/manage/unverified-account.html:291
+#: warehouse/templates/manage/unverified-account.html:295
+#: warehouse/templates/manage/unverified-account.html:297
msgid "Invalid two factor (Recovery code)"
msgstr ""
#: warehouse/templates/manage/account.html:567
-#: warehouse/templates/manage/unverified-account.html:298
+#: warehouse/templates/manage/unverified-account.html:304
msgid "Session reauthentication failed"
msgstr ""
#: warehouse/templates/manage/account.html:578
-#: warehouse/templates/manage/unverified-account.html:309
+#: warehouse/templates/manage/unverified-account.html:315
msgid "Email added to account"
msgstr ""
#: warehouse/templates/manage/account.html:581
-#: warehouse/templates/manage/unverified-account.html:312
+#: warehouse/templates/manage/unverified-account.html:318
msgid "Email removed from account"
msgstr ""
#: warehouse/templates/manage/account.html:584
-#: warehouse/templates/manage/unverified-account.html:315
+#: warehouse/templates/manage/unverified-account.html:321
msgid "Email verified"
msgstr ""
#: warehouse/templates/manage/account.html:587
-#: warehouse/templates/manage/unverified-account.html:318
+#: warehouse/templates/manage/unverified-account.html:324
msgid "Email reverified"
msgstr ""
#: warehouse/templates/manage/account.html:591
-#: warehouse/templates/manage/unverified-account.html:322
+#: warehouse/templates/manage/unverified-account.html:328
msgid "Primary email changed"
msgstr ""
#: warehouse/templates/manage/account.html:593
-#: warehouse/templates/manage/unverified-account.html:324
+#: warehouse/templates/manage/unverified-account.html:330
msgid "Old primary email:"
msgstr ""
#: warehouse/templates/manage/account.html:594
-#: warehouse/templates/manage/unverified-account.html:325
+#: warehouse/templates/manage/unverified-account.html:331
msgid "New primary email:"
msgstr ""
#: warehouse/templates/manage/account.html:597
-#: warehouse/templates/manage/unverified-account.html:328
+#: warehouse/templates/manage/unverified-account.html:334
msgid "Primary email set"
msgstr ""
#: warehouse/templates/manage/account.html:603
-#: warehouse/templates/manage/unverified-account.html:334
+#: warehouse/templates/manage/unverified-account.html:340
msgid "Email sent"
msgstr ""
#: warehouse/templates/manage/account.html:605
-#: warehouse/templates/manage/unverified-account.html:336
+#: warehouse/templates/manage/unverified-account.html:342
msgid "From:"
msgstr ""
#: warehouse/templates/manage/account.html:606
-#: warehouse/templates/manage/unverified-account.html:337
+#: warehouse/templates/manage/unverified-account.html:343
msgid "To:"
msgstr ""
#: warehouse/templates/manage/account.html:607
-#: warehouse/templates/manage/unverified-account.html:338
+#: warehouse/templates/manage/unverified-account.html:344
msgid "Subject:"
msgstr ""
#: warehouse/templates/manage/account.html:611
-#: warehouse/templates/manage/unverified-account.html:342
+#: warehouse/templates/manage/unverified-account.html:348
msgid "Password reset requested"
msgstr ""
#: warehouse/templates/manage/account.html:613
-#: warehouse/templates/manage/unverified-account.html:344
+#: warehouse/templates/manage/unverified-account.html:350
msgid "Password reset attempted"
msgstr ""
#: warehouse/templates/manage/account.html:615
-#: warehouse/templates/manage/unverified-account.html:346
+#: warehouse/templates/manage/unverified-account.html:352
msgid "Password successfully reset"
msgstr ""
#: warehouse/templates/manage/account.html:617
-#: warehouse/templates/manage/unverified-account.html:348
+#: warehouse/templates/manage/unverified-account.html:354
msgid "Password successfully changed"
msgstr ""
#: warehouse/templates/manage/account.html:621
#: warehouse/templates/manage/account.html:626
#: warehouse/templates/manage/account/token.html:158
-#: warehouse/templates/manage/unverified-account.html:352
-#: warehouse/templates/manage/unverified-account.html:357
+#: warehouse/templates/manage/unverified-account.html:358
+#: warehouse/templates/manage/unverified-account.html:363
msgid "Project:"
msgstr ""
#: warehouse/templates/manage/account.html:629
-#: warehouse/templates/manage/unverified-account.html:360
+#: warehouse/templates/manage/unverified-account.html:366
msgid "Two factor authentication added"
msgstr ""
#: warehouse/templates/manage/account.html:632
#: warehouse/templates/manage/account.html:642
-#: warehouse/templates/manage/unverified-account.html:363
-#: warehouse/templates/manage/unverified-account.html:373
+#: warehouse/templates/manage/unverified-account.html:369
+#: warehouse/templates/manage/unverified-account.html:379
msgid ""
"Method: Security device (WebAuthn)"
@@ -3650,42 +3650,42 @@ msgstr ""
#: warehouse/templates/manage/account.html:633
#: warehouse/templates/manage/account.html:643
-#: warehouse/templates/manage/unverified-account.html:364
-#: warehouse/templates/manage/unverified-account.html:374
+#: warehouse/templates/manage/unverified-account.html:370
+#: warehouse/templates/manage/unverified-account.html:380
msgid "Device name:"
msgstr ""
#: warehouse/templates/manage/account.html:635
#: warehouse/templates/manage/account.html:645
-#: warehouse/templates/manage/unverified-account.html:366
-#: warehouse/templates/manage/unverified-account.html:376
+#: warehouse/templates/manage/unverified-account.html:372
+#: warehouse/templates/manage/unverified-account.html:382
msgid ""
"Method: Authentication application (TOTP)"
msgstr ""
#: warehouse/templates/manage/account.html:639
-#: warehouse/templates/manage/unverified-account.html:370
+#: warehouse/templates/manage/unverified-account.html:376
msgid "Two factor authentication removed"
msgstr ""
#: warehouse/templates/manage/account.html:650
-#: warehouse/templates/manage/unverified-account.html:381
+#: warehouse/templates/manage/unverified-account.html:387
msgid "Recovery codes generated"
msgstr ""
#: warehouse/templates/manage/account.html:654
-#: warehouse/templates/manage/unverified-account.html:385
+#: warehouse/templates/manage/unverified-account.html:391
msgid "Recovery codes regenerated"
msgstr ""
#: warehouse/templates/manage/account.html:658
-#: warehouse/templates/manage/unverified-account.html:389
+#: warehouse/templates/manage/unverified-account.html:395
msgid "Recovery code used for login"
msgstr ""
#: warehouse/templates/manage/account.html:664
-#: warehouse/templates/manage/unverified-account.html:395
+#: warehouse/templates/manage/unverified-account.html:401
msgid "API token added"
msgstr ""
@@ -3693,61 +3693,61 @@ msgstr ""
#: warehouse/templates/manage/account.html:689
#: warehouse/templates/manage/project/history.html:263
#: warehouse/templates/manage/project/history.html:270
-#: warehouse/templates/manage/unverified-account.html:397
-#: warehouse/templates/manage/unverified-account.html:420
+#: warehouse/templates/manage/unverified-account.html:403
+#: warehouse/templates/manage/unverified-account.html:426
msgid "Token name:"
msgstr ""
#: warehouse/templates/manage/account.html:683
#: warehouse/templates/manage/project/history.html:265
-#: warehouse/templates/manage/unverified-account.html:414
+#: warehouse/templates/manage/unverified-account.html:420
msgid "API token removed"
msgstr ""
#: warehouse/templates/manage/account.html:684
#: warehouse/templates/manage/account.html:690
-#: warehouse/templates/manage/unverified-account.html:415
#: warehouse/templates/manage/unverified-account.html:421
+#: warehouse/templates/manage/unverified-account.html:427
msgid "Unique identifier:"
msgstr ""
#: warehouse/templates/manage/account.html:687
-#: warehouse/templates/manage/unverified-account.html:418
+#: warehouse/templates/manage/unverified-account.html:424
msgid "API token automatically removed for security reasons"
msgstr ""
#: warehouse/templates/manage/account.html:696
-#: warehouse/templates/manage/unverified-account.html:427
+#: warehouse/templates/manage/unverified-account.html:433
#, python-format
msgid "Reason: Token found at public url"
msgstr ""
#: warehouse/templates/manage/account.html:701
-#: warehouse/templates/manage/unverified-account.html:432
+#: warehouse/templates/manage/unverified-account.html:438
#, python-format
msgid "Invited to join %(organization_name)s"
msgstr ""
#: warehouse/templates/manage/account.html:705
-#: warehouse/templates/manage/unverified-account.html:436
+#: warehouse/templates/manage/unverified-account.html:442
#, python-format
msgid "Invitation to join %(organization_name)s declined"
msgstr ""
#: warehouse/templates/manage/account.html:709
-#: warehouse/templates/manage/unverified-account.html:440
+#: warehouse/templates/manage/unverified-account.html:446
#, python-format
msgid "Invitation to join %(organization_name)s revoked"
msgstr ""
#: warehouse/templates/manage/account.html:713
-#: warehouse/templates/manage/unverified-account.html:444
+#: warehouse/templates/manage/unverified-account.html:450
#, python-format
msgid "Invitation to join %(organization_name)s expired"
msgstr ""
#: warehouse/templates/manage/account.html:722
-#: warehouse/templates/manage/unverified-account.html:453
+#: warehouse/templates/manage/unverified-account.html:459
#, python-format
msgid ""
"Events appear here as security-related actions occur on your account. If "
@@ -3756,7 +3756,7 @@ msgid ""
msgstr ""
#: warehouse/templates/manage/account.html:727
-#: warehouse/templates/manage/unverified-account.html:458
+#: warehouse/templates/manage/unverified-account.html:464
msgid "Recent account activity"
msgstr ""
@@ -3764,7 +3764,7 @@ msgstr ""
#: warehouse/templates/manage/organization/history.html:201
#: warehouse/templates/manage/project/history.html:304
#: warehouse/templates/manage/team/history.html:108
-#: warehouse/templates/manage/unverified-account.html:460
+#: warehouse/templates/manage/unverified-account.html:466
msgid "Event"
msgstr ""
@@ -3775,25 +3775,25 @@ msgstr ""
#: warehouse/templates/manage/project/history.html:314
#: warehouse/templates/manage/team/history.html:109
#: warehouse/templates/manage/team/history.html:118
-#: warehouse/templates/manage/unverified-account.html:461
+#: warehouse/templates/manage/unverified-account.html:467
msgid "Time"
msgstr ""
#: warehouse/templates/manage/account.html:731
#: warehouse/templates/manage/organization/history.html:203
#: warehouse/templates/manage/team/history.html:110
-#: warehouse/templates/manage/unverified-account.html:462
+#: warehouse/templates/manage/unverified-account.html:468
msgid "Additional Info"
msgstr ""
#: warehouse/templates/manage/account.html:738
-#: warehouse/templates/manage/unverified-account.html:469
+#: warehouse/templates/manage/unverified-account.html:475
msgid "Date / time"
msgstr ""
#: warehouse/templates/manage/account.html:742
#: warehouse/templates/manage/organization/history.html:215
-#: warehouse/templates/manage/unverified-account.html:473
+#: warehouse/templates/manage/unverified-account.html:479
msgid "Location Info"
msgstr ""
@@ -3801,12 +3801,12 @@ msgstr ""
#: warehouse/templates/manage/organization/history.html:217
#: warehouse/templates/manage/project/history.html:320
#: warehouse/templates/manage/team/history.html:124
-#: warehouse/templates/manage/unverified-account.html:475
+#: warehouse/templates/manage/unverified-account.html:481
msgid "Device Info"
msgstr ""
#: warehouse/templates/manage/account.html:752
-#: warehouse/templates/manage/unverified-account.html:483
+#: warehouse/templates/manage/unverified-account.html:489
msgid "Events will appear here as security-related actions occur on your account."
msgstr ""
@@ -4439,7 +4439,14 @@ msgid ""
"to your account."
msgstr ""
-#: warehouse/templates/manage/unverified-account.html:207
+#: warehouse/templates/manage/unverified-account.html:203
+#, python-format
+msgid ""
+"If you cannot verify a primary email address, please see %(help_url)s."
+msgstr ""
+
+#: warehouse/templates/manage/unverified-account.html:213
msgid ""
"You must have at least one Verified email "
diff --git a/warehouse/manage/views/__init__.py b/warehouse/manage/views/__init__.py
index debdc03c225d..31553e891695 100644
--- a/warehouse/manage/views/__init__.py
+++ b/warehouse/manage/views/__init__.py
@@ -213,7 +213,7 @@ class ManageUnverifiedAccountViews(ManageAccountMixin):
@view_config(request_method="GET")
def manage_unverified_account(self):
- return {}
+ return {"help_url": self.request.help_url(_anchor="account-recovery")}
@view_defaults(
diff --git a/warehouse/templates/manage/unverified-account.html b/warehouse/templates/manage/unverified-account.html
index a6f32e08866f..2893caa2766b 100644
--- a/warehouse/templates/manage/unverified-account.html
+++ b/warehouse/templates/manage/unverified-account.html
@@ -199,6 +199,12 @@ {{ title }}
before making any other changes to your account.
{% endtrans %}
+
+ {% trans help_url=help_url %}
+ If you cannot verify a primary email address,
+ please see {{ help_url }}.
+ {% endtrans %}
+