commit8
tests / ci (push) Canceled after 0s

This commit is contained in:
2026-10-30 12:32:57 +02:00
parent fa0e656214
commit 6d14b4e6f0
10 changed files with 146 additions and 15 deletions
@@ -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;
}
}
+39
View File
@@ -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;
}
}