Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pterodactyl
GitHub Repository: pterodactyl/panel
Path: blob/1.0-develop/app/Http/Requests/Api/Client/Servers/Databases/StoreDatabaseRequest.php
10283 views
1
<?php
2
3
namespace Pterodactyl\Http\Requests\Api\Client\Servers\Databases;
4
5
use Webmozart\Assert\Assert;
6
use Pterodactyl\Models\Server;
7
use Illuminate\Validation\Rule;
8
use Pterodactyl\Models\Database;
9
use Pterodactyl\Models\Permission;
10
use Illuminate\Database\Query\Builder;
11
use Pterodactyl\Contracts\Http\ClientPermissionsRequest;
12
use Pterodactyl\Http\Requests\Api\Client\ClientApiRequest;
13
use Pterodactyl\Services\Databases\DatabaseManagementService;
14
15
class StoreDatabaseRequest extends ClientApiRequest implements ClientPermissionsRequest
16
{
17
public function permission(): string
18
{
19
return Permission::ACTION_DATABASE_CREATE;
20
}
21
22
public function rules(): array
23
{
24
$server = $this->route()->parameter('server');
25
26
Assert::isInstanceOf($server, Server::class);
27
28
return [
29
'database' => [
30
'required',
31
'alpha_dash',
32
'min:3',
33
'max:48',
34
// Yes, I am aware that you could have the same database name across two unique hosts. However,
35
// I don't really care about that for this validation. We just want to make sure it is unique to
36
// the server itself. No need for complexity.
37
Rule::unique('databases')->where(function (Builder $query) use ($server) {
38
$query->where('server_id', $server->id)
39
->where('database', DatabaseManagementService::generateUniqueDatabaseName($this->input('database'), $server->id));
40
}),
41
],
42
'remote' => Database::getRulesForField('remote'),
43
];
44
}
45
46
public function messages(): array
47
{
48
return [
49
'database.unique' => 'The database name you have selected is already in use by this server.',
50
];
51
}
52
}
53
54