diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf
index b9aa4e03e..e988a39cb 100644
--- a/src-ui/messages.xlf
+++ b/src-ui/messages.xlf
@@ -520,6 +520,10 @@
src/app/components/admin/config/config.component.html
34
+
+ src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
+ 124
+
Discard
@@ -576,7 +580,7 @@
src/app/components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component.html
- 43
+ 57
src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html
@@ -584,7 +588,7 @@
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
- 99
+ 184
src/app/components/document-detail/document-detail.component.html
@@ -712,6 +716,14 @@
src/app/components/common/permissions-dialog/permissions-dialog.component.html
23
+
+ src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
+ 111
+
+
+ src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
+ 127
+
src/app/components/common/system-status-dialog/system-status-dialog.component.html
10
@@ -1095,7 +1107,7 @@
src/app/components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component.html
- 37
+ 51
src/app/components/common/input/permissions/permissions-form/permissions-form.component.html
@@ -1707,7 +1719,7 @@
src/app/components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component.html
- 42
+ 56
src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html
@@ -1719,7 +1731,7 @@
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
- 98
+ 183
src/app/components/common/select-dialog/select-dialog.component.html
@@ -2514,7 +2526,7 @@
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.ts
- 159
+ 173
@@ -2917,21 +2929,21 @@
Sidebar views updated
src/app/components/app-frame/app-frame.component.ts
- 208
+ 209
Error updating sidebar views
src/app/components/app-frame/app-frame.component.ts
- 211
+ 212
An error occurred while saving update checking settings.
src/app/components/app-frame/app-frame.component.ts
- 232
+ 233
@@ -3720,7 +3732,7 @@
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
- 18
+ 20
@@ -4263,7 +4275,7 @@
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
- 8
+ 10
@@ -4274,7 +4286,7 @@
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
- 28
+ 30
@@ -4285,7 +4297,7 @@
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
- 29
+ 31
@@ -4323,18 +4335,70 @@
30
+
+ Two-factor Authentication
+
+ src/app/components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component.html
+ 37
+
+
+ src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
+ 104
+
+
+ src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
+ 138
+
+
+
+ Disable Two-factor Authentication
+
+ src/app/components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component.html
+ 39
+
+
+ src/app/components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component.html
+ 41
+
+
+ src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
+ 169
+
+
+ src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
+ 171
+
+
Create new user account
src/app/components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component.ts
- 44
+ 49
Edit user account
src/app/components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component.ts
- 48
+ 53
+
+
+
+ Totp deactivated
+
+ src/app/components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component.ts
+ 109
+
+
+
+ Totp deactivation failed
+
+ src/app/components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component.ts
+ 112
+
+
+ src/app/components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component.ts
+ 117
@@ -5151,32 +5215,36 @@
Confirm Email
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
- 13
+ 15
Confirm Password
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
- 23
+ 25
API Auth Token
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
- 31
+ 33
Copy
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
- 35
+ 37
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
- 42
+ 44
+
+
+ src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
+ 156
src/app/components/common/share-links-dropdown/share-links-dropdown.component.html
@@ -5207,14 +5275,18 @@
Regenerate auth token
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
- 45
+ 47
Copied!
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
- 53
+ 55
+
+
+ src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
+ 163
src/app/components/common/share-links-dropdown/share-links-dropdown.component.html
@@ -5225,91 +5297,176 @@
Warning: changing the token cannot be undone
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
- 55
+ 57
Connected social accounts
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
- 59
+ 63
Set a password before disconnecting social account.
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
- 63
+ 67
Disconnect
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
- 69
+ 73
Disconnect social account
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
- 71
+ 75
Warning: disconnecting social accounts cannot be undone
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
- 81
+ 85
Connect new social account
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
- 86
+ 90
+
+
+
+ Scan the QR code with your authenticator app and then enter the code below
+
+ src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
+ 115
+
+
+
+ Authenticator secret
+
+ src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
+ 118
+
+
+
+ You can store this secret and use it to reinstall your authenticator app at a later time.
+
+ src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
+ 119
+
+
+
+ Code
+
+ src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
+ 122
+
+
+
+ Recovery codes will not be shown again, make sure to save them.
+
+ src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
+ 141
+
+
+
+ Copy codes
+
+ src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html
+ 159
Emails must match
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.ts
- 108
+ 121
Passwords must match
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.ts
- 136
+ 149
Profile updated successfully
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.ts
- 156
+ 170
Error saving profile
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.ts
- 168
+ 182
Error generating auth token
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.ts
- 185
+ 199
Error disconnecting social account
src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.ts
- 210
+ 224
+
+
+
+ Error fetching TOTP settings
+
+ src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.ts
+ 243
+
+
+
+ TOTP activated successfully
+
+ src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.ts
+ 263
+
+
+
+ Error activating TOTP
+
+ src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.ts
+ 265
+
+
+ src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.ts
+ 271
+
+
+
+ TOTP deactivated successfully
+
+ src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.ts
+ 287
+
+
+
+ Error deactivating TOTP
+
+ src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.ts
+ 289
+
+
+ src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.ts
+ 294
diff --git a/src/locale/en_US/LC_MESSAGES/django.po b/src/locale/en_US/LC_MESSAGES/django.po
index 265682f91..0b7b65ab1 100644
--- a/src/locale/en_US/LC_MESSAGES/django.po
+++ b/src/locale/en_US/LC_MESSAGES/django.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-10-19 22:56-0700\n"
+"POT-Creation-Date: 2024-10-19 23:22-0700\n"
"PO-Revision-Date: 2022-02-17 04:17\n"
"Last-Translator: \n"
"Language-Team: English\n"
@@ -1039,6 +1039,7 @@ msgid "Password"
msgstr ""
#: documents/templates/account/login.html:30
+#: documents/templates/mfa/authenticate.html:23
msgid "Sign in"
msgstr ""
@@ -1161,6 +1162,24 @@ msgstr ""
msgid "Here's a link to the docs."
msgstr ""
+#: documents/templates/mfa/authenticate.html:7
+msgid "Paperless-ngx Two-Factor Authentication"
+msgstr ""
+
+#: documents/templates/mfa/authenticate.html:12
+msgid ""
+"Your account is protected by two-factor authentication. Please enter an "
+"authenticator code:"
+msgstr ""
+
+#: documents/templates/mfa/authenticate.html:17
+msgid "Code"
+msgstr ""
+
+#: documents/templates/mfa/authenticate.html:24
+msgid "Cancel"
+msgstr ""
+
#: documents/templates/paperless-ngx/base.html:58
msgid "Share link was not found."
msgstr ""
@@ -1366,139 +1385,139 @@ msgstr ""
msgid "paperless application settings"
msgstr ""
-#: paperless/settings.py:684
+#: paperless/settings.py:687
msgid "English (US)"
msgstr ""
-#: paperless/settings.py:685
+#: paperless/settings.py:688
msgid "Arabic"
msgstr ""
-#: paperless/settings.py:686
+#: paperless/settings.py:689
msgid "Afrikaans"
msgstr ""
-#: paperless/settings.py:687
+#: paperless/settings.py:690
msgid "Belarusian"
msgstr ""
-#: paperless/settings.py:688
+#: paperless/settings.py:691
msgid "Bulgarian"
msgstr ""
-#: paperless/settings.py:689
+#: paperless/settings.py:692
msgid "Catalan"
msgstr ""
-#: paperless/settings.py:690
+#: paperless/settings.py:693
msgid "Czech"
msgstr ""
-#: paperless/settings.py:691
+#: paperless/settings.py:694
msgid "Danish"
msgstr ""
-#: paperless/settings.py:692
+#: paperless/settings.py:695
msgid "German"
msgstr ""
-#: paperless/settings.py:693
+#: paperless/settings.py:696
msgid "Greek"
msgstr ""
-#: paperless/settings.py:694
+#: paperless/settings.py:697
msgid "English (GB)"
msgstr ""
-#: paperless/settings.py:695
+#: paperless/settings.py:698
msgid "Spanish"
msgstr ""
-#: paperless/settings.py:696
+#: paperless/settings.py:699
msgid "Finnish"
msgstr ""
-#: paperless/settings.py:697
+#: paperless/settings.py:700
msgid "French"
msgstr ""
-#: paperless/settings.py:698
+#: paperless/settings.py:701
msgid "Hungarian"
msgstr ""
-#: paperless/settings.py:699
+#: paperless/settings.py:702
msgid "Italian"
msgstr ""
-#: paperless/settings.py:700
+#: paperless/settings.py:703
msgid "Japanese"
msgstr ""
-#: paperless/settings.py:701
+#: paperless/settings.py:704
msgid "Korean"
msgstr ""
-#: paperless/settings.py:702
+#: paperless/settings.py:705
msgid "Luxembourgish"
msgstr ""
-#: paperless/settings.py:703
+#: paperless/settings.py:706
msgid "Norwegian"
msgstr ""
-#: paperless/settings.py:704
+#: paperless/settings.py:707
msgid "Dutch"
msgstr ""
-#: paperless/settings.py:705
+#: paperless/settings.py:708
msgid "Polish"
msgstr ""
-#: paperless/settings.py:706
+#: paperless/settings.py:709
msgid "Portuguese (Brazil)"
msgstr ""
-#: paperless/settings.py:707
+#: paperless/settings.py:710
msgid "Portuguese"
msgstr ""
-#: paperless/settings.py:708
+#: paperless/settings.py:711
msgid "Romanian"
msgstr ""
-#: paperless/settings.py:709
+#: paperless/settings.py:712
msgid "Russian"
msgstr ""
-#: paperless/settings.py:710
+#: paperless/settings.py:713
msgid "Slovak"
msgstr ""
-#: paperless/settings.py:711
+#: paperless/settings.py:714
msgid "Slovenian"
msgstr ""
-#: paperless/settings.py:712
+#: paperless/settings.py:715
msgid "Serbian"
msgstr ""
-#: paperless/settings.py:713
+#: paperless/settings.py:716
msgid "Swedish"
msgstr ""
-#: paperless/settings.py:714
+#: paperless/settings.py:717
msgid "Turkish"
msgstr ""
-#: paperless/settings.py:715
+#: paperless/settings.py:718
msgid "Ukrainian"
msgstr ""
-#: paperless/settings.py:716
+#: paperless/settings.py:719
msgid "Chinese Simplified"
msgstr ""
-#: paperless/urls.py:254
+#: paperless/urls.py:268
msgid "Paperless-ngx administration"
msgstr ""