mirror of
https://koodu.h-i.works/projects/thebadspace
synced 2025-06-25 16:04:37 -05:00
Auth Framework, Part 1
Started buildig the authorization infrastructure to 1. create the initial admin class to then 2. the Auth manager class can be created to manage access based on roles. added number of template files as well just as a UI base to get things started. Auth Framework Part 2 will complete the Auth mangager and clean up the admin area.
This commit is contained in:
97
src/Service/Auth.php
Normal file
97
src/Service/Auth.php
Normal file
@ -0,0 +1,97 @@
|
||||
<?php
|
||||
|
||||
// src/Controller/ProductController.php
|
||||
|
||||
namespace App\Service;
|
||||
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Component\HttpFoundation\RequestStack;
|
||||
use App\Entity\Members;
|
||||
use ReallySimpleJWT\Token;
|
||||
|
||||
class Auth
|
||||
{
|
||||
private $session;
|
||||
private $entityManager;
|
||||
|
||||
public function __construct(
|
||||
EntityManagerInterface $entityManager,
|
||||
RequestStack $requestStack
|
||||
) {
|
||||
$this->entityManager = $entityManager;
|
||||
$this->session = $requestStack->getSession();
|
||||
$this->secret = '!$ec7eT$l0w*';
|
||||
}
|
||||
|
||||
public function authCheck($email, $password)
|
||||
{
|
||||
$response = [];
|
||||
$member = new Members();
|
||||
$members = $this->entityManager->getRepository(Members::class);
|
||||
$member = $members->findOneBy(["email" => $email]);
|
||||
if (!$member) {
|
||||
$response = ["status" => false, "message" => "Member Not Found"];
|
||||
} else {
|
||||
if (!password_verify($password, $member->getPassword())) {
|
||||
$response = ["status" => false, "message" => "Check that password"];
|
||||
} else {
|
||||
$this->session->set("member", $member);
|
||||
|
||||
$secret = $this->secret;
|
||||
$expiration = time() + 3600;
|
||||
$token = Token::create(
|
||||
$member->getMemberId(),
|
||||
$secret,
|
||||
$expiration,
|
||||
"nile_admin"
|
||||
);
|
||||
|
||||
$this->session->set("token", $token);
|
||||
$response = ["status" => true, "message" => "Welcome Back"];
|
||||
}
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
public function logOut()
|
||||
{
|
||||
$this->session->set("member", null);
|
||||
$this->session->set("token", null);
|
||||
}
|
||||
|
||||
public function APIStatus()
|
||||
{
|
||||
$response = [];
|
||||
$verify = Token::validate($this->session->get("token"), $this->secret);
|
||||
|
||||
if ($verify) {
|
||||
$response = [
|
||||
"status" => true,
|
||||
"message" => "Token is good",
|
||||
"token" => $this->session->get("token"),
|
||||
];
|
||||
} else {
|
||||
$response = ["status" => false, "message" => "Bad Token, champ."];
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
public function status()
|
||||
{
|
||||
$response = [];
|
||||
if ($this->session->get("member")) {
|
||||
//$member = $this->session->get("member");
|
||||
$response = [
|
||||
"status" => true,
|
||||
"role" => $this->session->get("member")->getRole(),
|
||||
"token" => $this->session->get("token"),
|
||||
];
|
||||
} else {
|
||||
$response = ["status" => false, "role" => null];
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
}
|
173
src/Service/HandleMembers.php
Normal file
173
src/Service/HandleMembers.php
Normal file
@ -0,0 +1,173 @@
|
||||
<?php
|
||||
|
||||
// src/Controller/ProductController.php
|
||||
|
||||
namespace App\Service;
|
||||
|
||||
use Doctrine\DBAL\DBALException;
|
||||
use Doctrine\ORM\ORMException;
|
||||
use PDOException;
|
||||
use Exception;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Component\HttpFoundation\RequestStack;
|
||||
use Symfony\Component\Uid\Uuid;
|
||||
use App\Entity\Member;
|
||||
|
||||
//use App\Utils\StringTools;
|
||||
|
||||
/**
|
||||
* Members
|
||||
*
|
||||
* Data class for interacting with Member data from the DB
|
||||
*/
|
||||
class HandleMembers
|
||||
{
|
||||
private $session;
|
||||
private $entityManager;
|
||||
|
||||
public function __construct(
|
||||
EntityManagerInterface $entityManager,
|
||||
RequestStack $requestStack
|
||||
) {
|
||||
$this->entityManager = $entityManager;
|
||||
$this->session = $requestStack->getSession();
|
||||
}
|
||||
|
||||
/**
|
||||
* Grabs member data object from the current section
|
||||
*
|
||||
* @return MEMBERS data object
|
||||
*/
|
||||
public function getMember()
|
||||
{
|
||||
$member = $this->session->get("member");
|
||||
return $member;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add new member to db
|
||||
*
|
||||
* @param Request $request object containing posted data
|
||||
* @return JSON
|
||||
*/
|
||||
public function addMember($request)
|
||||
{
|
||||
$errorMessage = null;
|
||||
$member = new Member();
|
||||
|
||||
//submitted values
|
||||
$handle = $request->request->get("handle");
|
||||
$member->setHandle($handle);
|
||||
$gender = $request->request->get("gender");
|
||||
$member->setGender($gender);
|
||||
$role = $request->request->get("role");
|
||||
$member->setRole($role);
|
||||
$email = $request->request->get("email");
|
||||
$member->setEmail($email);
|
||||
$pronoun = $request->request->get("pronoun");
|
||||
$member->setPronoun($pronoun);
|
||||
|
||||
//set defaults
|
||||
//$utils = new StringTools();
|
||||
$uuid = $hash = password_hash("passw0rd!", PASSWORD_DEFAULT);
|
||||
$member->setPassword($hash);
|
||||
$member->setAvatar("default-member-avatar");
|
||||
$member->setUuid(Uuid::v4());
|
||||
$member->setActive(false);
|
||||
$member->setCreatedAt(new \DateTimeImmutable());
|
||||
$member->setLastLogin(new \DateTimeImmutable());
|
||||
|
||||
$this->entityManager->persist($member);
|
||||
|
||||
try {
|
||||
$this->entityManager->flush();
|
||||
} catch (PDOException $error) {
|
||||
$errorMessage = $error->getMessage();
|
||||
} catch (DBALException $error) {
|
||||
$errorMessage = $error->getMessage();
|
||||
} catch (ORMException $error) {
|
||||
$errorMessage = $error->getMessage();
|
||||
} catch (Exception $error) {
|
||||
$errorMessage = $error->getMessage();
|
||||
} catch (SyntaxErrorException $e) {
|
||||
$errorMessage = $error->getMessage();
|
||||
}
|
||||
// return result status
|
||||
if ($errorMessage == null) {
|
||||
return $response = [
|
||||
"status" => true,
|
||||
"message" => "New member added. Woohoo!",
|
||||
];
|
||||
} else {
|
||||
return $response = ["status" => false, "message" => $errorMessage];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates member data in db
|
||||
*
|
||||
* @param Request $request object containing posted data
|
||||
* @return JSON
|
||||
*/
|
||||
public function updateMember($request)
|
||||
{
|
||||
$errorMessage = null;
|
||||
$currentMember = $this->getMember();
|
||||
$id = $currentMember->getMemberId();
|
||||
$member = $this->entityManager->getRepository(Members::class)->find($id);
|
||||
$image = $request->files->get("avi");
|
||||
if (!empty($image)) {
|
||||
$name = $image->getClientOriginalName();
|
||||
$member->setAvatar($name);
|
||||
}
|
||||
$first = $request->request->get("first_name");
|
||||
$member->setFirstName($first);
|
||||
$last = $request->request->get("last_name");
|
||||
$member->setLastName($last);
|
||||
$handle = $request->request->get("handle");
|
||||
$member->setHandle($handle);
|
||||
$gender = $request->request->get("gender");
|
||||
$member->setGender($gender);
|
||||
$public = $request->request->get("public");
|
||||
if ($public == "true") {
|
||||
$member->setPublicProfile(true);
|
||||
} else {
|
||||
$member->setPublicProfile(false);
|
||||
}
|
||||
$email = $request->request->get("email");
|
||||
$member->setEmail($email);
|
||||
$pronoun = $request->request->get("pronoun");
|
||||
$member->setPronouns($pronoun);
|
||||
$pass_new = $request->request->get("password_new");
|
||||
if ($pass_new != "" || $pass_new != null) {
|
||||
$hash = password_hash($pass_new, PASSWORD_DEFAULT);
|
||||
$member->setPassword($hash);
|
||||
}
|
||||
$this->entityManager->persist($member);
|
||||
|
||||
//error checking
|
||||
try {
|
||||
$this->entityManager->flush();
|
||||
} catch (PDOException $error) {
|
||||
$errorMessage = $error->getMessage();
|
||||
} catch (DBALException $error) {
|
||||
$errorMessage = $error->getMessage();
|
||||
} catch (ORMException $error) {
|
||||
$errorMessage = $error->getMessage();
|
||||
} catch (Exception $error) {
|
||||
$errorMessage = $error->getMessage();
|
||||
} catch (SyntaxErrorException $e) {
|
||||
$errorMessage = $error->getMessage();
|
||||
}
|
||||
// return result status
|
||||
if ($errorMessage == null) {
|
||||
$this->session->set("member", $member);
|
||||
return $response = [
|
||||
"status" => true,
|
||||
"message" => "Profile Updated! Nice!",
|
||||
];
|
||||
} else {
|
||||
return $response = ["status" => false, "message" => $errorMessage];
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user