input('database_name'); // Configurazione della connessione di test config(['database.connections.testing' => [ 'driver' => 'mysql', 'host' => $request->input('host'), 'port' => '3306', 'password' => $request->input('password'), 'database' => $database_name, 'username' => $request->input('username'), ]]); try { $connection = DB::connection('testing'); // Controlla se la connessione al DB รจ stata stabilita in due modi $connection->getPdo(); if (empty($connection->getDatabaseName())) { throw new Exception(__('Impossibile connettersi al database selezionato! Controllare il nome del database')); } // Individuazione permessi garantiti all'utente $database_name = Str::replace('_', '\_', $database_name); $grants = $connection->select($connection->raw('SHOW GRANTS FOR CURRENT_USER')); } catch (Exception $e) { return response()->json([ 'success' => false, 'error' => $e->getMessage(), ], Response::HTTP_BAD_REQUEST); } $requirements = [ 'SELECT', 'INSERT', 'UPDATE', 'CREATE', 'ALTER', 'DROP', ]; foreach ($grants as $result) { $privileges = current($result); if (Str::contains($privileges, [" ON `$database_name`.*", ' ON *.*'])) { $pieces = explode(', ', explode(' ON ', str_replace('GRANT ', '', $privileges), 2)[0]); // Permessi generici sul database if (in_array('ALL', $pieces) || in_array('ALL PRIVILEGES', $pieces)) { $requirements = []; break; } // Permessi specifici sul database foreach ($requirements as $key => $value) { if (in_array($value, $pieces)) { unset($requirements[$key]); } } } } if (count($requirements) === 0) { return response()->noContent(); } return response()->json([ 'error' => __("L'utente del database non ha i seguenti permessi necessari: ", $requirements), ], Response::HTTP_BAD_REQUEST); } /** * Metodo indirizzato al salvataggio della configurazione. */ public function save(Request $request) { $text = 'json([ 'error' => 'writing', 'error_description' => __('Impossibile scrivere il file di configurazione. :action', ['action' => !$chmodded ? 'Controllare i permessi del file config/databasee.php' : '']), ], Response::HTTP_INTERNAL_SERVER_ERROR); } } // Refresh della cache sulla configurazione Artisan::call('cache:clear'); Artisan::call('config:cache'); setting($request->only(['timestamp_format', 'date_format', 'time_format', 'locale'])); return response()->noContent(); } public function saveAdmin(Request $request): Response|JsonResponse { try { $request->validate([ 'username' => 'required|string|min:3|max:255|unique:users,username', 'password' => 'required|string|min:6|max:255', 'email' => 'required|string|email|max:255|unique:users,email', ]); } catch (ValidationException $e) { return response()->json(['errors' => $e->errors()], 422); } $user = new User(); $user->username = $request->input('username'); $user->email = $request->input('email'); $user->password = Hash::make($request->input('password')); $user->save(); return response()->noContent(); } }