|
1 | 1 | <?php |
2 | | -/** |
3 | | - * Pterodactyl - Panel |
4 | | - * Copyright (c) 2015 - 2017 Dane Everitt <dane@daneeveritt.com>. |
5 | | - * |
6 | | - * This software is licensed under the terms of the MIT license. |
7 | | - * https://opensource.org/licenses/MIT |
8 | | - */ |
9 | 2 |
|
10 | 3 | namespace Pterodactyl\Services\Servers; |
11 | 4 |
|
12 | | -use Illuminate\Log\Writer; |
13 | 5 | use Pterodactyl\Models\Server; |
14 | | -use GuzzleHttp\Exception\RequestException; |
15 | 6 | use Illuminate\Database\ConnectionInterface; |
16 | | -use Pterodactyl\Exceptions\DisplayException; |
| 7 | +use Pterodactyl\Traits\Services\ReturnsUpdatedModels; |
17 | 8 | use Pterodactyl\Repositories\Eloquent\ServerRepository; |
18 | 9 | use Pterodactyl\Services\DaemonKeys\DaemonKeyCreationService; |
19 | 10 | use Pterodactyl\Services\DaemonKeys\DaemonKeyDeletionService; |
20 | | -use Pterodactyl\Repositories\Daemon\ServerRepository as DaemonServerRepository; |
21 | 11 |
|
22 | 12 | class DetailsModificationService |
23 | 13 | { |
24 | | - /** |
25 | | - * @var \Illuminate\Database\ConnectionInterface |
26 | | - */ |
27 | | - protected $connection; |
| 14 | + use ReturnsUpdatedModels; |
28 | 15 |
|
29 | 16 | /** |
30 | | - * @var \Pterodactyl\Repositories\Daemon\ServerRepository |
| 17 | + * @var \Illuminate\Database\ConnectionInterface |
31 | 18 | */ |
32 | | - protected $daemonServerRepository; |
| 19 | + private $connection; |
33 | 20 |
|
34 | 21 | /** |
35 | 22 | * @var \Pterodactyl\Services\DaemonKeys\DaemonKeyCreationService |
36 | 23 | */ |
37 | | - protected $keyCreationService; |
| 24 | + private $keyCreationService; |
38 | 25 |
|
39 | 26 | /** |
40 | 27 | * @var \Pterodactyl\Services\DaemonKeys\DaemonKeyDeletionService |
41 | 28 | */ |
42 | | - protected $keyDeletionService; |
| 29 | + private $keyDeletionService; |
43 | 30 |
|
44 | 31 | /** |
45 | 32 | * @var \Pterodactyl\Repositories\Eloquent\ServerRepository |
46 | 33 | */ |
47 | | - protected $repository; |
48 | | - |
49 | | - /** |
50 | | - * @var \Illuminate\Log\Writer |
51 | | - */ |
52 | | - protected $writer; |
| 34 | + private $repository; |
53 | 35 |
|
54 | 36 | /** |
55 | 37 | * DetailsModificationService constructor. |
56 | 38 | * |
57 | 39 | * @param \Illuminate\Database\ConnectionInterface $connection |
58 | 40 | * @param \Pterodactyl\Services\DaemonKeys\DaemonKeyCreationService $keyCreationService |
59 | 41 | * @param \Pterodactyl\Services\DaemonKeys\DaemonKeyDeletionService $keyDeletionService |
60 | | - * @param \Pterodactyl\Repositories\Daemon\ServerRepository $daemonServerRepository |
61 | 42 | * @param \Pterodactyl\Repositories\Eloquent\ServerRepository $repository |
62 | | - * @param \Illuminate\Log\Writer $writer |
63 | 43 | */ |
64 | 44 | public function __construct( |
65 | 45 | ConnectionInterface $connection, |
66 | 46 | DaemonKeyCreationService $keyCreationService, |
67 | 47 | DaemonKeyDeletionService $keyDeletionService, |
68 | | - DaemonServerRepository $daemonServerRepository, |
69 | | - ServerRepository $repository, |
70 | | - Writer $writer |
| 48 | + ServerRepository $repository |
71 | 49 | ) { |
72 | 50 | $this->connection = $connection; |
73 | | - $this->daemonServerRepository = $daemonServerRepository; |
74 | 51 | $this->keyCreationService = $keyCreationService; |
75 | 52 | $this->keyDeletionService = $keyDeletionService; |
76 | 53 | $this->repository = $repository; |
77 | | - $this->writer = $writer; |
78 | 54 | } |
79 | 55 |
|
80 | 56 | /** |
81 | 57 | * Update the details for a single server instance. |
82 | 58 | * |
83 | | - * @param int|\Pterodactyl\Models\Server $server |
84 | | - * @param array $data |
| 59 | + * @param \Pterodactyl\Models\Server $server |
| 60 | + * @param array $data |
| 61 | + * @return bool|\Pterodactyl\Models\Server |
85 | 62 | * |
86 | 63 | * @throws \Pterodactyl\Exceptions\DisplayException |
87 | 64 | * @throws \Pterodactyl\Exceptions\Model\DataValidationException |
88 | 65 | * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException |
89 | 66 | */ |
90 | | - public function edit($server, array $data) |
| 67 | + public function handle(Server $server, array $data) |
91 | 68 | { |
92 | | - if (! $server instanceof Server) { |
93 | | - $server = $this->repository->find($server); |
94 | | - } |
95 | | - |
96 | 69 | $this->connection->beginTransaction(); |
97 | | - $this->repository->withoutFreshModel()->update($server->id, [ |
| 70 | + |
| 71 | + $response = $this->repository->setFreshModel($this->getUpdatedModel())->update($server->id, [ |
98 | 72 | 'owner_id' => array_get($data, 'owner_id'), |
99 | 73 | 'name' => array_get($data, 'name'), |
100 | 74 | 'description' => array_get($data, 'description', ''), |
101 | 75 | ], true, true); |
102 | 76 |
|
103 | | - if (array_get($data, 'owner_id') != $server->owner_id) { |
| 77 | + if ((int) array_get($data, 'owner_id', 0) !== (int) $server->owner_id) { |
104 | 78 | $this->keyDeletionService->handle($server, $server->owner_id); |
105 | 79 | $this->keyCreationService->handle($server->id, array_get($data, 'owner_id')); |
106 | 80 | } |
107 | 81 |
|
108 | 82 | $this->connection->commit(); |
109 | | - } |
110 | 83 |
|
111 | | - /** |
112 | | - * Update the docker container for a specified server. |
113 | | - * |
114 | | - * @param int|\Pterodactyl\Models\Server $server |
115 | | - * @param string $image |
116 | | - * |
117 | | - * @throws \Pterodactyl\Exceptions\DisplayException |
118 | | - * @throws \Pterodactyl\Exceptions\Model\DataValidationException |
119 | | - * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException |
120 | | - */ |
121 | | - public function setDockerImage($server, $image) |
122 | | - { |
123 | | - if (! $server instanceof Server) { |
124 | | - $server = $this->repository->find($server); |
125 | | - } |
126 | | - |
127 | | - $this->connection->beginTransaction(); |
128 | | - $this->repository->withoutFreshModel()->update($server->id, ['image' => $image]); |
129 | | - |
130 | | - try { |
131 | | - $this->daemonServerRepository->setServer($server)->update([ |
132 | | - 'build' => [ |
133 | | - 'image' => $image, |
134 | | - ], |
135 | | - ]); |
136 | | - } catch (RequestException $exception) { |
137 | | - $this->connection->rollBack(); |
138 | | - $response = $exception->getResponse(); |
139 | | - $this->writer->warning($exception); |
140 | | - |
141 | | - throw new DisplayException(trans('admin/server.exceptions.daemon_exception', [ |
142 | | - 'code' => is_null($response) ? 'E_CONN_REFUSED' : $response->getStatusCode(), |
143 | | - ])); |
144 | | - } |
145 | | - |
146 | | - $this->connection->commit(); |
| 84 | + return $response; |
147 | 85 | } |
148 | 86 | } |
0 commit comments