mirror of
https://github.com/sp-tarkov/forge.git
synced 2025-02-13 04:30:41 -05:00
Adds a edit-user-profile section to allow a user to remove an OAuth connection from their account when they have a local account password set.
102 lines
2.5 KiB
PHP
102 lines
2.5 KiB
PHP
<?php
|
||
|
||
namespace App\Livewire\Profile;
|
||
|
||
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
||
use Illuminate\View\View;
|
||
use Livewire\Attributes\Locked;
|
||
use Livewire\Component;
|
||
|
||
class ManageOAuthConnections extends Component
|
||
{
|
||
use AuthorizesRequests;
|
||
|
||
/**
|
||
* Store the current user.
|
||
*/
|
||
#[Locked]
|
||
public $user;
|
||
|
||
/**
|
||
* Controls the confirmation modal visibility.
|
||
*/
|
||
public $confirmingConnectionDeletion = false;
|
||
|
||
/**
|
||
* Stores the ID of the connection to be deleted.
|
||
*/
|
||
#[Locked]
|
||
public $selectedConnectionId;
|
||
|
||
/**
|
||
* The component’s listeners.
|
||
*/
|
||
protected $listeners = ['saved' => 'refreshUser'];
|
||
|
||
/**
|
||
* Initializes the component by loading the user’s OAuth connections.
|
||
*/
|
||
public function mount(): void
|
||
{
|
||
$this->setName('profile.manage-oauth-connections');
|
||
|
||
$this->user = auth()->user();
|
||
}
|
||
|
||
/**
|
||
* Sets up the deletion confirmation.
|
||
*/
|
||
public function confirmConnectionDeletion($connectionId): void
|
||
{
|
||
$this->confirmingConnectionDeletion = true;
|
||
$this->selectedConnectionId = $connectionId;
|
||
}
|
||
|
||
/**
|
||
* Deletes the selected OAuth connection.
|
||
*/
|
||
public function deleteConnection(): void
|
||
{
|
||
$connection = $this->user->oauthConnections()->find($this->selectedConnectionId);
|
||
|
||
// Ensure the user is authorized to delete the connection.
|
||
$this->authorize('delete', $connection);
|
||
|
||
// The user must have a password set before removing an OAuth connection.
|
||
if ($this->user->password === null) {
|
||
$this->addError('password_required', __('You must set a password before removing an OAuth connection.'));
|
||
$this->confirmingConnectionDeletion = false;
|
||
|
||
return;
|
||
}
|
||
|
||
if ($connection) {
|
||
$connection->delete();
|
||
|
||
$this->user->refresh();
|
||
$this->confirmingConnectionDeletion = false;
|
||
$this->selectedConnectionId = null;
|
||
|
||
session()->flash('status', __('OAuth connection removed successfully.'));
|
||
} else {
|
||
session()->flash('error', __('OAuth connection not found.'));
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Refreshes the user instance.
|
||
*/
|
||
public function refreshUser(): void
|
||
{
|
||
$this->user->refresh();
|
||
}
|
||
|
||
/**
|
||
* Renders the component view.
|
||
*/
|
||
public function render(): View
|
||
{
|
||
return view('livewire.profile.manage-oauth-connections');
|
||
}
|
||
}
|