70 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Livewire;
 | |
| 
 | |
| use App\Models\OauthSetting;
 | |
| use Livewire\Component;
 | |
| 
 | |
| class SettingsOauth extends Component
 | |
| {
 | |
|     public $oauth_settings_map;
 | |
| 
 | |
|     protected function rules()
 | |
|     {
 | |
|         return OauthSetting::all()->reduce(function ($carry, $setting) {
 | |
|             $carry["oauth_settings_map.$setting->provider.enabled"] = 'required';
 | |
|             $carry["oauth_settings_map.$setting->provider.client_id"] = 'nullable';
 | |
|             $carry["oauth_settings_map.$setting->provider.client_secret"] = 'nullable';
 | |
|             $carry["oauth_settings_map.$setting->provider.redirect_uri"] = 'nullable';
 | |
|             $carry["oauth_settings_map.$setting->provider.tenant"] = 'nullable';
 | |
|             $carry["oauth_settings_map.$setting->provider.base_url"] = 'nullable';
 | |
| 
 | |
|             return $carry;
 | |
|         }, []);
 | |
|     }
 | |
| 
 | |
|     public function mount()
 | |
|     {
 | |
|         if (! isInstanceAdmin()) {
 | |
|             return redirect()->route('home');
 | |
|         }
 | |
|         $this->oauth_settings_map = OauthSetting::all()->sortBy('provider')->reduce(function ($carry, $setting) {
 | |
|             $carry[$setting->provider] = $setting;
 | |
| 
 | |
|             return $carry;
 | |
|         }, []);
 | |
|     }
 | |
| 
 | |
|     private function updateOauthSettings(?string $provider = null)
 | |
|     {
 | |
|         if ($provider) {
 | |
|             $oauth = $this->oauth_settings_map[$provider];
 | |
|             if (! $oauth->couldBeEnabled()) {
 | |
|                 $oauth->update(['enabled' => false]);
 | |
|                 throw new \Exception('OAuth settings are not complete for '.$oauth->provider.'.<br/>Please fill in all required fields.');
 | |
|             }
 | |
|             $oauth->save();
 | |
|             $this->dispatch('success', 'OAuth settings for '.$oauth->provider.' updated successfully!');
 | |
|         } else {
 | |
|             foreach (array_values($this->oauth_settings_map) as &$setting) {
 | |
|                 $setting->save();
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function instantSave(string $provider)
 | |
|     {
 | |
|         try {
 | |
|             $this->updateOauthSettings($provider);
 | |
|         } catch (\Exception $e) {
 | |
|             return handleError($e, $this);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function submit()
 | |
|     {
 | |
|         $this->updateOauthSettings();
 | |
|         $this->dispatch('success', 'Instance settings updated successfully!');
 | |
|     }
 | |
| }
 | 
