postIssue($url, $repo, $token, $title, $body, $sudo); if ($sudo !== null && $response->failed()) { Log::warning('Création du ticket au nom de l\'utilisateur refusée, repli sur le compte de service.', [ 'sudo' => $sudo, 'status' => $response->status(), ]); $response = $this->postIssue($url, $repo, $token, $title, $body, null); } } catch (\Throwable $e) { Log::error('Appel API Gitea impossible : '.$e->getMessage()); return false; } if ($response->failed()) { Log::error('Création du ticket Gitea échouée', [ 'status' => $response->status(), 'body' => $response->body(), ]); return false; } return true; } private function postIssue( string $url, string $repo, string $token, string $title, string $body, ?string $sudo, ): Response { // Gitea attend l'en-tête "Authorization: token ". $request = Http::withToken($token, 'token') ->acceptJson() ->timeout(10); if ($sudo !== null) { $request = $request->withHeaders(['Sudo' => $sudo]); } return $request->post("{$url}/api/v1/repos/{$repo}/issues", [ 'title' => $title, 'body' => $body, ]); } }