 d894c3d903
			
		
	
	d894c3d903
	
	
	
		
			
			Added a new delete method in the Database component that includes a two-step confirmation process requiring the user to enter their password. If two-step confirmation is disabled, the deletion proceeds without password verification. Additionally, a confirmation modal has been integrated into the database view to prompt users before deletion, enhancing the safety of this critical operation.
		
			
				
	
	
		
			130 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Livewire\Project\Service;
 | |
| 
 | |
| use App\Actions\Database\StartDatabaseProxy;
 | |
| use App\Actions\Database\StopDatabaseProxy;
 | |
| use App\Models\InstanceSettings;
 | |
| use App\Models\ServiceDatabase;
 | |
| use Illuminate\Support\Facades\Auth;
 | |
| use Illuminate\Support\Facades\Hash;
 | |
| use Livewire\Component;
 | |
| 
 | |
| class Database extends Component
 | |
| {
 | |
|     public ServiceDatabase $database;
 | |
| 
 | |
|     public ?string $db_url_public = null;
 | |
| 
 | |
|     public $fileStorages;
 | |
| 
 | |
|     public $parameters;
 | |
| 
 | |
|     protected $listeners = ['refreshFileStorages'];
 | |
| 
 | |
|     protected $rules = [
 | |
|         'database.human_name' => 'nullable',
 | |
|         'database.description' => 'nullable',
 | |
|         'database.image' => 'required',
 | |
|         'database.exclude_from_status' => 'required|boolean',
 | |
|         'database.public_port' => 'nullable|integer',
 | |
|         'database.is_public' => 'required|boolean',
 | |
|         'database.is_log_drain_enabled' => 'required|boolean',
 | |
|     ];
 | |
| 
 | |
|     public function render()
 | |
|     {
 | |
|         return view('livewire.project.service.database');
 | |
|     }
 | |
| 
 | |
|     public function mount()
 | |
|     {
 | |
|         $this->parameters = get_route_parameters();
 | |
|         if ($this->database->is_public) {
 | |
|             $this->db_url_public = $this->database->getServiceDatabaseUrl();
 | |
|         }
 | |
|         $this->refreshFileStorages();
 | |
|     }
 | |
| 
 | |
|     public function delete($password)
 | |
|     {
 | |
|         if (! data_get(InstanceSettings::get(), 'disable_two_step_confirmation')) {
 | |
|             if (! Hash::check($password, Auth::user()->password)) {
 | |
|                 $this->addError('password', 'The provided password is incorrect.');
 | |
| 
 | |
|                 return;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         try {
 | |
|             $this->database->delete();
 | |
|             $this->dispatch('success', 'Database deleted.');
 | |
| 
 | |
|             return redirect()->route('project.service.configuration', $this->parameters);
 | |
|         } catch (\Throwable $e) {
 | |
|             return handleError($e, $this);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function instantSaveExclude()
 | |
|     {
 | |
|         $this->submit();
 | |
|     }
 | |
| 
 | |
|     public function instantSaveLogDrain()
 | |
|     {
 | |
|         if (! $this->database->service->destination->server->isLogDrainEnabled()) {
 | |
|             $this->database->is_log_drain_enabled = false;
 | |
|             $this->dispatch('error', 'Log drain is not enabled on the server. Please enable it first.');
 | |
| 
 | |
|             return;
 | |
|         }
 | |
|         $this->submit();
 | |
|         $this->dispatch('success', 'You need to restart the service for the changes to take effect.');
 | |
|     }
 | |
| 
 | |
|     public function instantSave()
 | |
|     {
 | |
|         if ($this->database->is_public && ! $this->database->public_port) {
 | |
|             $this->dispatch('error', 'Public port is required.');
 | |
|             $this->database->is_public = false;
 | |
| 
 | |
|             return;
 | |
|         }
 | |
|         if ($this->database->is_public) {
 | |
|             if (! str($this->database->status)->startsWith('running')) {
 | |
|                 $this->dispatch('error', 'Database must be started to be publicly accessible.');
 | |
|                 $this->database->is_public = false;
 | |
| 
 | |
|                 return;
 | |
|             }
 | |
|             StartDatabaseProxy::run($this->database);
 | |
|             $this->db_url_public = $this->database->getServiceDatabaseUrl();
 | |
|             $this->dispatch('success', 'Database is now publicly accessible.');
 | |
|         } else {
 | |
|             StopDatabaseProxy::run($this->database);
 | |
|             $this->db_url_public = null;
 | |
|             $this->dispatch('success', 'Database is no longer publicly accessible.');
 | |
|         }
 | |
|         $this->submit();
 | |
|     }
 | |
| 
 | |
|     public function refreshFileStorages()
 | |
|     {
 | |
|         $this->fileStorages = $this->database->fileStorages()->get();
 | |
|     }
 | |
| 
 | |
|     public function submit()
 | |
|     {
 | |
|         try {
 | |
|             $this->validate();
 | |
|             $this->database->save();
 | |
|             updateCompose($this->database);
 | |
|             $this->dispatch('success', 'Database saved.');
 | |
|         } catch (\Throwable) {
 | |
|         } finally {
 | |
|             $this->dispatch('generateDockerCompose');
 | |
|         }
 | |
|     }
 | |
| }
 |