diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 33e2c42f8ecd..e788bd0fb71d 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -30,6 +30,7 @@ use App\Http\Middleware\QueryLogging; use App\Http\Middleware\RedirectIfAuthenticated; use App\Http\Middleware\SetDb; use App\Http\Middleware\SetDbByCompanyKey; +use App\Http\Middleware\SetDocumentDb; use App\Http\Middleware\SetDomainNameDb; use App\Http\Middleware\SetEmailDb; use App\Http\Middleware\SetInviteDb; @@ -158,6 +159,7 @@ class Kernel extends HttpKernel 'contact_key_login' => ContactKeyLogin::class, 'check_client_existence' => CheckClientExistence::class, 'user_verified' => UserVerified::class, + 'document_db' => SetDocumentDb::class, ]; diff --git a/app/Http/Middleware/SetDocumentDb.php b/app/Http/Middleware/SetDocumentDb.php new file mode 100644 index 000000000000..83d0d0be88bd --- /dev/null +++ b/app/Http/Middleware/SetDocumentDb.php @@ -0,0 +1,44 @@ + 'Document not set or not found', + 'errors' => new stdClass, + ]; + + if ($request->has('document_hash') && config('ninja.db.multi_db_enabled')) { + + if (! MultiDB::documentFindAndSetDb($request->input('document_hash'))) + return response()->json($error, 400); + + } + + return $next($request); + } +} diff --git a/app/Libraries/MultiDB.php b/app/Libraries/MultiDB.php index 1847592d0f50..8120da08925d 100644 --- a/app/Libraries/MultiDB.php +++ b/app/Libraries/MultiDB.php @@ -206,6 +206,24 @@ class MultiDB return false; } + public static function documentFindAndSetDb($hash) : bool + { + $current_db = config('database.default'); + + //multi-db active + foreach (self::$dbs as $db) { + + if (Document::on($db)->where('hash', $hash)->count() >= 1){ + self::setDb($db); + return true; + } + + } + + self::setDB($current_db); + return false; + } + public static function findAndSetDb($token) :bool { $current_db = config('database.default'); diff --git a/routes/client.php b/routes/client.php index 53e5e2626ad0..b95d5a95ded0 100644 --- a/routes/client.php +++ b/routes/client.php @@ -23,7 +23,7 @@ Route::get('tmp_pdf/{hash}', 'ClientPortal\TempRouteController@index')->name('tm Route::get('client/key_login/{contact_key}', 'ClientPortal\ContactHashLoginController@login')->name('client.contact_login')->middleware(['domain_db','contact_key_login']); Route::get('client/magic_link/{magic_link}', 'ClientPortal\ContactHashLoginController@magicLink')->name('client.contact_magic_link')->middleware(['domain_db','contact_key_login']); -Route::get('documents/{document_hash}', 'ClientPortal\DocumentController@publicDownload')->name('documents.public_download'); +Route::get('documents/{document_hash}', 'ClientPortal\DocumentController@publicDownload')->name('documents.public_download')->middleware(['document_db']); Route::get('error', 'ClientPortal\ContactHashLoginController@errorPage')->name('client.error'); Route::group(['middleware' => ['auth:contact', 'locale', 'check_client_existence','domain_db'], 'prefix' => 'client', 'as' => 'client.'], function () {