From e6012e1ca2344b4691f08bf107fa94d7f833099d Mon Sep 17 00:00:00 2001
From: James Cole
Date: Sat, 3 Apr 2021 12:25:35 +0200
Subject: [PATCH] Fix email templates and handler for #4586
---
app/Exceptions/Handler.php | 74 ++++++++++--------
.../emails/access-token-created-html.twig | 4 +-
.../emails/access-token-created-text.twig | 4 +-
.../{v2 => }/emails/admin-test-html.twig | 4 +-
resources/views/emails/admin-test-text.twig | 3 +
.../emails/confirm-email-change-html.twig | 4 +-
.../emails/confirm-email-change-text.twig | 4 +-
.../views/{v1 => }/emails/error-html.twig | 4 +-
.../views/{v2 => }/emails/error-text.twig | 4 +-
.../views/{v1 => }/emails/footer-html.twig | 0
.../views/{v1 => }/emails/footer-text.twig | 0
.../views/{v1 => }/emails/header-html.twig | 0
.../views/{v1 => }/emails/header-text.twig | 0
.../views/{v1 => }/emails/new-ip-html.twig | 4 +-
.../views/{v1 => }/emails/new-ip-text.twig | 4 +-
.../emails/oauth-client-created-html.twig | 4 +-
.../emails/oauth-client-created-text.twig | 4 +-
.../views/{v2 => }/emails/password-html.twig | 4 +-
.../views/{v2 => }/emails/password-text.twig | 4 +-
.../{v1 => }/emails/registered-html.twig | 4 +-
.../{v1 => }/emails/registered-text.twig | 4 +-
.../emails/report-new-journals-html.twig | 4 +-
.../emails/report-new-journals-text.twig | 4 +-
.../emails/undo-email-change-html.twig | 4 +-
.../emails/undo-email-change-text.twig | 4 +-
.../v1/emails/access-token-created-text.twig | 7 --
.../views/v1/emails/admin-test-html.twig | 5 --
.../views/v1/emails/admin-test-text.twig | 3 -
.../v1/emails/confirm-email-change-text.twig | 10 ---
resources/views/v1/emails/error-text.twig | 27 -------
.../v1/emails/oauth-client-created-html.twig | 13 ----
.../v1/emails/oauth-client-created-text.twig | 7 --
resources/views/v1/emails/password-html.twig | 13 ----
resources/views/v1/emails/password-text.twig | 7 --
.../v1/emails/undo-email-change-text.twig | 11 ---
.../v2/emails/access-token-created-html.twig | 13 ----
.../views/v2/emails/admin-test-text.twig | 3 -
.../v2/emails/confirm-email-change-html.twig | 18 -----
resources/views/v2/emails/error-html.twig | 45 -----------
resources/views/v2/emails/footer-html.twig | 13 ----
resources/views/v2/emails/footer-text.twig | 6 --
resources/views/v2/emails/header-html.twig | 10 ---
resources/views/v2/emails/header-text.twig | 2 -
.../views/v2/emails/registered-html.twig | 20 -----
.../views/v2/emails/registered-text.twig | 21 -----
.../v2/emails/report-new-journals-html.twig | 78 -------------------
.../v2/emails/report-new-journals-text.twig | 16 ----
.../v2/emails/undo-email-change-html.twig | 17 ----
resources/views/v2/transactions/indexx.twig | 6 +-
49 files changed, 84 insertions(+), 440 deletions(-)
rename resources/views/{v1 => }/emails/access-token-created-html.twig (86%)
rename resources/views/{v2 => }/emails/access-token-created-text.twig (73%)
rename resources/views/{v2 => }/emails/admin-test-html.twig (66%)
create mode 100644 resources/views/emails/admin-test-text.twig
rename resources/views/{v1 => }/emails/confirm-email-change-html.twig (90%)
rename resources/views/{v2 => }/emails/confirm-email-change-text.twig (75%)
rename resources/views/{v1 => }/emails/error-html.twig (95%)
rename resources/views/{v2 => }/emails/error-text.twig (91%)
rename resources/views/{v1 => }/emails/footer-html.twig (100%)
rename resources/views/{v1 => }/emails/footer-text.twig (100%)
rename resources/views/{v1 => }/emails/header-html.twig (100%)
rename resources/views/{v1 => }/emails/header-text.twig (100%)
rename resources/views/{v1 => }/emails/new-ip-html.twig (88%)
rename resources/views/{v1 => }/emails/new-ip-text.twig (75%)
rename resources/views/{v2 => }/emails/oauth-client-created-html.twig (86%)
rename resources/views/{v2 => }/emails/oauth-client-created-text.twig (75%)
rename resources/views/{v2 => }/emails/password-html.twig (84%)
rename resources/views/{v2 => }/emails/password-text.twig (59%)
rename resources/views/{v1 => }/emails/registered-html.twig (91%)
rename resources/views/{v1 => }/emails/registered-text.twig (86%)
rename resources/views/{v1 => }/emails/report-new-journals-html.twig (98%)
rename resources/views/{v1 => }/emails/report-new-journals-text.twig (97%)
rename resources/views/{v1 => }/emails/undo-email-change-html.twig (91%)
rename resources/views/{v2 => }/emails/undo-email-change-text.twig (79%)
delete mode 100644 resources/views/v1/emails/access-token-created-text.twig
delete mode 100644 resources/views/v1/emails/admin-test-html.twig
delete mode 100644 resources/views/v1/emails/admin-test-text.twig
delete mode 100644 resources/views/v1/emails/confirm-email-change-text.twig
delete mode 100644 resources/views/v1/emails/error-text.twig
delete mode 100644 resources/views/v1/emails/oauth-client-created-html.twig
delete mode 100644 resources/views/v1/emails/oauth-client-created-text.twig
delete mode 100644 resources/views/v1/emails/password-html.twig
delete mode 100644 resources/views/v1/emails/password-text.twig
delete mode 100644 resources/views/v1/emails/undo-email-change-text.twig
delete mode 100644 resources/views/v2/emails/access-token-created-html.twig
delete mode 100644 resources/views/v2/emails/admin-test-text.twig
delete mode 100644 resources/views/v2/emails/confirm-email-change-html.twig
delete mode 100644 resources/views/v2/emails/error-html.twig
delete mode 100644 resources/views/v2/emails/footer-html.twig
delete mode 100644 resources/views/v2/emails/footer-text.twig
delete mode 100644 resources/views/v2/emails/header-html.twig
delete mode 100644 resources/views/v2/emails/header-text.twig
delete mode 100644 resources/views/v2/emails/registered-html.twig
delete mode 100644 resources/views/v2/emails/registered-text.twig
delete mode 100644 resources/views/v2/emails/report-new-journals-html.twig
delete mode 100644 resources/views/v2/emails/report-new-journals-text.twig
delete mode 100644 resources/views/v2/emails/undo-email-change-html.twig
diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php
index b2dede5d2e..f0a73615d8 100644
--- a/app/Exceptions/Handler.php
+++ b/app/Exceptions/Handler.php
@@ -34,6 +34,7 @@ use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException as LaravelValidationException;
use League\OAuth2\Server\Exception\OAuthServerException;
+use Log;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Throwable;
@@ -44,6 +45,13 @@ use Throwable;
*/
class Handler extends ExceptionHandler
{
+ /**
+ * @var array
+ */
+ protected $dontReport
+ = [
+ ];
+
/**
* Render an exception into an HTTP response.
*
@@ -114,47 +122,47 @@ class Handler extends ExceptionHandler
*
* // it's five its fine.
*
- * @param Exception $exception
+ * @param Throwable $e
*
* @return void
* @throws Exception
*
*/
- public function report(Throwable $exception)
+ public function report(Throwable $e)
{
$doMailError = config('firefly.send_error_message');
- // if the user wants us to mail:
- if (true === $doMailError
- // and if is one of these error instances
- && ($exception instanceof FireflyException || $exception instanceof ErrorException)) {
- $userData = [
- 'id' => 0,
- 'email' => 'unknown@example.com',
- ];
- if (auth()->check()) {
- $userData['id'] = auth()->user()->id;
- $userData['email'] = auth()->user()->email;
- }
- $data = [
- 'class' => get_class($exception),
- 'errorMessage' => $exception->getMessage(),
- 'time' => date('r'),
- 'stackTrace' => $exception->getTraceAsString(),
- 'file' => $exception->getFile(),
- 'line' => $exception->getLine(),
- 'code' => $exception->getCode(),
- 'version' => config('firefly.version'),
- 'url' => request()->fullUrl(),
- 'userAgent' => request()->userAgent(),
- 'json' => request()->acceptsJson(),
- ];
-
- // create job that will mail.
- $ipAddress = request()->ip() ?? '0.0.0.0';
- $job = new MailError($userData, (string)config('firefly.site_owner'), $ipAddress, $data);
- dispatch($job);
+ if ($this->shouldntReport($e) || !$doMailError) {
+ Log::info('Will not report on this error.');
+ parent::report($e);
+ return;
}
+ $userData = [
+ 'id' => 0,
+ 'email' => 'unknown@example.com',
+ ];
+ if (auth()->check()) {
+ $userData['id'] = auth()->user()->id;
+ $userData['email'] = auth()->user()->email;
+ }
+ $data = [
+ 'class' => get_class($e),
+ 'errorMessage' => $e->getMessage(),
+ 'time' => date('r'),
+ 'stackTrace' => $e->getTraceAsString(),
+ 'file' => $e->getFile(),
+ 'line' => $e->getLine(),
+ 'code' => $e->getCode(),
+ 'version' => config('firefly.version'),
+ 'url' => request()->fullUrl(),
+ 'userAgent' => request()->userAgent(),
+ 'json' => request()->acceptsJson(),
+ ];
- parent::report($exception);
+ // create job that will mail.
+ $ipAddress = request()->ip() ?? '0.0.0.0';
+ $job = new MailError($userData, (string)config('firefly.site_owner'), $ipAddress, $data);
+ dispatch($job);
+
+ parent::report($e);
}
}
diff --git a/resources/views/v1/emails/access-token-created-html.twig b/resources/views/emails/access-token-created-html.twig
similarity index 86%
rename from resources/views/v1/emails/access-token-created-html.twig
rename to resources/views/emails/access-token-created-html.twig
index d3406b09bd..ede3a2f044 100644
--- a/resources/views/v1/emails/access-token-created-html.twig
+++ b/resources/views/emails/access-token-created-html.twig
@@ -1,4 +1,4 @@
-{% include 'v1.emails.header-html' %}
+{% include 'emails.header-html' %}
{{ trans('email.access_token_created_body') }}
@@ -10,4 +10,4 @@
{{ trans('email.access_token_created_revoke', {url: route('profile.index') }) }}
-{% include 'v1.emails.footer-html' %}
+{% include 'emails.footer-html' %}
diff --git a/resources/views/v2/emails/access-token-created-text.twig b/resources/views/emails/access-token-created-text.twig
similarity index 73%
rename from resources/views/v2/emails/access-token-created-text.twig
rename to resources/views/emails/access-token-created-text.twig
index 8f5608e2cc..04d85cdf35 100644
--- a/resources/views/v2/emails/access-token-created-text.twig
+++ b/resources/views/emails/access-token-created-text.twig
@@ -1,7 +1,7 @@
-{% include 'v2.emails.header-text' %}
+{% include 'emails.header-text' %}
{{ trans('email.access_token_created_body')|raw }}
{{ trans('email.access_token_created_explanation')|striptags|raw }}
{{ trans('email.access_token_created_revoke', {url: route('profile.index') })|raw }}
-{% include 'v2.emails.footer-text' %}
+{% include 'emails.footer-text' %}
diff --git a/resources/views/v2/emails/admin-test-html.twig b/resources/views/emails/admin-test-html.twig
similarity index 66%
rename from resources/views/v2/emails/admin-test-html.twig
rename to resources/views/emails/admin-test-html.twig
index 6d653716d6..6d343085b8 100644
--- a/resources/views/v2/emails/admin-test-html.twig
+++ b/resources/views/emails/admin-test-html.twig
@@ -1,5 +1,5 @@
-{% include 'v2.emails.header-html' %}
+{% include 'emails.header-html' %}
{{ trans('email.admin_test_body', {email: email })}}
-{% include 'v2.emails.footer-html' %}
+{% include 'emails.footer-html' %}
diff --git a/resources/views/emails/admin-test-text.twig b/resources/views/emails/admin-test-text.twig
new file mode 100644
index 0000000000..e6c5aca702
--- /dev/null
+++ b/resources/views/emails/admin-test-text.twig
@@ -0,0 +1,3 @@
+{% include 'emails.header-text' %}
+{{ trans('email.admin_test_body', {email: email })|raw }}
+{% include 'emails.footer-text' %}
diff --git a/resources/views/v1/emails/confirm-email-change-html.twig b/resources/views/emails/confirm-email-change-html.twig
similarity index 90%
rename from resources/views/v1/emails/confirm-email-change-html.twig
rename to resources/views/emails/confirm-email-change-html.twig
index 284c607e4b..7eb907c421 100644
--- a/resources/views/v1/emails/confirm-email-change-html.twig
+++ b/resources/views/emails/confirm-email-change-html.twig
@@ -1,4 +1,4 @@
-{% include 'v1.emails.header-html' %}
+{% include 'emails.header-html' %}
{{ trans('email.email_change_body_to_new')}}
@@ -15,4 +15,4 @@
{{ uri }}
-{% include 'v1.emails.footer-html' %}
+{% include 'emails.footer-html' %}
diff --git a/resources/views/v2/emails/confirm-email-change-text.twig b/resources/views/emails/confirm-email-change-text.twig
similarity index 75%
rename from resources/views/v2/emails/confirm-email-change-text.twig
rename to resources/views/emails/confirm-email-change-text.twig
index dfdc70e02f..1fd8695814 100644
--- a/resources/views/v2/emails/confirm-email-change-text.twig
+++ b/resources/views/emails/confirm-email-change-text.twig
@@ -1,4 +1,4 @@
-{% include 'v2.emails.header-text' %}
+{% include 'emails.header-text' %}
{{ trans('email.email_change_body_to_new')|raw }}
{{trans('email.email_change_old', { email: oldEmail })|raw }}
@@ -7,4 +7,4 @@
{{ trans('email.email_change_instructions')|raw }}
{{ uri }}
-{% include 'v2.emails.footer-text' %}
+{% include 'emails.footer-text' %}
diff --git a/resources/views/v1/emails/error-html.twig b/resources/views/emails/error-html.twig
similarity index 95%
rename from resources/views/v1/emails/error-html.twig
rename to resources/views/emails/error-html.twig
index 9f72be1ad4..d90bc67879 100644
--- a/resources/views/v1/emails/error-html.twig
+++ b/resources/views/emails/error-html.twig
@@ -1,4 +1,4 @@
-{% include 'v1.emails.header-html' %}
+{% include 'emails.header-html' %}
{{ trans('email.error_intro', { version: version, errorMessage: errorMessage })|raw }}
@@ -42,4 +42,4 @@
{{ stackTrace|nl2br }}
-{% include 'v1.emails.footer-html' %}
+{% include 'emails.footer-html' %}
diff --git a/resources/views/v2/emails/error-text.twig b/resources/views/emails/error-text.twig
similarity index 91%
rename from resources/views/v2/emails/error-text.twig
rename to resources/views/emails/error-text.twig
index 297530b1e2..35e4a46334 100644
--- a/resources/views/v2/emails/error-text.twig
+++ b/resources/views/emails/error-text.twig
@@ -1,4 +1,4 @@
-{% include 'v2.emails.header-text' %}
+{% include 'emails.header-text' %}
{{ trans('email.error_intro', { version: version, errorMessage: errorMessage })|striptags|raw }}
{{ trans('email.error_type', {class: class })|raw }}
@@ -24,4 +24,4 @@
{{ trans('email.error_stacktrace_below')|raw }}
{{ stackTrace|raw }}
-{% include 'v2.emails.footer-text' %}
+{% include 'emails.footer-text' %}
diff --git a/resources/views/v1/emails/footer-html.twig b/resources/views/emails/footer-html.twig
similarity index 100%
rename from resources/views/v1/emails/footer-html.twig
rename to resources/views/emails/footer-html.twig
diff --git a/resources/views/v1/emails/footer-text.twig b/resources/views/emails/footer-text.twig
similarity index 100%
rename from resources/views/v1/emails/footer-text.twig
rename to resources/views/emails/footer-text.twig
diff --git a/resources/views/v1/emails/header-html.twig b/resources/views/emails/header-html.twig
similarity index 100%
rename from resources/views/v1/emails/header-html.twig
rename to resources/views/emails/header-html.twig
diff --git a/resources/views/v1/emails/header-text.twig b/resources/views/emails/header-text.twig
similarity index 100%
rename from resources/views/v1/emails/header-text.twig
rename to resources/views/emails/header-text.twig
diff --git a/resources/views/v1/emails/new-ip-html.twig b/resources/views/emails/new-ip-html.twig
similarity index 88%
rename from resources/views/v1/emails/new-ip-html.twig
rename to resources/views/emails/new-ip-html.twig
index d5a0444497..7c0c56e6b0 100644
--- a/resources/views/v1/emails/new-ip-html.twig
+++ b/resources/views/emails/new-ip-html.twig
@@ -1,4 +1,4 @@
-{% include 'v1.emails.header-html' %}
+{% include 'emails.header-html' %}
{{ trans('email.new_ip_body') }}
@@ -13,4 +13,4 @@
{{ trans('email.new_ip_warning') }}
-{% include 'v1.emails.footer-html' %}
+{% include 'emails.footer-html' %}
diff --git a/resources/views/v1/emails/new-ip-text.twig b/resources/views/emails/new-ip-text.twig
similarity index 75%
rename from resources/views/v1/emails/new-ip-text.twig
rename to resources/views/emails/new-ip-text.twig
index 5e50ccc282..b5b55dfe4a 100644
--- a/resources/views/v1/emails/new-ip-text.twig
+++ b/resources/views/emails/new-ip-text.twig
@@ -1,4 +1,4 @@
-{% include 'v1.emails.header-text' %}
+{% include 'emails.header-text' %}
{{ trans('email.new_ip_body') }}
{{ trans('email.ip_address') }}: {{ ipAddress }}
@@ -7,4 +7,4 @@
{{ trans('email.new_ip_warning') }}
-{% include 'v1.emails.footer-text' %}
+{% include 'emails.footer-text' %}
diff --git a/resources/views/v2/emails/oauth-client-created-html.twig b/resources/views/emails/oauth-client-created-html.twig
similarity index 86%
rename from resources/views/v2/emails/oauth-client-created-html.twig
rename to resources/views/emails/oauth-client-created-html.twig
index b13f472276..03906957f1 100644
--- a/resources/views/v2/emails/oauth-client-created-html.twig
+++ b/resources/views/emails/oauth-client-created-html.twig
@@ -1,4 +1,4 @@
-{% include 'v2.emails.header-html' %}
+{% include 'emails.header-html' %}
{{ trans('email.oauth_created_body', { name:client.name, url: client.redirect })|raw }}
@@ -10,4 +10,4 @@
{{ trans('email.oauth_created_undo', { url:route('profile.index')}) }}
-{% include 'v2.emails.footer-html' %}
+{% include 'emails.footer-html' %}
diff --git a/resources/views/v2/emails/oauth-client-created-text.twig b/resources/views/emails/oauth-client-created-text.twig
similarity index 75%
rename from resources/views/v2/emails/oauth-client-created-text.twig
rename to resources/views/emails/oauth-client-created-text.twig
index 6b324e7f9a..566f2ad89b 100644
--- a/resources/views/v2/emails/oauth-client-created-text.twig
+++ b/resources/views/emails/oauth-client-created-text.twig
@@ -1,7 +1,7 @@
-{% include 'v2.emails.header-text' %}
+{% include 'emails.header-text' %}
{{ trans('email.oauth_created_body', {name: client.name, url: client.redirect })|striptags|raw }}
{{ trans('email.oauth_created_explanation')|striptags|raw }}
{{ trans('email.oauth_created_undo', { url:route('profile.index')})|raw }}
-{% include 'v2.emails.footer-text' %}
+{% include 'emails.footer-text' %}
diff --git a/resources/views/v2/emails/password-html.twig b/resources/views/emails/password-html.twig
similarity index 84%
rename from resources/views/v2/emails/password-html.twig
rename to resources/views/emails/password-html.twig
index 57cc8533be..2f020fb924 100644
--- a/resources/views/v2/emails/password-html.twig
+++ b/resources/views/emails/password-html.twig
@@ -1,4 +1,4 @@
-{% include 'v2.emails.header-html' %}
+{% include 'emails.header-html' %}
{{ trans('email.reset_pw_instructions') }}
@@ -10,4 +10,4 @@
{{ url }}
-{% include 'v2.emails.footer-html' %}
+{% include 'emails.footer-html' %}
diff --git a/resources/views/v2/emails/password-text.twig b/resources/views/emails/password-text.twig
similarity index 59%
rename from resources/views/v2/emails/password-text.twig
rename to resources/views/emails/password-text.twig
index 6fd891c572..258521ea99 100644
--- a/resources/views/v2/emails/password-text.twig
+++ b/resources/views/emails/password-text.twig
@@ -1,7 +1,7 @@
-{% include 'v2.emails.header-text' %}
+{% include 'emails.header-text' %}
{{ trans('email.reset_pw_instructions')|raw }}
{{ trans('email.reset_pw_warning')|striptags|raw }}
{{ url }}
-{% include 'v2.emails.footer-text' %}
+{% include 'emails.footer-text' %}
diff --git a/resources/views/v1/emails/registered-html.twig b/resources/views/emails/registered-html.twig
similarity index 91%
rename from resources/views/v1/emails/registered-html.twig
rename to resources/views/emails/registered-html.twig
index c7ffcd303d..78d8b1052e 100644
--- a/resources/views/v1/emails/registered-html.twig
+++ b/resources/views/emails/registered-html.twig
@@ -1,4 +1,4 @@
-{% include 'v1.emails.header-html' %}
+{% include 'emails.header-html' %}
{{ trans('email.registered_welcome', {address: address})|raw }}
@@ -17,4 +17,4 @@
{{ trans('email.registered_closing')}}
-{% include 'v1.emails.footer-html' %}
+{% include 'emails.footer-html' %}
diff --git a/resources/views/v1/emails/registered-text.twig b/resources/views/emails/registered-text.twig
similarity index 86%
rename from resources/views/v1/emails/registered-text.twig
rename to resources/views/emails/registered-text.twig
index ef9acd6f45..78c696b065 100644
--- a/resources/views/v1/emails/registered-text.twig
+++ b/resources/views/emails/registered-text.twig
@@ -1,4 +1,4 @@
-{% include 'v1.emails.header-text' %}
+{% include 'emails.header-text' %}
{{ trans('email.registered_welcome')|striptags|raw }}
@@ -18,4 +18,4 @@
https://github.com/firefly-iii/firefly-iii
https://firefly-iii.org/
-{% include 'v1.emails.footer-text' %}
+{% include 'emails.footer-text' %}
diff --git a/resources/views/v1/emails/report-new-journals-html.twig b/resources/views/emails/report-new-journals-html.twig
similarity index 98%
rename from resources/views/v1/emails/report-new-journals-html.twig
rename to resources/views/emails/report-new-journals-html.twig
index dd866a5600..f423c8d87d 100644
--- a/resources/views/v1/emails/report-new-journals-html.twig
+++ b/resources/views/emails/report-new-journals-html.twig
@@ -1,4 +1,4 @@
-{% include 'v1.emails.header-html' %}
+{% include 'emails.header-html' %}
{{ trans_choice('email.new_journals_header', transformed|length ) }}
@@ -75,4 +75,4 @@
{% endfor %}
-{% include 'v1.emails.footer-html' %}
+{% include 'emails.footer-html' %}
diff --git a/resources/views/v1/emails/report-new-journals-text.twig b/resources/views/emails/report-new-journals-text.twig
similarity index 97%
rename from resources/views/v1/emails/report-new-journals-text.twig
rename to resources/views/emails/report-new-journals-text.twig
index 34c7455536..4cadb77708 100644
--- a/resources/views/v1/emails/report-new-journals-text.twig
+++ b/resources/views/emails/report-new-journals-text.twig
@@ -1,4 +1,4 @@
-{% include 'v1.emails.header-text' %}
+{% include 'emails.header-text' %}
{{ trans_choice('email.new_journals_header', transformed|length )|raw }}
@@ -13,4 +13,4 @@
{% endfor %}
{% endif %}
{% endfor %}
-{% include 'v1.emails.footer-text' %}
+{% include 'emails.footer-text' %}
diff --git a/resources/views/v1/emails/undo-email-change-html.twig b/resources/views/emails/undo-email-change-html.twig
similarity index 91%
rename from resources/views/v1/emails/undo-email-change-html.twig
rename to resources/views/emails/undo-email-change-html.twig
index 557ad4c3b6..00bc5bb7a4 100644
--- a/resources/views/v1/emails/undo-email-change-html.twig
+++ b/resources/views/emails/undo-email-change-html.twig
@@ -1,4 +1,4 @@
-{% include 'v1.emails.header-html' %}
+{% include 'emails.header-html' %}
{{ trans('email.email_change_body_to_old')|raw }}
@@ -14,4 +14,4 @@
{{trans('email.email_change_undo_link')}} {{ uri }}
-{% include 'v1.emails.footer-html' %}
+{% include 'emails.footer-html' %}
diff --git a/resources/views/v2/emails/undo-email-change-text.twig b/resources/views/emails/undo-email-change-text.twig
similarity index 79%
rename from resources/views/v2/emails/undo-email-change-text.twig
rename to resources/views/emails/undo-email-change-text.twig
index e8c39eb120..2c719b9e4d 100644
--- a/resources/views/v2/emails/undo-email-change-text.twig
+++ b/resources/views/emails/undo-email-change-text.twig
@@ -1,4 +1,4 @@
-{% include 'v2.emails.header-text' %}
+{% include 'emails.header-text' %}
{{ trans('email.email_change_body_to_old')|striptags|raw }}
{{ trans('email.email_change_ignore')|raw }}
@@ -8,4 +8,4 @@
{{trans('email.email_change_new', { email: newEmail })|raw }}
{{ trans('email.email_change_undo_link')|raw }} {{ uri }}
-{% include 'v2.emails.footer-text' %}
+{% include 'emails.footer-text' %}
diff --git a/resources/views/v1/emails/access-token-created-text.twig b/resources/views/v1/emails/access-token-created-text.twig
deleted file mode 100644
index 264150e31c..0000000000
--- a/resources/views/v1/emails/access-token-created-text.twig
+++ /dev/null
@@ -1,7 +0,0 @@
-{% include 'v1.emails.header-text' %}
-{{ trans('email.access_token_created_body')|raw }}
-
-{{ trans('email.access_token_created_explanation')|striptags|raw }}
-
-{{ trans('email.access_token_created_revoke', {url: route('profile.index') })|raw }}
-{% include 'v1.emails.footer-text' %}
diff --git a/resources/views/v1/emails/admin-test-html.twig b/resources/views/v1/emails/admin-test-html.twig
deleted file mode 100644
index 75b42ea812..0000000000
--- a/resources/views/v1/emails/admin-test-html.twig
+++ /dev/null
@@ -1,5 +0,0 @@
-{% include 'v1.emails.header-html' %}
-
- {{ trans('email.admin_test_body', {email: email })}}
-
-{% include 'v1.emails.footer-html' %}
diff --git a/resources/views/v1/emails/admin-test-text.twig b/resources/views/v1/emails/admin-test-text.twig
deleted file mode 100644
index 323ed6f6d0..0000000000
--- a/resources/views/v1/emails/admin-test-text.twig
+++ /dev/null
@@ -1,3 +0,0 @@
-{% include 'v1.emails.header-text' %}
-{{ trans('email.admin_test_body', {email: email })|raw }}
-{% include 'v1.emails.footer-text' %}
diff --git a/resources/views/v1/emails/confirm-email-change-text.twig b/resources/views/v1/emails/confirm-email-change-text.twig
deleted file mode 100644
index 13d523efef..0000000000
--- a/resources/views/v1/emails/confirm-email-change-text.twig
+++ /dev/null
@@ -1,10 +0,0 @@
-{% include 'v1.emails.header-text' %}
-{{ trans('email.email_change_body_to_new')|raw }}
-
-{{trans('email.email_change_old', { email: oldEmail })|raw }}
-
-{{trans('email.email_change_new', { email: newEmail })|raw }}
-
-{{ trans('email.email_change_instructions')|raw }}
-{{ uri }}
-{% include 'v1.emails.footer-text' %}
diff --git a/resources/views/v1/emails/error-text.twig b/resources/views/v1/emails/error-text.twig
deleted file mode 100644
index 4d394ccc9e..0000000000
--- a/resources/views/v1/emails/error-text.twig
+++ /dev/null
@@ -1,27 +0,0 @@
-{% include 'v1.emails.header-text' %}
-{{ trans('email.error_intro', { version: version, errorMessage: errorMessage })|striptags|raw }}
-
-{{ trans('email.error_type', {class: class })|raw }}
-
-{{ trans('email.error_timestamp', {time: time })|raw }}
-
-{{ trans('email.error_location', { file: file , line: line, code: code })|striptags|raw }}
-
-{% if loggedIn %}
-{{ trans('email.error_user', { id: user.id, email: user.email })|striptags|raw }}
-{% else %}
-{{ trans('email.error_no_user')|raw }}
-{% endif %}
-
-{{ trans('email.error_ip', { ip: ip }) }}
-{{ trans('email.error_url', {url :url}) }}
-{{ trans('email.error_user_agent', {userAgent: userAgent } ) }}
-
-{{ trans('email.error_stacktrace')|striptags|raw }}
-
-{{ trans('email.error_github_text' )|raw }}
-
-{{ trans('email.error_stacktrace_below')|raw }}
-
-{{ stackTrace|raw }}
-{% include 'v1.emails.footer-text' %}
diff --git a/resources/views/v1/emails/oauth-client-created-html.twig b/resources/views/v1/emails/oauth-client-created-html.twig
deleted file mode 100644
index d308830220..0000000000
--- a/resources/views/v1/emails/oauth-client-created-html.twig
+++ /dev/null
@@ -1,13 +0,0 @@
-{% include 'v1.emails.header-html' %}
-
- {{ trans('email.oauth_created_body', { name:client.name, url: client.redirect })|raw }}
-
-
-
- {{ trans('email.oauth_created_explanation')|raw }}
-
-
-
- {{ trans('email.oauth_created_undo', { url:route('profile.index')}) }}
-
-{% include 'v1.emails.footer-html' %}
diff --git a/resources/views/v1/emails/oauth-client-created-text.twig b/resources/views/v1/emails/oauth-client-created-text.twig
deleted file mode 100644
index 050525320c..0000000000
--- a/resources/views/v1/emails/oauth-client-created-text.twig
+++ /dev/null
@@ -1,7 +0,0 @@
-{% include 'v1.emails.header-text' %}
-{{ trans('email.oauth_created_body', {name: client.name, url: client.redirect })|striptags|raw }}
-
-{{ trans('email.oauth_created_explanation')|striptags|raw }}
-
-{{ trans('email.oauth_created_undo', { url:route('profile.index')})|raw }}
-{% include 'v1.emails.footer-text' %}
diff --git a/resources/views/v1/emails/password-html.twig b/resources/views/v1/emails/password-html.twig
deleted file mode 100644
index fc761744f0..0000000000
--- a/resources/views/v1/emails/password-html.twig
+++ /dev/null
@@ -1,13 +0,0 @@
-{% include 'v1.emails.header-html' %}
-
- {{ trans('email.reset_pw_instructions') }}
-
-
-
- {{ trans('email.reset_pw_warning')|raw }}
-
-
-
- {{ url }}
-
-{% include 'v1.emails.footer-html' %}
diff --git a/resources/views/v1/emails/password-text.twig b/resources/views/v1/emails/password-text.twig
deleted file mode 100644
index 1d8a35caf3..0000000000
--- a/resources/views/v1/emails/password-text.twig
+++ /dev/null
@@ -1,7 +0,0 @@
-{% include 'v1.emails.header-text' %}
-{{ trans('email.reset_pw_instructions')|raw }}
-
-{{ trans('email.reset_pw_warning')|striptags|raw }}
-
-{{ url }}
-{% include 'v1.emails.footer-text' %}
diff --git a/resources/views/v1/emails/undo-email-change-text.twig b/resources/views/v1/emails/undo-email-change-text.twig
deleted file mode 100644
index f795ef3a95..0000000000
--- a/resources/views/v1/emails/undo-email-change-text.twig
+++ /dev/null
@@ -1,11 +0,0 @@
-{% include 'v1.emails.header-text' %}
-{{ trans('email.email_change_body_to_old')|striptags|raw }}
-
-{{ trans('email.email_change_ignore')|raw }}
-
-{{trans('email.email_change_old', { email: oldEmail })|raw }}
-
-{{trans('email.email_change_new', { email: newEmail })|raw }}
-
-{{ trans('email.email_change_undo_link')|raw }} {{ uri }}
-{% include 'v1.emails.footer-text' %}
diff --git a/resources/views/v2/emails/access-token-created-html.twig b/resources/views/v2/emails/access-token-created-html.twig
deleted file mode 100644
index bfead45f6a..0000000000
--- a/resources/views/v2/emails/access-token-created-html.twig
+++ /dev/null
@@ -1,13 +0,0 @@
-{% include 'v2.emails.header-html' %}
-
- {{ trans('email.access_token_created_body') }}
-
-
-
- {{ trans('email.access_token_created_explanation')|raw }}
-
-
-
- {{ trans('email.access_token_created_revoke', {url: route('profile.index') }) }}
-
-{% include 'v2.emails.footer-html' %}
diff --git a/resources/views/v2/emails/admin-test-text.twig b/resources/views/v2/emails/admin-test-text.twig
deleted file mode 100644
index 7f8c39aedd..0000000000
--- a/resources/views/v2/emails/admin-test-text.twig
+++ /dev/null
@@ -1,3 +0,0 @@
-{% include 'v2.emails.header-text' %}
-{{ trans('email.admin_test_body', {email: email })|raw }}
-{% include 'v2.emails.footer-text' %}
diff --git a/resources/views/v2/emails/confirm-email-change-html.twig b/resources/views/v2/emails/confirm-email-change-html.twig
deleted file mode 100644
index 5007f263d0..0000000000
--- a/resources/views/v2/emails/confirm-email-change-html.twig
+++ /dev/null
@@ -1,18 +0,0 @@
-{% include 'v2.emails.header-html' %}
-
- {{ trans('email.email_change_body_to_new')}}
-
-
- {{trans('email.email_change_old', { email: oldEmail }) }}
-
-
- {{trans('email.email_change_new_strong', { email: newEmail })|raw }}
-
-
- {{ trans('email.email_change_instructions')}}
-
-
-
- {{ uri }}
-
-{% include 'v2.emails.footer-html' %}
diff --git a/resources/views/v2/emails/error-html.twig b/resources/views/v2/emails/error-html.twig
deleted file mode 100644
index 050cc51417..0000000000
--- a/resources/views/v2/emails/error-html.twig
+++ /dev/null
@@ -1,45 +0,0 @@
-{% include 'v2.emails.header-html' %}
-
- {{ trans('email.error_intro', { version: version, errorMessage: errorMessage })|raw }}
-
-
-
- {{ trans('email.error_type', {class: class }) }}
-
-
-
- {{ trans('email.error_timestamp', {time: time }) }}
-
-
-
-
- {{ trans('email.error_location', { file: file, line: line, code: code })|raw }}
-
-
-
- {% if loggedIn %}
- {{ trans('email.error_user', { id: user.id, email: user.email })|raw }}
- {% else %}
- {{ trans('email.error_no_user') }}
- {% endif %}
-
-
-
- {{ trans('email.error_ip', { ip: ip }) }}
- {{ trans('email.error_url', {url :url }) }}
- {{ trans('email.error_user_agent', {userAgent: userAgent }) }}
-
-
-
- {{ trans('email.error_stacktrace')|raw }}
-
-
- {{ trans('email.error_github_html')|raw }}
-
-
-
- {{ trans('email.error_stacktrace_below') }}
-
- {{ stackTrace|nl2br }}
-
-{% include 'v2.emails.footer-html' %}
diff --git a/resources/views/v2/emails/footer-html.twig b/resources/views/v2/emails/footer-html.twig
deleted file mode 100644
index a5caad932a..0000000000
--- a/resources/views/v2/emails/footer-html.twig
+++ /dev/null
@@ -1,13 +0,0 @@
-
- {{ trans('email.closing') }}
-
-
- {{ trans('email.signature') }}
-
-
-
- {{ trans('email.footer_ps', {ipAddress: ipAddress}) }}
-
-
-