Add verification for images and add Utilisateur classes.
This commit is contained in:
@@ -49,14 +49,15 @@ document.addEventListener( 'DOMContentLoaded', function(){
|
|||||||
fetch( FORM.action, options ).then( ( response ) => {
|
fetch( FORM.action, options ).then( ( response ) => {
|
||||||
if( response.ok ){
|
if( response.ok ){
|
||||||
response.json().then( ( responseJSON ) => {
|
response.json().then( ( responseJSON ) => {
|
||||||
|
|
||||||
if( responseJSON.success === true ){
|
if( responseJSON.success === true ){
|
||||||
window.location.href = window.location.origin; // Redirection sur la page d'accueil si succès.
|
window.location.href = window.location.origin; // Redirection sur la page d'accueil si succès.
|
||||||
} else {
|
} else {
|
||||||
FORM.showError( responseJSON.message || "Mauvais nom d'utilisateur ou mauvais mot de passe." );
|
FORM.showError( "Mauvais nom d'utilisateur ou mauvais mot de passe." );
|
||||||
}
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
|
} else {
|
||||||
|
FORM.showError( "Mauvais nom d'utilisateur ou mauvais mot de passe." );
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ class IngredientsAPIController extends Controller {
|
|||||||
if( !$name || $name == "" )
|
if( !$name || $name == "" )
|
||||||
JSONResponse::sendError( [ 'error' => 'Name not defined' ] );
|
JSONResponse::sendError( [ 'error' => 'Name not defined' ] );
|
||||||
|
|
||||||
$urlOrError = UploadFiles::uploadFile( $fileNameField );
|
$urlOrError = UploadFiles::uploadFile( $fileNameField, UploadFiles::IMAGE_MIME_TYPES );
|
||||||
if( is_int( $urlOrError ) ){
|
if( is_int( $urlOrError ) ){
|
||||||
JSONResponse::sendError( [ 'error' => $urlOrError ] );
|
JSONResponse::sendError( [ 'error' => $urlOrError ] );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ class RecettesAPIController extends Controller {
|
|||||||
JSONResponse::sendError( [ 'error' => "One required fields is missing" ] );
|
JSONResponse::sendError( [ 'error' => "One required fields is missing" ] );
|
||||||
|
|
||||||
// Upload & Vérification de l'image.
|
// Upload & Vérification de l'image.
|
||||||
$urlOrError = UploadFiles::uploadFile( $fileField );
|
$urlOrError = UploadFiles::uploadFile( $fileField, UploadFiles::IMAGE_MIME_TYPES );
|
||||||
if( is_int( $urlOrError ) ){
|
if( is_int( $urlOrError ) ){
|
||||||
JSONResponse::sendError( [ 'error' => $urlOrError ] );
|
JSONResponse::sendError( [ 'error' => $urlOrError ] );
|
||||||
}
|
}
|
||||||
@@ -171,7 +171,7 @@ class RecettesAPIController extends Controller {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Upload & Vérification de l'image.
|
// Upload & Vérification de l'image.
|
||||||
$urlOrError = UploadFiles::uploadFile( $fileField );
|
$urlOrError = UploadFiles::uploadFile( $fileField, UploadFiles::IMAGE_MIME_TYPES );
|
||||||
if( is_int( $urlOrError ) ){
|
if( is_int( $urlOrError ) ){
|
||||||
// Ingore image.
|
// Ingore image.
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -43,12 +43,14 @@ class AuthentificationController extends Controller {
|
|||||||
|
|
||||||
Request::setCORS();
|
Request::setCORS();
|
||||||
|
|
||||||
$username = Request::get( 'username' );
|
$username = Request::post( 'username' );
|
||||||
$password = Request::get( 'password' );
|
$password = Request::post( 'password' );
|
||||||
|
|
||||||
// TODO : Récupération de l'utilisateur et verify_password.
|
$userId = new UtilisateurRepository()->login( $username, $password );
|
||||||
|
if( !$userId ) {
|
||||||
|
return JSONResponse::sendError();
|
||||||
|
}
|
||||||
|
|
||||||
$userId = 1;
|
|
||||||
Authentification::loginUser( $userId );
|
Authentification::loginUser( $userId );
|
||||||
return JSONResponse::sendSuccess( [ 'user_id' => $userId ] );
|
return JSONResponse::sendSuccess( [ 'user_id' => $userId ] );
|
||||||
|
|
||||||
|
|||||||
20
src/Domain/Utilisateurs/Utilisateur.php
Normal file
20
src/Domain/Utilisateurs/Utilisateur.php
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Domain\Utilisateurs;
|
||||||
|
|
||||||
|
use App\Domain\Model;
|
||||||
|
//use App\Helpers\Markdown;
|
||||||
|
|
||||||
|
class Utilisateur extends Model {
|
||||||
|
|
||||||
|
public int $num_user;
|
||||||
|
public string $username;
|
||||||
|
public string $userpassword;
|
||||||
|
|
||||||
|
|
||||||
|
public function getID(): int
|
||||||
|
{
|
||||||
|
return $this->num_user;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
80
src/Domain/Utilisateurs/UtilisateurRepository.php
Normal file
80
src/Domain/Utilisateurs/UtilisateurRepository.php
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Domain\Utilisateurs;
|
||||||
|
|
||||||
|
use App\Domain\Model;
|
||||||
|
use App\Domain\Repository;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Classe qui permet de faire le lien entre la BDD et le site pour les utilisateurs.
|
||||||
|
*/
|
||||||
|
class UtilisateurRepository extends Repository {
|
||||||
|
|
||||||
|
public static function getEntity(): string
|
||||||
|
{
|
||||||
|
return Utilisateur::class;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getStructure(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'table' => 'User',
|
||||||
|
'columns' => [
|
||||||
|
'num_user', 'username', 'userpassword'
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Permet d'obtenir une liste de toutes les recettes objet Utilisateur.
|
||||||
|
*
|
||||||
|
* @return Utilisateur[]|null
|
||||||
|
*/
|
||||||
|
public function getAll(): ?array {
|
||||||
|
$sqlQuery = "SELECT * FROM {$this->tableName};";
|
||||||
|
$results = $this->selectGetAll($sqlQuery);
|
||||||
|
if( $results === null )
|
||||||
|
return null;
|
||||||
|
return $results;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Permet d'avoir un utilisateur par un ID.
|
||||||
|
*
|
||||||
|
* @param int $id
|
||||||
|
* @return Utilisateur|null
|
||||||
|
*/
|
||||||
|
public function getByID( int $id ): ?Utilisateur {
|
||||||
|
$sqlQuery = "SELECT * FROM {$this->tableName} WHERE num_user = {$id}";
|
||||||
|
$results = $this->selectGetAll($sqlQuery);
|
||||||
|
if( $results === null || count( $results ) > 1 )
|
||||||
|
return null;
|
||||||
|
return $results[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function login(string $name, string $pass): int|bool{
|
||||||
|
|
||||||
|
$users = new UtilisateurRepository()->getAll();
|
||||||
|
foreach($users as $user){
|
||||||
|
if((strcmp($name,$user->username)==0) and (strcmp($pass,$user->userpassword)==0))return $user->num_user;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function add( Model $utilisateurs ): bool {
|
||||||
|
return $this->addEntity( $utilisateurs );
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update( Model $utilisateurs ): bool {
|
||||||
|
return $this->updateEntity( $utilisateurs, 'num_user' );
|
||||||
|
}
|
||||||
|
|
||||||
|
public function delete( Model $utilisateurs ): bool {
|
||||||
|
return $this->deleteEntity( $utilisateurs, 'num_user' );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -7,6 +7,8 @@ use App\Kernel;
|
|||||||
|
|
||||||
class UploadFiles {
|
class UploadFiles {
|
||||||
|
|
||||||
|
const array IMAGE_MIME_TYPES = [ 'image/png', 'image/jpeg' ];
|
||||||
|
|
||||||
public static function uploadFolderPath(){
|
public static function uploadFolderPath(){
|
||||||
return APP_ROOT . 'public/uploads/';
|
return APP_ROOT . 'public/uploads/';
|
||||||
}
|
}
|
||||||
@@ -16,6 +18,7 @@ class UploadFiles {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $fileName
|
* @param string $fileName
|
||||||
|
* @param array $allowedMimeTypes Les mimes types autorisés pour ce fichier. Une liste vide n'a pas de restriction de mime type.
|
||||||
*
|
*
|
||||||
* @return string|int
|
* @return string|int
|
||||||
*
|
*
|
||||||
@@ -23,8 +26,9 @@ class UploadFiles {
|
|||||||
* 2: Erreur dans le fichier
|
* 2: Erreur dans le fichier
|
||||||
* 3: Déjà existant.
|
* 3: Déjà existant.
|
||||||
* 4: Erreur dans le déplacement.
|
* 4: Erreur dans le déplacement.
|
||||||
|
* 5: Erreur dans le mimetype.
|
||||||
*/
|
*/
|
||||||
public static function uploadFile( string $fileArg ): string|int {
|
public static function uploadFile( string $fileArg, array $allowedMimeTypes = [] ): string|int {
|
||||||
|
|
||||||
if( !isset( $_FILES[ $fileArg ] ) )
|
if( !isset( $_FILES[ $fileArg ] ) )
|
||||||
return 1;
|
return 1;
|
||||||
@@ -36,6 +40,11 @@ class UploadFiles {
|
|||||||
$tempFileName = $file['tmp_name'];
|
$tempFileName = $file['tmp_name'];
|
||||||
$fileName = $file['name'];
|
$fileName = $file['name'];
|
||||||
|
|
||||||
|
if( $allowedMimeTypes !== [] ){
|
||||||
|
if( !in_array( $file['type'], $allowedMimeTypes ) )
|
||||||
|
return 5;
|
||||||
|
}
|
||||||
|
|
||||||
$full_name = self::uploadFolderPath() . $fileName;
|
$full_name = self::uploadFolderPath() . $fileName;
|
||||||
$full_uri = self::uploadFolderUri() . $fileName;
|
$full_uri = self::uploadFolderUri() . $fileName;
|
||||||
|
|
||||||
|
|||||||
@@ -7,9 +7,6 @@
|
|||||||
<ul>
|
<ul>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<form class="sidebar-search" action="none">
|
|
||||||
<input type="text" class="search-form search-form-tag" name="search-tag" placeholder="Rechercher..." >
|
|
||||||
</form>
|
|
||||||
<div class="tag-unselected-div">
|
<div class="tag-unselected-div">
|
||||||
<ul id="tagsList">
|
<ul id="tagsList">
|
||||||
<?php foreach( V::arg( 'tagsList') as $tag ): ?>
|
<?php foreach( V::arg( 'tagsList') as $tag ): ?>
|
||||||
@@ -25,9 +22,6 @@
|
|||||||
<ul>
|
<ul>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<form class="sidebar-search" action="none">
|
|
||||||
<input type="text" class="search-form search-form-tag" name="search-ingr" placeholder="Rechercher..." >
|
|
||||||
</form>
|
|
||||||
<div class="ing-unselected-div">
|
<div class="ing-unselected-div">
|
||||||
<ul id="ingredientsList">
|
<ul id="ingredientsList">
|
||||||
<?php foreach( V::arg( 'ingredientsList') as $tag ): ?>
|
<?php foreach( V::arg( 'ingredientsList') as $tag ): ?>
|
||||||
|
|||||||
Reference in New Issue
Block a user