Author: Shivam Mathur (shivammathur)
Date: 2024-07-08T06:55:01+05:30
Commit:
https://github.com/php/web-downloads/commit/132705467bf3098fccff16fedc57a4c075bdfe0e
Raw diff:
https://github.com/php/web-downloads/commit/132705467bf3098fccff16fedc57a4c075bdfe0e.diff
Fix calling pecl script
Fix routing and validator
Changed paths:
M routes.php
M src/PeclHandler.php
M src/PhpHandler.php
M src/Validator.php
M src/WinlibsHandler.php
M src/scripts/pecl.sh
Diff:
diff --git a/routes.php b/routes.php
index dbd8441..624f643 100644
--- a/routes.php
+++ b/routes.php
@@ -1,6 +1,9 @@
<?php
use App\IndexHandler;
+use App\PeclHandler;
+use App\PhpHandler;
+use App\WinlibsHandler;
use App\Router;
$router = new Router();
diff --git a/src/PeclHandler.php b/src/PeclHandler.php
index 9dadf7f..4bcab51 100644
--- a/src/PeclHandler.php
+++ b/src/PeclHandler.php
@@ -1,6 +1,7 @@
<?php
-use App\Validator;
+namespace App;
+
use Symfony\Component\Process\Exception\ProcessFailedException;
use Symfony\Component\Process\Process;
@@ -13,28 +14,37 @@ public function handle(): void
{
$data = json_decode(file_get_contents('php://input'), true);
- if(!$this->validate($data)) {
- http_response_code(400);
- echo 'Invalid request';
- } else {
+ if($this->validate($data)) {
$this->execute($data);
}
}
private function validate(mixed $data): bool
{
- return (new Validator)->validate($data, [
+ $validator = new Validator([
'url' => 'required|url',
'extension' => 'required|string',
'ref' => 'required|string',
]);
+
+ $validator->validate($data);
+
+ $valid = $validator->isValid();
+
+ if(!$valid) {
+ http_response_code(400);
+ echo 'Invalid request: ' . $validator;
+ }
+
+ return $valid;
}
private function execute(array $data): void
{
extract($data);
-
- $process = new Process(['sudo -u $SCRIPTS_USER bash', $this->script,
$url, $extension, $ref, $token ?? '']);
+ $SCRIPTS_USER = $_ENV['SCRIPTS_USER'];
+ $this->script = __DIR__ . "/scripts/$this->script";
+ $process = new Process(['sudo', '-u', $SCRIPTS_USER, 'bash',
$this->script, $extension, $ref, $url, $token ?? '']);
try {
$process->mustRun(function ($type, $buffer): void {
diff --git a/src/PhpHandler.php b/src/PhpHandler.php
index 61ffbc3..320eb76 100644
--- a/src/PhpHandler.php
+++ b/src/PhpHandler.php
@@ -1,5 +1,7 @@
<?php
+namespace App;
+
class PhpHandler
{
diff --git a/src/Validator.php b/src/Validator.php
index 345ac19..d63db75 100644
--- a/src/Validator.php
+++ b/src/Validator.php
@@ -4,13 +4,23 @@
class Validator
{
- protected array $errors = [];
+ function __construct
+ (
+ protected array $rules,
+ protected array $errors = [],
+ protected bool $valid = false
+ )
+ {
+ //
+ }
+
- public function validate(array $data, array $rules): bool
+
+ public function validate(array $data): void
{
$this->errors = [];
- foreach ($rules as $field => $ruleString) {
+ foreach ($this->rules as $field => $ruleString) {
$rulesArray = explode('|', $ruleString);
foreach ($rulesArray as $rule) {
$ruleParts = explode(':', $rule);
@@ -23,7 +33,12 @@ public function validate(array $data, array $rules): bool
}
}
- return empty($this->errors);
+ $this->valid = empty($this->errors);
+ }
+
+ public function isValid(): bool
+ {
+ return $this->valid;
}
public function errors(): array
@@ -31,6 +46,17 @@ public function errors(): array
return $this->errors;
}
+ public function __toString(): string
+ {
+ $string = PHP_EOL;
+ foreach ($this->errors as $field => $errors) {
+ foreach ($errors as $error) {
+ $string .= "$field: $error" . PHP_EOL;
+ }
+ }
+ return $string;
+ }
+
protected function required($value): bool
{
return !is_null($value) && $value !== '';
diff --git a/src/WinlibsHandler.php b/src/WinlibsHandler.php
index 8af13c8..ee0b918 100644
--- a/src/WinlibsHandler.php
+++ b/src/WinlibsHandler.php
@@ -1,5 +1,7 @@
<?php
+namespace App;
+
class WinlibsHandler
{
diff --git a/src/scripts/pecl.sh b/src/scripts/pecl.sh
index 520430c..32c4832 100644
--- a/src/scripts/pecl.sh
+++ b/src/scripts/pecl.sh
@@ -18,13 +18,15 @@ for tool in curl unzip; do
done
zip_file="/tmp/$extension-$ref.zip"
+dest_dir="${BUILDS_DIRECTORY:?}/pecl/releases"
fetch_artifact "$zip_file" "$url" "$token"
if [[ -e "$zip_file" && "$(file --mime-type -b "$zip_file")" =
"application/zip" ]]; then
- if ! unzip "$zip_file" -d "${BUILDS_DIRECTORY:?}"/pecl/releases/; then
+ mkdir -p "$dest_dir"
+ if ! unzip -o "$zip_file" -d "$dest_dir"; then
echo "Failed to unzip the build"
exit 1
fi
else
echo "Failed to fetch the build"
exit 1
-fi
\ No newline at end of file
+fi