diff --git a/resources/views/ssh/services/database/mariadb/backup.blade.php b/resources/views/ssh/services/database/mariadb/backup.blade.php new file mode 100644 index 0000000..64a9e27 --- /dev/null +++ b/resources/views/ssh/services/database/mariadb/backup.blade.php @@ -0,0 +1,11 @@ +if ! sudo DEBIAN_FRONTEND=noninteractive mysqldump -u root {{ $database }} > {{ $file }}.sql; then + echo 'VITO_SSH_ERROR' && exit 1 +fi + +if ! DEBIAN_FRONTEND=noninteractive zip {{ $file }}.zip {{ $file }}.sql; then + echo 'VITO_SSH_ERROR' && exit 1 +fi + +if ! rm {{ $file }}.sql; then + echo 'VITO_SSH_ERROR' && exit 1 +fi diff --git a/resources/views/ssh/services/database/mariadb/create-user.blade.php b/resources/views/ssh/services/database/mariadb/create-user.blade.php new file mode 100644 index 0000000..e186365 --- /dev/null +++ b/resources/views/ssh/services/database/mariadb/create-user.blade.php @@ -0,0 +1,9 @@ +if ! sudo mysql -e "CREATE USER IF NOT EXISTS '{{ $username }}'@'{{ $host }}' IDENTIFIED BY '{{ $password }}'"; then + echo 'VITO_SSH_ERROR' && exit 1 +fi + +if ! sudo mysql -e "FLUSH PRIVILEGES"; then + echo 'VITO_SSH_ERROR' && exit 1 +fi + +echo "Command executed" diff --git a/resources/views/ssh/services/database/mariadb/create.blade.php b/resources/views/ssh/services/database/mariadb/create.blade.php new file mode 100644 index 0000000..14c43f2 --- /dev/null +++ b/resources/views/ssh/services/database/mariadb/create.blade.php @@ -0,0 +1,5 @@ +if ! sudo mysql -e "CREATE DATABASE IF NOT EXISTS {{ $name }} CHARACTER SET utf8 COLLATE utf8_general_ci"; then + echo 'VITO_SSH_ERROR' && exit 1 +fi + +echo "Command executed" diff --git a/resources/views/ssh/services/database/mariadb/delete-user.blade.php b/resources/views/ssh/services/database/mariadb/delete-user.blade.php new file mode 100644 index 0000000..59c3d52 --- /dev/null +++ b/resources/views/ssh/services/database/mariadb/delete-user.blade.php @@ -0,0 +1,9 @@ +if ! sudo mysql -e "DROP USER IF EXISTS '{{ $username }}'@'{{ $host }}'"; then + echo 'VITO_SSH_ERROR' && exit 1 +fi + +if ! sudo mysql -e "FLUSH PRIVILEGES"; then + echo 'VITO_SSH_ERROR' && exit 1 +fi + +echo "Command executed" diff --git a/resources/views/ssh/services/database/mariadb/delete.blade.php b/resources/views/ssh/services/database/mariadb/delete.blade.php new file mode 100644 index 0000000..0130f47 --- /dev/null +++ b/resources/views/ssh/services/database/mariadb/delete.blade.php @@ -0,0 +1,5 @@ +if ! sudo mysql -e "DROP DATABASE IF EXISTS {{ $name }}"; then + echo 'VITO_SSH_ERROR' && exit 1 +fi + +echo "Command executed" diff --git a/resources/views/ssh/services/database/mariadb/link.blade.php b/resources/views/ssh/services/database/mariadb/link.blade.php new file mode 100644 index 0000000..ce547f2 --- /dev/null +++ b/resources/views/ssh/services/database/mariadb/link.blade.php @@ -0,0 +1,9 @@ +if ! sudo mysql -e "GRANT ALL PRIVILEGES ON {{ $database }}.* TO '{{ $username }}'@'{{ $host }}'"; then + echo 'VITO_SSH_ERROR' && exit 1 +fi + +if ! sudo mysql -e "FLUSH PRIVILEGES"; then + echo 'VITO_SSH_ERROR' && exit 1 +fi + +echo "Linking to {{ $database }} finished" diff --git a/resources/views/ssh/services/database/mariadb/restore.blade.php b/resources/views/ssh/services/database/mariadb/restore.blade.php new file mode 100644 index 0000000..c158f58 --- /dev/null +++ b/resources/views/ssh/services/database/mariadb/restore.blade.php @@ -0,0 +1,11 @@ +if ! DEBIAN_FRONTEND=noninteractive unzip {{ $file }}.zip; then + echo 'VITO_SSH_ERROR' && exit 1 +fi + +if ! sudo DEBIAN_FRONTEND=noninteractive mysql -u root {{ $database }} < {{ $file }}.sql; then + echo 'VITO_SSH_ERROR' && exit 1 +fi + +if ! rm {{ $file }}.sql {{ $file }}.zip; then + echo 'VITO_SSH_ERROR' && exit 1 +fi diff --git a/resources/views/ssh/services/database/mariadb/unlink.blade.php b/resources/views/ssh/services/database/mariadb/unlink.blade.php new file mode 100644 index 0000000..ff2a879 --- /dev/null +++ b/resources/views/ssh/services/database/mariadb/unlink.blade.php @@ -0,0 +1,5 @@ +if ! sudo mysql -e "REVOKE ALL PRIVILEGES, GRANT OPTION FROM '{{ $username }}'@'{{ $host }}'"; then + echo 'VITO_SSH_ERROR' && exit 1 +fi + +echo "Command executed" diff --git a/tests/Feature/DatabaseBackupTest.php b/tests/Feature/DatabaseBackupTest.php index be38754..ef22b65 100644 --- a/tests/Feature/DatabaseBackupTest.php +++ b/tests/Feature/DatabaseBackupTest.php @@ -22,11 +22,16 @@ class DatabaseBackupTest extends TestCase { use RefreshDatabase; - public function test_create_backup(): void + /** + * @dataProvider data + */ + public function test_create_backup(string $db): void { SSH::fake(); Http::fake(); + $this->setupDatabase($db); + $this->actingAs($this->user); $database = Database::factory()->create([ @@ -152,8 +157,13 @@ public function test_update_backup(): void ]); } - public function test_delete_backup(): void + /** + * @dataProvider data + */ + public function test_delete_backup(string $db): void { + $this->setupDatabase($db); + $this->actingAs($this->user); $database = Database::factory()->create([ @@ -182,11 +192,16 @@ public function test_delete_backup(): void ]); } - public function test_restore_backup(): void + /** + * @dataProvider data + */ + public function test_restore_backup(string $db): void { Http::fake(); SSH::fake(); + $this->setupDatabase($db); + $this->actingAs($this->user); $database = Database::factory()->create([ @@ -220,4 +235,24 @@ public function test_restore_backup(): void 'status' => BackupFileStatus::RESTORED, ]); } + + private function setupDatabase(string $database): void + { + $this->server->services()->where('type', 'database')->delete(); + + $this->server->services()->create([ + 'type' => 'database', + 'name' => config('core.databases_name.'.$database), + 'version' => config('core.databases_version.'.$database), + ]); + } + + public static function data(): array + { + return [ + [\App\Enums\Database::MYSQL80], + [\App\Enums\Database::MARIADB104], + [\App\Enums\Database::POSTGRESQL16], + ]; + } }