Rewrote all email messages.

This commit is contained in:
James Cole 2016-11-22 21:21:11 +01:00
parent 2ba5733ebc
commit f029f7607b
No known key found for this signature in database
GPG Key ID: C16961E655E74B5E
27 changed files with 179 additions and 285 deletions

View File

@ -0,0 +1,45 @@
<?php
/**
* RequestedNewPassword.php
* Copyright (C) 2016 thegrumpydictator@gmail.com
*
* This software may be modified and distributed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International License.
*
* See the LICENSE file for details.
*/
declare(strict_types = 1);
namespace FireflyIII\Events;
use FireflyIII\User;
use Illuminate\Queue\SerializesModels;
/**
* Class RequestedNewPassword
*
* @package FireflyIII\Events
*/
class RequestedNewPassword extends Event
{
use SerializesModels;
public $ipAddress;
public $token;
public $user;
/**
* Create a new event instance. This event is triggered when a users tries to reset his or her password.
*
* @param User $user
* @param string $token
*/
public function __construct(User $user, string $token, string $ipAddress)
{
$this->user = $user;
$this->token = $token;
$this->ipAddress = $ipAddress;
}
}

View File

@ -17,6 +17,7 @@ use Exception;
use FireflyConfig; use FireflyConfig;
use FireflyIII\Events\ConfirmedUser; use FireflyIII\Events\ConfirmedUser;
use FireflyIII\Events\RegisteredUser; use FireflyIII\Events\RegisteredUser;
use FireflyIII\Events\RequestedNewPassword;
use FireflyIII\Events\ResentConfirmation; use FireflyIII\Events\ResentConfirmation;
use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface;
use FireflyIII\User; use FireflyIII\User;
@ -101,6 +102,33 @@ class UserEventHandler
} }
/**
* @param RequestedNewPassword $event
*
* @return bool
*/
public function sendNewPassword(RequestedNewPassword $event): bool
{
$email = $event->user->email;
$ipAddress = $event->ipAddress;
$token = $event->token;
$url = route('password.reset', [$token]);
// send email.
try {
Mail::send(
['emails.password-html', 'emails.password-text'], ['url' => $url, 'ip' => $ipAddress], function (Message $message) use ($email) {
$message->to($email, $email)->subject('Your password reset request');
}
);
} catch (Swift_TransportException $e) {
Log::error($e->getMessage());
}
return true;
}
/** /**
* This method will send the user a registration mail, welcoming him or her to Firefly III. * This method will send the user a registration mail, welcoming him or her to Firefly III.
* This message is only sent when the configuration of Firefly III says so. * This message is only sent when the configuration of Firefly III says so.
@ -123,7 +151,7 @@ class UserEventHandler
// send email. // send email.
try { try {
Mail::send( Mail::send(
['emails.registered-html', 'emails.registered'], ['address' => $address, 'ip' => $ipAddress], function (Message $message) use ($email) { ['emails.registered-html', 'emails.registered-text'], ['address' => $address, 'ip' => $ipAddress], function (Message $message) use ($email) {
$message->to($email, $email)->subject('Welcome to Firefly III! '); $message->to($email, $email)->subject('Welcome to Firefly III! ');
} }
); );
@ -191,7 +219,7 @@ class UserEventHandler
Preferences::setForUser($user, 'user_confirmed_code', $code); Preferences::setForUser($user, 'user_confirmed_code', $code);
try { try {
Mail::send( Mail::send(
['emails.confirm-account-html', 'emails.confirm-account'], ['route' => $route, 'ip' => $ipAddress], ['emails.confirm-account-html', 'emails.confirm-account-text'], ['route' => $route, 'ip' => $ipAddress],
function (Message $message) use ($email) { function (Message $message) use ($email) {
$message->to($email, $email)->subject('Please confirm your Firefly III account'); $message->to($email, $email)->subject('Please confirm your Firefly III account');
} }

View File

@ -188,7 +188,7 @@ class LoginController extends Controller
]; ];
Mail::send( Mail::send(
['emails.blocked-login-html', 'emails.blocked-login'], $fields, function (Message $message) use ($email, $user) { ['emails.blocked-login-html', 'emails.blocked-login-text'], $fields, function (Message $message) use ($email, $user) {
$message->to($email, $email)->subject('Blocked a login attempt from ' . trim($user->email) . '.'); $message->to($email, $email)->subject('Blocked a login attempt from ' . trim($user->email) . '.');
} }
); );

View File

@ -221,7 +221,7 @@ class RegisterController extends Controller
]; ];
Mail::send( Mail::send(
['emails.blocked-registration-html', 'emails.blocked-registration'], $fields, function (Message $message) use ($email, $domain) { ['emails.blocked-registration-html', 'emails.blocked-registration-text'], $fields, function (Message $message) use ($email, $domain) {
$message->to($email, $email)->subject('Blocked a registration attempt with domain ' . $domain . '.'); $message->to($email, $email)->subject('Blocked a registration attempt with domain ' . $domain . '.');
} }
); );

View File

@ -78,7 +78,7 @@ class MailError extends Job implements ShouldQueue
$args['ip'] = $this->ipAddress; $args['ip'] = $this->ipAddress;
Mail::send( Mail::send(
['emails.error-html', 'emails.error'], $args, ['emails.error-html', 'emails.error-text'], $args,
function (Message $message) use ($email) { function (Message $message) use ($email) {
if ($email != 'mail@example.com') { if ($email != 'mail@example.com') {
$message->to($email, $email)->subject('Caught an error in Firely III.'); $message->to($email, $email)->subject('Caught an error in Firely III.');

View File

@ -36,22 +36,25 @@ class EventServiceProvider extends ServiceProvider
protected $listen protected $listen
= [ = [
// new event handlers: // new event handlers:
'FireflyIII\Events\ConfirmedUser' => // is a User related event. 'FireflyIII\Events\ConfirmedUser' => // is a User related event.
[ [
'FireflyIII\Handlers\Events\UserEventHandler@storeConfirmationIpAddress', 'FireflyIII\Handlers\Events\UserEventHandler@storeConfirmationIpAddress',
], ],
'FireflyIII\Events\RegisteredUser' => // is a User related event. 'FireflyIII\Events\RegisteredUser' => // is a User related event.
[ [
'FireflyIII\Handlers\Events\UserEventHandler@sendRegistrationMail', 'FireflyIII\Handlers\Events\UserEventHandler@sendRegistrationMail',
'FireflyIII\Handlers\Events\UserEventHandler@attachUserRole', 'FireflyIII\Handlers\Events\UserEventHandler@attachUserRole',
'FireflyIII\Handlers\Events\UserEventHandler@sendConfirmationMessage', 'FireflyIII\Handlers\Events\UserEventHandler@sendConfirmationMessage',
'FireflyIII\Handlers\Events\UserEventHandler@storeRegistrationIpAddress', 'FireflyIII\Handlers\Events\UserEventHandler@storeRegistrationIpAddress',
], ],
'FireflyIII\Events\ResentConfirmation' => // is a User related event. 'FireflyIII\Events\RequestedNewPassword' => [ // is a User related event.
'FireflyIII\Handlers\Events\UserEventHandler@sendNewPassword',
],
'FireflyIII\Events\ResentConfirmation' => // is a User related event.
[ [
'FireflyIII\Handlers\Events\UserEventHandler@sendConfirmationMessageAgain', 'FireflyIII\Handlers\Events\UserEventHandler@sendConfirmationMessageAgain',
], ],
'FireflyIII\Events\StoredBudgetLimit' => // is a Budget related event. 'FireflyIII\Events\StoredBudgetLimit' => // is a Budget related event.
[ [
'FireflyIII\Handlers\Events\BudgetEventHandler@storeRepetition', 'FireflyIII\Handlers\Events\BudgetEventHandler@storeRepetition',
], ],

View File

@ -14,52 +14,18 @@ declare(strict_types = 1);
namespace FireflyIII; namespace FireflyIII;
use FireflyIII\Events\RequestedNewPassword;
use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough; use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notifiable;
use Request;
/** /**
* Class User * Class User
* *
* @package FireflyIII * @package FireflyIII
* @property integer $id
* @property \Carbon\Carbon $created_at
* @property \Carbon\Carbon $updated_at
* @property string $email
* @property string $password
* @property string $remember_token
* @property string $reset
* @property boolean $blocked
* @property string $blocked_code
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Account[] $accounts
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Attachment[] $attachments
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Bill[] $bills
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Budget[] $budgets
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Category[] $categories
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\ExportJob[] $exportJobs
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\ImportJob[] $importJobs
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\PiggyBank[] $piggyBanks
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Preference[] $preferences
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Role[] $roles
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\RuleGroup[] $ruleGroups
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Rule[] $rules
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Tag[] $tags
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\TransactionJournal[] $transactionJournals
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Transaction[] $transactions
* @property-read \Illuminate\Notifications\DatabaseNotificationCollection|\Illuminate\Notifications\DatabaseNotification[] $notifications
* @property-read \Illuminate\Notifications\DatabaseNotificationCollection|\Illuminate\Notifications\DatabaseNotification[] $unreadNotifications
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\User whereId($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\User whereCreatedAt($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\User whereUpdatedAt($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\User whereEmail($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\User wherePassword($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\User whereRememberToken($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\User whereReset($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\User whereBlocked($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\User whereBlockedCode($value)
* @mixin \Eloquent
*/ */
class User extends Authenticatable class User extends Authenticatable
{ {
@ -246,5 +212,18 @@ class User extends Authenticatable
return $this->hasManyThrough('FireflyIII\Models\Transaction', 'FireflyIII\Models\TransactionJournal'); return $this->hasManyThrough('FireflyIII\Models\Transaction', 'FireflyIII\Models\TransactionJournal');
} }
/**
* Send the password reset notification.
*
* @param string $token
* @return void
*/
public function sendPasswordResetNotification($token)
{
$ip = Request::ip();
event(new RequestedNewPassword($this, $token, $ip));
}
} }

