New events and their handlers for user activation and other things.

This commit is contained in:
James Cole 2016-03-29 11:55:25 +02:00
parent 08b8bd27f9
commit 3adccff611
4 changed files with 147 additions and 2 deletions

View File

@ -0,0 +1,39 @@
<?php
/**
* ResendConfirmation.php
* Copyright (C) 2016 Sander Dorigo
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file for details.
*/
namespace FireflyIII\Events;
use FireflyIII\User;
use Illuminate\Queue\SerializesModels;
/**
* Class ResendConfirmation
*
* @package FireflyIII\Events
*/
class ResendConfirmation extends Event
{
use SerializesModels;
public $ip;
public $user;
/**
* Create a new event instance.
*
* @param User $user
*
* @param string $ip
*/
public function __construct(User $user, string $ip)
{
$this->user = $user;
$this->ip = $ip;
}
}

View File

@ -27,9 +27,9 @@ class UserRegistration extends Event
/**
* Create a new event instance.
*
* @param User $user
* @param User $user
*
* @return void
* @param string $ip
*/
public function __construct(User $user, string $ip)
{

View File

@ -0,0 +1,102 @@
<?php
/**
* UserConfirmation.php
* Copyright (C) 2016 Sander Dorigo
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file for details.
*/
namespace FireflyIII\Handlers\Events;
use FireflyIII\Events\ResendConfirmation;
use FireflyIII\Events\UserRegistration;
use FireflyIII\User;
use Illuminate\Mail\Message;
use Log;
use Mail;
use Preferences;
use Swift_TransportException;
/**
* Class UserConfirmation
*
* @package FireflyIII\Handlers\Events
*/
class UserConfirmation
{
/**
* Create the event listener.
*
*/
public function __construct()
{
//
}
/**
* @param ResendConfirmation $event
*/
public function resendConfirmation(ResendConfirmation $event)
{
$user = $event->user;
$ipAddress = $event->ip;
$this->doConfirm($user, $ipAddress);
}
/**
* Handle the event.
*
* @param UserRegistration $event
*/
public function sendConfirmation(UserRegistration $event)
{
$user = $event->user;
$ipAddress = $event->ip;
$this->doConfirm($user, $ipAddress);
}
/**
* @param User $user
* @param string $ipAddress
*/
private function doConfirm(User $user, string $ipAddress)
{
Log::debug('Trigger UserConfirmation::doConfirm');
// if user must confirm account, send email
$confirmAccount = env('MUST_CONFIRM_ACCOUNT', false);
// otherwise, auto-confirm:
if ($confirmAccount === false) {
Preferences::setForUser($user, 'user_confirmed', true);
Preferences::setForUser($user, 'user_confirmed_last_mail', 0);
return;
}
// send email message:
$email = $user->email;
$code = str_random(16);
$route = route('do_confirm_account', [$code]);
// set preferences:
Preferences::setForUser($user, 'user_confirmed', false);
Preferences::setForUser($user, 'user_confirmed_last_mail', time());
Preferences::setForUser($user, 'user_confirmed_code', $code);
// send email.
try {
Mail::send(
['emails.confirm-account-html', 'emails.confirm-account'], ['route' => $route, 'ip' => $ipAddress],
function (Message $message) use ($email) {
$message->to($email, $email)->subject('Please confirm your Firefly III account');
}
);
} catch (Swift_TransportException $e) {
Log::error($e->getMessage());
}
}
}

View File

@ -47,6 +47,10 @@ class EventServiceProvider extends ServiceProvider
'FireflyIII\Events\UserRegistration' => [
'FireflyIII\Handlers\Events\SendRegistrationMail',
'FireflyIII\Handlers\Events\AttachUserRole',
'FireflyIII\Handlers\Events\UserConfirmation@sendConfirmation',
],
'FireflyIII\Events\ResendConfirmation' => [
'FireflyIII\Handlers\Events\UserConfirmation@resendConfirmation',
],
];