new deployer command
This commit is contained in:
@@ -38,34 +38,31 @@ final class GitWebhookController
|
||||
$event = $this->eventName($request, $provider);
|
||||
$deliveryId = $this->deliveryId($request, $provider);
|
||||
$rawPayload = $request->getContent();
|
||||
$status = 202;
|
||||
$payload = [];
|
||||
|
||||
if (! $repository->is_active) {
|
||||
$result = $this->rejectedResult('Repository is inactive.');
|
||||
$service->logWebhook($repository, $provider, $deliveryId, $event, $result);
|
||||
|
||||
return response()->json($result, 403);
|
||||
}
|
||||
|
||||
if (! $this->hasValidSignature($request, $repository, $provider, $rawPayload)) {
|
||||
$status = 403;
|
||||
} elseif (! $this->hasValidSignature($request, $repository, $provider, $rawPayload)) {
|
||||
$result = $this->rejectedResult(self::SIGNATURE_FAILED);
|
||||
$service->logWebhook($repository, $provider, $deliveryId, $event, $result);
|
||||
|
||||
return response()->json($result, 403);
|
||||
$status = 403;
|
||||
} else {
|
||||
try {
|
||||
/** @var array<string, mixed> $payload */
|
||||
$payload = json_decode($rawPayload, true, 512, JSON_THROW_ON_ERROR);
|
||||
$result = $service->ingest($repository, $payload, $provider, $deliveryId, $event);
|
||||
} catch (JsonException) {
|
||||
$result = $this->rejectedResult('Invalid JSON webhook payload.');
|
||||
$status = 400;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
/** @var array<string, mixed> $payload */
|
||||
$payload = json_decode($rawPayload, true, 512, JSON_THROW_ON_ERROR);
|
||||
} catch (JsonException) {
|
||||
$result = $this->rejectedResult('Invalid JSON webhook payload.');
|
||||
$service->logWebhook($repository, $provider, $deliveryId, $event, $result);
|
||||
|
||||
return response()->json($result, 400);
|
||||
if ($status !== 202) {
|
||||
$service->logWebhook($repository, $provider, $deliveryId, $event, $result, $payload);
|
||||
}
|
||||
|
||||
$result = $service->ingest($repository, $payload, $provider, $deliveryId, $event);
|
||||
|
||||
return response()->json($result, 202);
|
||||
return response()->json($result, $status);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -77,33 +74,34 @@ final class GitWebhookController
|
||||
$event = $this->eventName($request, $provider);
|
||||
$deliveryId = $this->deliveryId($request, $provider);
|
||||
$rawPayload = $request->getContent();
|
||||
$status = 202;
|
||||
$repository = null;
|
||||
|
||||
try {
|
||||
/** @var array<string, mixed> $payload */
|
||||
$payload = json_decode($rawPayload, true, 512, JSON_THROW_ON_ERROR);
|
||||
$repository = $this->repositoryForGiteaPayload($payload);
|
||||
|
||||
if (! $repository instanceof GitRepository) {
|
||||
$result = $this->rejectedResult('No active Helpdesk Git repository matched the Gitea webhook payload.');
|
||||
$status = 404;
|
||||
} elseif (! $this->hasValidGiteaSecurity($request, $repository, $provider, $rawPayload)) {
|
||||
$result = $this->rejectedResult(self::SIGNATURE_FAILED);
|
||||
$status = 403;
|
||||
} else {
|
||||
$result = $service->ingest($repository, $payload, $provider, $deliveryId, $event);
|
||||
}
|
||||
} catch (JsonException) {
|
||||
return response()->json($this->rejectedResult('Invalid JSON webhook payload.'), 400);
|
||||
$payload = [];
|
||||
$result = $this->rejectedResult('Invalid JSON webhook payload.');
|
||||
$status = 400;
|
||||
}
|
||||
|
||||
$repository = $this->repositoryForGiteaPayload($payload);
|
||||
|
||||
if (! $repository instanceof GitRepository) {
|
||||
return response()->json(
|
||||
$this->rejectedResult('No active Helpdesk Git repository matched the Gitea webhook payload.'),
|
||||
404,
|
||||
);
|
||||
}
|
||||
|
||||
if (! $this->hasValidGiteaSecurity($request, $repository, $provider, $rawPayload)) {
|
||||
$result = $this->rejectedResult(self::SIGNATURE_FAILED);
|
||||
if ($repository instanceof GitRepository && $status !== 202) {
|
||||
$service->logWebhook($repository, $provider, $deliveryId, $event, $result, $payload);
|
||||
|
||||
return response()->json($result, 403);
|
||||
}
|
||||
|
||||
$result = $service->ingest($repository, $payload, $provider, $deliveryId, $event);
|
||||
|
||||
return response()->json($result, 202);
|
||||
return response()->json($result, $status);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -235,31 +233,27 @@ final class GitWebhookController
|
||||
->where('is_active', true)
|
||||
->whereRaw('LOWER(provider) IN (?, ?)', ['gitea', 'git'])
|
||||
->get();
|
||||
$matchedRepository = null;
|
||||
|
||||
if ($repositories->isEmpty()) {
|
||||
Log::warning('Helpdesk Gitea webhook received but no active Gitea/git repository is configured.');
|
||||
} else {
|
||||
$normalisedPayloadValues = $this->normalisedPayloadRepositoryValues($payload);
|
||||
$matchedRepository = $repositories->first(
|
||||
fn (GitRepository $repository): bool => $this->repositoryMatchesPayload($repository, $normalisedPayloadValues),
|
||||
);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
$normalisedPayloadValues = $this->normalisedPayloadRepositoryValues($payload);
|
||||
|
||||
foreach ($repositories as $repository) {
|
||||
if ($this->repositoryMatchesPayload($repository, $normalisedPayloadValues)) {
|
||||
return $repository;
|
||||
if (! $matchedRepository instanceof GitRepository && $repositories->count() === 1) {
|
||||
$matchedRepository = $repositories->first();
|
||||
} elseif (! $matchedRepository instanceof GitRepository) {
|
||||
Log::warning('Helpdesk Gitea webhook did not match any configured repository.', [
|
||||
'payload_repository' => Arr::get($payload, 'repository.full_name') ?: Arr::get($payload, 'repository.clone_url') ?: Arr::get($payload, 'repository.html_url'),
|
||||
'configured_repository_count' => $repositories->count(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
if ($repositories->count() === 1) {
|
||||
return $repositories->first();
|
||||
}
|
||||
|
||||
Log::warning('Helpdesk Gitea webhook did not match any configured repository.', [
|
||||
'payload_repository' => Arr::get($payload, 'repository.full_name') ?: Arr::get($payload, 'repository.clone_url') ?: Arr::get($payload, 'repository.html_url'),
|
||||
'configured_repository_count' => $repositories->count(),
|
||||
]);
|
||||
|
||||
return null;
|
||||
return $matchedRepository instanceof GitRepository ? $matchedRepository : null;
|
||||
}
|
||||
|
||||
/** @param array<string, mixed> $payload
|
||||
|
||||
Reference in New Issue
Block a user