mirror of
https://github.com/vitodeploy/vito.git
synced 2025-04-20 10:21:37 +00:00
51 lines
1.3 KiB
PHP
51 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace App\Actions\Database;
|
|
|
|
use App\Enums\DatabaseUserStatus;
|
|
use App\Models\DatabaseUser;
|
|
use App\Models\Server;
|
|
use App\SSH\Services\Database\Database;
|
|
|
|
class SyncDatabaseUsers
|
|
{
|
|
public function sync(Server $server): void
|
|
{
|
|
$service = $server->database();
|
|
if (! $service instanceof \App\Models\Service) {
|
|
return;
|
|
}
|
|
/** @var Database $handler */
|
|
$handler = $service->handler();
|
|
|
|
$this->updateUsers($server, $handler);
|
|
}
|
|
|
|
private function updateUsers(Server $server, Database $handler): void
|
|
{
|
|
$users = $handler->getUsers();
|
|
foreach ($users as $user) {
|
|
$databases = $user[2] != 'NULL' ? explode(',', $user[2]) : [];
|
|
|
|
/** @var ?DatabaseUser $databaseUser */
|
|
$databaseUser = $server->databaseUsers()
|
|
->where('username', $user[0])
|
|
->first();
|
|
|
|
if ($databaseUser === null) {
|
|
$server->databaseUsers()->create([
|
|
'username' => $user[0],
|
|
'host' => $user[1],
|
|
'databases' => $databases,
|
|
'status' => DatabaseUserStatus::READY,
|
|
]);
|
|
|
|
continue;
|
|
}
|
|
|
|
$databaseUser->databases = $databases;
|
|
$databaseUser->save();
|
|
}
|
|
}
|
|
}
|