uggly push
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
62ddaa6359
commit
7a551b1e65
@ -0,0 +1,111 @@
|
||||
<?php
|
||||
namespace Utils;
|
||||
use \Exception;
|
||||
final class Validation {
|
||||
|
||||
/**
|
||||
* Valide une action passée en paramètre.
|
||||
*
|
||||
* @param string $action L'action à valider.
|
||||
* @return string L'action validée si elle est conforme.
|
||||
* @throws Exception Si l'action n'est pas valide.
|
||||
*/
|
||||
public static function val_action($action) {
|
||||
if (!isset($action) || !Validation::val_string($action)) {
|
||||
throw new Exception("Pas d'action spécifiée.");
|
||||
} else {
|
||||
return $action;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Valide une chaîne de caractères.
|
||||
*
|
||||
* @param string $string La chaîne à valider.
|
||||
* @return bool True si la chaîne est valide, sinon false.
|
||||
* @throws Exception Si la chaîne n'est pas valide (tentative d'injection de code).
|
||||
*/
|
||||
public static function val_string(string $string) : bool {
|
||||
if (filter_var($string, FILTER_SANITIZE_STRING) !== $string) {
|
||||
throw new Exception("$string n'est pas valide. Tentative d'injection de code (attaque sécurité)!");
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Valide un entier.
|
||||
*
|
||||
* @param int $int L'entier à valider.
|
||||
* @return bool True si l'entier est valide, sinon false.
|
||||
* @throws Exception Si l'entier n'est pas valide (tentative d'injection de code).
|
||||
*/
|
||||
public static function val_int(int $int) : bool {
|
||||
if (filter_var($int, FILTER_SANITIZE_NUMBER_INT) !== $int) {
|
||||
throw new Exception("$int n'est pas valide. Tentative d'injection de code (attaque sécurité)!");
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Valide un mot de passe.
|
||||
*
|
||||
* @param string $password Le mot de passe à valider.
|
||||
* @return bool True si le mot de passe est valide, sinon false.
|
||||
* @throws Exception Si le mot de passe n'est pas valide.
|
||||
*/
|
||||
public static function val_password(string $password) : bool {
|
||||
if ($password === null) {
|
||||
throw new Exception("Le mot de passe ne peut être vide.");
|
||||
} else {
|
||||
if (!preg_match('/^.{6,}$/', $password)) {
|
||||
throw new Exception("Le mot de passe n'est pas valide : au moins 6 caractères requis.");
|
||||
}
|
||||
return Validation::val_string($password);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Valide un booléen.
|
||||
*
|
||||
* @param bool $done La valeur booléenne à valider.
|
||||
* @return bool True si la valeur booléenne est définie, sinon false.
|
||||
*/
|
||||
public static function val_bool(bool $done) : bool {
|
||||
return isset($done);
|
||||
}
|
||||
|
||||
/**
|
||||
* Nettoie une chaîne de caractères.
|
||||
*
|
||||
* @param string $string La chaîne à nettoyer.
|
||||
* @return string La chaîne nettoyée.
|
||||
*/
|
||||
public static function clean_string(string $string) : string {
|
||||
return filter_var($string, FILTER_SANITIZE_STRING);
|
||||
}
|
||||
|
||||
/**
|
||||
* Nettoie un entier.
|
||||
*
|
||||
* @param int $int L'entier à nettoyer.
|
||||
* @return int L'entier nettoyé.
|
||||
*/
|
||||
public static function clean_int(int $int) : int {
|
||||
return filter_var($int, FILTER_SANITIZE_NUMBER_INT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Nettoie une valeur booléenne.
|
||||
*
|
||||
* @param bool $bool La valeur booléenne à nettoyer.
|
||||
* @return bool La valeur booléenne nettoyée.
|
||||
*/
|
||||
public static function clean_bool(bool $bool) : bool {
|
||||
return filter_var($bool, FILTER_VALIDATE_BOOLEAN);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace Exception;
|
||||
|
||||
final class NotImplementedException extends \Exception
|
||||
{
|
||||
public $message = "Not implemented method call";
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
<?php
|
||||
namespace Service;
|
||||
/**
|
||||
* Interface IAuthService
|
||||
* Adding more methods here may violate the Single Responsibility Principle (SRP).
|
||||
* It's recommended to keep this interface focused on authentication-related functionality.
|
||||
*/
|
||||
interface IAuthService {
|
||||
/**
|
||||
* Authenticate a user.
|
||||
*
|
||||
* @param string $username The username of the user.
|
||||
* @param string $password The password of the user.
|
||||
*
|
||||
* @return bool True if authentication is successful, false otherwise.
|
||||
*/
|
||||
public function login(string $username, string $password): bool;
|
||||
|
||||
/**
|
||||
* Register a new user.
|
||||
*
|
||||
* @param string $username The username of the new user.
|
||||
* @param string $password The password of the new user.
|
||||
* @param string $data other data {undefined} for the moment.
|
||||
*
|
||||
* @return bool True if registration is successful, false otherwise.
|
||||
*/
|
||||
public function register(string $username, string $password, ...$data): bool;
|
||||
|
||||
/**
|
||||
* Logout the currently authenticated user.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function logoutUser(): void;
|
||||
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
namespace Model;
|
||||
|
||||
|
||||
class Athlete extends Role {
|
||||
// Attributs spécifiques a l'athlete si nécessaire
|
||||
}
|
||||
|
||||
?>
|
@ -0,0 +1,8 @@
|
||||
<?php
|
||||
use Model\Athlete;
|
||||
|
||||
class Coach extends Athlete {
|
||||
// Attributs spécifiques au Coach si nécessaire
|
||||
}
|
||||
|
||||
?>
|
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
namespace Model;
|
||||
|
||||
abstract class Role {
|
||||
// Attributs spécifiques au Coach si nécessaire
|
||||
}
|
||||
|
||||
|
||||
|
||||
?>
|
@ -0,0 +1,10 @@
|
||||
<!-- It's like a DI Container for Manager -->
|
||||
|
||||
<?php
|
||||
namespace Manager;
|
||||
|
||||
abstract class DataManager {
|
||||
|
||||
}
|
||||
|
||||
?>
|
@ -0,0 +1,39 @@
|
||||
<?php
|
||||
namespace Manager;
|
||||
use Manager\IGenericDataManager;
|
||||
use Service\IAuthService;
|
||||
use Utils\Validation;
|
||||
// c'est le modéle
|
||||
class UserManager {
|
||||
private IAuthService $authService;
|
||||
public function __construct(IAuthService $authService){}
|
||||
|
||||
public function login($loginUser,$passwordUser): bool{
|
||||
if(!Validation::val_string($passwordUser) || !Validation::val_string($loginUser)) throw new \Exception(" some wrong with cred !!!!!");
|
||||
if($this->authService->login($loginUser,$passwordUser)){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function resgister($loginUser,$passwordUser): bool{
|
||||
if(!Validation::val_string($passwordUser) || !Validation::val_string($loginUser)) throw new \Exception(" some wrong with cred !!!!!");
|
||||
if($this->authService->register($loginUser,$passwordUser)){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function deconnecter():bool{
|
||||
try {
|
||||
$this->authService->logoutUser();
|
||||
return true;
|
||||
} catch (\Exception $e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
?>
|
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
namespace Model;
|
||||
|
||||
interface IGenericRepository
|
||||
{
|
||||
public function getItemById();
|
||||
public function GetNbItems(): int;
|
||||
public function GetItems(int $index, int $count, ?string $orderingPropertyName = null, bool $descending = false): array;
|
||||
public function GetItemsByName(string $substring, int $index, int $count, ?string $orderingPropertyName = null, bool $descending = false): array;
|
||||
public function GetItemByName(string $substring, int $index, int $count, ?string $orderingPropertyName = null, bool $descending = false): array;
|
||||
public function UpdateItem($oldItem, $newItem);
|
||||
public function AddItem($item);
|
||||
public function DeleteItem($item): bool;
|
||||
}
|
||||
|
||||
?>
|
@ -0,0 +1,12 @@
|
||||
<?php
|
||||
namespace Stub;
|
||||
use Manager\DataManager;
|
||||
use Manager\UserManager;
|
||||
class StubData extends DataManager{
|
||||
public $userMgr;
|
||||
public function __construct(){
|
||||
$userMgr = new UserManager(new AuthService(new UserRepository()));
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
namespace Stub;
|
||||
|
||||
use Model\IGenericRepository;
|
||||
use Model\IUserRepository;
|
||||
use Model\Role;
|
||||
use Model\User;
|
||||
|
||||
class UserRepository implements IGenericRepository,IUserRepository {
|
||||
private array $users = [];
|
||||
|
||||
public function __construct() {
|
||||
// Ajout de 5 utilisateurs pour l'exemple
|
||||
$this->users[] = new User(1, "Doe", "John", "john.doe@example.com", "password123", new Role("Coach"));
|
||||
$this->users[] = new User(2, "Smith", "Jane", "jane.smith@example.com", "secure456", new Role("User"));
|
||||
$this->users[] = new User(3, "Martin", "Paul", "paul.martin@example.com", "super789", new Role("Coach"));
|
||||
$this->users[] = new User(4, "Brown", "Anna", "anna.brown@example.com", "test000", new Role("User"));
|
||||
$this->users[] = new User(5, "Lee", "Bruce", "bruce.lee@example.com", "hello321", new Role("User"));
|
||||
}
|
||||
|
||||
public function getItemById(int $id): ?User {
|
||||
foreach ($this->users as $user) {
|
||||
if ($user->id === $id) {
|
||||
return $user;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function GetNbItems(): int {
|
||||
return count($this->users);
|
||||
}
|
||||
|
||||
public function GetItems(int $index, int $count, ?string $orderingPropertyName = null, bool $descending = false): array {
|
||||
// Cette méthode est un exemple simple, on ne gère pas l'ordonnancement ici
|
||||
return array_slice($this->users, $index, $count);
|
||||
}
|
||||
|
||||
public function GetItemsByName(string $substring, int $index, int $count, ?string $orderingPropertyName = null, bool $descending = false): array {
|
||||
$filteredUsers = array_filter($this->users, function ($user) use ($substring) {
|
||||
return strpos(strtolower($user->nom), strtolower($substring)) !== false || strpos(strtolower($user->prenom), strtolower($substring)) !== false;
|
||||
});
|
||||
return array_slice($filteredUsers, $index, $count);
|
||||
}
|
||||
public function GetItemByName(string $substring, int $index, int $count, ?string $orderingPropertyName = null, bool $descending = false):User {
|
||||
return $this->GetItemsByName($substring, $index, $count, $orderingPropertyName, $descending)[0];
|
||||
}
|
||||
|
||||
public function UpdateItem(User $oldUser, User $newUser): void {
|
||||
$index = array_search($oldUser, $this->users);
|
||||
if ($index !== false) {
|
||||
$this->users[$index] = $newUser;
|
||||
}
|
||||
}
|
||||
|
||||
public function AddItem(User $user): void {
|
||||
$this->users[] = $user;
|
||||
}
|
||||
|
||||
public function DeleteItem(User $user): bool {
|
||||
$index = array_search($user, $this->users);
|
||||
if ($index !== false) {
|
||||
unset($this->users[$index]);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
@ -0,0 +1,36 @@
|
||||
<?php
|
||||
namespace Stub;
|
||||
use Exception\NotImplementedException;
|
||||
use Model\IUserRepository;
|
||||
use Service\IAuthService;
|
||||
|
||||
class AuthService implements IAuthService {
|
||||
private $userRepository;
|
||||
|
||||
public function __construct(UserRepository $userRepository) {
|
||||
$this->userRepository = $userRepository;
|
||||
}
|
||||
|
||||
public function login($username, $password) {
|
||||
|
||||
$user = $this->userRepository->getUserByUsername($username);
|
||||
|
||||
if (!$user) {
|
||||
throw new \Exception('Unable to find user with that name');
|
||||
}
|
||||
if ($user->isValidPassword($password)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
public function register(string $username, string $password, ...$data): bool
|
||||
{
|
||||
throw new NotImplementedException("register method not implemented");
|
||||
}
|
||||
|
||||
public function logoutUser(): void
|
||||
{
|
||||
throw new NotImplementedException("logout method not implemented");
|
||||
}
|
||||
}
|
Loading…
Reference in new issue