Skip to content

Commit

Permalink
token login
Browse files Browse the repository at this point in the history
  • Loading branch information
Pathologic committed Oct 12, 2023
1 parent caf21cd commit 926532d
Show file tree
Hide file tree
Showing 6 changed files with 83 additions and 9 deletions.
5 changes: 5 additions & 0 deletions src/Exceptions/TokenExpiredException.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?php

namespace EvolutionCMS\UserManager\Exceptions;

class TokenExpiredException extends \Exception { }
7 changes: 7 additions & 0 deletions src/Services/UserManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
use EvolutionCMS\UserManager\Services\Users\UserChangePassword;
use EvolutionCMS\UserManager\Services\Users\UserDelete;
use EvolutionCMS\UserManager\Services\Users\UserEdit;
use EvolutionCMS\UserManager\Services\Users\UserTokenLogin;
use EvolutionCMS\UserManager\Services\Users\UserHashLogin;
use EvolutionCMS\UserManager\Services\Users\UserLogin;
use EvolutionCMS\UserManager\Services\Users\UserLogout;
Expand Down Expand Up @@ -103,6 +104,12 @@ public function hashLogin(array $userData, bool $events = true, bool $cache = tr
return $user->process();
}

public function tokenLogin(array $userData, bool $events = true, bool $cache = true)
{
$user = new UserTokenLogin($userData, $events, $cache);
return $user->process();
}

public function logout(array $userData = [], bool $events = true, bool $cache = true)
{
$user = new UserLogout($userData, $events, $cache);
Expand Down
5 changes: 2 additions & 3 deletions src/Services/Users/UserEdit.php
Original file line number Diff line number Diff line change
Expand Up @@ -100,10 +100,10 @@ public function process(): \Illuminate\Database\Eloquent\Model
if (!$this->checkRules()) {
throw new ServiceActionException(\Lang::get('global.error_no_privileges'));
}

$user = User::find($this->userData['id']);
$this->userData = array_merge($user->toArray() + $user->attributes->toArray(), $this->userData);

// invoke OnBeforeUserFormSave event
if ($this->events) {
EvolutionCMS()->invokeEvent("OnBeforeUserSave", [
Expand All @@ -119,7 +119,6 @@ public function process(): \Illuminate\Database\Eloquent\Model
$exception->setValidationErrors($this->validateErrors);
throw $exception;
}

if (isset($this->userData['username']) && $this->userData['username'] != '') {
$user->username = $this->userData['username'];
$user->save();
Expand Down
6 changes: 2 additions & 4 deletions src/Services/Users/UserHashLogin.php
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,10 @@ public function process(): \Illuminate\Database\Eloquent\Model

if ($this->events) {
// invoke OnManagerLogin event
EvolutionCMS()->invokeEvent('OnManagerLogin', array(
EvolutionCMS()->invokeEvent('OnUserLogin', [
'userid' => $this->user->getKey(),
'username' => $this->user->username,
'userpassword' => $this->userData['password'],
'rememberme' => $this->userData['rememberme']
));
]);
}
$this->user->cachepwd = '';
$this->user->save();
Expand Down
4 changes: 2 additions & 2 deletions src/Services/Users/UserLogin.php
Original file line number Diff line number Diff line change
Expand Up @@ -400,13 +400,13 @@ public function checkPassword()
{
if ($this->events) {
// invoke OnManagerAuthentication event
$rt = EvolutionCMS()->invokeEvent('OnUserAuthentication', array(
$rt = EvolutionCMS()->invokeEvent('OnUserAuthentication', [
'userid' => $this->user->getKey(),
'username' => $this->user->username,
'userpassword' => $this->userData['password'],
'savedpassword' => $this->user->password,
'rememberme' => $this->userData['rememberme'] ?? false
));
]);
}

// check if plugin authenticated the user
Expand Down
65 changes: 65 additions & 0 deletions src/Services/Users/UserTokenLogin.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<?php namespace EvolutionCMS\UserManager\Services\Users;

use Carbon\Carbon;
use EvolutionCMS\Exceptions\ServiceActionException;
use EvolutionCMS\Exceptions\ServiceValidationException;
use EvolutionCMS\UserManager\Exceptions\TokenExpiredException;
use EvolutionCMS\UserManager\Interfaces\UserServiceInterface;
use \EvolutionCMS\Models\User;
use Illuminate\Support\Facades\Lang;

class UserTokenLogin extends UserLogin
{
public function getValidationRules(): array
{
return [
'token' => ['required'],
'context' => ['nullable', 'in:web,mgr'],
];
}

public function getValidationMessages(): array
{
return [
'token.required' => Lang::get("global.required_field", ['field' => 'token']),
];
}

/**
* @return \Illuminate\Database\Eloquent\Model
* @throws ServiceActionException
* @throws ServiceValidationException
*/
public function process(): \Illuminate\Database\Eloquent\Model
{
if (!$this->checkRules()) {
throw new ServiceActionException(\Lang::get('global.login_processor_unknown_user'));
}

$this->user = \EvolutionCMS\Models\User::query()
->where('access_token', $this->userData['token'])->first();
if (is_null($this->user)) {
throw new ServiceActionException(\Lang::get('global.login_processor_unknown_user'));
}

if(Carbon::now()->greaterThan($this->user->valid_to)) {
throw new TokenExpiredException(\Lang::get('global.login_token_expired'));
}

$this->userSettings = $this->user->settings->pluck('setting_value', 'setting_name')->toArray();

$this->validateAuth();
$this->authProcess();
$this->clearActiveUsers();

if ($this->events) {
// invoke OnManagerLogin event
EvolutionCMS()->invokeEvent('OnUserLogin', array(
'userid' => $this->user->getKey(),
'username' => $this->user->username,
));
}

return $this->user;
}
}

0 comments on commit 926532d

Please sign in to comment.