diff --git a/database/migrations/2022_04_06_063114_add_integrateio_id_field_to_user_table.php b/database/migrations/2022_04_06_063114_add_integrateio_id_field_to_user_table.php new file mode 100644 index 00000000..e37b5a34 --- /dev/null +++ b/database/migrations/2022_04_06_063114_add_integrateio_id_field_to_user_table.php @@ -0,0 +1,41 @@ +integer('integrateio_id')->after('id')->nullable(); + } + ); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + if (Schema::hasColumn('user', 'integrateio_id')) { + Schema::table( + 'user', + function (Blueprint $t){ + $t->dropColumn('integrateio_id'); + } + ); + } + } +} diff --git a/src/Components/RestHandler.php b/src/Components/RestHandler.php index de37aeaf..9ab95908 100644 --- a/src/Components/RestHandler.php +++ b/src/Components/RestHandler.php @@ -16,7 +16,7 @@ use DreamFactory\Core\Exceptions\NotFoundException; use DreamFactory\Core\Utility\ResourcesWrapper; use DreamFactory\Core\Utility\ResponseFactory; -use Symfony\Component\HttpFoundation\RedirectResponse; +use Illuminate\Http\RedirectResponse; use Symfony\Component\HttpFoundation\StreamedResponse; /** diff --git a/src/Http/Controllers/RestController.php b/src/Http/Controllers/RestController.php index 55b8cdb0..d7c70cdf 100644 --- a/src/Http/Controllers/RestController.php +++ b/src/Http/Controllers/RestController.php @@ -9,8 +9,7 @@ use DreamFactory\Core\Utility\Session; use Log; use ServiceManager; -use Symfony\Component\HttpFoundation\RedirectResponse; -use Symfony\Component\HttpFoundation\Response; +use Illuminate\Http\RedirectResponse; use Symfony\Component\HttpFoundation\StreamedResponse; /** diff --git a/src/Models/User.php b/src/Models/User.php index c0b86af6..6f155ac6 100644 --- a/src/Models/User.php +++ b/src/Models/User.php @@ -84,7 +84,8 @@ class User extends BaseSystemModel implements AuthenticatableContract, CanResetP 'oauth_provider', 'last_login_date', 'default_app_id', - 'saml' + 'saml', + 'integrateio_id' ]; /** @@ -110,7 +111,7 @@ class User extends BaseSystemModel implements AuthenticatableContract, CanResetP * * @var array */ - protected $hidden = ['is_sys_admin', 'password', 'remember_token', 'security_answer']; + protected $hidden = ['is_sys_admin', 'password', 'remember_token', 'security_answer', 'confirm_code']; /** * Field type casting diff --git a/src/Utility/Session.php b/src/Utility/Session.php index fc865b20..8443ab33 100644 --- a/src/Utility/Session.php +++ b/src/Utility/Session.php @@ -668,19 +668,22 @@ public static function replaceLookups(&$subject, $use_private = false) */ public static function authenticate(array $credentials, $remember = false, $login = true, $appId = null) { - if (\Auth::attempt($credentials)) { + + if (isset($credentials['integrateio_id'])) { + $user = static::loginIntegrateUser($credentials); + /** @noinspection PhpUndefinedFieldInspection */ + static::checkRole($user->id); + if ($login) { + static::confirmUserLogin($user, $remember, $appId); + } + + return true; + } else if (\Auth::attempt($credentials)) { $user = \Auth::getLastAttempted(); /** @noinspection PhpUndefinedFieldInspection */ static::checkRole($user->id); if ($login) { - /** @noinspection PhpUndefinedFieldInspection */ - $user->last_login_date = Carbon::now()->toDateTimeString(); - /** @noinspection PhpUndefinedFieldInspection */ - $user->confirm_code = 'y'; - /** @noinspection PhpUndefinedMethodInspection */ - $user->save(); - /** @noinspection PhpParamsInspection */ - Session::setUserInfoWithJWT($user, $remember, $appId); + static::confirmUserLogin($user, $remember, $appId); } return true; @@ -689,6 +692,29 @@ public static function authenticate(array $credentials, $remember = false, $logi } } + /** + * @param array $credentials + * @return User + * @throws \Exception + */ + protected static function loginIntegrateUser(array $credentials) { + $userid = User::where('integrateio_id', $credentials['integrateio_id']) -> first() ->id; + $user = \Auth::loginUsingId($userid); + + return $user; + } + + protected static function confirmUserLogin($user, $remember, $appId) { + /** @noinspection PhpUndefinedFieldInspection */ + $user->last_login_date = Carbon::now()->toDateTimeString(); + /** @noinspection PhpUndefinedFieldInspection */ + $user->confirm_code = 'y'; + /** @noinspection PhpUndefinedMethodInspection */ + $user->save(); + /** @noinspection PhpParamsInspection */ + Session::setUserInfoWithJWT($user, $remember, $appId); + } + /** * @param $userId *