119 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace App\Livewire\Settings;
 | 
						|
 | 
						|
use App\Models\InstanceSettings;
 | 
						|
use App\Models\Server;
 | 
						|
use Auth;
 | 
						|
use Hash;
 | 
						|
use Livewire\Attributes\Validate;
 | 
						|
use Livewire\Component;
 | 
						|
 | 
						|
class Advanced extends Component
 | 
						|
{
 | 
						|
    #[Validate('required')]
 | 
						|
    public Server $server;
 | 
						|
 | 
						|
    public InstanceSettings $settings;
 | 
						|
 | 
						|
    #[Validate('boolean')]
 | 
						|
    public bool $is_registration_enabled;
 | 
						|
 | 
						|
    #[Validate('boolean')]
 | 
						|
    public bool $do_not_track;
 | 
						|
 | 
						|
    #[Validate('boolean')]
 | 
						|
    public bool $is_dns_validation_enabled;
 | 
						|
 | 
						|
    #[Validate('nullable|string')]
 | 
						|
    public ?string $custom_dns_servers = null;
 | 
						|
 | 
						|
    #[Validate('boolean')]
 | 
						|
    public bool $is_api_enabled;
 | 
						|
 | 
						|
    #[Validate('nullable|string')]
 | 
						|
    public ?string $allowed_ips = null;
 | 
						|
 | 
						|
    #[Validate('boolean')]
 | 
						|
    public bool $is_sponsorship_popup_enabled;
 | 
						|
 | 
						|
    #[Validate('boolean')]
 | 
						|
    public bool $disable_two_step_confirmation;
 | 
						|
 | 
						|
    public function mount()
 | 
						|
    {
 | 
						|
        if (! isInstanceAdmin()) {
 | 
						|
            return redirect()->route('dashboard');
 | 
						|
        }
 | 
						|
        $this->server = Server::findOrFail(0);
 | 
						|
        $this->settings = instanceSettings();
 | 
						|
        $this->custom_dns_servers = $this->settings->custom_dns_servers;
 | 
						|
        $this->allowed_ips = $this->settings->allowed_ips;
 | 
						|
        $this->do_not_track = $this->settings->do_not_track;
 | 
						|
        $this->is_registration_enabled = $this->settings->is_registration_enabled;
 | 
						|
        $this->is_dns_validation_enabled = $this->settings->is_dns_validation_enabled;
 | 
						|
        $this->is_api_enabled = $this->settings->is_api_enabled;
 | 
						|
        $this->disable_two_step_confirmation = $this->settings->disable_two_step_confirmation;
 | 
						|
        $this->is_sponsorship_popup_enabled = $this->settings->is_sponsorship_popup_enabled;
 | 
						|
    }
 | 
						|
 | 
						|
    public function submit()
 | 
						|
    {
 | 
						|
        try {
 | 
						|
            $this->validate();
 | 
						|
 | 
						|
            $this->custom_dns_servers = str($this->custom_dns_servers)->replaceEnd(',', '')->trim();
 | 
						|
            $this->custom_dns_servers = str($this->custom_dns_servers)->trim()->explode(',')->map(function ($dns) {
 | 
						|
                return str($dns)->trim()->lower();
 | 
						|
            })->unique()->implode(',');
 | 
						|
 | 
						|
            $this->allowed_ips = str($this->allowed_ips)->replaceEnd(',', '')->trim();
 | 
						|
            $this->allowed_ips = str($this->allowed_ips)->trim()->explode(',')->map(function ($ip) {
 | 
						|
                return str($ip)->trim();
 | 
						|
            })->unique()->implode(',');
 | 
						|
 | 
						|
            $this->instantSave();
 | 
						|
        } catch (\Exception $e) {
 | 
						|
            return handleError($e, $this);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public function instantSave()
 | 
						|
    {
 | 
						|
        try {
 | 
						|
            $this->settings->is_registration_enabled = $this->is_registration_enabled;
 | 
						|
            $this->settings->do_not_track = $this->do_not_track;
 | 
						|
            $this->settings->is_dns_validation_enabled = $this->is_dns_validation_enabled;
 | 
						|
            $this->settings->custom_dns_servers = $this->custom_dns_servers;
 | 
						|
            $this->settings->is_api_enabled = $this->is_api_enabled;
 | 
						|
            $this->settings->allowed_ips = $this->allowed_ips;
 | 
						|
            $this->settings->is_sponsorship_popup_enabled = $this->is_sponsorship_popup_enabled;
 | 
						|
            $this->settings->disable_two_step_confirmation = $this->disable_two_step_confirmation;
 | 
						|
            $this->settings->save();
 | 
						|
            $this->dispatch('success', 'Settings updated!');
 | 
						|
        } catch (\Exception $e) {
 | 
						|
            return handleError($e, $this);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public function toggleTwoStepConfirmation($password): bool
 | 
						|
    {
 | 
						|
        if (! Hash::check($password, Auth::user()->password)) {
 | 
						|
            $this->addError('password', 'The provided password is incorrect.');
 | 
						|
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
 | 
						|
        $this->settings->disable_two_step_confirmation = $this->disable_two_step_confirmation = true;
 | 
						|
        $this->settings->save();
 | 
						|
        $this->dispatch('success', 'Two step confirmation has been disabled.');
 | 
						|
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
 | 
						|
    public function render()
 | 
						|
    {
 | 
						|
        return view('livewire.settings.advanced');
 | 
						|
    }
 | 
						|
}
 |