]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
Feature: password reset (#4289)
authorshamoon <4887959+shamoon@users.noreply.github.com>
Sun, 1 Oct 2023 01:17:42 +0000 (18:17 -0700)
committerGitHub <noreply@github.com>
Sun, 1 Oct 2023 01:17:42 +0000 (18:17 -0700)
docs/configuration.md
docs/usage.md
src/documents/context_processors.py [new file with mode: 0644]
src/documents/static/signin.css
src/documents/templates/registration/login.html
src/documents/templates/registration/password_reset_complete.html [new file with mode: 0644]
src/documents/templates/registration/password_reset_confirm.html [new file with mode: 0644]
src/documents/templates/registration/password_reset_done.html [new file with mode: 0644]
src/documents/templates/registration/password_reset_form.html [new file with mode: 0644]
src/locale/en_US/LC_MESSAGES/django.po
src/paperless/settings.py

index 88c8a5094ea3d7632cfec9fa0181e5c6c7ddc300..45a004b40356faf0e58a18f5fa72ff0c57be94a7 100644 (file)
@@ -1301,3 +1301,32 @@ started by the container.
     v1.9.2. A one-time migration is performed for users who have this
     setting set. This setting is always ignored if the corresponding
     frontend setting has been set.
+
+## Email sending
+
+Setting an SMTP server for the backend will allow you to reset your
+password. All of these options come from their similarly-named [Django settings](https://docs.djangoproject.com/en/4.2/ref/settings/#email-host)
+
+#### [`PAPERLESS_EMAIL_HOST=<str>`](#PAPERLESS_EMAIL_HOST) {#PAPERLESS_EMAIL_HOST}
+
+: Defaults to 'localhost'.
+
+#### [`PAPERLESS_EMAIL_PORT=<int>`](#PAPERLESS_EMAIL_PORT) {#PAPERLESS_EMAIL_PORT}
+
+: Defaults to port 25.
+
+#### [`PAPERLESS_EMAIL_HOST_USER=<str>`](#PAPERLESS_EMAIL_HOST_USER) {#PAPERLESS_EMAIL_HOST_USER}
+
+: Defaults to ''.
+
+#### [`PAPERLESS_EMAIL_HOST_PASSWORD=<str>`](#PAPERLESS_EMAIL_HOST_PASSWORD) {#PAPERLESS_EMAIL_HOST_PASSWORD}
+
+: Defaults to ''.
+
+#### [`PAPERLESS_EMAIL_USE_TLS=<bool>`](#PAPERLESS_EMAIL_USE_TLS) {#PAPERLESS_EMAIL_USE_TLS}
+
+: Defaults to false.
+
+#### [`PAPERLESS_EMAIL_USE_SSL=<bool>`](#PAPERLESS_EMAIL_USE_SSL) {#PAPERLESS_EMAIL_USE_SSL}
+
+: Defaults to false.
index 340a1f2c3970f5641a8c25a21947e37c78bb8c88..aad4976f8bc091c6fda6574789afb21ec15573ef 100644 (file)
@@ -261,6 +261,11 @@ These can be found under Settings > Users & Groups, assuming the user has access
 as a member of a group those permissions will be inherited and this is reflected in the UI. Explicit
 permissions can be granted to limit access to certain parts of the UI (and corresponding API endpoints).
 
+### Password reset
+
+In order to enable the password reset feature you will need to setup an SMTP backend, see
+[`PAPERLESS_EMAIL_HOST`](/configuration#PAPERLESS_EMAIL_HOST)
+
 ## Consumption templates
 
 Consumption templates were introduced in v2.0 and allow for finer control over what metadata (tags, doc
diff --git a/src/documents/context_processors.py b/src/documents/context_processors.py
new file mode 100644 (file)
index 0000000..90c856a
--- /dev/null
@@ -0,0 +1,8 @@
+from django.conf import settings as django_settings
+
+
+def settings(request):
+    return {
+        "EMAIL_ENABLED": django_settings.EMAIL_HOST != "localhost"
+        or django_settings.EMAIL_HOST_USER != "",
+    }
index 7115adae2863342c001277c0f4fe10a2b7ffafd7..02f460c7c10b6004db24a3590c08f64da78392f7 100644 (file)
@@ -2,32 +2,43 @@ body {
   --bs-body-bg: #f5f5f5;
   --bs-link-color-rgb: 23, 84, 31; /* #17541f */
   --bs-link-hover-color-rgb: 15, 56, 20;
+  --pngx-primary: #17541f;
+  --pngx-primary-hover: #0f3614;
+  --pngx-primary-active: #0c2c10;
 }
 
 .form-control {
   --bs-body-bg: #fff;
 }
 
-.btn {
-  --bs-btn-bg: #17541f;
-  --bs-btn-border-color: #17541f;
-  --bs-btn-hover-bg: #0f3614;
+.btn.btn-primary {
+  --bs-btn-bg: var(--pngx-primary);
+  --bs-btn-border-color: var(--pngx-primary);
+  --bs-btn-hover-bg: var(--pngx-primary-hover);
   --bs-btn-hover-border-color: #0c2c10;
-  --bs-btn-active-bg: #0c2c10;
+  --bs-btn-active-bg: var(--pngx-primary-active);
   --bs-btn-active-border-color: #09220d;
 }
 
+.btn-link {
+  --bs-btn-color: var(--pngx-primary);
+  --bs-btn-hover-color: var(--pngx-primary-hover);
+  --bs-btn-active-color: var(--pngx-primary-active);
+}
+
 .form-signin {
   max-width: 330px;
 }
 
-#inputUsername {
+#inputUsername,
+#inputPassword1 {
   margin-bottom: -1px;
   border-bottom-right-radius: 0;
   border-bottom-left-radius: 0;
 }
 
-#inputPassword {
+#inputPassword,
+#inputPassword2 {
   border-top-left-radius: 0;
   border-top-right-radius: 0;
 }
index c4c9361828382a9a87db7bb507f46daf8a0e687c..ba57013ace7c0323e13d1de6516da9133cb6f9e2 100644 (file)
       <div class="d-grid mt-3">
         <button class="btn btn-lg btn-primary" type="submit">{% translate "Sign in" %}</button>
       </div>
+      {% if EMAIL_ENABLED %}
+      <div class="d-grid mt-3">
+        <a class="btn btn-link" href="{% url 'password_reset' %}">{% translate "Forgot your password?" %}</a>
+      </div>
+      {% endif %}
                </form>
        </body>
 </html>
diff --git a/src/documents/templates/registration/password_reset_complete.html b/src/documents/templates/registration/password_reset_complete.html
new file mode 100644 (file)
index 0000000..d9b0a3b
--- /dev/null
@@ -0,0 +1,45 @@
+<!doctype html>
+
+{% load static %}
+{% load i18n %}
+
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <meta name="description" content="Paperless-ngx Sign In">
+    <meta name="author" content="Paperless-ngx project and contributors">
+    <meta name="robots" content="noindex,nofollow">
+
+    <title>{% translate "Paperless-ngx reset password complete" %}</title>
+
+               <link href="{% static 'bootstrap.min.css' %}" rel="stylesheet">
+    <link href="{% static 'signin.css' %}" rel="stylesheet">
+  </head>
+
+  <body class="text-center">
+      <div class="position-absolute top-50 start-50 translate-middle">
+        <svg xmlns="http://www.w3.org/2000/svg" width="300" class="logo mb-4" viewBox="0 0 2897.4 896.6">
+          <path class="leaf" d="M140,713.7c-3.4-16.4-10.3-49.1-11.2-49.1c-145.7-87.1-128.4-238-80.2-324.2C59,449,251.2,524,139.1,656.8 c-0.9,1.7,5.2,22.4,10.3,41.4c22.4-37.9,56-83.6,54.3-87.9C65.9,273.9,496.9,248.1,586.6,39.4c40.5,201.8-20.7,513.9-367.2,593.2 c-1.7,0.9-62.9,108.6-65.5,109.5c0-1.7-25.9-0.9-22.4-9.5C133.1,727.4,136.6,720.6,140,713.7L140,713.7z M135.7,632.6 c44-50.9-7.8-137.9-38.8-166.4C149.5,556.7,146,609.3,135.7,632.6L135.7,632.6z" transform="translate(0)" style="fill:#17541f"/>
+          <g class="text" style="fill:#000">
+            <path d="M1022.3,428.7c-17.8-19.9-42.7-29.8-74.7-29.8c-22.3,0-42.4,5.7-60.5,17.3c-18.1,11.6-32.3,27.5-42.5,47.8 s-15.3,42.9-15.3,67.8c0,24.9,5.1,47.5,15.3,67.8c10.3,20.3,24.4,36.2,42.5,47.8c18.1,11.5,38.3,17.3,60.5,17.3 c32,0,56.9-9.9,74.7-29.8v20.4v0.2h84.5V408.3h-84.5V428.7z M1010.5,575c-10.2,11.7-23.6,17.6-40.2,17.6s-29.9-5.9-40-17.6 s-15.1-26.1-15.1-43.3c0-17.1,5-31.6,15.1-43.3s23.4-17.6,40-17.6c16.6,0,30,5.9,40.2,17.6s15.3,26.1,15.3,43.3 S1020.7,563.3,1010.5,575z" transform="translate(0)"/>
+            <path d="M1381,416.1c-18.1-11.5-38.3-17.3-60.5-17.4c-32,0-56.9,9.9-74.7,29.8v-20.4h-84.5v390.7h84.5v-164 c17.8,19.9,42.7,29.8,74.7,29.8c22.3,0,42.4-5.7,60.5-17.3s32.3-27.5,42.5-47.8c10.2-20.3,15.3-42.9,15.3-67.8s-5.1-47.5-15.3-67.8 C1413.2,443.6,1399.1,427.7,1381,416.1z M1337.9,575c-10.1,11.7-23.4,17.6-40,17.6s-29.9-5.9-40-17.6s-15.1-26.1-15.1-43.3 c0-17.1,5-31.6,15.1-43.3s23.4-17.6,40-17.6s29.9,5.9,40,17.6s15.1,26.1,15.1,43.3S1347.9,563.3,1337.9,575z" transform="translate(0)"/>
+            <path d="M1672.2,416.8c-20.5-12-43-18-67.6-18c-24.9,0-47.6,5.9-68,17.6c-20.4,11.7-36.5,27.7-48.2,48s-17.6,42.7-17.6,67.3 c0.3,25.2,6.2,47.8,17.8,68c11.5,20.2,28,36,49.3,47.6c21.3,11.5,45.9,17.3,73.8,17.3c48.6,0,86.8-14.7,114.7-44l-52.5-48.9 c-8.6,8.3-17.6,14.6-26.7,19c-9.3,4.3-21.1,6.4-35.3,6.4c-11.6,0-22.5-3.6-32.7-10.9c-10.3-7.3-17.1-16.5-20.7-27.8h180l0.4-11.6 c0-29.6-6-55.7-18-78.2S1692.6,428.8,1672.2,416.8z M1558.3,503.2c2.1-12.1,7.5-21.8,16.2-29.1s18.7-10.9,30-10.9 s21.2,3.6,29.8,10.9c8.6,7.2,13.9,16.9,16,29.1H1558.3z" transform="translate(0)"/>
+            <path d="M1895.3,411.7c-11,5.6-20.3,13.7-28,24.4h-0.1v-28h-84.5v247.3h84.5V536.3c0-22.6,4.7-38.1,14.2-46.5 c9.5-8.5,22.7-12.7,39.6-12.7c6.2,0,13.5,1,21.8,3.1l10.7-72c-5.9-3.3-14.5-4.9-25.8-4.9C1917.1,403.3,1906.3,406.1,1895.3,411.7z"  transform="translate(0)"/>
+            <rect x="1985" y="277.4" width="84.5" height="377.8" transform="translate(0)"/>
+            <path d="M2313.2,416.8c-20.5-12-43-18-67.6-18c-24.9,0-47.6,5.9-68,17.6s-36.5,27.7-48.2,48c-11.7,20.3-17.6,42.7-17.6,67.3 c0.3,25.2,6.2,47.8,17.8,68c11.5,20.2,28,36,49.3,47.6c21.3,11.5,45.9,17.3,73.8,17.3c48.6,0,86.8-14.7,114.7-44l-52.5-48.9 c-8.6,8.3-17.6,14.6-26.7,19c-9.3,4.3-21.1,6.4-35.3,6.4c-11.6,0-22.5-3.6-32.7-10.9c-10.3-7.3-17.1-16.5-20.7-27.8h180l0.4-11.6 c0-29.6-6-55.7-18-78.2S2333.6,428.8,2313.2,416.8z M2199.3,503.2c2.1-12.1,7.5-21.8,16.2-29.1s18.7-10.9,30-10.9 s21.2,3.6,29.8,10.9c8.6,7.2,13.9,16.9,16,29.1H2199.3z" transform="translate(0)"/>
+            <path d="M2583.6,507.7c-13.8-4.4-30.6-8.1-50.5-11.1c-15.1-2.7-26.1-5.2-32.9-7.6c-6.8-2.4-10.2-6.1-10.2-11.1s2.3-8.7,6.7-10.9 c4.4-2.2,11.5-3.3,21.3-3.3c11.6,0,24.3,2.4,38.1,7.2c13.9,4.8,26.2,11,36.9,18.4l32.4-58.2c-11.3-7.4-26.2-14.7-44.9-21.8 c-18.7-7.1-39.6-10.7-62.7-10.7c-33.7,0-60.2,7.6-79.3,22.7c-19.1,15.1-28.7,36.1-28.7,63.1c0,19,4.8,33.9,14.4,44.7 c9.6,10.8,21,18.5,34,22.9c13.1,4.5,28.9,8.3,47.6,11.6c14.6,2.7,25.1,5.3,31.6,7.8s9.8,6.5,9.8,11.8c0,10.4-9.7,15.6-29.3,15.6 c-13.7,0-28.5-2.3-44.7-6.9c-16.1-4.6-29.2-11.3-39.3-20.2l-33.3,60c9.2,7.4,24.6,14.7,46.2,22c21.7,7.3,45.2,10.9,70.7,10.9 c34.7,0,62.9-7.4,84.5-22.4c21.7-15,32.5-37.3,32.5-66.9c0-19.3-5-34.2-15.1-44.9S2597.4,512.1,2583.6,507.7z" transform="translate(0)"/>
+            <path d="M2883.4,575.3c0-19.3-5-34.2-15.1-44.9s-22-18.3-35.8-22.7c-13.8-4.4-30.6-8.1-50.5-11.1c-15.1-2.7-26.1-5.2-32.9-7.6 c-6.8-2.4-10.2-6.1-10.2-11.1s2.3-8.7,6.7-10.9c4.4-2.2,11.5-3.3,21.3-3.3c11.6,0,24.3,2.4,38.1,7.2c13.9,4.8,26.2,11,36.9,18.4 l32.4-58.2c-11.3-7.4-26.2-14.7-44.9-21.8c-18.7-7.1-39.6-10.7-62.7-10.7c-33.7,0-60.2,7.6-79.3,22.7 c-19.1,15.1-28.7,36.1-28.7,63.1c0,19,4.8,33.9,14.4,44.7c9.6,10.8,21,18.5,34,22.9c13.1,4.5,28.9,8.3,47.6,11.6 c14.6,2.7,25.1,5.3,31.6,7.8s9.8,6.5,9.8,11.8c0,10.4-9.7,15.6-29.3,15.6c-13.7,0-28.5-2.3-44.7-6.9c-16.1-4.6-29.2-11.3-39.3-20.2 l-33.3,60c9.2,7.4,24.6,14.7,46.2,22c21.7,7.3,45.2,10.9,70.7,10.9c34.7,0,62.9-7.4,84.5-22.4 C2872.6,627.2,2883.4,604.9,2883.4,575.3z" transform="translate(0)"/>
+            <rect x="2460.7" y="738.7" width="59.6" height="17.2" transform="translate(0)"/>
+            <path d="M2596.5,706.4c-5.7,0-11,1-15.8,3s-9,5-12.5,8.9v-9.4h-19.4v93.6h19.4v-52c0-8.6,2.1-15.3,6.3-20c4.2-4.7,9.5-7.1,15.9-7.1 c7.8,0,13.4,2.3,16.8,6.7c3.4,4.5,5.1,11.3,5.1,20.5v52h19.4v-56.8c0-12.8-3.2-22.6-9.5-29.3 C2615.8,709.8,2607.3,706.4,2596.5,706.4z" transform="translate(0)"/>
+            <path d="M2733.8,717.7c-3.6-3.4-7.9-6.1-13.1-8.2s-10.6-3.1-16.2-3.1c-8.7,0-16.5,2.1-23.5,6.3s-12.5,10-16.5,17.3 c-4,7.3-6,15.4-6,24.4c0,8.9,2,17.1,6,24.3c4,7.3,9.5,13,16.5,17.2s14.9,6.3,23.5,6.3c5.6,0,11-1,16.2-3.1 c5.1-2.1,9.5-4.8,13.1-8.2v24.4c0,8.5-2.5,14.8-7.6,18.7c-5,3.9-11,5.9-18,5.9c-6.7,0-12.4-1.6-17.3-4.7c-4.8-3.1-7.6-7.7-8.3-13.8 h-19.4c0.6,7.7,2.9,14.2,7.1,19.5s9.6,9.3,16.2,12c6.6,2.7,13.8,4,21.7,4c12.8,0,23.5-3.4,32-10.1c8.6-6.7,12.8-17.1,12.8-31.1 V708.9h-19.2V717.7z M2732.2,770.1c-2.5,4.7-6,8.3-10.4,11.2c-4.4,2.7-9.4,4-14.9,4c-5.7,0-10.8-1.4-15.2-4.3s-7.8-6.7-10.2-11.4 c-2.3-4.8-3.5-9.8-3.5-15.2c0-5.5,1.1-10.6,3.5-15.3s5.8-8.5,10.2-11.3s9.5-4.2,15.2-4.2c5.5,0,10.5,1.4,14.9,4s7.9,6.3,10.4,11 s3.8,10,3.8,15.8S2734.7,765.4,2732.2,770.1z" transform="translate(0)"/>
+            <polygon points="2867.9,708.9 2846.5,708.9 2820.9,741.9 2795.5,708.9 2773.1,708.9 2809.1,755 2771.5,802.5 2792.9,802.5  2820.1,767.9 2847.2,802.6 2869.6,802.6 2832,754.4  " transform="translate(0)"/>
+            <path d="M757.6,293.7c-20-10.8-42.6-16.2-67.8-16.2H600c-8.5,39.2-21.1,76.4-37.6,111.3c-9.9,20.8-21.1,40.6-33.6,59.4v207.2h88.9 V521.5h72c25.2,0,47.8-5.4,67.8-16.2s35.7-25.6,47.1-44.2c11.4-18.7,17.1-39.1,17.1-61.3c0.1-22.7-5.6-43.3-17-61.9 C793.3,319.2,777.6,304.5,757.6,293.7z M716.6,434.3c-9.3,8.9-21.6,13.3-36.7,13.3l-62.2,0.4v-92.5l62.2-0.4 c15.1,0,27.3,4.4,36.7,13.3c9.4,8.9,14,19.9,14,32.9C730.6,414.5,726,425.4,716.6,434.3z" transform="translate(0)"/>
+          </g>
+        </svg>
+        <h3>{% translate "Password reset complete." %}</h3>
+        {% url 'login' as login_url %}
+        <p>{% blocktranslate %}Your new password has been set. You can now <a href="{{ login_url }}">log in</a>{% endblocktranslate %}.</p>
+      </div>
+       </body>
+</html>
diff --git a/src/documents/templates/registration/password_reset_confirm.html b/src/documents/templates/registration/password_reset_confirm.html
new file mode 100644 (file)
index 0000000..8f24212
--- /dev/null
@@ -0,0 +1,70 @@
+<!doctype html>
+
+{% load static %}
+{% load i18n %}
+
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <meta name="description" content="Paperless-ngx Sign In">
+    <meta name="author" content="Paperless-ngx project and contributors">
+    <meta name="robots" content="noindex,nofollow">
+
+    <title>{% translate "Paperless-ngx reset password confirmation" %}</title>
+
+               <link href="{% static 'bootstrap.min.css' %}" rel="stylesheet">
+    <link href="{% static 'signin.css' %}" rel="stylesheet">
+  </head>
+
+  <body class="text-center">
+    <form class="form-signin position-absolute top-50 start-50 translate-middle" method="post">
+                       {% csrf_token %}
+      <svg xmlns="http://www.w3.org/2000/svg" width="300" class="logo mb-4" viewBox="0 0 2897.4 896.6">
+        <path class="leaf" d="M140,713.7c-3.4-16.4-10.3-49.1-11.2-49.1c-145.7-87.1-128.4-238-80.2-324.2C59,449,251.2,524,139.1,656.8 c-0.9,1.7,5.2,22.4,10.3,41.4c22.4-37.9,56-83.6,54.3-87.9C65.9,273.9,496.9,248.1,586.6,39.4c40.5,201.8-20.7,513.9-367.2,593.2 c-1.7,0.9-62.9,108.6-65.5,109.5c0-1.7-25.9-0.9-22.4-9.5C133.1,727.4,136.6,720.6,140,713.7L140,713.7z M135.7,632.6 c44-50.9-7.8-137.9-38.8-166.4C149.5,556.7,146,609.3,135.7,632.6L135.7,632.6z" transform="translate(0)" style="fill:#17541f"/>
+        <g class="text" style="fill:#000">
+          <path d="M1022.3,428.7c-17.8-19.9-42.7-29.8-74.7-29.8c-22.3,0-42.4,5.7-60.5,17.3c-18.1,11.6-32.3,27.5-42.5,47.8 s-15.3,42.9-15.3,67.8c0,24.9,5.1,47.5,15.3,67.8c10.3,20.3,24.4,36.2,42.5,47.8c18.1,11.5,38.3,17.3,60.5,17.3 c32,0,56.9-9.9,74.7-29.8v20.4v0.2h84.5V408.3h-84.5V428.7z M1010.5,575c-10.2,11.7-23.6,17.6-40.2,17.6s-29.9-5.9-40-17.6 s-15.1-26.1-15.1-43.3c0-17.1,5-31.6,15.1-43.3s23.4-17.6,40-17.6c16.6,0,30,5.9,40.2,17.6s15.3,26.1,15.3,43.3 S1020.7,563.3,1010.5,575z" transform="translate(0)"/>
+          <path d="M1381,416.1c-18.1-11.5-38.3-17.3-60.5-17.4c-32,0-56.9,9.9-74.7,29.8v-20.4h-84.5v390.7h84.5v-164 c17.8,19.9,42.7,29.8,74.7,29.8c22.3,0,42.4-5.7,60.5-17.3s32.3-27.5,42.5-47.8c10.2-20.3,15.3-42.9,15.3-67.8s-5.1-47.5-15.3-67.8 C1413.2,443.6,1399.1,427.7,1381,416.1z M1337.9,575c-10.1,11.7-23.4,17.6-40,17.6s-29.9-5.9-40-17.6s-15.1-26.1-15.1-43.3 c0-17.1,5-31.6,15.1-43.3s23.4-17.6,40-17.6s29.9,5.9,40,17.6s15.1,26.1,15.1,43.3S1347.9,563.3,1337.9,575z" transform="translate(0)"/>
+          <path d="M1672.2,416.8c-20.5-12-43-18-67.6-18c-24.9,0-47.6,5.9-68,17.6c-20.4,11.7-36.5,27.7-48.2,48s-17.6,42.7-17.6,67.3 c0.3,25.2,6.2,47.8,17.8,68c11.5,20.2,28,36,49.3,47.6c21.3,11.5,45.9,17.3,73.8,17.3c48.6,0,86.8-14.7,114.7-44l-52.5-48.9 c-8.6,8.3-17.6,14.6-26.7,19c-9.3,4.3-21.1,6.4-35.3,6.4c-11.6,0-22.5-3.6-32.7-10.9c-10.3-7.3-17.1-16.5-20.7-27.8h180l0.4-11.6 c0-29.6-6-55.7-18-78.2S1692.6,428.8,1672.2,416.8z M1558.3,503.2c2.1-12.1,7.5-21.8,16.2-29.1s18.7-10.9,30-10.9 s21.2,3.6,29.8,10.9c8.6,7.2,13.9,16.9,16,29.1H1558.3z" transform="translate(0)"/>
+          <path d="M1895.3,411.7c-11,5.6-20.3,13.7-28,24.4h-0.1v-28h-84.5v247.3h84.5V536.3c0-22.6,4.7-38.1,14.2-46.5 c9.5-8.5,22.7-12.7,39.6-12.7c6.2,0,13.5,1,21.8,3.1l10.7-72c-5.9-3.3-14.5-4.9-25.8-4.9C1917.1,403.3,1906.3,406.1,1895.3,411.7z"  transform="translate(0)"/>
+          <rect x="1985" y="277.4" width="84.5" height="377.8" transform="translate(0)"/>
+          <path d="M2313.2,416.8c-20.5-12-43-18-67.6-18c-24.9,0-47.6,5.9-68,17.6s-36.5,27.7-48.2,48c-11.7,20.3-17.6,42.7-17.6,67.3 c0.3,25.2,6.2,47.8,17.8,68c11.5,20.2,28,36,49.3,47.6c21.3,11.5,45.9,17.3,73.8,17.3c48.6,0,86.8-14.7,114.7-44l-52.5-48.9 c-8.6,8.3-17.6,14.6-26.7,19c-9.3,4.3-21.1,6.4-35.3,6.4c-11.6,0-22.5-3.6-32.7-10.9c-10.3-7.3-17.1-16.5-20.7-27.8h180l0.4-11.6 c0-29.6-6-55.7-18-78.2S2333.6,428.8,2313.2,416.8z M2199.3,503.2c2.1-12.1,7.5-21.8,16.2-29.1s18.7-10.9,30-10.9 s21.2,3.6,29.8,10.9c8.6,7.2,13.9,16.9,16,29.1H2199.3z" transform="translate(0)"/>
+          <path d="M2583.6,507.7c-13.8-4.4-30.6-8.1-50.5-11.1c-15.1-2.7-26.1-5.2-32.9-7.6c-6.8-2.4-10.2-6.1-10.2-11.1s2.3-8.7,6.7-10.9 c4.4-2.2,11.5-3.3,21.3-3.3c11.6,0,24.3,2.4,38.1,7.2c13.9,4.8,26.2,11,36.9,18.4l32.4-58.2c-11.3-7.4-26.2-14.7-44.9-21.8 c-18.7-7.1-39.6-10.7-62.7-10.7c-33.7,0-60.2,7.6-79.3,22.7c-19.1,15.1-28.7,36.1-28.7,63.1c0,19,4.8,33.9,14.4,44.7 c9.6,10.8,21,18.5,34,22.9c13.1,4.5,28.9,8.3,47.6,11.6c14.6,2.7,25.1,5.3,31.6,7.8s9.8,6.5,9.8,11.8c0,10.4-9.7,15.6-29.3,15.6 c-13.7,0-28.5-2.3-44.7-6.9c-16.1-4.6-29.2-11.3-39.3-20.2l-33.3,60c9.2,7.4,24.6,14.7,46.2,22c21.7,7.3,45.2,10.9,70.7,10.9 c34.7,0,62.9-7.4,84.5-22.4c21.7-15,32.5-37.3,32.5-66.9c0-19.3-5-34.2-15.1-44.9S2597.4,512.1,2583.6,507.7z" transform="translate(0)"/>
+          <path d="M2883.4,575.3c0-19.3-5-34.2-15.1-44.9s-22-18.3-35.8-22.7c-13.8-4.4-30.6-8.1-50.5-11.1c-15.1-2.7-26.1-5.2-32.9-7.6 c-6.8-2.4-10.2-6.1-10.2-11.1s2.3-8.7,6.7-10.9c4.4-2.2,11.5-3.3,21.3-3.3c11.6,0,24.3,2.4,38.1,7.2c13.9,4.8,26.2,11,36.9,18.4 l32.4-58.2c-11.3-7.4-26.2-14.7-44.9-21.8c-18.7-7.1-39.6-10.7-62.7-10.7c-33.7,0-60.2,7.6-79.3,22.7 c-19.1,15.1-28.7,36.1-28.7,63.1c0,19,4.8,33.9,14.4,44.7c9.6,10.8,21,18.5,34,22.9c13.1,4.5,28.9,8.3,47.6,11.6 c14.6,2.7,25.1,5.3,31.6,7.8s9.8,6.5,9.8,11.8c0,10.4-9.7,15.6-29.3,15.6c-13.7,0-28.5-2.3-44.7-6.9c-16.1-4.6-29.2-11.3-39.3-20.2 l-33.3,60c9.2,7.4,24.6,14.7,46.2,22c21.7,7.3,45.2,10.9,70.7,10.9c34.7,0,62.9-7.4,84.5-22.4 C2872.6,627.2,2883.4,604.9,2883.4,575.3z" transform="translate(0)"/>
+          <rect x="2460.7" y="738.7" width="59.6" height="17.2" transform="translate(0)"/>
+          <path d="M2596.5,706.4c-5.7,0-11,1-15.8,3s-9,5-12.5,8.9v-9.4h-19.4v93.6h19.4v-52c0-8.6,2.1-15.3,6.3-20c4.2-4.7,9.5-7.1,15.9-7.1 c7.8,0,13.4,2.3,16.8,6.7c3.4,4.5,5.1,11.3,5.1,20.5v52h19.4v-56.8c0-12.8-3.2-22.6-9.5-29.3 C2615.8,709.8,2607.3,706.4,2596.5,706.4z" transform="translate(0)"/>
+          <path d="M2733.8,717.7c-3.6-3.4-7.9-6.1-13.1-8.2s-10.6-3.1-16.2-3.1c-8.7,0-16.5,2.1-23.5,6.3s-12.5,10-16.5,17.3 c-4,7.3-6,15.4-6,24.4c0,8.9,2,17.1,6,24.3c4,7.3,9.5,13,16.5,17.2s14.9,6.3,23.5,6.3c5.6,0,11-1,16.2-3.1 c5.1-2.1,9.5-4.8,13.1-8.2v24.4c0,8.5-2.5,14.8-7.6,18.7c-5,3.9-11,5.9-18,5.9c-6.7,0-12.4-1.6-17.3-4.7c-4.8-3.1-7.6-7.7-8.3-13.8 h-19.4c0.6,7.7,2.9,14.2,7.1,19.5s9.6,9.3,16.2,12c6.6,2.7,13.8,4,21.7,4c12.8,0,23.5-3.4,32-10.1c8.6-6.7,12.8-17.1,12.8-31.1 V708.9h-19.2V717.7z M2732.2,770.1c-2.5,4.7-6,8.3-10.4,11.2c-4.4,2.7-9.4,4-14.9,4c-5.7,0-10.8-1.4-15.2-4.3s-7.8-6.7-10.2-11.4 c-2.3-4.8-3.5-9.8-3.5-15.2c0-5.5,1.1-10.6,3.5-15.3s5.8-8.5,10.2-11.3s9.5-4.2,15.2-4.2c5.5,0,10.5,1.4,14.9,4s7.9,6.3,10.4,11 s3.8,10,3.8,15.8S2734.7,765.4,2732.2,770.1z" transform="translate(0)"/>
+          <polygon points="2867.9,708.9 2846.5,708.9 2820.9,741.9 2795.5,708.9 2773.1,708.9 2809.1,755 2771.5,802.5 2792.9,802.5  2820.1,767.9 2847.2,802.6 2869.6,802.6 2832,754.4    " transform="translate(0)"/>
+          <path d="M757.6,293.7c-20-10.8-42.6-16.2-67.8-16.2H600c-8.5,39.2-21.1,76.4-37.6,111.3c-9.9,20.8-21.1,40.6-33.6,59.4v207.2h88.9 V521.5h72c25.2,0,47.8-5.4,67.8-16.2s35.7-25.6,47.1-44.2c11.4-18.7,17.1-39.1,17.1-61.3c0.1-22.7-5.6-43.3-17-61.9 C793.3,319.2,777.6,304.5,757.6,293.7z M716.6,434.3c-9.3,8.9-21.6,13.3-36.7,13.3l-62.2,0.4v-92.5l62.2-0.4 c15.1,0,27.3,4.4,36.7,13.3c9.4,8.9,14,19.9,14,32.9C730.6,414.5,726,425.4,716.6,434.3z" transform="translate(0)"/>
+        </g>
+      </svg>
+      {% if validlink %}
+                       <p>{% translate "Set a new password." %}</p>
+                       {% if form.errors %}
+        <div class="alert alert-danger" role="alert">
+          {{ form.errors }}
+          {% translate "Passwords did not match or too weak. Try again." %}
+        </div>
+      {% endif %}
+                       {% translate "New Password" as i18n_new_password1 %}
+                       {% translate "Confirm Password" as i18n_new_password2 %}
+      <h1></h1>
+      <div class="form-floating">
+        <input type="password" name="new_password1" id="inputPassword1" placeholder="{{ i18n_new_password1 }}" class="form-control" required>
+                         <label for="inputPassword1">{{ i18n_new_password1 }}</label>
+      </div>
+      <div class="form-floating">
+        <input type="password" name="new_password2" id="inputPassword2" placeholder="{{ i18n_new_password2 }}" class="form-control" required>
+                         <label for="inputPassword2">{{ i18n_new_password2 }}</label>
+      </div>
+      <div class="d-grid mt-3">
+        <button class="btn btn-lg btn-primary" type="submit">{% translate "Change my password" %}</button>
+      </div>
+      {% else %}
+
+      <p>The password reset link was invalid, possibly because it has already been used. Please <a class="btn btn-link" href="{% url 'password_reset' %}">{% translate "request a new password reset" %}</a>.</p>
+
+      {% endif %}
+               </form>
+       </body>
+</html>
diff --git a/src/documents/templates/registration/password_reset_done.html b/src/documents/templates/registration/password_reset_done.html
new file mode 100644 (file)
index 0000000..b798ee3
--- /dev/null
@@ -0,0 +1,44 @@
+<!doctype html>
+
+{% load static %}
+{% load i18n %}
+
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <meta name="description" content="Paperless-ngx Sign In">
+    <meta name="author" content="Paperless-ngx project and contributors">
+    <meta name="robots" content="noindex,nofollow">
+
+    <title>{% translate "Paperless-ngx reset password sent" %}</title>
+
+               <link href="{% static 'bootstrap.min.css' %}" rel="stylesheet">
+    <link href="{% static 'signin.css' %}" rel="stylesheet">
+  </head>
+
+  <body class="text-center">
+      <div class="position-absolute top-50 start-50 translate-middle">
+        <svg xmlns="http://www.w3.org/2000/svg" width="300" class="logo mb-4" viewBox="0 0 2897.4 896.6">
+          <path class="leaf" d="M140,713.7c-3.4-16.4-10.3-49.1-11.2-49.1c-145.7-87.1-128.4-238-80.2-324.2C59,449,251.2,524,139.1,656.8 c-0.9,1.7,5.2,22.4,10.3,41.4c22.4-37.9,56-83.6,54.3-87.9C65.9,273.9,496.9,248.1,586.6,39.4c40.5,201.8-20.7,513.9-367.2,593.2 c-1.7,0.9-62.9,108.6-65.5,109.5c0-1.7-25.9-0.9-22.4-9.5C133.1,727.4,136.6,720.6,140,713.7L140,713.7z M135.7,632.6 c44-50.9-7.8-137.9-38.8-166.4C149.5,556.7,146,609.3,135.7,632.6L135.7,632.6z" transform="translate(0)" style="fill:#17541f"/>
+          <g class="text" style="fill:#000">
+            <path d="M1022.3,428.7c-17.8-19.9-42.7-29.8-74.7-29.8c-22.3,0-42.4,5.7-60.5,17.3c-18.1,11.6-32.3,27.5-42.5,47.8 s-15.3,42.9-15.3,67.8c0,24.9,5.1,47.5,15.3,67.8c10.3,20.3,24.4,36.2,42.5,47.8c18.1,11.5,38.3,17.3,60.5,17.3 c32,0,56.9-9.9,74.7-29.8v20.4v0.2h84.5V408.3h-84.5V428.7z M1010.5,575c-10.2,11.7-23.6,17.6-40.2,17.6s-29.9-5.9-40-17.6 s-15.1-26.1-15.1-43.3c0-17.1,5-31.6,15.1-43.3s23.4-17.6,40-17.6c16.6,0,30,5.9,40.2,17.6s15.3,26.1,15.3,43.3 S1020.7,563.3,1010.5,575z" transform="translate(0)"/>
+            <path d="M1381,416.1c-18.1-11.5-38.3-17.3-60.5-17.4c-32,0-56.9,9.9-74.7,29.8v-20.4h-84.5v390.7h84.5v-164 c17.8,19.9,42.7,29.8,74.7,29.8c22.3,0,42.4-5.7,60.5-17.3s32.3-27.5,42.5-47.8c10.2-20.3,15.3-42.9,15.3-67.8s-5.1-47.5-15.3-67.8 C1413.2,443.6,1399.1,427.7,1381,416.1z M1337.9,575c-10.1,11.7-23.4,17.6-40,17.6s-29.9-5.9-40-17.6s-15.1-26.1-15.1-43.3 c0-17.1,5-31.6,15.1-43.3s23.4-17.6,40-17.6s29.9,5.9,40,17.6s15.1,26.1,15.1,43.3S1347.9,563.3,1337.9,575z" transform="translate(0)"/>
+            <path d="M1672.2,416.8c-20.5-12-43-18-67.6-18c-24.9,0-47.6,5.9-68,17.6c-20.4,11.7-36.5,27.7-48.2,48s-17.6,42.7-17.6,67.3 c0.3,25.2,6.2,47.8,17.8,68c11.5,20.2,28,36,49.3,47.6c21.3,11.5,45.9,17.3,73.8,17.3c48.6,0,86.8-14.7,114.7-44l-52.5-48.9 c-8.6,8.3-17.6,14.6-26.7,19c-9.3,4.3-21.1,6.4-35.3,6.4c-11.6,0-22.5-3.6-32.7-10.9c-10.3-7.3-17.1-16.5-20.7-27.8h180l0.4-11.6 c0-29.6-6-55.7-18-78.2S1692.6,428.8,1672.2,416.8z M1558.3,503.2c2.1-12.1,7.5-21.8,16.2-29.1s18.7-10.9,30-10.9 s21.2,3.6,29.8,10.9c8.6,7.2,13.9,16.9,16,29.1H1558.3z" transform="translate(0)"/>
+            <path d="M1895.3,411.7c-11,5.6-20.3,13.7-28,24.4h-0.1v-28h-84.5v247.3h84.5V536.3c0-22.6,4.7-38.1,14.2-46.5 c9.5-8.5,22.7-12.7,39.6-12.7c6.2,0,13.5,1,21.8,3.1l10.7-72c-5.9-3.3-14.5-4.9-25.8-4.9C1917.1,403.3,1906.3,406.1,1895.3,411.7z"  transform="translate(0)"/>
+            <rect x="1985" y="277.4" width="84.5" height="377.8" transform="translate(0)"/>
+            <path d="M2313.2,416.8c-20.5-12-43-18-67.6-18c-24.9,0-47.6,5.9-68,17.6s-36.5,27.7-48.2,48c-11.7,20.3-17.6,42.7-17.6,67.3 c0.3,25.2,6.2,47.8,17.8,68c11.5,20.2,28,36,49.3,47.6c21.3,11.5,45.9,17.3,73.8,17.3c48.6,0,86.8-14.7,114.7-44l-52.5-48.9 c-8.6,8.3-17.6,14.6-26.7,19c-9.3,4.3-21.1,6.4-35.3,6.4c-11.6,0-22.5-3.6-32.7-10.9c-10.3-7.3-17.1-16.5-20.7-27.8h180l0.4-11.6 c0-29.6-6-55.7-18-78.2S2333.6,428.8,2313.2,416.8z M2199.3,503.2c2.1-12.1,7.5-21.8,16.2-29.1s18.7-10.9,30-10.9 s21.2,3.6,29.8,10.9c8.6,7.2,13.9,16.9,16,29.1H2199.3z" transform="translate(0)"/>
+            <path d="M2583.6,507.7c-13.8-4.4-30.6-8.1-50.5-11.1c-15.1-2.7-26.1-5.2-32.9-7.6c-6.8-2.4-10.2-6.1-10.2-11.1s2.3-8.7,6.7-10.9 c4.4-2.2,11.5-3.3,21.3-3.3c11.6,0,24.3,2.4,38.1,7.2c13.9,4.8,26.2,11,36.9,18.4l32.4-58.2c-11.3-7.4-26.2-14.7-44.9-21.8 c-18.7-7.1-39.6-10.7-62.7-10.7c-33.7,0-60.2,7.6-79.3,22.7c-19.1,15.1-28.7,36.1-28.7,63.1c0,19,4.8,33.9,14.4,44.7 c9.6,10.8,21,18.5,34,22.9c13.1,4.5,28.9,8.3,47.6,11.6c14.6,2.7,25.1,5.3,31.6,7.8s9.8,6.5,9.8,11.8c0,10.4-9.7,15.6-29.3,15.6 c-13.7,0-28.5-2.3-44.7-6.9c-16.1-4.6-29.2-11.3-39.3-20.2l-33.3,60c9.2,7.4,24.6,14.7,46.2,22c21.7,7.3,45.2,10.9,70.7,10.9 c34.7,0,62.9-7.4,84.5-22.4c21.7-15,32.5-37.3,32.5-66.9c0-19.3-5-34.2-15.1-44.9S2597.4,512.1,2583.6,507.7z" transform="translate(0)"/>
+            <path d="M2883.4,575.3c0-19.3-5-34.2-15.1-44.9s-22-18.3-35.8-22.7c-13.8-4.4-30.6-8.1-50.5-11.1c-15.1-2.7-26.1-5.2-32.9-7.6 c-6.8-2.4-10.2-6.1-10.2-11.1s2.3-8.7,6.7-10.9c4.4-2.2,11.5-3.3,21.3-3.3c11.6,0,24.3,2.4,38.1,7.2c13.9,4.8,26.2,11,36.9,18.4 l32.4-58.2c-11.3-7.4-26.2-14.7-44.9-21.8c-18.7-7.1-39.6-10.7-62.7-10.7c-33.7,0-60.2,7.6-79.3,22.7 c-19.1,15.1-28.7,36.1-28.7,63.1c0,19,4.8,33.9,14.4,44.7c9.6,10.8,21,18.5,34,22.9c13.1,4.5,28.9,8.3,47.6,11.6 c14.6,2.7,25.1,5.3,31.6,7.8s9.8,6.5,9.8,11.8c0,10.4-9.7,15.6-29.3,15.6c-13.7,0-28.5-2.3-44.7-6.9c-16.1-4.6-29.2-11.3-39.3-20.2 l-33.3,60c9.2,7.4,24.6,14.7,46.2,22c21.7,7.3,45.2,10.9,70.7,10.9c34.7,0,62.9-7.4,84.5-22.4 C2872.6,627.2,2883.4,604.9,2883.4,575.3z" transform="translate(0)"/>
+            <rect x="2460.7" y="738.7" width="59.6" height="17.2" transform="translate(0)"/>
+            <path d="M2596.5,706.4c-5.7,0-11,1-15.8,3s-9,5-12.5,8.9v-9.4h-19.4v93.6h19.4v-52c0-8.6,2.1-15.3,6.3-20c4.2-4.7,9.5-7.1,15.9-7.1 c7.8,0,13.4,2.3,16.8,6.7c3.4,4.5,5.1,11.3,5.1,20.5v52h19.4v-56.8c0-12.8-3.2-22.6-9.5-29.3 C2615.8,709.8,2607.3,706.4,2596.5,706.4z" transform="translate(0)"/>
+            <path d="M2733.8,717.7c-3.6-3.4-7.9-6.1-13.1-8.2s-10.6-3.1-16.2-3.1c-8.7,0-16.5,2.1-23.5,6.3s-12.5,10-16.5,17.3 c-4,7.3-6,15.4-6,24.4c0,8.9,2,17.1,6,24.3c4,7.3,9.5,13,16.5,17.2s14.9,6.3,23.5,6.3c5.6,0,11-1,16.2-3.1 c5.1-2.1,9.5-4.8,13.1-8.2v24.4c0,8.5-2.5,14.8-7.6,18.7c-5,3.9-11,5.9-18,5.9c-6.7,0-12.4-1.6-17.3-4.7c-4.8-3.1-7.6-7.7-8.3-13.8 h-19.4c0.6,7.7,2.9,14.2,7.1,19.5s9.6,9.3,16.2,12c6.6,2.7,13.8,4,21.7,4c12.8,0,23.5-3.4,32-10.1c8.6-6.7,12.8-17.1,12.8-31.1 V708.9h-19.2V717.7z M2732.2,770.1c-2.5,4.7-6,8.3-10.4,11.2c-4.4,2.7-9.4,4-14.9,4c-5.7,0-10.8-1.4-15.2-4.3s-7.8-6.7-10.2-11.4 c-2.3-4.8-3.5-9.8-3.5-15.2c0-5.5,1.1-10.6,3.5-15.3s5.8-8.5,10.2-11.3s9.5-4.2,15.2-4.2c5.5,0,10.5,1.4,14.9,4s7.9,6.3,10.4,11 s3.8,10,3.8,15.8S2734.7,765.4,2732.2,770.1z" transform="translate(0)"/>
+            <polygon points="2867.9,708.9 2846.5,708.9 2820.9,741.9 2795.5,708.9 2773.1,708.9 2809.1,755 2771.5,802.5 2792.9,802.5  2820.1,767.9 2847.2,802.6 2869.6,802.6 2832,754.4  " transform="translate(0)"/>
+            <path d="M757.6,293.7c-20-10.8-42.6-16.2-67.8-16.2H600c-8.5,39.2-21.1,76.4-37.6,111.3c-9.9,20.8-21.1,40.6-33.6,59.4v207.2h88.9 V521.5h72c25.2,0,47.8-5.4,67.8-16.2s35.7-25.6,47.1-44.2c11.4-18.7,17.1-39.1,17.1-61.3c0.1-22.7-5.6-43.3-17-61.9 C793.3,319.2,777.6,304.5,757.6,293.7z M716.6,434.3c-9.3,8.9-21.6,13.3-36.7,13.3l-62.2,0.4v-92.5l62.2-0.4 c15.1,0,27.3,4.4,36.7,13.3c9.4,8.9,14,19.9,14,32.9C730.6,414.5,726,425.4,716.6,434.3z" transform="translate(0)"/>
+          </g>
+        </svg>
+        <h3>{% translate "Check your inbox." %}</h3>
+        <p>{% translate "We've emailed you instructions for setting your password. You should receive the email shortly!" %}</p>
+      </div>
+       </body>
+</html>
diff --git a/src/documents/templates/registration/password_reset_form.html b/src/documents/templates/registration/password_reset_form.html
new file mode 100644 (file)
index 0000000..9bdc229
--- /dev/null
@@ -0,0 +1,58 @@
+<!doctype html>
+
+{% load static %}
+{% load i18n %}
+
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <meta name="description" content="Paperless-ngx Sign In">
+    <meta name="author" content="Paperless-ngx project and contributors">
+    <meta name="robots" content="noindex,nofollow">
+
+    <title>{% translate "Paperless-ngx reset password request" %}</title>
+
+               <link href="{% static 'bootstrap.min.css' %}" rel="stylesheet">
+    <link href="{% static 'signin.css' %}" rel="stylesheet">
+  </head>
+
+  <body class="text-center">
+    <form class="form-signin position-absolute top-50 start-50 translate-middle" method="post">
+                       {% csrf_token %}
+      <svg xmlns="http://www.w3.org/2000/svg" width="300" class="logo mb-4" viewBox="0 0 2897.4 896.6">
+        <path class="leaf" d="M140,713.7c-3.4-16.4-10.3-49.1-11.2-49.1c-145.7-87.1-128.4-238-80.2-324.2C59,449,251.2,524,139.1,656.8 c-0.9,1.7,5.2,22.4,10.3,41.4c22.4-37.9,56-83.6,54.3-87.9C65.9,273.9,496.9,248.1,586.6,39.4c40.5,201.8-20.7,513.9-367.2,593.2 c-1.7,0.9-62.9,108.6-65.5,109.5c0-1.7-25.9-0.9-22.4-9.5C133.1,727.4,136.6,720.6,140,713.7L140,713.7z M135.7,632.6 c44-50.9-7.8-137.9-38.8-166.4C149.5,556.7,146,609.3,135.7,632.6L135.7,632.6z" transform="translate(0)" style="fill:#17541f"/>
+        <g class="text" style="fill:#000">
+          <path d="M1022.3,428.7c-17.8-19.9-42.7-29.8-74.7-29.8c-22.3,0-42.4,5.7-60.5,17.3c-18.1,11.6-32.3,27.5-42.5,47.8 s-15.3,42.9-15.3,67.8c0,24.9,5.1,47.5,15.3,67.8c10.3,20.3,24.4,36.2,42.5,47.8c18.1,11.5,38.3,17.3,60.5,17.3 c32,0,56.9-9.9,74.7-29.8v20.4v0.2h84.5V408.3h-84.5V428.7z M1010.5,575c-10.2,11.7-23.6,17.6-40.2,17.6s-29.9-5.9-40-17.6 s-15.1-26.1-15.1-43.3c0-17.1,5-31.6,15.1-43.3s23.4-17.6,40-17.6c16.6,0,30,5.9,40.2,17.6s15.3,26.1,15.3,43.3 S1020.7,563.3,1010.5,575z" transform="translate(0)"/>
+          <path d="M1381,416.1c-18.1-11.5-38.3-17.3-60.5-17.4c-32,0-56.9,9.9-74.7,29.8v-20.4h-84.5v390.7h84.5v-164 c17.8,19.9,42.7,29.8,74.7,29.8c22.3,0,42.4-5.7,60.5-17.3s32.3-27.5,42.5-47.8c10.2-20.3,15.3-42.9,15.3-67.8s-5.1-47.5-15.3-67.8 C1413.2,443.6,1399.1,427.7,1381,416.1z M1337.9,575c-10.1,11.7-23.4,17.6-40,17.6s-29.9-5.9-40-17.6s-15.1-26.1-15.1-43.3 c0-17.1,5-31.6,15.1-43.3s23.4-17.6,40-17.6s29.9,5.9,40,17.6s15.1,26.1,15.1,43.3S1347.9,563.3,1337.9,575z" transform="translate(0)"/>
+          <path d="M1672.2,416.8c-20.5-12-43-18-67.6-18c-24.9,0-47.6,5.9-68,17.6c-20.4,11.7-36.5,27.7-48.2,48s-17.6,42.7-17.6,67.3 c0.3,25.2,6.2,47.8,17.8,68c11.5,20.2,28,36,49.3,47.6c21.3,11.5,45.9,17.3,73.8,17.3c48.6,0,86.8-14.7,114.7-44l-52.5-48.9 c-8.6,8.3-17.6,14.6-26.7,19c-9.3,4.3-21.1,6.4-35.3,6.4c-11.6,0-22.5-3.6-32.7-10.9c-10.3-7.3-17.1-16.5-20.7-27.8h180l0.4-11.6 c0-29.6-6-55.7-18-78.2S1692.6,428.8,1672.2,416.8z M1558.3,503.2c2.1-12.1,7.5-21.8,16.2-29.1s18.7-10.9,30-10.9 s21.2,3.6,29.8,10.9c8.6,7.2,13.9,16.9,16,29.1H1558.3z" transform="translate(0)"/>
+          <path d="M1895.3,411.7c-11,5.6-20.3,13.7-28,24.4h-0.1v-28h-84.5v247.3h84.5V536.3c0-22.6,4.7-38.1,14.2-46.5 c9.5-8.5,22.7-12.7,39.6-12.7c6.2,0,13.5,1,21.8,3.1l10.7-72c-5.9-3.3-14.5-4.9-25.8-4.9C1917.1,403.3,1906.3,406.1,1895.3,411.7z"  transform="translate(0)"/>
+          <rect x="1985" y="277.4" width="84.5" height="377.8" transform="translate(0)"/>
+          <path d="M2313.2,416.8c-20.5-12-43-18-67.6-18c-24.9,0-47.6,5.9-68,17.6s-36.5,27.7-48.2,48c-11.7,20.3-17.6,42.7-17.6,67.3 c0.3,25.2,6.2,47.8,17.8,68c11.5,20.2,28,36,49.3,47.6c21.3,11.5,45.9,17.3,73.8,17.3c48.6,0,86.8-14.7,114.7-44l-52.5-48.9 c-8.6,8.3-17.6,14.6-26.7,19c-9.3,4.3-21.1,6.4-35.3,6.4c-11.6,0-22.5-3.6-32.7-10.9c-10.3-7.3-17.1-16.5-20.7-27.8h180l0.4-11.6 c0-29.6-6-55.7-18-78.2S2333.6,428.8,2313.2,416.8z M2199.3,503.2c2.1-12.1,7.5-21.8,16.2-29.1s18.7-10.9,30-10.9 s21.2,3.6,29.8,10.9c8.6,7.2,13.9,16.9,16,29.1H2199.3z" transform="translate(0)"/>
+          <path d="M2583.6,507.7c-13.8-4.4-30.6-8.1-50.5-11.1c-15.1-2.7-26.1-5.2-32.9-7.6c-6.8-2.4-10.2-6.1-10.2-11.1s2.3-8.7,6.7-10.9 c4.4-2.2,11.5-3.3,21.3-3.3c11.6,0,24.3,2.4,38.1,7.2c13.9,4.8,26.2,11,36.9,18.4l32.4-58.2c-11.3-7.4-26.2-14.7-44.9-21.8 c-18.7-7.1-39.6-10.7-62.7-10.7c-33.7,0-60.2,7.6-79.3,22.7c-19.1,15.1-28.7,36.1-28.7,63.1c0,19,4.8,33.9,14.4,44.7 c9.6,10.8,21,18.5,34,22.9c13.1,4.5,28.9,8.3,47.6,11.6c14.6,2.7,25.1,5.3,31.6,7.8s9.8,6.5,9.8,11.8c0,10.4-9.7,15.6-29.3,15.6 c-13.7,0-28.5-2.3-44.7-6.9c-16.1-4.6-29.2-11.3-39.3-20.2l-33.3,60c9.2,7.4,24.6,14.7,46.2,22c21.7,7.3,45.2,10.9,70.7,10.9 c34.7,0,62.9-7.4,84.5-22.4c21.7-15,32.5-37.3,32.5-66.9c0-19.3-5-34.2-15.1-44.9S2597.4,512.1,2583.6,507.7z" transform="translate(0)"/>
+          <path d="M2883.4,575.3c0-19.3-5-34.2-15.1-44.9s-22-18.3-35.8-22.7c-13.8-4.4-30.6-8.1-50.5-11.1c-15.1-2.7-26.1-5.2-32.9-7.6 c-6.8-2.4-10.2-6.1-10.2-11.1s2.3-8.7,6.7-10.9c4.4-2.2,11.5-3.3,21.3-3.3c11.6,0,24.3,2.4,38.1,7.2c13.9,4.8,26.2,11,36.9,18.4 l32.4-58.2c-11.3-7.4-26.2-14.7-44.9-21.8c-18.7-7.1-39.6-10.7-62.7-10.7c-33.7,0-60.2,7.6-79.3,22.7 c-19.1,15.1-28.7,36.1-28.7,63.1c0,19,4.8,33.9,14.4,44.7c9.6,10.8,21,18.5,34,22.9c13.1,4.5,28.9,8.3,47.6,11.6 c14.6,2.7,25.1,5.3,31.6,7.8s9.8,6.5,9.8,11.8c0,10.4-9.7,15.6-29.3,15.6c-13.7,0-28.5-2.3-44.7-6.9c-16.1-4.6-29.2-11.3-39.3-20.2 l-33.3,60c9.2,7.4,24.6,14.7,46.2,22c21.7,7.3,45.2,10.9,70.7,10.9c34.7,0,62.9-7.4,84.5-22.4 C2872.6,627.2,2883.4,604.9,2883.4,575.3z" transform="translate(0)"/>
+          <rect x="2460.7" y="738.7" width="59.6" height="17.2" transform="translate(0)"/>
+          <path d="M2596.5,706.4c-5.7,0-11,1-15.8,3s-9,5-12.5,8.9v-9.4h-19.4v93.6h19.4v-52c0-8.6,2.1-15.3,6.3-20c4.2-4.7,9.5-7.1,15.9-7.1 c7.8,0,13.4,2.3,16.8,6.7c3.4,4.5,5.1,11.3,5.1,20.5v52h19.4v-56.8c0-12.8-3.2-22.6-9.5-29.3 C2615.8,709.8,2607.3,706.4,2596.5,706.4z" transform="translate(0)"/>
+          <path d="M2733.8,717.7c-3.6-3.4-7.9-6.1-13.1-8.2s-10.6-3.1-16.2-3.1c-8.7,0-16.5,2.1-23.5,6.3s-12.5,10-16.5,17.3 c-4,7.3-6,15.4-6,24.4c0,8.9,2,17.1,6,24.3c4,7.3,9.5,13,16.5,17.2s14.9,6.3,23.5,6.3c5.6,0,11-1,16.2-3.1 c5.1-2.1,9.5-4.8,13.1-8.2v24.4c0,8.5-2.5,14.8-7.6,18.7c-5,3.9-11,5.9-18,5.9c-6.7,0-12.4-1.6-17.3-4.7c-4.8-3.1-7.6-7.7-8.3-13.8 h-19.4c0.6,7.7,2.9,14.2,7.1,19.5s9.6,9.3,16.2,12c6.6,2.7,13.8,4,21.7,4c12.8,0,23.5-3.4,32-10.1c8.6-6.7,12.8-17.1,12.8-31.1 V708.9h-19.2V717.7z M2732.2,770.1c-2.5,4.7-6,8.3-10.4,11.2c-4.4,2.7-9.4,4-14.9,4c-5.7,0-10.8-1.4-15.2-4.3s-7.8-6.7-10.2-11.4 c-2.3-4.8-3.5-9.8-3.5-15.2c0-5.5,1.1-10.6,3.5-15.3s5.8-8.5,10.2-11.3s9.5-4.2,15.2-4.2c5.5,0,10.5,1.4,14.9,4s7.9,6.3,10.4,11 s3.8,10,3.8,15.8S2734.7,765.4,2732.2,770.1z" transform="translate(0)"/>
+          <polygon points="2867.9,708.9 2846.5,708.9 2820.9,741.9 2795.5,708.9 2773.1,708.9 2809.1,755 2771.5,802.5 2792.9,802.5  2820.1,767.9 2847.2,802.6 2869.6,802.6 2832,754.4    " transform="translate(0)"/>
+          <path d="M757.6,293.7c-20-10.8-42.6-16.2-67.8-16.2H600c-8.5,39.2-21.1,76.4-37.6,111.3c-9.9,20.8-21.1,40.6-33.6,59.4v207.2h88.9 V521.5h72c25.2,0,47.8-5.4,67.8-16.2s35.7-25.6,47.1-44.2c11.4-18.7,17.1-39.1,17.1-61.3c0.1-22.7-5.6-43.3-17-61.9 C793.3,319.2,777.6,304.5,757.6,293.7z M716.6,434.3c-9.3,8.9-21.6,13.3-36.7,13.3l-62.2,0.4v-92.5l62.2-0.4 c15.1,0,27.3,4.4,36.7,13.3c9.4,8.9,14,19.9,14,32.9C730.6,414.5,726,425.4,716.6,434.3z" transform="translate(0)"/>
+        </g>
+      </svg>
+                       <p>{% translate "Enter your email address below, and we'll email instructions for setting a new one." %}</p>
+                       {% if form.errors %}
+        <div class="alert alert-danger" role="alert">
+          {% translate "An error occurred. Please try again." %}
+        </div>
+      {% endif %}
+                       {% translate "Email" as i18n_email %}
+      <h1></h1>
+      <div class="form-floating">
+        <input type="email" name="email" id="inputEmail" placeholder="{{ i18n_email }}" class="form-control" required>
+                         <label for="inputEmail">{{ i18n_email }}</label>
+      </div>
+      <div class="d-grid mt-3">
+        <button class="btn btn-lg btn-primary" type="submit">{% translate "Send me instructions!" %}</button>
+      </div>
+               </form>
+       </body>
+</html>
index bb1fe876ea27c14dd878529194fda691fad19027..c1358185a1c1dbbd63fca923b6c0383f32933a1e 100644 (file)
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: paperless-ngx\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-09-19 14:30-0700\n"
+"POT-Creation-Date: 2023-09-28 10:56-0700\n"
 "PO-Revision-Date: 2022-02-17 04:17\n"
 "Last-Translator: \n"
 "Language-Team: English\n"
@@ -21,425 +21,425 @@ msgstr ""
 msgid "Documents"
 msgstr ""
 
-#: documents/models.py:36 documents/models.py:731
+#: documents/models.py:33 documents/models.py:731
 msgid "owner"
 msgstr ""
 
-#: documents/models.py:53
+#: documents/models.py:50
 msgid "None"
 msgstr ""
 
-#: documents/models.py:54
+#: documents/models.py:51
 msgid "Any word"
 msgstr ""
 
-#: documents/models.py:55
+#: documents/models.py:52
 msgid "All words"
 msgstr ""
 
-#: documents/models.py:56
+#: documents/models.py:53
 msgid "Exact match"
 msgstr ""
 
-#: documents/models.py:57
+#: documents/models.py:54
 msgid "Regular expression"
 msgstr ""
 
-#: documents/models.py:58
+#: documents/models.py:55
 msgid "Fuzzy word"
 msgstr ""
 
-#: documents/models.py:59
+#: documents/models.py:56
 msgid "Automatic"
 msgstr ""
 
-#: documents/models.py:62 documents/models.py:402 documents/models.py:755
+#: documents/models.py:59 documents/models.py:399 documents/models.py:749
 #: paperless_mail/models.py:18 paperless_mail/models.py:93
 msgid "name"
 msgstr ""
 
-#: documents/models.py:64
+#: documents/models.py:61
 msgid "match"
 msgstr ""
 
-#: documents/models.py:67
+#: documents/models.py:64
 msgid "matching algorithm"
 msgstr ""
 
-#: documents/models.py:72
+#: documents/models.py:69
 msgid "is insensitive"
 msgstr ""
 
-#: documents/models.py:95 documents/models.py:147
+#: documents/models.py:92 documents/models.py:144
 msgid "correspondent"
 msgstr ""
 
-#: documents/models.py:96
+#: documents/models.py:93
 msgid "correspondents"
 msgstr ""
 
-#: documents/models.py:100
+#: documents/models.py:97
 msgid "color"
 msgstr ""
 
-#: documents/models.py:103
+#: documents/models.py:100
 msgid "is inbox tag"
 msgstr ""
 
-#: documents/models.py:106
+#: documents/models.py:103
 msgid ""
 "Marks this tag as an inbox tag: All newly consumed documents will be tagged "
 "with inbox tags."
 msgstr ""
 
-#: documents/models.py:112
+#: documents/models.py:109
 msgid "tag"
 msgstr ""
 
-#: documents/models.py:113 documents/models.py:185
+#: documents/models.py:110 documents/models.py:182
 msgid "tags"
 msgstr ""
 
-#: documents/models.py:118 documents/models.py:167
+#: documents/models.py:115 documents/models.py:164
 msgid "document type"
 msgstr ""
 
-#: documents/models.py:119
+#: documents/models.py:116
 msgid "document types"
 msgstr ""
 
-#: documents/models.py:124
+#: documents/models.py:121
 msgid "path"
 msgstr ""
 
-#: documents/models.py:129 documents/models.py:156
+#: documents/models.py:126 documents/models.py:153
 msgid "storage path"
 msgstr ""
 
-#: documents/models.py:130
+#: documents/models.py:127
 msgid "storage paths"
 msgstr ""
 
-#: documents/models.py:137
+#: documents/models.py:134
 msgid "Unencrypted"
 msgstr ""
 
-#: documents/models.py:138
+#: documents/models.py:135
 msgid "Encrypted with GNU Privacy Guard"
 msgstr ""
 
-#: documents/models.py:159
+#: documents/models.py:156
 msgid "title"
 msgstr ""
 
-#: documents/models.py:171 documents/models.py:645
+#: documents/models.py:168 documents/models.py:645
 msgid "content"
 msgstr ""
 
-#: documents/models.py:174
+#: documents/models.py:171
 msgid ""
 "The raw, text-only data of the document. This field is primarily used for "
 "searching."
 msgstr ""
 
-#: documents/models.py:179
+#: documents/models.py:176
 msgid "mime type"
 msgstr ""
 
-#: documents/models.py:189
+#: documents/models.py:186
 msgid "checksum"
 msgstr ""
 
-#: documents/models.py:193
+#: documents/models.py:190
 msgid "The checksum of the original document."
 msgstr ""
 
-#: documents/models.py:197
+#: documents/models.py:194
 msgid "archive checksum"
 msgstr ""
 
-#: documents/models.py:202
+#: documents/models.py:199
 msgid "The checksum of the archived document."
 msgstr ""
 
-#: documents/models.py:205 documents/models.py:385 documents/models.py:651
+#: documents/models.py:202 documents/models.py:382 documents/models.py:651
 #: documents/models.py:689
 msgid "created"
 msgstr ""
 
-#: documents/models.py:208
+#: documents/models.py:205
 msgid "modified"
 msgstr ""
 
-#: documents/models.py:215
+#: documents/models.py:212
 msgid "storage type"
 msgstr ""
 
-#: documents/models.py:223
+#: documents/models.py:220
 msgid "added"
 msgstr ""
 
-#: documents/models.py:230
+#: documents/models.py:227
 msgid "filename"
 msgstr ""
 
-#: documents/models.py:236
+#: documents/models.py:233
 msgid "Current filename in storage"
 msgstr ""
 
-#: documents/models.py:240
+#: documents/models.py:237
 msgid "archive filename"
 msgstr ""
 
-#: documents/models.py:246
+#: documents/models.py:243
 msgid "Current archive filename in storage"
 msgstr ""
 
-#: documents/models.py:250
+#: documents/models.py:247
 msgid "original filename"
 msgstr ""
 
-#: documents/models.py:256
+#: documents/models.py:253
 msgid "The original name of the file when it was uploaded"
 msgstr ""
 
-#: documents/models.py:263
+#: documents/models.py:260
 msgid "archive serial number"
 msgstr ""
 
-#: documents/models.py:273
+#: documents/models.py:270
 msgid "The position of this document in your physical document archive."
 msgstr ""
 
-#: documents/models.py:279 documents/models.py:662 documents/models.py:716
+#: documents/models.py:276 documents/models.py:662 documents/models.py:716
 msgid "document"
 msgstr ""
 
-#: documents/models.py:280
+#: documents/models.py:277
 msgid "documents"
 msgstr ""
 
-#: documents/models.py:368
+#: documents/models.py:365
 msgid "debug"
 msgstr ""
 
-#: documents/models.py:369
+#: documents/models.py:366
 msgid "information"
 msgstr ""
 
-#: documents/models.py:370
+#: documents/models.py:367
 msgid "warning"
 msgstr ""
 
-#: documents/models.py:371 paperless_mail/models.py:293
+#: documents/models.py:368 paperless_mail/models.py:293
 msgid "error"
 msgstr ""
 
-#: documents/models.py:372
+#: documents/models.py:369
 msgid "critical"
 msgstr ""
 
-#: documents/models.py:375
+#: documents/models.py:372
 msgid "group"
 msgstr ""
 
-#: documents/models.py:377
+#: documents/models.py:374
 msgid "message"
 msgstr ""
 
-#: documents/models.py:380
+#: documents/models.py:377
 msgid "level"
 msgstr ""
 
-#: documents/models.py:389
+#: documents/models.py:386
 msgid "log"
 msgstr ""
 
-#: documents/models.py:390
+#: documents/models.py:387
 msgid "logs"
 msgstr ""
 
-#: documents/models.py:399 documents/models.py:464
+#: documents/models.py:396 documents/models.py:461
 msgid "saved view"
 msgstr ""
 
-#: documents/models.py:400
+#: documents/models.py:397
 msgid "saved views"
 msgstr ""
 
-#: documents/models.py:405
+#: documents/models.py:402
 msgid "show on dashboard"
 msgstr ""
 
-#: documents/models.py:408
+#: documents/models.py:405
 msgid "show in sidebar"
 msgstr ""
 
-#: documents/models.py:412
+#: documents/models.py:409
 msgid "sort field"
 msgstr ""
 
-#: documents/models.py:417
+#: documents/models.py:414
 msgid "sort reverse"
 msgstr ""
 
-#: documents/models.py:422
+#: documents/models.py:419
 msgid "title contains"
 msgstr ""
 
-#: documents/models.py:423
+#: documents/models.py:420
 msgid "content contains"
 msgstr ""
 
-#: documents/models.py:424
+#: documents/models.py:421
 msgid "ASN is"
 msgstr ""
 
-#: documents/models.py:425
+#: documents/models.py:422
 msgid "correspondent is"
 msgstr ""
 
-#: documents/models.py:426
+#: documents/models.py:423
 msgid "document type is"
 msgstr ""
 
-#: documents/models.py:427
+#: documents/models.py:424
 msgid "is in inbox"
 msgstr ""
 
-#: documents/models.py:428
+#: documents/models.py:425
 msgid "has tag"
 msgstr ""
 
-#: documents/models.py:429
+#: documents/models.py:426
 msgid "has any tag"
 msgstr ""
 
-#: documents/models.py:430
+#: documents/models.py:427
 msgid "created before"
 msgstr ""
 
-#: documents/models.py:431
+#: documents/models.py:428
 msgid "created after"
 msgstr ""
 
-#: documents/models.py:432
+#: documents/models.py:429
 msgid "created year is"
 msgstr ""
 
-#: documents/models.py:433
+#: documents/models.py:430
 msgid "created month is"
 msgstr ""
 
-#: documents/models.py:434
+#: documents/models.py:431
 msgid "created day is"
 msgstr ""
 
-#: documents/models.py:435
+#: documents/models.py:432
 msgid "added before"
 msgstr ""
 
-#: documents/models.py:436
+#: documents/models.py:433
 msgid "added after"
 msgstr ""
 
-#: documents/models.py:437
+#: documents/models.py:434
 msgid "modified before"
 msgstr ""
 
-#: documents/models.py:438
+#: documents/models.py:435
 msgid "modified after"
 msgstr ""
 
-#: documents/models.py:439
+#: documents/models.py:436
 msgid "does not have tag"
 msgstr ""
 
-#: documents/models.py:440
+#: documents/models.py:437
 msgid "does not have ASN"
 msgstr ""
 
-#: documents/models.py:441
+#: documents/models.py:438
 msgid "title or content contains"
 msgstr ""
 
-#: documents/models.py:442
+#: documents/models.py:439
 msgid "fulltext query"
 msgstr ""
 
-#: documents/models.py:443
+#: documents/models.py:440
 msgid "more like this"
 msgstr ""
 
-#: documents/models.py:444
+#: documents/models.py:441
 msgid "has tags in"
 msgstr ""
 
-#: documents/models.py:445
+#: documents/models.py:442
 msgid "ASN greater than"
 msgstr ""
 
-#: documents/models.py:446
+#: documents/models.py:443
 msgid "ASN less than"
 msgstr ""
 
-#: documents/models.py:447
+#: documents/models.py:444
 msgid "storage path is"
 msgstr ""
 
-#: documents/models.py:448
+#: documents/models.py:445
 msgid "has correspondent in"
 msgstr ""
 
-#: documents/models.py:449
+#: documents/models.py:446
 msgid "does not have correspondent in"
 msgstr ""
 
-#: documents/models.py:450
+#: documents/models.py:447
 msgid "has document type in"
 msgstr ""
 
-#: documents/models.py:451
+#: documents/models.py:448
 msgid "does not have document type in"
 msgstr ""
 
-#: documents/models.py:452
+#: documents/models.py:449
 msgid "has storage path in"
 msgstr ""
 
-#: documents/models.py:453
+#: documents/models.py:450
 msgid "does not have storage path in"
 msgstr ""
 
-#: documents/models.py:454
+#: documents/models.py:451
 msgid "owner is"
 msgstr ""
 
-#: documents/models.py:455
+#: documents/models.py:452
 msgid "has owner in"
 msgstr ""
 
-#: documents/models.py:456
+#: documents/models.py:453
 msgid "does not have owner"
 msgstr ""
 
-#: documents/models.py:457
+#: documents/models.py:454
 msgid "does not have owner in"
 msgstr ""
 
-#: documents/models.py:467
+#: documents/models.py:464
 msgid "rule type"
 msgstr ""
 
-#: documents/models.py:469
+#: documents/models.py:466
 msgid "value"
 msgstr ""
 
-#: documents/models.py:472
+#: documents/models.py:469
 msgid "filter rule"
 msgstr ""
 
-#: documents/models.py:473
+#: documents/models.py:470
 msgid "filter rules"
 msgstr ""
 
@@ -555,114 +555,114 @@ msgstr ""
 msgid "share links"
 msgstr ""
 
-#: documents/models.py:744
+#: documents/models.py:745
 msgid "Consume Folder"
 msgstr ""
 
-#: documents/models.py:745
+#: documents/models.py:746
 msgid "Api Upload"
 msgstr ""
 
-#: documents/models.py:746
+#: documents/models.py:747
 msgid "Mail Fetch"
 msgstr ""
 
-#: documents/models.py:752
-msgid "consumption template"
-msgstr ""
-
-#: documents/models.py:753
-msgid "consumption templates"
-msgstr ""
-
-#: documents/models.py:757 paperless_mail/models.py:95
+#: documents/models.py:751 paperless_mail/models.py:95
 msgid "order"
 msgstr ""
 
-#: documents/models.py:766
+#: documents/models.py:760
 msgid "filter path"
 msgstr ""
 
-#: documents/models.py:771
+#: documents/models.py:765
 msgid ""
 "Only consume documents with a path that matches this if specified. Wildcards "
 "specified as * are allowed. Case insensitive."
 msgstr ""
 
-#: documents/models.py:778
+#: documents/models.py:772
 msgid "filter filename"
 msgstr ""
 
-#: documents/models.py:783 paperless_mail/models.py:148
+#: documents/models.py:777 paperless_mail/models.py:148
 msgid ""
 "Only consume documents which entirely match this filename if specified. "
 "Wildcards such as *.pdf or *invoice* are allowed. Case insensitive."
 msgstr ""
 
-#: documents/models.py:794
+#: documents/models.py:788
 msgid "filter documents from this mail rule"
 msgstr ""
 
-#: documents/models.py:798
+#: documents/models.py:792
 msgid "assign title"
 msgstr ""
 
-#: documents/models.py:803
+#: documents/models.py:797
 msgid ""
 "Assign a document title, can include some placeholders, see documentation."
 msgstr ""
 
-#: documents/models.py:811 paperless_mail/models.py:204
+#: documents/models.py:805 paperless_mail/models.py:204
 msgid "assign this tag"
 msgstr ""
 
-#: documents/models.py:819 paperless_mail/models.py:212
+#: documents/models.py:813 paperless_mail/models.py:212
 msgid "assign this document type"
 msgstr ""
 
-#: documents/models.py:827 paperless_mail/models.py:226
+#: documents/models.py:821 paperless_mail/models.py:226
 msgid "assign this correspondent"
 msgstr ""
 
-#: documents/models.py:835
+#: documents/models.py:829
 msgid "assign this storage path"
 msgstr ""
 
-#: documents/models.py:844
+#: documents/models.py:838
 msgid "assign this owner"
 msgstr ""
 
-#: documents/models.py:851
+#: documents/models.py:845
 msgid "grant view permissions to these users"
 msgstr ""
 
-#: documents/models.py:858
+#: documents/models.py:852
 msgid "grant view permissions to these groups"
 msgstr ""
 
-#: documents/models.py:865
+#: documents/models.py:859
 msgid "grant change permissions to these users"
 msgstr ""
 
-#: documents/models.py:872
+#: documents/models.py:866
 msgid "grant change permissions to these groups"
 msgstr ""
 
-#: documents/serialisers.py:100
+#: documents/models.py:870
+msgid "consumption template"
+msgstr ""
+
+#: documents/models.py:871
+msgid "consumption templates"
+msgstr ""
+
+#: documents/serialisers.py:98
 #, python-format
 msgid "Invalid regular expression: %(error)s"
 msgstr ""
 
-#: documents/serialisers.py:375
+#: documents/serialisers.py:373
 msgid "Invalid color."
 msgstr ""
 
-#: documents/serialisers.py:751
+#: documents/serialisers.py:749
 #, python-format
 msgid "File type %(type)s not supported"
 msgstr ""
 
-#: documents/serialisers.py:848
+#: documents/serialisers.py:846
 msgid "Invalid variable detected."
 msgstr ""
 
@@ -722,123 +722,206 @@ msgstr ""
 msgid "Sign in"
 msgstr ""
 
+#: documents/templates/registration/login.html:70
+msgid "Forgot your password?"
+msgstr ""
+
+#: documents/templates/registration/password_reset_complete.html:14
+msgid "Paperless-ngx reset password complete"
+msgstr ""
+
+#: documents/templates/registration/password_reset_complete.html:40
+msgid "Password reset complete."
+msgstr ""
+
+#: documents/templates/registration/password_reset_complete.html:42
+#, python-format
+msgid ""
+"Your new password has been set. You can now <a href=\"%(login_url)s\">log "
+"in</a>"
+msgstr ""
+
+#: documents/templates/registration/password_reset_confirm.html:14
+msgid "Paperless-ngx reset password confirmation"
+msgstr ""
+
+#: documents/templates/registration/password_reset_confirm.html:42
+msgid "Set a new password."
+msgstr ""
+
+#: documents/templates/registration/password_reset_confirm.html:46
+msgid "Passwords did not match or too weak. Try again."
+msgstr ""
+
+#: documents/templates/registration/password_reset_confirm.html:49
+msgid "New Password"
+msgstr ""
+
+#: documents/templates/registration/password_reset_confirm.html:50
+msgid "Confirm Password"
+msgstr ""
+
+#: documents/templates/registration/password_reset_confirm.html:61
+msgid "Change my password"
+msgstr ""
+
+#: documents/templates/registration/password_reset_confirm.html:65
+msgid "request a new password reset"
+msgstr ""
+
+#: documents/templates/registration/password_reset_done.html:14
+msgid "Paperless-ngx reset password sent"
+msgstr ""
+
+#: documents/templates/registration/password_reset_done.html:40
+msgid "Check your inbox."
+msgstr ""
+
+#: documents/templates/registration/password_reset_done.html:41
+msgid ""
+"We've emailed you instructions for setting your password. You should receive "
+"the email shortly!"
+msgstr ""
+
+#: documents/templates/registration/password_reset_form.html:14
+msgid "Paperless-ngx reset password request"
+msgstr ""
+
+#: documents/templates/registration/password_reset_form.html:41
+msgid ""
+"Enter your email address below, and we'll email instructions for setting a "
+"new one."
+msgstr ""
+
+#: documents/templates/registration/password_reset_form.html:44
+msgid "An error occurred. Please try again."
+msgstr ""
+
+#: documents/templates/registration/password_reset_form.html:47
+msgid "Email"
+msgstr ""
+
+#: documents/templates/registration/password_reset_form.html:54
+msgid "Send me instructions!"
+msgstr ""
+
 #: paperless/apps.py:10
 msgid "Paperless"
 msgstr ""
 
-#: paperless/settings.py:573
+#: paperless/settings.py:574
 msgid "English (US)"
 msgstr ""
 
-#: paperless/settings.py:574
+#: paperless/settings.py:575
 msgid "Arabic"
 msgstr ""
 
-#: paperless/settings.py:575
+#: paperless/settings.py:576
 msgid "Afrikaans"
 msgstr ""
 
-#: paperless/settings.py:576
+#: paperless/settings.py:577
 msgid "Belarusian"
 msgstr ""
 
-#: paperless/settings.py:577
+#: paperless/settings.py:578
 msgid "Catalan"
 msgstr ""
 
-#: paperless/settings.py:578
+#: paperless/settings.py:579
 msgid "Czech"
 msgstr ""
 
-#: paperless/settings.py:579
+#: paperless/settings.py:580
 msgid "Danish"
 msgstr ""
 
-#: paperless/settings.py:580
+#: paperless/settings.py:581
 msgid "German"
 msgstr ""
 
-#: paperless/settings.py:581
+#: paperless/settings.py:582
 msgid "Greek"
 msgstr ""
 
-#: paperless/settings.py:582
+#: paperless/settings.py:583
 msgid "English (GB)"
 msgstr ""
 
-#: paperless/settings.py:583
+#: paperless/settings.py:584
 msgid "Spanish"
 msgstr ""
 
-#: paperless/settings.py:584
+#: paperless/settings.py:585
 msgid "Finnish"
 msgstr ""
 
-#: paperless/settings.py:585
+#: paperless/settings.py:586
 msgid "French"
 msgstr ""
 
-#: paperless/settings.py:586
+#: paperless/settings.py:587
 msgid "Italian"
 msgstr ""
 
-#: paperless/settings.py:587
+#: paperless/settings.py:588
 msgid "Luxembourgish"
 msgstr ""
 
-#: paperless/settings.py:588
+#: paperless/settings.py:589
 msgid "Norwegian"
 msgstr ""
 
-#: paperless/settings.py:589
+#: paperless/settings.py:590
 msgid "Dutch"
 msgstr ""
 
-#: paperless/settings.py:590
+#: paperless/settings.py:591
 msgid "Polish"
 msgstr ""
 
-#: paperless/settings.py:591
+#: paperless/settings.py:592
 msgid "Portuguese (Brazil)"
 msgstr ""
 
-#: paperless/settings.py:592
+#: paperless/settings.py:593
 msgid "Portuguese"
 msgstr ""
 
-#: paperless/settings.py:593
+#: paperless/settings.py:594
 msgid "Romanian"
 msgstr ""
 
-#: paperless/settings.py:594
+#: paperless/settings.py:595
 msgid "Russian"
 msgstr ""
 
-#: paperless/settings.py:595
+#: paperless/settings.py:596
 msgid "Slovak"
 msgstr ""
 
-#: paperless/settings.py:596
+#: paperless/settings.py:597
 msgid "Slovenian"
 msgstr ""
 
-#: paperless/settings.py:597
+#: paperless/settings.py:598
 msgid "Serbian"
 msgstr ""
 
-#: paperless/settings.py:598
+#: paperless/settings.py:599
 msgid "Swedish"
 msgstr ""
 
-#: paperless/settings.py:599
+#: paperless/settings.py:600
 msgid "Turkish"
 msgstr ""
 
-#: paperless/settings.py:600
+#: paperless/settings.py:601
 msgid "Ukrainian"
 msgstr ""
 
-#: paperless/settings.py:601
+#: paperless/settings.py:602
 msgid "Chinese Simplified"
 msgstr ""
 
index 6d25a53cc7516cb478efcada946558d89de89470..f3cbb6ee212897cffde6909c2d225c68a75c4a1b 100644 (file)
@@ -357,6 +357,7 @@ TEMPLATES = [
                 "django.template.context_processors.request",
                 "django.contrib.auth.context_processors.auth",
                 "django.contrib.messages.context_processors.messages",
+                "documents.context_processors.settings",
             ],
         },
     },
@@ -1002,3 +1003,15 @@ def _get_nltk_language_setting(ocr_lang: str) -> Optional[str]:
 NLTK_ENABLED: Final[bool] = __get_boolean("PAPERLESS_ENABLE_NLTK", "yes")
 
 NLTK_LANGUAGE: Optional[str] = _get_nltk_language_setting(OCR_LANGUAGE)
+
+###############################################################################
+# Email (SMTP) Backend                                                        #
+###############################################################################
+
+EMAIL_HOST: Final[str] = os.getenv("PAPERLESS_EMAIL_HOST", "localhost")
+EMAIL_PORT: Final[int] = int(os.getenv("PAPERLESS_EMAIL_PORT", 25))
+EMAIL_HOST_USER: Final[str] = os.getenv("PAPERLESS_EMAIL_HOST_USER", "")
+EMAIL_HOST_PASSWORD: Final[str] = os.getenv("PAPERLESS_EMAIL_HOST_PASSWORD", "")
+EMAIL_USE_TLS: Final[bool] = __get_boolean("PAPERLESS_EMAIL_USE_TLS")
+EMAIL_USE_SSL: Final[bool] = __get_boolean("PAPERLESS_EMAIL_USE_SSL")
+EMAIL_SUBJECT_PREFIX: Final[str] = "[Paperless-ngx] "