@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use App\Services\EvaluationAccess;
|
||||
use App\Services\RequisitionWorkflow;
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
class EnterLocalEvaluation
|
||||
{
|
||||
public function handle(Request $request, Closure $next): Response
|
||||
{
|
||||
$access = app(EvaluationAccess::class);
|
||||
if (! $access->dashboardEntry($request)) {
|
||||
return $next($request);
|
||||
}
|
||||
if ($request->user() === null) {
|
||||
$owner = $access->owner($request);
|
||||
Auth::login($owner, false);
|
||||
$request->session()->regenerate();
|
||||
$request->session()->regenerateToken();
|
||||
$request->session()->forget('url.intended');
|
||||
app(RequisitionWorkflow::class)->audit($owner, 'evaluation.auto_entered', null, null, ['path' => '/dashboard', 'synthetic' => true]);
|
||||
}
|
||||
$response = $next($request);
|
||||
$response->headers->set('Cache-Control', 'private, no-store, max-age=0');
|
||||
$response->headers->set('X-Robots-Tag', 'noindex, nofollow');
|
||||
|
||||
return $response;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class EvaluationAccess
|
||||
{
|
||||
public function dashboardEntry(Request $request): bool
|
||||
{
|
||||
return EvaluationNavigation::local($request) && $request->getHost() === '127.0.0.1'
|
||||
&& $request->getPort() === 8005 && $request->isMethod('GET') && $request->path() === 'dashboard';
|
||||
}
|
||||
|
||||
public function source(Request $request): User
|
||||
{
|
||||
abort_unless(EvaluationNavigation::local($request), 404);
|
||||
$db = DB::connection();
|
||||
abort_unless($db->getDriverName() === 'pgsql' && $db->getConfig('host') === '127.0.0.1'
|
||||
&& preg_match('/^compras_receipts_test_[a-f0-9]{12}$/D', $db->getDatabaseName()), 404);
|
||||
$identity = $db->selectOne('select current_database() as db, current_user as role');
|
||||
abort_unless($identity->db === $db->getDatabaseName() && $identity->role === 'payable_qa_'.substr($identity->db, -12), 404);
|
||||
$source = User::query()->where('email', 'preparacao-obrigacoes@example.test')->firstOrFail();
|
||||
abort_unless($source->tenant_id !== null, 404);
|
||||
|
||||
return $source;
|
||||
}
|
||||
|
||||
public function owner(Request $request): User
|
||||
{
|
||||
$source = $this->source($request);
|
||||
$owner = User::query()->where('tenant_id', $source->tenant_id)->where('email', 'avaliacao-admin@example.test')->firstOrFail();
|
||||
abort_unless($owner->hasFunctions(['admin']) && $owner->email_verified_at !== null, 404);
|
||||
|
||||
return $owner;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user