Disconnect OAuth Mailer

This commit is contained in:
David Bomba 2023-04-05 11:18:10 +10:00
parent 6f579ba321
commit ec597d7b2e
5 changed files with 97 additions and 21 deletions

View File

@ -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());
}
}

View File

@ -0,0 +1,43 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com).
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2023. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://www.elastic.co/licensing/elastic-license
*/
namespace App\Http\Requests\User;
use App\Http\Requests\Request;
class DisconnectUserMailerRequest extends Request
{
private bool $phone_has_changed = false;
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize() : bool
{
return auth()->user()->id == $this->user->id || auth()->user()->isAdmin();
}
public function rules()
{
$rules = [
];
return $rules;
}
public function prepareForValidation()
{
}
}

View File

@ -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',
];
/**

View File

@ -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);

View File

@ -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([