forked from projects/fipamo
filled out auth service class
expanded the auth service class to store member info in the current session so validation is easier also added a token to session data that expires every hour so people won't be logged in forever and take breaks hey, you matter too
This commit is contained in:
parent
47c8f7b008
commit
ad57c29e8d
4 changed files with 108 additions and 14 deletions
|
@ -3,26 +3,29 @@
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\Interfaces\PageRepositoryInterface;
|
use App\Interfaces\PageRepositoryInterface;
|
||||||
|
use App\Services\AuthService;
|
||||||
|
|
||||||
class DashController extends Controller
|
class DashController extends Controller
|
||||||
{
|
{
|
||||||
protected PageRepositoryInterface $pages;
|
protected PageRepositoryInterface $pages;
|
||||||
|
protected AuthService $auth;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
PageRepositoryInterface $pageRepository,
|
PageRepositoryInterface $pageRepository,
|
||||||
|
AuthService $authService,
|
||||||
) {
|
) {
|
||||||
$this->pages = $pageRepository;
|
$this->pages = $pageRepository;
|
||||||
|
$this->auth = $authService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function start()
|
public function start()
|
||||||
{
|
{
|
||||||
$status = session('handle') !== null ? true : false;
|
|
||||||
$result = [];
|
$result = [];
|
||||||
if ($status) {
|
if ($this->auth::status()) {
|
||||||
$result = $this->pages->getGroup(1, 4);
|
$result = $this->pages->getGroup(1, 4);
|
||||||
}
|
}
|
||||||
return view('back.start', [
|
return view('back.start', [
|
||||||
"status" => $status,
|
"status" => $this->auth::status(),
|
||||||
"result" => $result,
|
"result" => $result,
|
||||||
"title" => "Start"
|
"title" => "Start"
|
||||||
]);
|
]);
|
||||||
|
@ -30,13 +33,12 @@ class DashController extends Controller
|
||||||
|
|
||||||
public function book($pageFilter = 'all', $pageNum = 1)
|
public function book($pageFilter = 'all', $pageNum = 1)
|
||||||
{
|
{
|
||||||
$status = session('handle') !== null ? true : false;
|
|
||||||
$result = [];
|
$result = [];
|
||||||
if ($status) {
|
if ($this->auth::status()) {
|
||||||
$result = $this->pages->getGroup($pageNum, 4, $pageFilter);
|
$result = $this->pages->getGroup($pageNum, 4, $pageFilter);
|
||||||
}
|
}
|
||||||
return view('back.book', [
|
return view('back.book', [
|
||||||
"status" => $status,
|
"status" => $this->auth::status(),
|
||||||
"result" => $result,
|
"result" => $result,
|
||||||
"currentPage" => $pageNum,
|
"currentPage" => $pageNum,
|
||||||
"title" => "Pages"
|
"title" => "Pages"
|
||||||
|
@ -45,10 +47,9 @@ class DashController extends Controller
|
||||||
|
|
||||||
public function page($mode, $uuid)
|
public function page($mode, $uuid)
|
||||||
{
|
{
|
||||||
$status = session('handle') !== null ? true : false;
|
|
||||||
$page = $this->pages->getById($uuid)->first();
|
$page = $this->pages->getById($uuid)->first();
|
||||||
return view('back.page', [
|
return view('back.page', [
|
||||||
"status" => $status,
|
"status" => $this->auth::status(),
|
||||||
"mode" => $mode,
|
"mode" => $mode,
|
||||||
"page" => $page,
|
"page" => $page,
|
||||||
"title" => 'Editing ' . $page['title']
|
"title" => 'Editing ' . $page['title']
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
namespace App\Services;
|
namespace App\Services;
|
||||||
|
|
||||||
|
use ReallySimpleJWT\Token;
|
||||||
|
|
||||||
use function _\find;
|
use function _\find;
|
||||||
|
|
||||||
class AuthService
|
class AuthService
|
||||||
|
@ -20,10 +22,25 @@ class AuthService
|
||||||
$found = find($folks, ['handle' => $request->handle]);
|
$found = find($folks, ['handle' => $request->handle]);
|
||||||
if ($found) {
|
if ($found) {
|
||||||
if (password_verify($request->password, $found['password'])) {
|
if (password_verify($request->password, $found['password'])) {
|
||||||
$request->session()->put('handle', $found['handle']);
|
$member = [
|
||||||
$request->session()->put('email', $found['email']);
|
'handle' => $found['handle'],
|
||||||
$request->session()->put('role', $found['role']);
|
'email' => $found['email'],
|
||||||
$request->session()->put('avi', $found['avi']);
|
'role' => $found['role'],
|
||||||
|
'avatar' => $found['avi'],
|
||||||
|
'key' => $found['key'],
|
||||||
|
'secret' => $found['secret'],
|
||||||
|
];
|
||||||
|
|
||||||
|
$token = Token::create(
|
||||||
|
$found['key'],
|
||||||
|
$found['secret'],
|
||||||
|
time() + 3600,
|
||||||
|
'localhost'
|
||||||
|
); //expires in an hour
|
||||||
|
$form_token = md5(uniqid(microtime(), true));
|
||||||
|
$request->session()->put('member', $member);
|
||||||
|
$request->session()->put('token', $token);
|
||||||
|
$request->session()->put('form_token', $form_token);
|
||||||
return ['status' => true, 'message' => 'HEY WELCOME BACK'];
|
return ['status' => true, 'message' => 'HEY WELCOME BACK'];
|
||||||
//DO SESSION STUFF
|
//DO SESSION STUFF
|
||||||
} else {
|
} else {
|
||||||
|
@ -34,4 +51,20 @@ class AuthService
|
||||||
return ['status' => false, 'message' => 'CHECK THAT HANDLE'];
|
return ['status' => false, 'message' => 'CHECK THAT HANDLE'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function status()
|
||||||
|
{
|
||||||
|
if (session('member') !== null) {
|
||||||
|
if (
|
||||||
|
Token::validate(session('token'), session('member')['secret']) &&
|
||||||
|
Token::validateExpiration(session('token'), session('member')['secret'])
|
||||||
|
) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
"mindtwo/laravel-blade-spaceless": "^1.2",
|
"mindtwo/laravel-blade-spaceless": "^1.2",
|
||||||
"mnapoli/front-yaml": "^2.0",
|
"mnapoli/front-yaml": "^2.0",
|
||||||
"olegatro/html-sanitizer-relative": "^1.0",
|
"olegatro/html-sanitizer-relative": "^1.0",
|
||||||
|
"rbdwllr/reallysimplejwt": "^5.0",
|
||||||
"symfony/yaml": "^7.0",
|
"symfony/yaml": "^7.0",
|
||||||
"tgalopin/html-sanitizer": "^1.5"
|
"tgalopin/html-sanitizer": "^1.5"
|
||||||
},
|
},
|
||||||
|
|
61
composer.lock
generated
61
composer.lock
generated
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "7fbeca42f1a6ac784e32ca1e42e61d7a",
|
"content-hash": "6ae8a3cfbf0bceca61b34d852e461d95",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "brick/math",
|
"name": "brick/math",
|
||||||
|
@ -3507,6 +3507,65 @@
|
||||||
],
|
],
|
||||||
"time": "2023-11-08T05:53:05+00:00"
|
"time": "2023-11-08T05:53:05+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "rbdwllr/reallysimplejwt",
|
||||||
|
"version": "5.0.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/RobDWaller/ReallySimpleJWT.git",
|
||||||
|
"reference": "d7e1014ccbfba43420866fd3dc3f18a521883868"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/RobDWaller/ReallySimpleJWT/zipball/d7e1014ccbfba43420866fd3dc3f18a521883868",
|
||||||
|
"reference": "d7e1014ccbfba43420866fd3dc3f18a521883868",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=8.0.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"friendsofphp/php-cs-fixer": "^2.19",
|
||||||
|
"infection/infection": "^0.26",
|
||||||
|
"phpbench/phpbench": "^1.2",
|
||||||
|
"phploc/phploc": "^7.0",
|
||||||
|
"phpmd/phpmd": "^2.11",
|
||||||
|
"phpstan/phpstan": "^1.2",
|
||||||
|
"phpunit/phpunit": "^9.5",
|
||||||
|
"sebastian/phpcpd": "^6.0",
|
||||||
|
"squizlabs/php_codesniffer": "^3.6"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"ReallySimpleJWT\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Rob Waller",
|
||||||
|
"email": "rdwaller1984@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "A really simple library to generate user authentication JSON Web Tokens.",
|
||||||
|
"keywords": [
|
||||||
|
"Authentication",
|
||||||
|
"json",
|
||||||
|
"json web tokens",
|
||||||
|
"jwt",
|
||||||
|
"php",
|
||||||
|
"tokens"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/RobDWaller/ReallySimpleJWT/issues",
|
||||||
|
"source": "https://github.com/RobDWaller/ReallySimpleJWT/tree/5.0.0"
|
||||||
|
},
|
||||||
|
"time": "2022-04-16T14:00:21+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "sebastian/comparator",
|
"name": "sebastian/comparator",
|
||||||
"version": "5.0.1",
|
"version": "5.0.1",
|
||||||
|
|
Loading…
Reference in a new issue