From 97c2a358688991c2f334b72ea0dc8daebb49ae06 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Sun, 30 Apr 2017 22:52:05 +0300 Subject: [PATCH] Multi-db support --- app/Constants.php | 1 + app/Http/Controllers/Auth/AuthController.php | 3 +++ app/Http/Kernel.php | 1 + app/Http/routes.php | 8 ++++---- app/Models/LookupAccount.php | 5 +++++ app/Models/LookupCompany.php | 5 +++++ app/Models/LookupModel.php | 9 +++++++++ app/Models/LookupUser.php | 16 ++++++++++++++++ 8 files changed, 44 insertions(+), 4 deletions(-) diff --git a/app/Constants.php b/app/Constants.php index 23ddc079c549..954997211160 100644 --- a/app/Constants.php +++ b/app/Constants.php @@ -229,6 +229,7 @@ if (! defined('APP_NAME')) { define('SESSION_REFERRAL_CODE', 'referralCode'); define('SESSION_LEFT_SIDEBAR', 'showLeftSidebar'); define('SESSION_RIGHT_SIDEBAR', 'showRightSidebar'); + define('SESSION_DB_SERVER', 'dbServer'); define('SESSION_LAST_REQUEST_PAGE', 'SESSION_LAST_REQUEST_PAGE'); define('SESSION_LAST_REQUEST_TIME', 'SESSION_LAST_REQUEST_TIME'); diff --git a/app/Http/Controllers/Auth/AuthController.php b/app/Http/Controllers/Auth/AuthController.php index 0fb64d2d8ffd..1126dc7d8bd3 100644 --- a/app/Http/Controllers/Auth/AuthController.php +++ b/app/Http/Controllers/Auth/AuthController.php @@ -13,6 +13,7 @@ use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers; use Illuminate\Http\Request; use Session; use Utils; +use App\Models\LookupUser; class AuthController extends Controller { @@ -141,6 +142,8 @@ class AuthController extends Controller */ public function postLoginWrapper(Request $request) { + LookupUser::loadEmail($request->input('email')); + $userId = Auth::check() ? Auth::user()->id : null; $user = User::where('email', '=', $request->input('email'))->first(); diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index e508f8d0c551..78685293b9d1 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -35,5 +35,6 @@ class Kernel extends HttpKernel 'guest' => 'App\Http\Middleware\RedirectIfAuthenticated', 'api' => 'App\Http\Middleware\ApiCheck', 'cors' => '\Barryvdh\Cors\HandleCors', + 'lookup' => 'App\Http\Middleware\DatabaseLookup', ]; } diff --git a/app/Http/routes.php b/app/Http/routes.php index 8506828fee72..5fc0e8b5799b 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -25,7 +25,7 @@ Route::get('/keep_alive', 'HomeController@keepAlive'); Route::post('/get_started', 'AccountController@getStarted'); // Client visible pages -Route::group(['middleware' => 'auth:client'], function () { +Route::group(['middleware' => ['auth:client', 'lookup']], function () { Route::get('view/{invitation_key}', 'ClientPortalController@view'); Route::get('download/{invitation_key}', 'ClientPortalController@download'); Route::put('sign/{invitation_key}', 'ClientPortalController@sign'); @@ -117,7 +117,7 @@ if (Utils::isTravis()) { Route::get('/check_data', 'AppController@checkData'); } -Route::group(['middleware' => 'auth:user'], function () { +Route::group(['middleware' => ['auth:user', 'lookup']], function () { Route::get('dashboard', 'DashboardController@index'); Route::get('dashboard_chart_data/{group_by}/{start_date}/{end_date}/{currency_id}/{include_expenses}', 'DashboardController@chartData'); Route::get('set_entity_filter/{entity_type}/{filter?}', 'AccountController@setEntityFilter'); @@ -230,7 +230,7 @@ Route::group(['middleware' => 'auth:user'], function () { }); Route::group([ - 'middleware' => ['auth:user', 'permissions.required'], + 'middleware' => ['auth:user', 'permissions.required', 'lookup'], 'permissions' => 'admin', ], function () { Route::get('api/users', 'UserController@getDatatable'); @@ -295,7 +295,7 @@ Route::group([ Route::get('self-update/download', 'SelfUpdateController@download'); }); -Route::group(['middleware' => 'auth:user'], function () { +Route::group(['middleware' => ['auth:user', 'lookup']], function () { Route::get('settings/{section?}', 'AccountController@showSection'); }); diff --git a/app/Models/LookupAccount.php b/app/Models/LookupAccount.php index 935c3f6423df..fcb30596ce0c 100644 --- a/app/Models/LookupAccount.php +++ b/app/Models/LookupAccount.php @@ -17,4 +17,9 @@ class LookupAccount extends LookupModel 'account_key', ]; + public function lookupCompany() + { + return $this->belongsTo('App\Models\LookupCompany'); + } + } diff --git a/app/Models/LookupCompany.php b/app/Models/LookupCompany.php index dd07075247d2..a5ba316fad4b 100644 --- a/app/Models/LookupCompany.php +++ b/app/Models/LookupCompany.php @@ -17,4 +17,9 @@ class LookupCompany extends LookupModel 'company_id', ]; + public function dbServer() + { + return $this->belongsTo('App\Models\DbServer'); + } + } diff --git a/app/Models/LookupModel.php b/app/Models/LookupModel.php index 914be6c1501d..d690247ca616 100644 --- a/app/Models/LookupModel.php +++ b/app/Models/LookupModel.php @@ -14,6 +14,10 @@ class LookupModel extends Eloquent */ public $timestamps = false; + public function lookupAccount() + { + return $this->belongsTo('App\Models\LookupAccount'); + } public static function createNew($accountKey, $data) { @@ -36,4 +40,9 @@ class LookupModel extends Eloquent config(['database.default' => $current]); } + + public function getDbServer() + { + return $this->lookupAccount->lookupCompany->dbServer->name; + } } diff --git a/app/Models/LookupUser.php b/app/Models/LookupUser.php index 3cb8ce288e45..f5c72596025b 100644 --- a/app/Models/LookupUser.php +++ b/app/Models/LookupUser.php @@ -18,4 +18,20 @@ class LookupUser extends LookupModel 'user_id', ]; + public static function loadEmail($email) + { + if (! env('MULTI_DB_ENABLED')) { + return; + } + + $current = config('database.default'); + config(['database.default' => DB_NINJA_LOOKUP]); + + if ($lookupUser = static::whereEmail($email)->first()) { + session(['SESSION_DB_SERVER' => $lookupUser->getDbServer()]); + } + + config(['database.default' => $current]); + + } }