Respect home hubs setting for registration #580
This commit is contained in:
parent
b34dc4868e
commit
a1d6fa17ad
2
Makefile
2
Makefile
@ -74,7 +74,7 @@ reload-db:
|
|||||||
tests: test
|
tests: test
|
||||||
|
|
||||||
.PHONY: test
|
.PHONY: test
|
||||||
test:
|
test: phpcs
|
||||||
#php artisan database:create --reset
|
#php artisan database:create --reset
|
||||||
vendor/bin/phpunit --debug --verbose
|
vendor/bin/phpunit --debug --verbose
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ $factory->define(App\Models\User::class, function (Faker $faker) {
|
|||||||
|
|
||||||
return [
|
return [
|
||||||
'id' => null,
|
'id' => null,
|
||||||
'pilot_id' => 0,
|
'pilot_id' => null,
|
||||||
'name' => $faker->name,
|
'name' => $faker->name,
|
||||||
'email' => $faker->safeEmail,
|
'email' => $faker->safeEmail,
|
||||||
'password' => $password ?: $password = Hash::make('secret'),
|
'password' => $password ?: $password = Hash::make('secret'),
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
namespace App\Http\Controllers\Auth;
|
namespace App\Http\Controllers\Auth;
|
||||||
|
|
||||||
use App\Contracts\Controller;
|
use App\Contracts\Controller;
|
||||||
|
use App\Http\Requests\CreateUserRequest;
|
||||||
use App\Models\Enums\UserState;
|
use App\Models\Enums\UserState;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use App\Repositories\AirlineRepository;
|
use App\Repositories\AirlineRepository;
|
||||||
@ -10,7 +11,6 @@ use App\Repositories\AirportRepository;
|
|||||||
use App\Services\UserService;
|
use App\Services\UserService;
|
||||||
use App\Support\Countries;
|
use App\Support\Countries;
|
||||||
use App\Support\Timezonelist;
|
use App\Support\Timezonelist;
|
||||||
use App\Support\Utils;
|
|
||||||
use Illuminate\Contracts\Validation\Validator;
|
use Illuminate\Contracts\Validation\Validator;
|
||||||
use Illuminate\Foundation\Auth\RegistersUsers;
|
use Illuminate\Foundation\Auth\RegistersUsers;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@ -59,7 +59,7 @@ class RegisterController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function showRegistrationForm()
|
public function showRegistrationForm()
|
||||||
{
|
{
|
||||||
$airports = $this->airportRepo->selectBoxList(false, true);
|
$airports = $this->airportRepo->selectBoxList(false, setting('pilots.home_hubs_only'));
|
||||||
$airlines = $this->airlineRepo->selectBoxList();
|
$airlines = $this->airlineRepo->selectBoxList();
|
||||||
|
|
||||||
return view('auth.register', [
|
return view('auth.register', [
|
||||||
@ -81,7 +81,7 @@ class RegisterController extends Controller
|
|||||||
{
|
{
|
||||||
$rules = [
|
$rules = [
|
||||||
'name' => 'required|max:255',
|
'name' => 'required|max:255',
|
||||||
'email' => 'required|email|max:255|unique:users',
|
'email' => 'required|email|max:255|unique:users, email',
|
||||||
'airline_id' => 'required',
|
'airline_id' => 'required',
|
||||||
'home_airport_id' => 'required',
|
'home_airport_id' => 'required',
|
||||||
'password' => 'required|min:5|confirmed',
|
'password' => 'required|min:5|confirmed',
|
||||||
@ -98,30 +98,24 @@ class RegisterController extends Controller
|
|||||||
/**
|
/**
|
||||||
* Get a validator for an incoming registration request.
|
* Get a validator for an incoming registration request.
|
||||||
*
|
*
|
||||||
* @param array $data
|
* @param array $opts
|
||||||
*
|
*
|
||||||
* @throws \RuntimeException
|
* @throws \RuntimeException
|
||||||
* @throws \Exception
|
* @throws \Exception
|
||||||
*
|
*
|
||||||
* @return User
|
* @return User
|
||||||
*/
|
*/
|
||||||
protected function create(array $data)
|
protected function create(array $opts)
|
||||||
{
|
{
|
||||||
// Default options
|
// Default options
|
||||||
$opts = array_merge([
|
$opts['password'] = Hash::make($opts['password']);
|
||||||
'api_key' => Utils::generateApiKey(),
|
|
||||||
], $data);
|
|
||||||
|
|
||||||
$opts['curr_airport_id'] = $data['home_airport_id'];
|
|
||||||
$opts['password'] = Hash::make($data['password']);
|
|
||||||
|
|
||||||
// Convert transfer hours into minutes
|
// Convert transfer hours into minutes
|
||||||
if (isset($opts['transfer_time'])) {
|
if (isset($opts['transfer_time'])) {
|
||||||
$opts['transfer_time'] *= 60;
|
$opts['transfer_time'] *= 60;
|
||||||
}
|
}
|
||||||
|
|
||||||
$user = User::create($opts);
|
$user = $this->userService->createUser($opts);
|
||||||
$user = $this->userService->createUser($user);
|
|
||||||
|
|
||||||
Log::info('User registered: ', $user->toArray());
|
Log::info('User registered: ', $user->toArray());
|
||||||
|
|
||||||
@ -137,26 +131,8 @@ class RegisterController extends Controller
|
|||||||
*
|
*
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function register(Request $request)
|
public function register(CreateUserRequest $request)
|
||||||
{
|
{
|
||||||
$rules = [
|
|
||||||
'name' => 'required',
|
|
||||||
'email' => 'required|email|unique:users,email',
|
|
||||||
'airline_id' => 'required',
|
|
||||||
'home_airport_id' => 'required',
|
|
||||||
'password' => 'required|confirmed',
|
|
||||||
'timezone' => 'required',
|
|
||||||
'country' => 'required',
|
|
||||||
'transfer_time' => 'integer|min:0',
|
|
||||||
'toc_accepted' => 'accepted',
|
|
||||||
];
|
|
||||||
|
|
||||||
if (config('captcha.enabled')) {
|
|
||||||
$rules['g-recaptcha-response'] = 'required|captcha';
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->validate(request(), $rules);
|
|
||||||
|
|
||||||
$user = $this->create($request->all());
|
$user = $this->create($request->all());
|
||||||
if ($user->state === UserState::PENDING) {
|
if ($user->state === UserState::PENDING) {
|
||||||
return view('auth.pending');
|
return view('auth.pending');
|
||||||
|
@ -24,10 +24,21 @@ class CreateUserRequest extends FormRequest
|
|||||||
*/
|
*/
|
||||||
public function rules(): array
|
public function rules(): array
|
||||||
{
|
{
|
||||||
$rules = User::$rules;
|
$rules = [
|
||||||
|
'name' => 'required',
|
||||||
|
'email' => 'required|email|unique:users,email',
|
||||||
|
'airline_id' => 'required',
|
||||||
|
'home_airport_id' => 'required',
|
||||||
|
'password' => 'required|confirmed',
|
||||||
|
'timezone' => 'required',
|
||||||
|
'country' => 'required',
|
||||||
|
'transfer_time' => 'sometimes|integer|min:0',
|
||||||
|
'toc_accepted' => 'accepted',
|
||||||
|
];
|
||||||
|
|
||||||
$rules['email'] .= '|unique:users,email';
|
if (config('captcha.enabled')) {
|
||||||
$rules['pilot_id'] .= '|unique:users,pilot_id';
|
$rules['g-recaptcha-response'] = 'required|captcha';
|
||||||
|
}
|
||||||
|
|
||||||
return $rules;
|
return $rules;
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,7 @@ use App\Repositories\AircraftRepository;
|
|||||||
use App\Repositories\SubfleetRepository;
|
use App\Repositories\SubfleetRepository;
|
||||||
use App\Repositories\UserRepository;
|
use App\Repositories\UserRepository;
|
||||||
use App\Support\Units\Time;
|
use App\Support\Units\Time;
|
||||||
|
use App\Support\Utils;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use function is_array;
|
use function is_array;
|
||||||
@ -48,15 +49,19 @@ class UserService extends Service
|
|||||||
* Register a pilot. Also attaches the initial roles
|
* Register a pilot. Also attaches the initial roles
|
||||||
* required, and then triggers the UserRegistered event
|
* required, and then triggers the UserRegistered event
|
||||||
*
|
*
|
||||||
* @param User $user User model
|
* @param array $attrs Array with the user data
|
||||||
* @param array $roles List of "display_name" of groups to assign
|
* @param array $roles List of "display_name" of groups to assign
|
||||||
*
|
*
|
||||||
* @throws \Exception
|
* @throws \Exception
|
||||||
*
|
*
|
||||||
* @return mixed
|
* @return User
|
||||||
*/
|
*/
|
||||||
public function createUser(User $user, array $roles = null)
|
public function createUser(array $attrs, array $roles = null): User
|
||||||
{
|
{
|
||||||
|
$user = User::create($attrs);
|
||||||
|
$user->api_key = Utils::generateApiKey();
|
||||||
|
$user->curr_airport_id = $user->home_airport_id;
|
||||||
|
|
||||||
// Determine if we want to auto accept
|
// Determine if we want to auto accept
|
||||||
if (setting('pilots.auto_accept') === true) {
|
if (setting('pilots.auto_accept') === true) {
|
||||||
$user->state = UserState::ACTIVE;
|
$user->state = UserState::ACTIVE;
|
||||||
|
@ -59,7 +59,7 @@
|
|||||||
"codedungeon/phpunit-result-printer": "^0.13.0",
|
"codedungeon/phpunit-result-printer": "^0.13.0",
|
||||||
"filp/whoops": "~2.0",
|
"filp/whoops": "~2.0",
|
||||||
"fzaninotto/faker": "~1.9.0",
|
"fzaninotto/faker": "~1.9.0",
|
||||||
"friendsofphp/php-cs-fixer": "^2.15",
|
"friendsofphp/php-cs-fixer": "^2.16",
|
||||||
"mockery/mockery": "0.9.*",
|
"mockery/mockery": "0.9.*",
|
||||||
"nunomaduro/collision": "^3.0",
|
"nunomaduro/collision": "^3.0",
|
||||||
"phpunit/phpunit": "~8.3",
|
"phpunit/phpunit": "~8.3",
|
||||||
|
12
composer.lock
generated
12
composer.lock
generated
@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "b68aa676232997053c94551f734d2081",
|
"content-hash": "5f8a87c7717ad2b6ed1d6cf1c585cc3d",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "akaunting/money",
|
"name": "akaunting/money",
|
||||||
@ -4232,16 +4232,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "ramsey/uuid",
|
"name": "ramsey/uuid",
|
||||||
"version": "3.9.2",
|
"version": "3.9.3",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/ramsey/uuid.git",
|
"url": "https://github.com/ramsey/uuid.git",
|
||||||
"reference": "7779489a47d443f845271badbdcedfe4df8e06fb"
|
"reference": "7e1633a6964b48589b142d60542f9ed31bd37a92"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/ramsey/uuid/zipball/7779489a47d443f845271badbdcedfe4df8e06fb",
|
"url": "https://api.github.com/repos/ramsey/uuid/zipball/7e1633a6964b48589b142d60542f9ed31bd37a92",
|
||||||
"reference": "7779489a47d443f845271badbdcedfe4df8e06fb",
|
"reference": "7e1633a6964b48589b142d60542f9ed31bd37a92",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -4315,7 +4315,7 @@
|
|||||||
"identifier",
|
"identifier",
|
||||||
"uuid"
|
"uuid"
|
||||||
],
|
],
|
||||||
"time": "2019-12-17T08:18:51+00:00"
|
"time": "2020-02-21T04:36:14+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "react/event-loop",
|
"name": "react/event-loop",
|
||||||
|
@ -283,7 +283,7 @@ class InstallerController extends Controller
|
|||||||
* @throws \Prettus\Validator\Exceptions\ValidatorException
|
* @throws \Prettus\Validator\Exceptions\ValidatorException
|
||||||
* @throws \Exception
|
* @throws \Exception
|
||||||
*
|
*
|
||||||
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function usersetup(Request $request)
|
public function usersetup(Request $request)
|
||||||
{
|
{
|
||||||
@ -326,8 +326,7 @@ class InstallerController extends Controller
|
|||||||
'password' => Hash::make($request->get('password')),
|
'password' => Hash::make($request->get('password')),
|
||||||
];
|
];
|
||||||
|
|
||||||
$user = User::create($attrs);
|
$user = $this->userService->createUser($attrs, ['admin']);
|
||||||
$user = $this->userService->createUser($user, ['admin']);
|
|
||||||
Log::info('User registered: ', $user->toArray());
|
Log::info('User registered: ', $user->toArray());
|
||||||
|
|
||||||
// Set the initial admin e-mail address
|
// Set the initial admin e-mail address
|
||||||
|
@ -91,7 +91,7 @@
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
<table class="table table-striped">
|
<table class="table table-striped table-condensed">
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td width="30%">@lang('common.state')</td>
|
<td width="30%">@lang('common.state')</td>
|
||||||
@ -153,7 +153,7 @@
|
|||||||
<table class="table table-hover table-condensed">
|
<table class="table table-hover table-condensed">
|
||||||
<thead>
|
<thead>
|
||||||
<th>@lang('common.name')</th>
|
<th>@lang('common.name')</th>
|
||||||
<th>@lang('common.value')</th>
|
<th>{{ trans_choice('common.value', 1) }}</th>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@foreach($pirep->fields as $field)
|
@foreach($pirep->fields as $field)
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use App\Events\UserRegistered;
|
||||||
use App\Models\Enums\UserState;
|
use App\Models\Enums\UserState;
|
||||||
use Illuminate\Support\Facades\Mail;
|
use Illuminate\Support\Facades\Event;
|
||||||
|
use Illuminate\Support\Facades\Hash;
|
||||||
|
use Illuminate\Support\Facades\Notification;
|
||||||
|
|
||||||
class RegistrationTest extends TestCase
|
class RegistrationTest extends TestCase
|
||||||
{
|
{
|
||||||
@ -15,25 +18,26 @@ class RegistrationTest extends TestCase
|
|||||||
public function testRegistration()
|
public function testRegistration()
|
||||||
{
|
{
|
||||||
Event::fake();
|
Event::fake();
|
||||||
Mail::fake();
|
Notification::fake();
|
||||||
|
|
||||||
$userSvc = app('App\Services\UserService');
|
$userSvc = app('App\Services\UserService');
|
||||||
|
|
||||||
setting('pilots.auto_accept', true);
|
setting('pilots.auto_accept', true);
|
||||||
|
|
||||||
$user = factory(App\Models\User::class)->create();
|
$attrs = factory(App\Models\User::class)->make()->toArray();
|
||||||
$user = $userSvc->createUser($user);
|
$attrs['password'] = Hash::make('secret');
|
||||||
|
$user = $userSvc->createUser($attrs);
|
||||||
|
|
||||||
$this->assertEquals(UserState::ACTIVE, $user->state);
|
$this->assertEquals(UserState::ACTIVE, $user->state);
|
||||||
|
|
||||||
Event::assertDispatched(\App\Events\UserRegistered::class, function ($e) use ($user) {
|
Event::assertDispatched(UserRegistered::class, function ($e) use ($user) {
|
||||||
return $e->user->id === $user->id
|
return $e->user->id === $user->id
|
||||||
&& $e->user->state === $user->state;
|
&& $e->user->state === $user->state;
|
||||||
});
|
});
|
||||||
|
|
||||||
/*Mail::assertSent(\App\Mail\UserRegistered::class, function ($mail) use ($user) {
|
/*Notification::assertSentTo(
|
||||||
return $mail->user->id === $user->id
|
[$user],
|
||||||
&& $mail->user->state === $user->state;
|
\App\Notifications\Messages\UserRegistered::class
|
||||||
});*/
|
);*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ use App\Exceptions\UserPilotIdExists;
|
|||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use App\Repositories\SettingRepository;
|
use App\Repositories\SettingRepository;
|
||||||
use App\Services\UserService;
|
use App\Services\UserService;
|
||||||
|
use Illuminate\Support\Facades\Hash;
|
||||||
|
|
||||||
class UserTest extends TestCase
|
class UserTest extends TestCase
|
||||||
{
|
{
|
||||||
@ -208,12 +209,14 @@ class UserTest extends TestCase
|
|||||||
*/
|
*/
|
||||||
public function testUserPilotIdAdded()
|
public function testUserPilotIdAdded()
|
||||||
{
|
{
|
||||||
$new_user = factory(App\Models\User::class)->create(['id' => 1]);
|
$new_user = factory(App\Models\User::class)->make()->toArray();
|
||||||
|
$new_user['password'] = Hash::make('secret');
|
||||||
$user = $this->userSvc->createUser($new_user);
|
$user = $this->userSvc->createUser($new_user);
|
||||||
$this->assertEquals($user->id, $user->pilot_id);
|
$this->assertEquals($user->id, $user->pilot_id);
|
||||||
|
|
||||||
// Add a second user
|
// Add a second user
|
||||||
$new_user = factory(App\Models\User::class)->create(['id' => 2]);
|
$new_user = factory(App\Models\User::class)->make()->toArray();
|
||||||
|
$new_user['password'] = Hash::make('secret');
|
||||||
$user2 = $this->userSvc->createUser($new_user);
|
$user2 = $this->userSvc->createUser($new_user);
|
||||||
$this->assertEquals($user2->id, $user2->pilot_id);
|
$this->assertEquals($user2->id, $user2->pilot_id);
|
||||||
|
|
||||||
@ -222,7 +225,7 @@ class UserTest extends TestCase
|
|||||||
$this->assertEquals(3, $user->pilot_id);
|
$this->assertEquals(3, $user->pilot_id);
|
||||||
|
|
||||||
// Create a new user and the pilot_id should be 4
|
// Create a new user and the pilot_id should be 4
|
||||||
$user3 = factory(App\Models\User::class)->create(['id' => 3]);
|
$user3 = factory(App\Models\User::class)->create();
|
||||||
$this->assertEquals(4, $user3->pilot_id);
|
$this->assertEquals(4, $user3->pilot_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user