Document middleware

This commit is contained in:
David Bomba 2021-07-02 07:23:25 +10:00
parent 4bc096c7c6
commit 32698b33d7
4 changed files with 65 additions and 1 deletions

View File

@ -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,
];

View File

@ -0,0 +1,44 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com).
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://www.elastic.co/licensing/elastic-license
*/
namespace App\Http\Middleware;
use App\Libraries\MultiDB;
use Closure;
use Illuminate\Http\Request;
use stdClass;
class SetDocumentDb
{
/**
* Handle an incoming request.
*
* @param Request $request
* @param Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$error = [
'message' => '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);
}
}

View File

@ -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');

View File

@ -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 () {