55use Illuminate \View \View ;
66use Illuminate \Http \Request ;
77use Illuminate \Http \JsonResponse ;
8+ use Illuminate \Http \RedirectResponse ;
9+ use Prologue \Alerts \AlertsMessageBag ;
810use Pterodactyl \Http \Controllers \Controller ;
911use Pterodactyl \Traits \Controllers \JavascriptInjection ;
1012use Pterodactyl \Services \Databases \DatabasePasswordService ;
13+ use Pterodactyl \Services \Databases \DeployServerDatabaseService ;
1114use Pterodactyl \Contracts \Repository \DatabaseRepositoryInterface ;
15+ use Pterodactyl \Contracts \Repository \DatabaseHostRepositoryInterface ;
16+ use Pterodactyl \Http \Requests \Server \Database \StoreServerDatabaseRequest ;
1217
1318class DatabaseController extends Controller
1419{
1520 use JavascriptInjection;
1621
22+ /**
23+ * @var \Prologue\Alerts\AlertsMessageBag
24+ */
25+ private $ alert ;
26+
27+ /**
28+ * @var \Pterodactyl\Services\Databases\DeployServerDatabaseService
29+ */
30+ private $ deployServerDatabaseService ;
31+
32+ /**
33+ * @var \Pterodactyl\Contracts\Repository\DatabaseHostRepositoryInterface
34+ */
35+ private $ databaseHostRepository ;
36+
1737 /**
1838 * @var \Pterodactyl\Services\Databases\DatabasePasswordService
1939 */
20- protected $ passwordService ;
40+ private $ passwordService ;
2141
2242 /**
2343 * @var \Pterodactyl\Contracts\Repository\DatabaseRepositoryInterface
2444 */
25- protected $ repository ;
45+ private $ repository ;
2646
2747 /**
2848 * DatabaseController constructor.
2949 *
30- * @param \Pterodactyl\Services\Databases\DatabasePasswordService $passwordService
31- * @param \Pterodactyl\Contracts\Repository\DatabaseRepositoryInterface $repository
50+ * @param \Prologue\Alerts\AlertsMessageBag $alert
51+ * @param \Pterodactyl\Services\Databases\DeployServerDatabaseService $deployServerDatabaseService
52+ * @param \Pterodactyl\Contracts\Repository\DatabaseHostRepositoryInterface $databaseHostRepository
53+ * @param \Pterodactyl\Services\Databases\DatabasePasswordService $passwordService
54+ * @param \Pterodactyl\Contracts\Repository\DatabaseRepositoryInterface $repository
3255 */
33- public function __construct (DatabasePasswordService $ passwordService , DatabaseRepositoryInterface $ repository )
34- {
56+ public function __construct (
57+ AlertsMessageBag $ alert ,
58+ DeployServerDatabaseService $ deployServerDatabaseService ,
59+ DatabaseHostRepositoryInterface $ databaseHostRepository ,
60+ DatabasePasswordService $ passwordService ,
61+ DatabaseRepositoryInterface $ repository
62+ ) {
63+ $ this ->alert = $ alert ;
64+ $ this ->databaseHostRepository = $ databaseHostRepository ;
65+ $ this ->deployServerDatabaseService = $ deployServerDatabaseService ;
3566 $ this ->passwordService = $ passwordService ;
3667 $ this ->repository = $ repository ;
3768 }
@@ -50,11 +81,42 @@ public function index(Request $request): View
5081 $ this ->authorize ('view-databases ' , $ server );
5182 $ this ->setRequest ($ request )->injectJavascript ();
5283
84+ $ canCreateDatabase = config ('pterodactyl.client_features.databases.enabled ' );
85+ $ allowRandom = config ('pterodactyl.client_features.databases.allow_random ' );
86+
87+ if ($ this ->databaseHostRepository ->findCountWhere ([['node_id ' , '= ' , $ server ->node_id ]]) === 0 ) {
88+ if ($ canCreateDatabase && ! $ allowRandom ) {
89+ $ canCreateDatabase = false ;
90+ }
91+ }
92+
93+ $ databases = $ this ->repository ->getDatabasesForServer ($ server ->id );
94+
5395 return view ('server.databases.index ' , [
54- 'databases ' => $ this ->repository ->getDatabasesForServer ($ server ->id ),
96+ 'allowCreation ' => $ canCreateDatabase ,
97+ 'overLimit ' => ! is_null ($ server ->database_limit ) && count ($ databases ) >= $ server ->database_limit ,
98+ 'databases ' => $ databases ,
5599 ]);
56100 }
57101
102+ /**
103+ * Handle a request from a user to create a new database for the server.
104+ *
105+ * @param \Pterodactyl\Http\Requests\Server\Database\StoreServerDatabaseRequest $request
106+ * @return \Illuminate\Http\RedirectResponse
107+ *
108+ * @throws \Exception
109+ * @throws \Pterodactyl\Exceptions\Service\Database\DatabaseClientFeatureNotEnabledException
110+ */
111+ public function store (StoreServerDatabaseRequest $ request ): RedirectResponse
112+ {
113+ $ this ->deployServerDatabaseService ->handle ($ request ->getServer (), $ request ->validated ());
114+
115+ $ this ->alert ->success ('Successfully created a new database. ' )->flash ();
116+
117+ return redirect ()->route ('server.databases.index ' , $ request ->getServer ()->uuidShort );
118+ }
119+
58120 /**
59121 * Handle a request to update the password for a specific database.
60122 *
0 commit comments