INA-12 | add apple to the login, refactor of microsoft login.

This commit is contained in:
Nikola Cirkovic 2022-06-11 05:31:32 +02:00
parent 4884de4ec8
commit 117a4e4028

View File

@ -358,15 +358,22 @@ class LoginController extends BaseController
*/ */
public function oauthApiLogin() public function oauthApiLogin()
{ {
$message = 'Provider not supported'; $message = 'Provider not supported';
if (request()->input('provider') == 'google') { if (request()->input('provider') == 'google') {
return $this->handleGoogleOauth(); return $this->handleGoogleOauth();
} elseif (request()->input('provider') == 'microsoft') { } elseif (request()->input('provider') == 'microsoft') {
if (request()->has('token')) { if (request()->has('token')) {
return $this->handleMicrosoftOauth(request()->get('token')); return $this->handleSocialiteLogin('microsoft', request()->get('token'));
} else { } else {
$message = 'Bearer token missing for the microsoft login'; $message = 'Bearer token missing for the microsoft login';
} }
} elseif (request()->input('provider') == 'apple') {
if (request()->has('token')) {
return $this->handleSocialiteLogin('apple', request()->get('token'));
} else {
$message = 'Token is missing for the apple login';
}
} }
return response() return response()
@ -375,14 +382,30 @@ class LoginController extends BaseController
->header('X-Api-Version', config('ninja.minimum_client_version')); ->header('X-Api-Version', config('ninja.minimum_client_version'));
} }
private function handleMicrosoftOauth($token) private function getSocialiteUser(string $provider, string $token)
{ {
$user = Socialite::driver('microsoft')->userFromToken($token); return Socialite::driver($provider)->userFromToken($token);
}
private function handleSocialiteLogin($provider, $token)
{
$user = $this->getSocialiteUser($provider, $token);
if ($user) { if ($user) {
return $this->loginOrCreateFromSocialite($user, $provider);
}
return response()
->json(['message' => ctrans('texts.invalid_credentials')], 401)
->header('X-App-Version', config('ninja.app_version'))
->header('X-Api-Version', config('ninja.minimum_client_version'));
}
private function loginOrCreateFromSocialite($user, $provider)
{
$query = [ $query = [
'oauth_user_id' => $user->id, 'oauth_user_id' => $user->id,
'oauth_provider_id' => 'microsoft', 'oauth_provider_id' => $provider,
]; ];
if ($existing_user = MultiDB::hasUser($query)) { if ($existing_user = MultiDB::hasUser($query)) {
@ -411,7 +434,7 @@ class LoginController extends BaseController
auth()->user()->update([ auth()->user()->update([
'oauth_user_id' => $user->id, 'oauth_user_id' => $user->id,
'oauth_provider_id' => 'microsoft', 'oauth_provider_id' => $provider,
]); ]);
$cu = $this->hydrateCompanyUser(); $cu = $this->hydrateCompanyUser();
@ -424,7 +447,6 @@ class LoginController extends BaseController
return $this->timeConstrainedResponse($cu); return $this->timeConstrainedResponse($cu);
} }
$name = OAuth::splitName($user->name); $name = OAuth::splitName($user->name);
$new_account = [ $new_account = [
@ -433,7 +455,7 @@ class LoginController extends BaseController
'password' => '', 'password' => '',
'email' => $user->email, 'email' => $user->email,
'oauth_user_id' => $user->id, 'oauth_user_id' => $user->id,
'oauth_provider_id' => 'microsoft', 'oauth_provider_id' => $provider,
]; ];
MultiDB::setDefaultDatabase(); MultiDB::setDefaultDatabase();
@ -456,14 +478,6 @@ class LoginController extends BaseController
} }
return response()
->json(['message' => ctrans('texts.invalid_credentials')], 401)
->header('X-App-Version', config('ninja.app_version'))
->header('X-Api-Version', config('ninja.minimum_client_version'));
}
private function hydrateCompanyUser(): Builder private function hydrateCompanyUser(): Builder
{ {
@ -487,8 +501,7 @@ class LoginController extends BaseController
if($cu->count() == 0) if($cu->count() == 0)
return $cu; return $cu;
if(auth()->user()->company_users()->count() != auth()->user()->tokens()->distinct('company_id')->count()) if (auth()->user()->company_users()->count() != auth()->user()->tokens()->distinct('company_id')->count()) {
{
auth()->user()->companies->each(function ($company) { auth()->user()->companies->each(function ($company) {