Changeset View
Changeset View
Standalone View
Standalone View
src/app/User.php
<?php | <?php | ||||
namespace App; | namespace App; | ||||
use App\AuthAttempt; | use App\AuthAttempt; | ||||
use App\Auth\Utils as AuthUtils; | |||||
use App\Traits\AliasesTrait; | use App\Traits\AliasesTrait; | ||||
use App\Traits\BelongsToTenantTrait; | use App\Traits\BelongsToTenantTrait; | ||||
use App\Traits\EntitleableTrait; | use App\Traits\EntitleableTrait; | ||||
use App\Traits\EmailPropertyTrait; | use App\Traits\EmailPropertyTrait; | ||||
use App\Traits\UserConfigTrait; | use App\Traits\UserConfigTrait; | ||||
use App\Traits\UuidIntKeyTrait; | use App\Traits\UuidIntKeyTrait; | ||||
use App\Traits\SettingsTrait; | use App\Traits\SettingsTrait; | ||||
use App\Traits\StatusPropertyTrait; | use App\Traits\StatusPropertyTrait; | ||||
▲ Show 20 Lines • Show All 796 Lines • ▼ Show 20 Lines | public static function findAndAuthenticate($username, $password, $clientIP = null, $verifyMFA = true): array | ||||
if (!$clientIP) { | if (!$clientIP) { | ||||
$clientIP = request()->ip(); | $clientIP = request()->ip(); | ||||
} | } | ||||
$user = User::where('email', $username)->first(); | $user = User::where('email', $username)->first(); | ||||
if (!$user) { | if (!$user) { | ||||
$error = AuthAttempt::REASON_NOTFOUND; | $error = AuthAttempt::REASON_NOTFOUND; | ||||
} else { | |||||
if ($userid = AuthUtils::tokenValidate($password)) { | |||||
if ($user->id == $userid) { | |||||
$verifyMFA = false; | |||||
} else { | |||||
$error = AuthAttempt::REASON_PASSWORD; | |||||
} | } | ||||
} else { | |||||
// Check user password | // Check user password | ||||
if (!$error && !$user->validateCredentials($username, $password)) { | if (!$user->validateCredentials($username, $password)) { | ||||
$error = AuthAttempt::REASON_PASSWORD; | $error = AuthAttempt::REASON_PASSWORD; | ||||
} | } | ||||
} | |||||
} | |||||
if ($verifyMFA) { | if ($verifyMFA) { | ||||
// Check user (request) location | // Check user (request) location | ||||
if (!$error && !$user->validateLocation($clientIP)) { | if (!$error && !$user->validateLocation($clientIP)) { | ||||
$error = AuthAttempt::REASON_GEOLOCATION; | $error = AuthAttempt::REASON_GEOLOCATION; | ||||
} | } | ||||
// Check 2FA | // Check 2FA | ||||
▲ Show 20 Lines • Show All 72 Lines • Show Last 20 Lines |