diff --git a/app/Repositories/Daemon/DaemonBackupRepository.php b/app/Repositories/Daemon/DaemonBackupRepository.php index 898ab23ba..355ebc1f0 100644 --- a/app/Repositories/Daemon/DaemonBackupRepository.php +++ b/app/Repositories/Daemon/DaemonBackupRepository.php @@ -5,7 +5,6 @@ namespace App\Repositories\Daemon; use Webmozart\Assert\Assert; use App\Models\Backup; use App\Models\Server; -use Psr\Http\Message\ResponseInterface; use GuzzleHttp\Exception\TransferException; use App\Exceptions\Http\Connection\DaemonConnectionException; @@ -28,7 +27,7 @@ class DaemonBackupRepository extends DaemonRepository * * @throws \App\Exceptions\Http\Connection\DaemonConnectionException */ - public function backup(Backup $backup): ResponseInterface + public function backup(Backup $backup) { Assert::isInstanceOf($this->server, Server::class); @@ -53,7 +52,7 @@ class DaemonBackupRepository extends DaemonRepository * * @throws \App\Exceptions\Http\Connection\DaemonConnectionException */ - public function restore(Backup $backup, string $url = null, bool $truncate = false): ResponseInterface + public function restore(Backup $backup, string $url = null, bool $truncate = false) { Assert::isInstanceOf($this->server, Server::class); @@ -78,7 +77,7 @@ class DaemonBackupRepository extends DaemonRepository * * @throws \App\Exceptions\Http\Connection\DaemonConnectionException */ - public function delete(Backup $backup): ResponseInterface + public function delete(Backup $backup) { Assert::isInstanceOf($this->server, Server::class); diff --git a/app/Repositories/Daemon/DaemonConfigurationRepository.php b/app/Repositories/Daemon/DaemonConfigurationRepository.php index 703843eb0..c1ea838fb 100644 --- a/app/Repositories/Daemon/DaemonConfigurationRepository.php +++ b/app/Repositories/Daemon/DaemonConfigurationRepository.php @@ -3,7 +3,6 @@ namespace App\Repositories\Daemon; use App\Models\Node; -use Psr\Http\Message\ResponseInterface; use GuzzleHttp\Exception\TransferException; use App\Exceptions\Http\Connection\DaemonConnectionException; @@ -22,7 +21,7 @@ class DaemonConfigurationRepository extends DaemonRepository throw new DaemonConnectionException($exception); } - return json_decode($response->getBody()->__toString(), true); + return $response->json(); } /** @@ -32,7 +31,7 @@ class DaemonConfigurationRepository extends DaemonRepository * * @throws \App\Exceptions\Http\Connection\DaemonConnectionException */ - public function update(Node $node): ResponseInterface + public function update(Node $node) { try { return $this->getHttpClient()->post( diff --git a/app/Repositories/Daemon/DaemonFileRepository.php b/app/Repositories/Daemon/DaemonFileRepository.php index ebcc4465b..a7d4f6e9a 100644 --- a/app/Repositories/Daemon/DaemonFileRepository.php +++ b/app/Repositories/Daemon/DaemonFileRepository.php @@ -2,10 +2,9 @@ namespace App\Repositories\Daemon; -use Illuminate\Support\Arr; +use Carbon\CarbonInterval; use Webmozart\Assert\Assert; use App\Models\Server; -use Psr\Http\Message\ResponseInterface; use GuzzleHttp\Exception\ClientException; use GuzzleHttp\Exception\TransferException; use App\Exceptions\Http\Server\FileSizeTooLargeException; @@ -37,12 +36,12 @@ class DaemonFileRepository extends DaemonRepository throw new DaemonConnectionException($exception); } - $length = (int) Arr::get($response->getHeader('Content-Length'), 0, 0); + $length = $response->header('Content-Length'); if ($notLargerThan && $length > $notLargerThan) { throw new FileSizeTooLargeException(); } - return $response->getBody()->__toString(); + return $response; } /** @@ -51,7 +50,7 @@ class DaemonFileRepository extends DaemonRepository * * @throws \App\Exceptions\Http\Connection\DaemonConnectionException */ - public function putContent(string $path, string $content): ResponseInterface + public function putContent(string $path, string $content) { Assert::isInstanceOf($this->server, Server::class); @@ -88,7 +87,7 @@ class DaemonFileRepository extends DaemonRepository throw new DaemonConnectionException($exception); } - return json_decode($response->getBody(), true); + return $response->json(); } /** @@ -96,7 +95,7 @@ class DaemonFileRepository extends DaemonRepository * * @throws \App\Exceptions\Http\Connection\DaemonConnectionException */ - public function createDirectory(string $name, string $path): ResponseInterface + public function createDirectory(string $name, string $path) { Assert::isInstanceOf($this->server, Server::class); @@ -120,7 +119,7 @@ class DaemonFileRepository extends DaemonRepository * * @throws \App\Exceptions\Http\Connection\DaemonConnectionException */ - public function renameFiles(?string $root, array $files): ResponseInterface + public function renameFiles(?string $root, array $files) { Assert::isInstanceOf($this->server, Server::class); @@ -144,7 +143,7 @@ class DaemonFileRepository extends DaemonRepository * * @throws \App\Exceptions\Http\Connection\DaemonConnectionException */ - public function copyFile(string $location): ResponseInterface + public function copyFile(string $location) { Assert::isInstanceOf($this->server, Server::class); @@ -167,7 +166,7 @@ class DaemonFileRepository extends DaemonRepository * * @throws \App\Exceptions\Http\Connection\DaemonConnectionException */ - public function deleteFiles(?string $root, array $files): ResponseInterface + public function deleteFiles(?string $root, array $files) { Assert::isInstanceOf($this->server, Server::class); @@ -212,7 +211,7 @@ class DaemonFileRepository extends DaemonRepository throw new DaemonConnectionException($exception); } - return json_decode($response->getBody(), true); + return $response->json(); } /** @@ -220,7 +219,7 @@ class DaemonFileRepository extends DaemonRepository * * @throws \App\Exceptions\Http\Connection\DaemonConnectionException */ - public function decompressFile(?string $root, string $file): ResponseInterface + public function decompressFile(?string $root, string $file) { Assert::isInstanceOf($this->server, Server::class); @@ -234,7 +233,7 @@ class DaemonFileRepository extends DaemonRepository ], // Wait for up to 15 minutes for the decompress to be completed when calling this endpoint // since it will likely take quite awhile for large directories. - 'timeout' => 60 * 15, + 'timeout' => (int) CarbonInterval::minutes(15)->totalSeconds, ] ); } catch (TransferException $exception) { @@ -247,7 +246,7 @@ class DaemonFileRepository extends DaemonRepository * * @throws \App\Exceptions\Http\Connection\DaemonConnectionException */ - public function chmodFiles(?string $root, array $files): ResponseInterface + public function chmodFiles(?string $root, array $files) { Assert::isInstanceOf($this->server, Server::class); @@ -271,7 +270,7 @@ class DaemonFileRepository extends DaemonRepository * * @throws \App\Exceptions\Http\Connection\DaemonConnectionException */ - public function pull(string $url, ?string $directory, array $params = []): ResponseInterface + public function pull(string $url, ?string $directory, array $params = []) { Assert::isInstanceOf($this->server, Server::class); diff --git a/app/Repositories/Daemon/DaemonPowerRepository.php b/app/Repositories/Daemon/DaemonPowerRepository.php index db73dfebb..c2a87a57d 100644 --- a/app/Repositories/Daemon/DaemonPowerRepository.php +++ b/app/Repositories/Daemon/DaemonPowerRepository.php @@ -4,7 +4,6 @@ namespace App\Repositories\Daemon; use Webmozart\Assert\Assert; use App\Models\Server; -use Psr\Http\Message\ResponseInterface; use GuzzleHttp\Exception\TransferException; use App\Exceptions\Http\Connection\DaemonConnectionException; @@ -15,7 +14,7 @@ class DaemonPowerRepository extends DaemonRepository * * @throws \App\Exceptions\Http\Connection\DaemonConnectionException */ - public function send(string $action): ResponseInterface + public function send(string $action) { Assert::isInstanceOf($this->server, Server::class); diff --git a/app/Repositories/Daemon/DaemonRepository.php b/app/Repositories/Daemon/DaemonRepository.php index 3d0f2f043..a9ab8cf41 100644 --- a/app/Repositories/Daemon/DaemonRepository.php +++ b/app/Repositories/Daemon/DaemonRepository.php @@ -4,6 +4,8 @@ namespace App\Repositories\Daemon; use GuzzleHttp\Client; use App\Models\Node; +use Illuminate\Http\Client\PendingRequest; +use Illuminate\Support\Facades\Http; use Webmozart\Assert\Assert; use App\Models\Server; use Illuminate\Contracts\Foundation\Application; @@ -48,20 +50,10 @@ abstract class DaemonRepository /** * Return an instance of the Guzzle HTTP Client to be used for requests. */ - public function getHttpClient(array $headers = []): Client + public function getHttpClient(array $headers = []): PendingRequest { Assert::isInstanceOf($this->node, Node::class); - return new Client([ - 'verify' => $this->app->environment('production'), - 'base_uri' => $this->node->getConnectionAddress(), - 'timeout' => config('panel.guzzle.timeout'), - 'connect_timeout' => config('panel.guzzle.connect_timeout'), - 'headers' => array_merge($headers, [ - 'Authorization' => 'Bearer ' . $this->node->getDecryptedKey(), - 'Accept' => 'application/json', - 'Content-Type' => 'application/json', - ]), - ]); + return Http::daemon($this->node, $headers); } } diff --git a/app/Repositories/Daemon/DaemonServerRepository.php b/app/Repositories/Daemon/DaemonServerRepository.php index 3329f8074..1c2dc1ab2 100644 --- a/app/Repositories/Daemon/DaemonServerRepository.php +++ b/app/Repositories/Daemon/DaemonServerRepository.php @@ -27,10 +27,11 @@ class DaemonServerRepository extends DaemonRepository throw new DaemonConnectionException($exception, false); } - return json_decode($response->getBody()->__toString(), true); + return $response->json(); } /** + * Creates a new server on the daemon. * * @throws \App\Exceptions\Http\Connection\DaemonConnectionException */ diff --git a/tests/Integration/Api/Client/Server/Subuser/UpdateSubuserTest.php b/tests/Integration/Api/Client/Server/Subuser/UpdateSubuserTest.php index 11ab52201..3912b057a 100644 --- a/tests/Integration/Api/Client/Server/Subuser/UpdateSubuserTest.php +++ b/tests/Integration/Api/Client/Server/Subuser/UpdateSubuserTest.php @@ -6,6 +6,7 @@ use App\Models\User; use App\Models\Subuser; use App\Models\Permission; use App\Tests\Integration\Api\Client\ClientApiIntegrationTestCase; +use Illuminate\Support\Facades\Http; class UpdateSubuserTest extends ClientApiIntegrationTestCase { @@ -17,6 +18,8 @@ class UpdateSubuserTest extends ClientApiIntegrationTestCase { [$user, $server] = $this->generateTestAccount(['user.read']); + Http::fake(); + $subuser = Subuser::factory() ->for(User::factory()->create()) ->for($server) @@ -65,6 +68,8 @@ class UpdateSubuserTest extends ClientApiIntegrationTestCase 'permissions' => ['control.restart', 'websocket.connect', 'foo.bar'], ]); + Http::fake(); + $this->actingAs($user) ->postJson("/api/client/servers/$server->uuid/users/{$subuser->user->uuid}", [ 'permissions' => [ diff --git a/tests/Integration/Jobs/Schedule/RunTaskJobTest.php b/tests/Integration/Jobs/Schedule/RunTaskJobTest.php index 0db12f7cb..de082823c 100644 --- a/tests/Integration/Jobs/Schedule/RunTaskJobTest.php +++ b/tests/Integration/Jobs/Schedule/RunTaskJobTest.php @@ -93,7 +93,7 @@ class RunTaskJobTest extends IntegrationTestCase $mock->expects('setServer')->with(\Mockery::on(function ($value) use ($server) { return $value instanceof Server && $value->id === $server->id; }))->andReturnSelf(); - $mock->expects('send')->with('start')->andReturn(new Response()); + $mock->expects('send')->with('start'); Bus::dispatchSync(new RunTaskJob($task, $isManualRun));