Multi-db support

This commit is contained in:
Hillel Coren 2017-05-01 17:29:31 +03:00
parent 5baf12ae26
commit b6242d9981
8 changed files with 34 additions and 39 deletions

View File

@ -51,8 +51,8 @@ class PasswordController extends Controller
$data = [ $data = [
'clientauth' => true, 'clientauth' => true,
]; ];
$contactKey = session('contact_key');
if (!$contactKey) { if (! session('contact_key')) {
return \Redirect::to('/client/sessionexpired'); return \Redirect::to('/client/sessionexpired');
} }
@ -104,7 +104,7 @@ class PasswordController extends Controller
* *
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function showResetForm(Request $request, $key = null, $token = null) public function showResetForm(Request $request, $token = null)
{ {
if (is_null($token)) { if (is_null($token)) {
return $this->getEmail(); return $this->getEmail();
@ -115,23 +115,8 @@ class PasswordController extends Controller
'clientauth' => true, 'clientauth' => true,
); );
if ($key) { if (! session('contact_key')) {
$contact = Contact::where('contact_key', '=', $key)->first(); return \Redirect::to('/client/sessionexpired');
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');
}
} }
return view('clientauth.reset')->with($data); return view('clientauth.reset')->with($data);
@ -148,9 +133,9 @@ class PasswordController extends Controller
* *
* @return \Illuminate\Http\Response * @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);
} }
/** /**

View File

@ -22,6 +22,8 @@ class DatabaseLookup
config(['database.default' => $server]); config(['database.default' => $server]);
} elseif ($email = $request->email) { } elseif ($email = $request->email) {
LookupUser::setServerByField('email', $email); LookupUser::setServerByField('email', $email);
} elseif ($code = $request->confirmation_code) {
LookupUser::setServerByField('confirmation_code', $code);
} }
} elseif ($guard == 'api') { } elseif ($guard == 'api') {
if ($token = $request->header('X-Ninja-Token')) { if ($token = $request->header('X-Ninja-Token')) {
@ -30,7 +32,7 @@ class DatabaseLookup
} elseif ($guard == 'contact') { } elseif ($guard == 'contact') {
if ($key = request()->invitation_key) { if ($key = request()->invitation_key) {
LookupInvitation::setServerByField('invitation_key', $key); LookupInvitation::setServerByField('invitation_key', $key);
} elseif ($key = request()->contact_key) { } elseif ($key = request()->contact_key ?: session('contact_key')) {
LookupContact::setServerByField('contact_key', $key); LookupContact::setServerByField('contact_key', $key);
} }
} elseif ($guard == 'postmark') { } elseif ($guard == 'postmark') {

View File

@ -91,9 +91,8 @@ Route::get('/login', ['as' => 'login', 'uses' => 'Auth\AuthController@getLoginWr
Route::get('/logout', ['as' => 'logout', 'uses' => 'Auth\AuthController@getLogoutWrapper']); Route::get('/logout', ['as' => 'logout', 'uses' => 'Auth\AuthController@getLogoutWrapper']);
Route::get('/recover_password', ['as' => 'forgot', 'uses' => 'Auth\PasswordController@getEmail']); Route::get('/recover_password', ['as' => 'forgot', 'uses' => 'Auth\PasswordController@getEmail']);
Route::get('/password/reset/{token}', ['as' => 'forgot', 'uses' => 'Auth\PasswordController@getReset']); 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::group(['middleware' => ['lookup:user']], function () {
Route::get('/user/confirm/{confirmation_code}', 'UserController@confirm');
Route::post('/login', ['as' => 'login', 'uses' => 'Auth\AuthController@postLoginWrapper']); Route::post('/login', ['as' => 'login', 'uses' => 'Auth\AuthController@postLoginWrapper']);
Route::post('/recover_password', ['as' => 'forgot', 'uses' => 'Auth\PasswordController@postEmail']); Route::post('/recover_password', ['as' => 'forgot', 'uses' => 'Auth\PasswordController@postEmail']);
Route::post('/password/reset', ['as' => 'forgot', 'uses' => 'Auth\PasswordController@postReset']); Route::post('/password/reset', ['as' => 'forgot', 'uses' => 'Auth\PasswordController@postReset']);
@ -101,13 +100,15 @@ Route::group(['middleware' => ['lookup:user']], function () {
// Client auth // Client auth
Route::get('/client/login', ['as' => 'login', 'uses' => 'ClientAuth\AuthController@getLogin']); 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/logout', ['as' => 'logout', 'uses' => 'ClientAuth\AuthController@getLogout']);
Route::get('/client/sessionexpired', ['as' => 'logout', 'uses' => 'ClientAuth\AuthController@getSessionExpired']); Route::get('/client/sessionexpired', ['as' => 'logout', 'uses' => 'ClientAuth\AuthController@getSessionExpired']);
Route::get('/client/recover_password', ['as' => 'forgot', 'uses' => 'ClientAuth\PasswordController@getEmail']); 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/{token}', ['as' => 'forgot', 'uses' => 'ClientAuth\PasswordController@getReset']);
Route::get('/client/password/reset/{invitation_key}/{token}', ['as' => 'forgot', 'uses' => 'ClientAuth\PasswordController@getReset']); Route::group(['middleware' => ['lookup:contact']], function () {
Route::post('/client/password/reset', ['as' => 'forgot', 'uses' => 'ClientAuth\PasswordController@postReset']); 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()) { if (Utils::isNinja()) {
Route::post('/signup/register', 'AccountController@doRegister'); Route::post('/signup/register', 'AccountController@doRegister');

View File

@ -19,7 +19,7 @@ class LookupUser extends LookupModel
'user_id', 'user_id',
]; ];
public static function updateUser($accountKey, $userId, $email) public static function updateUser($accountKey, $userId, $email, $confirmationCode)
{ {
if (! env('MULTI_DB_ENABLED')) { if (! env('MULTI_DB_ENABLED')) {
return; return;
@ -36,6 +36,7 @@ class LookupUser extends LookupModel
->firstOrFail(); ->firstOrFail();
$lookupUser->email = $email; $lookupUser->email = $email;
$lookupUser->confirmation_code = $confirmationCode;
$lookupUser->save(); $lookupUser->save();
config(['database.default' => $current]); config(['database.default' => $current]);

View File

@ -425,8 +425,8 @@ User::updating(function ($user) {
User::onUpdatingUser($user); User::onUpdatingUser($user);
$dirty = $user->getDirty(); $dirty = $user->getDirty();
if (isset($dirty['email'])) { if (isset($dirty['email']) || isset($dirty['confirmation_code'])) {
LookupUser::updateUser($user->account->account_key, $user->id, $user->email); LookupUser::updateUser($user->account->account_key, $user->id, $user->email, $user->confirmation_code);
} }
}); });

View File

@ -26,6 +26,7 @@ class AddMultipleDatabaseSupport extends Migration
Schema::table('lookup_users', function ($table) { Schema::table('lookup_users', function ($table) {
$table->string('email')->change()->nullable()->unique(); $table->string('email')->change()->nullable()->unique();
$table->string('confirmation_code')->nullable()->unique();
$table->unsignedInteger('user_id')->index(); $table->unsignedInteger('user_id')->index();
}); });
@ -49,8 +50,10 @@ class AddMultipleDatabaseSupport extends Migration
Schema::rename('lookup_tokens', 'lookup_account_tokens'); Schema::rename('lookup_tokens', 'lookup_account_tokens');
DB::table('db_servers')->insert( DB::table('db_servers')->insert(
['name' => 'db-ninja-1'], ['name' => 'db-ninja-1']
['name' => 'db-ninja-2'], );
DB::table('db_servers')->insert(
['name' => 'db-ninja-2']
); );
} }
@ -65,6 +68,10 @@ class AddMultipleDatabaseSupport extends Migration
$table->dropColumn('company_id'); $table->dropColumn('company_id');
}); });
Schema::table('lookup_users', function ($table) {
$table->dropColumn('confirmation_code');
});
Schema::rename('lookup_account_tokens', 'lookup_tokens'); Schema::rename('lookup_account_tokens', 'lookup_tokens');
} }
} }

View File

@ -19,7 +19,7 @@
</div> </div>
@endif @endif
<!-- if there are login errors, show them here --> <!-- if there are login errors, show them here -->
@if (Session::has('warning')) @if (Session::has('warning'))
<div class="alert alert-warning">{{ Session::get('warning') }}</div> <div class="alert alert-warning">{{ Session::get('warning') }}</div>
@endif @endif
@ -33,7 +33,6 @@
@endif @endif
<input type="hidden" name="token" value="{{{ $token }}}"> <input type="hidden" name="token" value="{{{ $token }}}">
<input type="hidden" name="contact_key" value="{{{ $contact_key }}}">
<div> <div>
{!! Former::password('password')->placeholder(trans('texts.password'))->raw() !!} {!! Former::password('password')->placeholder(trans('texts.password'))->raw() !!}
@ -41,7 +40,7 @@
</div> </div>
<p>{!! Button::success(trans('texts.save'))->large()->submit()->withAttributes(['class' => 'green'])->block() !!}</p> <p>{!! Button::success(trans('texts.save'))->large()->submit()->withAttributes(['class' => 'green'])->block() !!}</p>
{!! Former::close() !!} {!! Former::close() !!}
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
@ -49,4 +48,4 @@
$('#password').focus(); $('#password').focus();
}) })
</script> </script>
@endsection @endsection

View File

@ -8,7 +8,7 @@
<div> <div>
<center> <center>
@include('partials.email_button', [ @include('partials.email_button', [
'link' => URL::to("client/password/reset/".session('contact_key')."/{$token}"), 'link' => URL::to("client/password/reset/{$token}"),
'field' => 'reset', 'field' => 'reset',
'color' => '#36c157', 'color' => '#36c157',
]) ])