First version of routine #732

This commit is contained in:
James Cole
2017-08-04 15:46:52 +02:00
parent 1878b5287b
commit 5d10a19bfa
11 changed files with 165 additions and 197 deletions

View File

@@ -17,6 +17,7 @@ use Config;
use FireflyConfig;
use FireflyIII\Events\RegisteredUser;
use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Http\Requests\UserRegistrationRequest;
use FireflyIII\User;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Http\Request;
@@ -56,7 +57,7 @@ class RegisterController extends Controller
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|\Illuminate\View\View
*/
public function register(Request $request)
public function register(UserRegistrationRequest $request)
{
// is allowed to?
$singleUserMode = FireflyConfig::get('single_user_mode', Config::get('firefly.configuration.single_user_mode'))->data;

View File

@@ -37,7 +37,7 @@ class ProfileFormRequest extends Request
{
return [
'current_password' => 'required',
'new_password' => 'required|confirmed',
'new_password' => 'required|confirmed|secure_password',
'new_password_confirmation' => 'required',
];
}

View File

@@ -0,0 +1,53 @@
<?php
/**
* UserRegistrationRequest.php
* Copyright (c) 2017 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\Http\Requests;
/**
* Class UserRegistrationRequest
*
*
* @package FireflyIII\Http\Requests
*/
class UserRegistrationRequest extends Request
{
/**
* @return bool
*/
public function authorize()
{
// Only everybody
return true;
}
/**
* @return array
*/
public function getUserData(): array
{
return [
'email' => $this->string('email'),
'password' => $this->string('password'),
];
}
/**
* @return array
*/
public function rules()
{
return [
'email' => 'email|required',
'password' => 'confirmed|secure_password',
];
}
}

View File

@@ -39,6 +39,8 @@ use FireflyIII\Support\Amount;
use FireflyIII\Support\ExpandedForm;
use FireflyIII\Support\FireflyConfig;
use FireflyIII\Support\Navigation;
use FireflyIII\Support\Password\PwndVerifier;
use FireflyIII\Support\Password\Verifier;
use FireflyIII\Support\Preferences;
use FireflyIII\Support\Steam;
use FireflyIII\Support\Twig\AmountFormat;
@@ -147,6 +149,9 @@ class FireflyServiceProvider extends ServiceProvider
$this->app->bind(FiscalHelperInterface::class, FiscalHelper::class);
$this->app->bind(BalanceReportHelperInterface::class, BalanceReportHelper::class);
$this->app->bind(BudgetReportHelperInterface::class, BudgetReportHelper::class);
// password verifier thing
$this->app->bind(Verifier::class, PwndVerifier::class);
}
}

View File

@@ -0,0 +1,51 @@
<?php
/**
* PwndVerifier.php
* Copyright (c) 2017 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\Support\Password;
use Log;
use Requests;
use Requests_Exception;
/**
* Class PwndVerifier
*
* @package FireflyIII\Support\Password
*/
class PwndVerifier implements Verifier
{
/**
* Verify the given password against (some) service.
*
* @param string $password
*
* @return bool
*/
public function validPassword(string $password): bool
{
$hash = sha1($password);
$uri = sprintf('https://haveibeenpwned.com/api/v2/pwnedpassword/%s', $hash);
$opt = ['useragent' => 'Firefly III v' . config('firefly.version'), 'timeout' => 2];
try {
$result = Requests::get($uri, ['originalPasswordIsAHash' => 'true'], $opt);
} catch (Requests_Exception $e) {
return true;
}
Log::debug(sprintf('Status code returned is %d', $result->status_code));
if ($result->status_code === 404) {
return true;
}
return false;
}
}

View File

@@ -0,0 +1,29 @@
<?php
/**
* Verifier.php
* Copyright (c) 2017 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\Support\Password;
/**
* Interface Verifier
*
* @package FireflyIII\Support\Password
*/
interface Verifier
{
/**
* Verify the given password against (some) service.
* @param string $password
*
* @return bool
*/
public function validPassword(string $password): bool;
}

View File

@@ -24,11 +24,15 @@ use FireflyIII\Models\PiggyBank;
use FireflyIII\Models\TransactionType;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Rules\Triggers\TriggerInterface;
use FireflyIII\Support\Password\Verifier;
use FireflyIII\User;
use Google2FA;
use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Contracts\Translation\Translator;
use Illuminate\Validation\Validator;
use Log;
use Requests;
use Requests_Exception;
/**
* Class FireflyValidator
@@ -274,6 +278,24 @@ class FireflyValidator extends Validator
return false;
}
/**
* @param $attribute
* @param $value
* @param $parameters
*
* @return bool
*/
public function validateSecurePassword($attribute, $value, $parameters): bool
{
$enabled = env('PASSWORD_SERVICE');
if (!$enabled) {
return true;
}
/** @var Verifier $service */
$service = app(Verifier::class);
return $service->validPassword($value);
}
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
* @param $attribute