From b6242d9981dd16a108d2598a816c5222985204bd Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Mon, 1 May 2017 17:29:31 +0300 Subject: [PATCH] Multi-db support --- .../ClientAuth/PasswordController.php | 29 +++++-------------- app/Http/Middleware/DatabaseLookup.php | 4 ++- app/Http/routes.php | 13 +++++---- app/Models/LookupUser.php | 3 +- app/Models/User.php | 4 +-- ...0_174702_add_multiple_database_support.php | 11 +++++-- resources/views/clientauth/reset.blade.php | 7 ++--- .../views/emails/client_password.blade.php | 2 +- 8 files changed, 34 insertions(+), 39 deletions(-) diff --git a/app/Http/Controllers/ClientAuth/PasswordController.php b/app/Http/Controllers/ClientAuth/PasswordController.php index bf3f2da9c974..b13f0dffb16e 100644 --- a/app/Http/Controllers/ClientAuth/PasswordController.php +++ b/app/Http/Controllers/ClientAuth/PasswordController.php @@ -51,8 +51,8 @@ class PasswordController extends Controller $data = [ 'clientauth' => true, ]; - $contactKey = session('contact_key'); - if (!$contactKey) { + + if (! session('contact_key')) { return \Redirect::to('/client/sessionexpired'); } @@ -104,7 +104,7 @@ class PasswordController extends Controller * * @return \Illuminate\Http\Response */ - public function showResetForm(Request $request, $key = null, $token = null) + public function showResetForm(Request $request, $token = null) { if (is_null($token)) { return $this->getEmail(); @@ -115,23 +115,8 @@ class PasswordController extends Controller 'clientauth' => true, ); - if ($key) { - $contact = Contact::where('contact_key', '=', $key)->first(); - if ($contact && ! $contact->is_deleted) { - $account = $contact->account; - $data['contact_key'] = $contact->contact_key; - } else { - // Maybe it's an invitation key - $invitation = Invitation::where('invitation_key', '=', $key)->first(); - if ($invitation && ! $invitation->is_deleted) { - $account = $invitation->account; - $data['contact_key'] = $invitation->contact->contact_key; - } - } - - if ( empty($account)) { - return \Redirect::to('/client/sessionexpired'); - } + if (! session('contact_key')) { + return \Redirect::to('/client/sessionexpired'); } return view('clientauth.reset')->with($data); @@ -148,9 +133,9 @@ class PasswordController extends Controller * * @return \Illuminate\Http\Response */ - public function getReset(Request $request, $key = null, $token = null) + public function getReset(Request $request, $token = null) { - return $this->showResetForm($request, $key, $token); + return $this->showResetForm($request, $token); } /** diff --git a/app/Http/Middleware/DatabaseLookup.php b/app/Http/Middleware/DatabaseLookup.php index 6dba0fca91fd..4aff597ca1db 100644 --- a/app/Http/Middleware/DatabaseLookup.php +++ b/app/Http/Middleware/DatabaseLookup.php @@ -22,6 +22,8 @@ class DatabaseLookup config(['database.default' => $server]); } elseif ($email = $request->email) { LookupUser::setServerByField('email', $email); + } elseif ($code = $request->confirmation_code) { + LookupUser::setServerByField('confirmation_code', $code); } } elseif ($guard == 'api') { if ($token = $request->header('X-Ninja-Token')) { @@ -30,7 +32,7 @@ class DatabaseLookup } elseif ($guard == 'contact') { if ($key = request()->invitation_key) { LookupInvitation::setServerByField('invitation_key', $key); - } elseif ($key = request()->contact_key) { + } elseif ($key = request()->contact_key ?: session('contact_key')) { LookupContact::setServerByField('contact_key', $key); } } elseif ($guard == 'postmark') { diff --git a/app/Http/routes.php b/app/Http/routes.php index 787081ecbbd4..6783e32a1f75 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -91,9 +91,8 @@ Route::get('/login', ['as' => 'login', 'uses' => 'Auth\AuthController@getLoginWr Route::get('/logout', ['as' => 'logout', 'uses' => 'Auth\AuthController@getLogoutWrapper']); Route::get('/recover_password', ['as' => 'forgot', 'uses' => 'Auth\PasswordController@getEmail']); Route::get('/password/reset/{token}', ['as' => 'forgot', 'uses' => 'Auth\PasswordController@getReset']); -Route::get('/user/confirm/{code}', 'UserController@confirm'); - Route::group(['middleware' => ['lookup:user']], function () { + Route::get('/user/confirm/{confirmation_code}', 'UserController@confirm'); Route::post('/login', ['as' => 'login', 'uses' => 'Auth\AuthController@postLoginWrapper']); Route::post('/recover_password', ['as' => 'forgot', 'uses' => 'Auth\PasswordController@postEmail']); Route::post('/password/reset', ['as' => 'forgot', 'uses' => 'Auth\PasswordController@postReset']); @@ -101,13 +100,15 @@ Route::group(['middleware' => ['lookup:user']], function () { // Client auth Route::get('/client/login', ['as' => 'login', 'uses' => 'ClientAuth\AuthController@getLogin']); -Route::post('/client/login', ['as' => 'login', 'uses' => 'ClientAuth\AuthController@postLogin']); Route::get('/client/logout', ['as' => 'logout', 'uses' => 'ClientAuth\AuthController@getLogout']); Route::get('/client/sessionexpired', ['as' => 'logout', 'uses' => 'ClientAuth\AuthController@getSessionExpired']); Route::get('/client/recover_password', ['as' => 'forgot', 'uses' => 'ClientAuth\PasswordController@getEmail']); -Route::post('/client/recover_password', ['as' => 'forgot', 'uses' => 'ClientAuth\PasswordController@postEmail']); -Route::get('/client/password/reset/{invitation_key}/{token}', ['as' => 'forgot', 'uses' => 'ClientAuth\PasswordController@getReset']); -Route::post('/client/password/reset', ['as' => 'forgot', 'uses' => 'ClientAuth\PasswordController@postReset']); +Route::get('/client/password/reset/{token}', ['as' => 'forgot', 'uses' => 'ClientAuth\PasswordController@getReset']); +Route::group(['middleware' => ['lookup:contact']], function () { + Route::post('/client/login', ['as' => 'login', 'uses' => 'ClientAuth\AuthController@postLogin']); + Route::post('/client/recover_password', ['as' => 'forgot', 'uses' => 'ClientAuth\PasswordController@postEmail']); + Route::post('/client/password/reset', ['as' => 'forgot', 'uses' => 'ClientAuth\PasswordController@postReset']); +}); if (Utils::isNinja()) { Route::post('/signup/register', 'AccountController@doRegister'); diff --git a/app/Models/LookupUser.php b/app/Models/LookupUser.php index dc985cde61b8..0dafa976e444 100644 --- a/app/Models/LookupUser.php +++ b/app/Models/LookupUser.php @@ -19,7 +19,7 @@ class LookupUser extends LookupModel 'user_id', ]; - public static function updateUser($accountKey, $userId, $email) + public static function updateUser($accountKey, $userId, $email, $confirmationCode) { if (! env('MULTI_DB_ENABLED')) { return; @@ -36,6 +36,7 @@ class LookupUser extends LookupModel ->firstOrFail(); $lookupUser->email = $email; + $lookupUser->confirmation_code = $confirmationCode; $lookupUser->save(); config(['database.default' => $current]); diff --git a/app/Models/User.php b/app/Models/User.php index 89506050c805..8137eb42242f 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -425,8 +425,8 @@ User::updating(function ($user) { User::onUpdatingUser($user); $dirty = $user->getDirty(); - if (isset($dirty['email'])) { - LookupUser::updateUser($user->account->account_key, $user->id, $user->email); + if (isset($dirty['email']) || isset($dirty['confirmation_code'])) { + LookupUser::updateUser($user->account->account_key, $user->id, $user->email, $user->confirmation_code); } }); diff --git a/database/migrations/2017_04_30_174702_add_multiple_database_support.php b/database/migrations/2017_04_30_174702_add_multiple_database_support.php index d32ce2dcd557..d8bdfb136269 100644 --- a/database/migrations/2017_04_30_174702_add_multiple_database_support.php +++ b/database/migrations/2017_04_30_174702_add_multiple_database_support.php @@ -26,6 +26,7 @@ class AddMultipleDatabaseSupport extends Migration Schema::table('lookup_users', function ($table) { $table->string('email')->change()->nullable()->unique(); + $table->string('confirmation_code')->nullable()->unique(); $table->unsignedInteger('user_id')->index(); }); @@ -49,8 +50,10 @@ class AddMultipleDatabaseSupport extends Migration Schema::rename('lookup_tokens', 'lookup_account_tokens'); DB::table('db_servers')->insert( - ['name' => 'db-ninja-1'], - ['name' => 'db-ninja-2'], + ['name' => 'db-ninja-1'] + ); + DB::table('db_servers')->insert( + ['name' => 'db-ninja-2'] ); } @@ -65,6 +68,10 @@ class AddMultipleDatabaseSupport extends Migration $table->dropColumn('company_id'); }); + Schema::table('lookup_users', function ($table) { + $table->dropColumn('confirmation_code'); + }); + Schema::rename('lookup_account_tokens', 'lookup_tokens'); } } diff --git a/resources/views/clientauth/reset.blade.php b/resources/views/clientauth/reset.blade.php index 73e1e4159508..62f7336eea4d 100644 --- a/resources/views/clientauth/reset.blade.php +++ b/resources/views/clientauth/reset.blade.php @@ -19,7 +19,7 @@ @endif - + @if (Session::has('warning'))
{{ Session::get('warning') }}
@endif @@ -33,7 +33,6 @@ @endif -
{!! Former::password('password')->placeholder(trans('texts.password'))->raw() !!} @@ -41,7 +40,7 @@

{!! Button::success(trans('texts.save'))->large()->submit()->withAttributes(['class' => 'green'])->block() !!}

- + {!! Former::close() !!} -@endsection \ No newline at end of file +@endsection diff --git a/resources/views/emails/client_password.blade.php b/resources/views/emails/client_password.blade.php index 1e732bcfe4ed..12b8267b83be 100644 --- a/resources/views/emails/client_password.blade.php +++ b/resources/views/emails/client_password.blade.php @@ -8,7 +8,7 @@
@include('partials.email_button', [ - 'link' => URL::to("client/password/reset/".session('contact_key')."/{$token}"), + 'link' => URL::to("client/password/reset/{$token}"), 'field' => 'reset', 'color' => '#36c157', ])