View File

@ -10,40 +10,10 @@
*/ */
return [ return [
/*
|--------------------------------------------------------------------------
| Authentication Defaults
|--------------------------------------------------------------------------
|
| This option controls the default authentication "guard" and password
| reset options for your application. You may change these defaults
| as required, but they're a perfect start for most applications.
|
*/
'defaults' => [ 'defaults' => [
'guard' => 'web', 'guard' => 'web',
'passwords' => 'users', 'passwords' => 'users',
], ],
/*
|--------------------------------------------------------------------------
| Authentication Guards
|--------------------------------------------------------------------------
|
| Next, you may define every authentication guard for your application.
| Of course, a great default configuration has been defined for you
| here which uses session storage and the Eloquent user provider.
|
| All authentication drivers have a user provider. This defines how the
| users are actually retrieved out of your database or other storage
| mechanisms used by this application to persist your user's data.
|
| Supported: "session", "token"
|
*/
'guards' => [ 'guards' => [
'web' => [ 'web' => [
'driver' => 'session', 'driver' => 'session',
@ -55,55 +25,17 @@ return [
'provider' => 'users', 'provider' => 'users',
], ],
], ],
/*
|--------------------------------------------------------------------------
| User Providers
|--------------------------------------------------------------------------
|
| All authentication drivers have a user provider. This defines how the
| users are actually retrieved out of your database or other storage
| mechanisms used by this application to persist your user's data.
|
| If you have multiple user tables or models you may configure multiple
| sources which represent each model / table. These sources may then
| be assigned to any extra authentication guards you have defined.
|
| Supported: "database", "eloquent"
|
*/
'providers' => [ 'providers' => [
'users' => [ 'users' => [
'driver' => 'eloquent', 'driver' => 'eloquent',
'model' => FireflyIII\User::class, 'model' => FireflyIII\User::class,
], ],
], ],
/*
|--------------------------------------------------------------------------
| Resetting Passwords
|--------------------------------------------------------------------------
|
| Here you may set the options for resetting passwords including the view
| that is your password reset e-mail. You may also set the name of the
| table that maintains all of the reset tokens for your application.
|
| You may specify multiple password reset configurations if you have more
| than one user table or model in the application and you want to have
| separate password reset settings based on the specific user types.
|
| The expire time is the number of minutes that the reset token should be
| considered valid. This security feature keeps tokens short-lived so
| they have less time to be guessed. You may change this as needed.
|
*/
'passwords' => [ 'passwords' => [
'users' => [ 'users' => [
'provider' => 'users', 'provider' => 'users',
'table' => 'password_resets', 'table' => 'password_resets',
'expire' => 60, 'expire' => 120,
], ],
], ],

View File

@ -1,24 +1,8 @@
<!DOCTYPE html> {% include 'emails.header-html' %}
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body itemscope itemtype="http://schema.org/SoftwareApplication">
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
Hey there,
</p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;"> <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
Firefly III has just blocked a login from user #{{ user_id }} ({{ user_address }}). Firefly III has just blocked a login from user #{{ user_id }} ({{ user_address }}).
</p> </p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;"> <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
The blocked code was "{{ code }}". The blocked code was "{{ code }}".
</p> </p>
{% include 'emails.footer-html' %}
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:11px;color:#aaa;">
The login attempt came from IP {{ ip }}.
</p>
</body>
</html>

View File

@ -1,7 +1,5 @@
Hey there, {% include 'emails.header-text' %}
Firefly III has just blocked a login from user #{{ user_id }} ({{ user_address }}). Firefly III has just blocked a login from user #{{ user_id }} ({{ user_address }}).
The blocked code was "{{ code }}". The blocked code was "{{ code }}".
{% include 'emails.footer-text' %}
The login attempt came from IP {{ ip }}

View File

@ -1,24 +1,8 @@
<!DOCTYPE html> {% include 'emails.header-html' %}
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body itemscope itemtype="http://schema.org/SoftwareApplication">
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
Hey there,
</p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;"> <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
Firefly III has just blocked a registration for an email addres at domain {{ blocked_domain }}. Firefly III has just blocked a registration for an email addres at domain {{ blocked_domain }}.
</p> </p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;"> <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
The blocked email address was "{{ email_address }}". The blocked email address was "{{ email_address }}".
</p> </p>
{% include 'emails.footer-html' %}
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:11px;color:#aaa;">
The login attempt came from IP {{ ip }}.
</p>
</body>
</html>

View File

@ -1,7 +1,5 @@
Hey there, {% include 'emails.header-text' %}
Firefly III has just blocked a registration for an email addres at domain {{ blocked_domain }}. Firefly III has just blocked a registration for an email addres at domain {{ blocked_domain }}.
The blocked email address was "{{ email_address }}". The blocked email address was "{{ email_address }}".
{% include 'emails.footer-text' %}
The login attempt came from IP {{ ip }}.

View File

@ -1,25 +1,14 @@
<!DOCTYPE html> {% include 'emails.header-html' %}
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
Hey there!
</p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;"> <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
To start using your brand new Firefly III account, you need to activate it. Activating your account allows the website to verify that this email address is To start using your brand new Firefly III account, you need to activate it. Activating your account allows the website to verify that this email address is
valid. Unfortunately, not even the most complex routines can work this out, without actually sending an email message. And here it is! valid. Unfortunately, not even the most complex routines can work this out, without actually sending an email message. And here it is!
</p> </p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;"> <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
To active your account, <a href="{{ route }}" style="color:#337ab7">click on this link</a>. To active your account please follow the link below.
</p> </p>
<p> <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
If the link does not work, you can browse there manually by copy/pasting it: <strong>PLEASE</strong> verify that this activation link goes to the Firefly III installation you expect it to be:
</p> </p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;"> <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
<a href="{{ route }}" style="color:#337ab7">{{ route }}</a> <a href="{{ route }}" style="color:#337ab7">{{ route }}</a>
@ -28,15 +17,4 @@
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;"> <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
You should be redirected to the index page right away. The link expires in about four hours. You should be redirected to the index page right away. The link expires in about four hours.
</p> </p>
{% include 'emails.footer-html' %}
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
Thank you, and enjoy!
</p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
James Cole
</p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:11px;color:#aaa;">
You are getting this activation message because a new registration from IP {{ ip }} triggered it.
</p>

View File

@ -1,16 +1,11 @@
Hey there! {% include 'emails.header-text' %}
To start using your brand new Firefly III account, you need to activate it. Activating your account allows the website to verify that this email address is valid. Unfortunately, not even the most complex routines can work this out, without actually sending an email message. And here it is! To start using your brand new Firefly III account, you need to activate it. Activating your account allows the website to verify that this email address is valid. Unfortunately, not even the most complex routines can work this out, without actually sending an email message. And here it is!
To active your account, you can click on the following link, or copy/paste it in your web browser: To active your account please follow the link below.
PLEASE verify that this activation link goes to the Firefly III installation you expect it to be:
{{ route }} {{ route }}
You should be redirected to the index page right away. The link expires in about four hours. You should be redirected to the index page right away. The link expires in about four hours.
{% include 'emails.footer-text' %}
Thank you, and enjoy!
James Cole
You are getting this activation message because a new registration from IP {{ ip }} triggered it.

View File

@ -1,52 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
Firefly III ran into an error: <span style="font-family: monospace;">{{ errorMessage }}</span>
</p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
The error was of type "{{ class }}".
</p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
The error occured on/at: {{ time }}.
</p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
This error occured in file <span style="font-family: monospace;">{{ file }}</span> on line {{ line }} with code {{ code }}.
</p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
{% if loggedIn %}
The error was encountered by user #{{ user.id }}, <a href="mailto:{{ user.email }}">{{ user.email }}</a>.
{% else %}
There was no user logged in for this error or no user was detected.
{% endif %}
</p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
The IP address related to this error is: {{ ip }}
</p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
The full stacktrace is below. If you think this is a bug in Firefly III, you
can forward this message to
<a href="mailto:thegrumpydictator@gmail.com?subject=BUG!">thegrumpydictator@gmail.com</a>.
This can help fix the bug you just encountered.
</p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
If you prefer, you can also open a new issue on <a href="https://github.com/JC5/firefly-iii/issues/new">Github</a>.
</p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
The full stacktrace is below:</p>
<p style="font-family: monospace;font-size:11px;color:#aaa">
{{ stacktrace|nl2br }}
</p>
</body>
</html>

View File

@ -1,10 +1,4 @@
<!DOCTYPE html> {% include 'emails.header-html' %}
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;"> <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
Firefly III ran into an error: <span style="font-family: monospace;">{{ errorMessage }}</span> Firefly III ran into an error: <span style="font-family: monospace;">{{ errorMessage }}</span>
</p> </p>
@ -48,5 +42,4 @@
<p style="font-family: monospace;font-size:11px;color:#aaa"> <p style="font-family: monospace;font-size:11px;color:#aaa">
{{ stacktrace|nl2br }} {{ stacktrace|nl2br }}
</p> </p>
</body> {% include 'emails.footer-html' %}
</html>

View File

@ -1,3 +1,4 @@
{% include 'emails.header-text' %}
Firefly III ran into an error: {{ errorMessage }}. Firefly III ran into an error: {{ errorMessage }}.
The error was of type "{{ class }}". The error was of type "{{ class }}".
@ -25,3 +26,4 @@ https://github.com/JC5/firefly-iii/issues/new
The full stacktrace is below: The full stacktrace is below:
{{ stacktrace }} {{ stacktrace }}
{% include 'emails.footer-text' %}

View File

@ -0,0 +1,13 @@
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
Beep boop,
</p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
The Firefly III Mail Robot
</p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:11px;color:#aaa;">
PS: This message was sent because a request from IP {{ ip }} triggered it.
</p>
</body>
</html>

View File

@ -0,0 +1,6 @@
Beep boop,
The Firefly III Mail Robot
PS: This message was sent because a request from IP {{ ip }} triggered it.

View File

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
Hi there,
</p>

View File

@ -0,0 +1,2 @@
Hi there,

View File

@ -0,0 +1,13 @@
{% include 'emails.header-html' %}
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
Somebody tried to reset your password. If it was you, please follow the link below to do so.
</p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
<strong>PLEASE</strong> verify that the link actually goes to the Firefly III you expect it to go!
</p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
<a href="{{ url }}">{{ url }}</a>
</p>
{% include 'emails.footer-html' %}

View File

@ -0,0 +1,7 @@
{% include 'emails.header-text' %}
Somebody tried to reset your password. If it was you, please follow the link below to do so.
PLEASE verify that the link actually goes to the Firefly III you expect it to go!
{{ url }}
{% include 'emails.footer-text' %}

View File

@ -1 +0,0 @@
Click here to reset your password: {{ url('password/reset/' ~ token) }}

View File

@ -1,14 +1,4 @@
<!DOCTYPE html> {% include 'emails.header-html' %}
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
Hey there,
</p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;"> <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
Welkome to <a style="color:#337ab7" href="{{ address }}">Firefly III</a>. Your registration has made it, and this email is here to confirm it. Yay! Welkome to <a style="color:#337ab7" href="{{ address }}">Firefly III</a>. Your registration has made it, and this email is here to confirm it. Yay!
</p> </p>
@ -31,17 +21,4 @@
link very soon! link very soon!
</li> </li>
</ul> </ul>
{% include 'emails.footer-html' %}
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
Enjoy!
</p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
James Cole
</p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:11px;color:#aaa;">
The registration has been created from IP {{ ip }}
</p>
</body>
</html>

View File

@ -1,5 +1,4 @@
Hey there, {% include 'emails.header-text' %}
Welkome to Firefly III. Your registration has made it, and this email is here to confirm it. Yay! Welkome to Firefly III. Your registration has made it, and this email is here to confirm it. Yay!
* If you have forgotten your password already, please reset it using the password reset tool. * If you have forgotten your password already, please reset it using the password reset tool.
@ -19,3 +18,4 @@ https://github.com/JC5/firefly-iii/wiki/First-use
http://jc5.github.io/firefly-iii//description/ http://jc5.github.io/firefly-iii//description/
The registration has been created from IP {{ ip }} The registration has been created from IP {{ ip }}
{% include 'emails.footer-text' %}

View File

@ -25,7 +25,7 @@ Route::group(
Route::post('/register', 'Auth\RegisterController@register'); Route::post('/register', 'Auth\RegisterController@register');
// Password Reset Routes... // Password Reset Routes...
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm'); Route::get('password/reset/{token}', ['uses' => 'Auth\ResetPasswordController@showResetForm', 'as' => 'password.reset']);
Route::post('/password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail'); Route::post('/password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail');
Route::post('/password/reset', 'Auth\ResetPasswordController@reset'); Route::post('/password/reset', 'Auth\ResetPasswordController@reset');
Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm'); Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm');