diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 9e097983bedd..e608c4d74d36 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -606,6 +606,10 @@ class LoginController extends BaseController if (request()->has('code')) { return $this->handleProviderCallback($provider); } else { + + if(!in_array($provider, ['google'])) + return abort(400, 'Invalid provider'); + return Socialite::driver($provider)->with($parameters)->scopes($scopes)->redirect(); } } diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 697dd36283ce..8864eb6fc9d0 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -380,7 +380,7 @@ class UserController extends BaseController */ public function update(UpdateUserRequest $request, User $user) { - $old_company_user = $user->company_user; + $old_company_user = $user->company_user(); $old_user = json_encode($user); $old_user_email = $user->getOriginal('email'); @@ -398,8 +398,8 @@ class UserController extends BaseController if( - strcasecmp($old_company_user->permissions, $user->company_user->permissions) != 0 || - $old_company_user->is_admin != $user->company_user->is_admin + strcasecmp($old_company_user->permissions, $user->company_user()->permissions) != 0 || + $old_company_user->is_admin != $user->company_user()->is_admin ){ $user->company_user()->update(["permissions_updated_at" => now()]); } diff --git a/app/Http/Middleware/TokenAuth.php b/app/Http/Middleware/TokenAuth.php index c4122f731129..b46a8485ade8 100644 --- a/app/Http/Middleware/TokenAuth.php +++ b/app/Http/Middleware/TokenAuth.php @@ -30,7 +30,7 @@ class TokenAuth */ public function handle($request, Closure $next) { - if ($request->header('X-API-TOKEN') && ($company_token = CompanyToken::with(['user', 'company'])->where('token', $request->header('X-API-TOKEN'))->first())) { + if ($request->header('X-API-TOKEN') && ($company_token = CompanyToken::with(['user', 'company', 'cu'])->where('token', $request->header('X-API-TOKEN'))->first())) { $user = $company_token->user; $error = [ @@ -65,7 +65,7 @@ class TokenAuth }); //user who once existed, but has been soft deleted - if ($company_token->company_user->is_locked) { + if ($company_token->cu->is_locked) { $error = [ 'message' => 'User access locked', 'errors' => new stdClass, diff --git a/app/Models/CompanyToken.php b/app/Models/CompanyToken.php index 1c332e4d55fd..1ccb2d20d0c6 100644 --- a/app/Models/CompanyToken.php +++ b/app/Models/CompanyToken.php @@ -55,4 +55,9 @@ class CompanyToken extends BaseModel ->where('company_id', $this->company_id) ->where('user_id', $this->user_id); } + + public function cu() + { + return $this->hasOneThrough(CompanyUser::class, Company::class, 'id', 'company_id', 'company_id', 'id'); + } } diff --git a/app/Models/User.php b/app/Models/User.php index f9871a9f3191..72ea19940ae4 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -142,6 +142,16 @@ class User extends Authenticatable implements MustVerifyEmail return $this->hasMany(CompanyToken::class)->orderBy('id', 'ASC'); } + public function token() + { + if (request()->header('X-API-TOKEN')) { + return CompanyToken::with(['company','cu'])->where('token', request()->header('X-API-TOKEN'))->first(); + } + + + return $this->tokens()->first(); + } + /** * Returns all companies a user has access to. * @@ -219,17 +229,20 @@ class User extends Authenticatable implements MustVerifyEmail public function co_user() { - return $this->company_user(); + return $this->token()->cu; + // return $this->company_user(); } public function company_user() { - if (! $this->id && auth()->user()) { - $this->id = auth()->user()->id; - } + // if (! $this->id && auth()->user()) { + // $this->id = auth()->user()->id; + // } - return $this->hasOneThrough(CompanyUser::class, CompanyToken::class, 'user_id', 'user_id', 'id', 'user_id') - ->withTrashed(); + return $this->token()->cu; + + // return $this->hasOneThrough(CompanyUser::class, CompanyToken::class, 'user_id', 'user_id', 'id', 'user_id') + // ->withTrashed(); // if (request()->header('X-API-TOKEN')) { @@ -268,7 +281,9 @@ class User extends Authenticatable implements MustVerifyEmail */ public function permissions() { - return $this->company_user->permissions; + return $this->token()->cu->permissions; + + // return $this->company_user->permissions; } /** @@ -278,7 +293,9 @@ class User extends Authenticatable implements MustVerifyEmail */ public function settings() { - return json_decode($this->company_user->settings); + return json_decode($this->token()->cu->settings); + + //return json_decode($this->company_user->settings); } /** @@ -288,12 +305,16 @@ class User extends Authenticatable implements MustVerifyEmail */ public function isAdmin() : bool { - return $this->company_user->is_admin; + return $this->token()->cu->is_admin; + + // return $this->company_user->is_admin; } public function isOwner() : bool { - return $this->company_user->is_owner; + return $this->token()->cu->is_owner; + + // return $this->company_user->is_owner; } /** @@ -345,8 +366,13 @@ class User extends Authenticatable implements MustVerifyEmail return $this->isOwner() || $this->isAdmin() || - (stripos($this->company_user->permissions, $all_permission) !== false) || - (stripos($this->company_user->permissions, $permission) !== false); + (stripos($this->token()->cu->permissions, $all_permission) !== false) || + (stripos($this->token()->cu->permissions, $permission) !== false); + + // return $this->isOwner() || + // $this->isAdmin() || + // (stripos($this->company_user->permissions, $all_permission) !== false) || + // (stripos($this->company_user->permissions, $permission) !== false); } public function documents() @@ -370,9 +396,12 @@ class User extends Authenticatable implements MustVerifyEmail public function routeNotificationForSlack($notification) { - if ($this->company_user->slack_webhook_url) { - return $this->company_user->slack_webhook_url; - } + + if($this->token()->cu->slack_webhook_url) + return $this->token()->cu->slack_webhook_url; + // if ($this->company_user->slack_webhook_url) { + // return $this->company_user->slack_webhook_url; + // } } public function routeNotificationForMail($notification) diff --git a/app/Repositories/UserRepository.php b/app/Repositories/UserRepository.php index fdad645cdeb9..09530467a6ad 100644 --- a/app/Repositories/UserRepository.php +++ b/app/Repositories/UserRepository.php @@ -200,7 +200,6 @@ class UserRepository extends BaseRepository $user->is_deleted = false; $user->save(); $user->restore(); - // $user->company_user->restore(); $cu = CompanyUser::withTrashed() ->where('user_id', $user->id) diff --git a/app/Utils/HtmlEngine.php b/app/Utils/HtmlEngine.php index ff6b6a1f2556..b42579eafaf3 100644 --- a/app/Utils/HtmlEngine.php +++ b/app/Utils/HtmlEngine.php @@ -634,9 +634,11 @@ class HtmlEngine { $country = Country::find($this->settings->country_id); - if ($country) { - return ctrans('texts.country_' . $country->iso_3166_2); - } + if($country) + return $country->iso_3166_2; + // if ($country) { + // return ctrans('texts.country_' . $country->iso_3166_2); + // } return ' '; } diff --git a/tests/Feature/LoginTest.php b/tests/Feature/LoginTest.php index 6375dd9de736..7afee2518c74 100644 --- a/tests/Feature/LoginTest.php +++ b/tests/Feature/LoginTest.php @@ -175,7 +175,7 @@ class LoginTest extends TestCase $this->assertTrue($user->companies !== null); $this->assertTrue($user->company_users !== null); $this->assertTrue($user->company_users->first() !== null); - $this->assertTrue($user->company_user->account !== null); + $this->assertTrue($user->company_user()->account !== null); $this->assertEquals($user->email, 'test@example.com'); $this->assertTrue(\Hash::check('123456', $user->password));