diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index ceb4c154df39..0db669b45d98 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -11,30 +11,31 @@ namespace App\Http\Controllers; +use App\Models\User; +use App\Utils\Ninja; +use App\Models\CompanyUser; +use App\Factory\UserFactory; +use App\Filters\UserFilters; +use Illuminate\Http\Response; +use App\Utils\Traits\MakesHash; use App\Events\User\UserWasCreated; use App\Events\User\UserWasDeleted; use App\Events\User\UserWasUpdated; -use App\Factory\UserFactory; -use App\Filters\UserFilters; -use App\Http\Controllers\Traits\VerifiesUserEmail; -use App\Http\Requests\User\BulkUserRequest; -use App\Http\Requests\User\CreateUserRequest; -use App\Http\Requests\User\DestroyUserRequest; -use App\Http\Requests\User\DetachCompanyUserRequest; -use App\Http\Requests\User\EditUserRequest; -use App\Http\Requests\User\ReconfirmUserRequest; -use App\Http\Requests\User\ShowUserRequest; -use App\Http\Requests\User\StoreUserRequest; -use App\Http\Requests\User\UpdateUserRequest; -use App\Jobs\Company\CreateCompanyToken; use App\Jobs\User\UserEmailChanged; -use App\Models\CompanyUser; -use App\Models\User; use App\Repositories\UserRepository; use App\Transformers\UserTransformer; -use App\Utils\Ninja; -use App\Utils\Traits\MakesHash; -use Illuminate\Http\Response; +use App\Jobs\Company\CreateCompanyToken; +use App\Http\Requests\User\BulkUserRequest; +use App\Http\Requests\User\EditUserRequest; +use App\Http\Requests\User\ShowUserRequest; +use App\Http\Requests\User\StoreUserRequest; +use App\Http\Requests\User\CreateUserRequest; +use App\Http\Requests\User\UpdateUserRequest; +use App\Http\Requests\User\DestroyUserRequest; +use App\Http\Requests\User\ReconfirmUserRequest; +use App\Http\Controllers\Traits\VerifiesUserEmail; +use App\Http\Requests\User\DetachCompanyUserRequest; +use App\Http\Requests\User\DisconnectUserMailerRequest; /** * Class UserController. @@ -724,4 +725,15 @@ class UserController extends BaseController return response()->json(['message' => ctrans('texts.confirmation_resent')], 200); } + + public function disconnectOauthMailer(DisconnectUserMailerRequest $request, User $user) + { + + $user->oauth_user_token = null; + $user->oauth_user_refresh_token = null; + $user->save(); + + return $this->itemResponse($user->fresh()); + + } } diff --git a/app/Http/Requests/User/DisconnectUserMailerRequest.php b/app/Http/Requests/User/DisconnectUserMailerRequest.php new file mode 100644 index 000000000000..881276e4dca3 --- /dev/null +++ b/app/Http/Requests/User/DisconnectUserMailerRequest.php @@ -0,0 +1,43 @@ +user()->id == $this->user->id || auth()->user()->isAdmin(); + } + + public function rules() + { + + $rules = [ + ]; + + return $rules; + } + + public function prepareForValidation() + { + + } +} diff --git a/app/Models/User.php b/app/Models/User.php index ea4185e21620..df6c7cec28f5 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -238,14 +238,11 @@ class User extends Authenticatable implements MustVerifyEmail 'accepted_terms_version', 'oauth_user_id', 'oauth_provider_id', - 'oauth_user_token', - 'oauth_user_refresh_token', 'custom_value1', 'custom_value2', 'custom_value3', 'custom_value4', 'is_deleted', - // 'google_2fa_secret', ]; /** diff --git a/routes/api.php b/routes/api.php index 01136609845e..727283bff39f 100644 --- a/routes/api.php +++ b/routes/api.php @@ -331,6 +331,7 @@ Route::group(['middleware' => ['throttle:api', 'api_db', 'token_auth', 'locale'] Route::post('users/bulk', [UserController::class, 'bulk'])->name('users.bulk')->middleware('password_protected'); Route::post('/users/{user}/invite', [UserController::class, 'invite'])->middleware('password_protected'); + Route::post('/users/{user}/disconnect_mailer', [UserController::class, 'disconnectOauthMailer']); Route::post('/user/{user}/reconfirm', [UserController::class, 'reconfirm']); Route::resource('webhooks', WebhookController::class); diff --git a/tests/Feature/UserTest.php b/tests/Feature/UserTest.php index 8d6dd7fdc045..97668b4f0e9d 100644 --- a/tests/Feature/UserTest.php +++ b/tests/Feature/UserTest.php @@ -56,6 +56,29 @@ class UserTest extends TestCase ); } + public function testDisconnectUserOauthMailer() + { + $user = + User::factory()->create([ + 'account_id' => $this->account->id, + 'email' => $this->faker->safeEmail(), + 'oauth_user_id' => '123456789', + 'oauth_provider_id' => '123456789', + ]); + + $response = $this->withHeaders([ + 'X-API-TOKEN' => $this->token, + ])->post("/api/v1/users/{$user->hashed_id}/disconnect_mailer"); + + $response->assertStatus(200); + + $user->fresh(); + + $this->assertNull($user->oauth_user_token); + $this->assertNull($user->oauth_user_refresh_token); + + } + public function testUserFiltersWith() { $response = $this->withHeaders([