From 3141a33ced2805f32b9516ed7b8c6f357ba82f40 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 22 Jun 2022 19:15:31 +1000 Subject: [PATCH] Appropriately refresh sending tokens --- app/Http/Controllers/Auth/LoginController.php | 5 ++- app/Jobs/Mail/NinjaMailerJob.php | 43 +++++++++++++------ app/Models/User.php | 1 + ...0_fixes_for_description_in_pdf_designs.php | 2 +- 4 files changed, 35 insertions(+), 16 deletions(-) diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 8e34d1c072b1..a557e8915654 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -772,6 +772,8 @@ class LoginController extends BaseController $oauth_user_token = $socialite_user->accessTokenResponseBody['access_token']; + $oauth_expiry = now()->addSeconds($socialite_user->accessTokenResponseBody['expires_in']) ?: now()->addSeconds(300); + if($user = OAuth::handleAuth($socialite_user, $provider)) { @@ -785,7 +787,8 @@ class LoginController extends BaseController 'oauth_user_id' => $socialite_user->getId(), 'oauth_provider_id' => $provider, 'oauth_user_token' => $oauth_user_token, - 'oauth_user_refresh_token' => $socialite_user->accessTokenResponseBody['refresh_token'] + 'oauth_user_refresh_token' => $socialite_user->accessTokenResponseBody['refresh_token'], + 'oauth_user_token_expiry' => $oauth_expiry, ]; $user->update($update_user); diff --git a/app/Jobs/Mail/NinjaMailerJob.php b/app/Jobs/Mail/NinjaMailerJob.php index 2a2a7ee22a1a..5e2b55ba19f6 100644 --- a/app/Jobs/Mail/NinjaMailerJob.php +++ b/app/Jobs/Mail/NinjaMailerJob.php @@ -342,23 +342,38 @@ class NinjaMailerJob implements ShouldQueue private function refreshOfficeToken($user) { - $guzzle = new \GuzzleHttp\Client(); - $url = 'https://login.microsoftonline.com/common/oauth2/v2.0/token'; - $token = json_decode($guzzle->post($url, [ - 'form_params' => [ - 'client_id' => config('ninja.o365.client_id') , - 'client_secret' => config('ninja.o365.client_secret') , - 'scope' => 'email Mail.ReadWrite Mail.Send offline_access profile User.Read openid', - 'grant_type' => 'refresh_token', - 'refresh_token' => $user->oauth_user_refresh_token - ], - ])->getBody()->getContents()); + if($user->oauth_user_token_expiry->lt(now())) + { + $guzzle = new \GuzzleHttp\Client(); + $url = 'https://login.microsoftonline.com/common/oauth2/v2.0/token'; - if($token) - return $token->access_token; + $token = json_decode($guzzle->post($url, [ + 'form_params' => [ + 'client_id' => config('ninja.o365.client_id') , + 'client_secret' => config('ninja.o365.client_secret') , + 'scope' => 'email Mail.ReadWrite Mail.Send offline_access profile User.Read openid', + 'grant_type' => 'refresh_token', + 'refresh_token' => $user->oauth_user_refresh_token + ], + ])->getBody()->getContents()); - return false; + if($token){ + + nlog($token); + + $user->oauth_user_token = $token->access_token; + $user->oauth_user_token_expiry = now()->addSeconds($token->expires_in); + $user->save(); + + return $token->access_token; + } + + return false; + } + + return $user->oauth_user_refresh_token; + } } \ No newline at end of file diff --git a/app/Models/User.php b/app/Models/User.php index 473d0059ca2f..a58c6e4caac1 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -106,6 +106,7 @@ class User extends Authenticatable implements MustVerifyEmail 'updated_at' => 'timestamp', 'created_at' => 'timestamp', 'deleted_at' => 'timestamp', + 'oauth_user_token_expiry' => 'datetime', ]; diff --git a/database/migrations/2022_06_21_104350_fixes_for_description_in_pdf_designs.php b/database/migrations/2022_06_21_104350_fixes_for_description_in_pdf_designs.php index 9c92973221e0..ded6a204c18d 100644 --- a/database/migrations/2022_06_21_104350_fixes_for_description_in_pdf_designs.php +++ b/database/migrations/2022_06_21_104350_fixes_for_description_in_pdf_designs.php @@ -13,7 +13,7 @@ class FixesForDescriptionInPdfDesigns extends Migration */ public function up() { - \Illuminate\Support\Facades\Artisan::call('ninja:design-update'); + \Illuminate\Support\Facades\Artisan::call('ninja:design-update'); } /**