Nom de l'entrepot * @password Mot de passe de l'entrepot * * @return status TRUE si les crédits sont bons, sinon FALSE * */ public function warehouse($params){ extract($params); /* [0] Par défaut, on déconnecte =========================================================*/ $_SESSION['AUTH'] = []; /* [1] On recherche un entrepot avec ce nom =========================================================*/ $getName = new Repo('warehouse/getByName', [$name]); $nameFetched = $getName->answer(); // Si aucun résultat, on retourne le status FALSE if( count($nameFetched) == 0 ) return [ 'status' => false ]; /* [2] On vérifie le mot de passe =========================================================*/ $hash_password = secure_hash($password, $name); // Si mot de passe faux, on retourne le status FALSE if( $nameFetched[0]['password'] != $hash_password ) return [ 'status' => false ]; /* [3] On définit le token =========================================================*/ $_SESSION['AUTH'][0] = $nameFetched[0]['token']; // On retourne le status return [ 'status' => true ]; } /* CONNEXION EN TANT QU'ADMINISTRATEUR * * @username Nom de l'administrateur * @password Mot de passe de l'administrateur * * @return status TRUE si les crédits sont bons, sinon FALSE * */ public function admin($params){ extract($params); /* [0] Par défaut, on déconnecte l'administrateur =========================================================*/ $_SESSION['AUTH'][1] = ''; /* [1] On recherche un administrateur avec ce nom =========================================================*/ $getUsername = new Repo('admin/getByUsername', [ $_SESSION['WAREHOUSE']['id'], $username ]); $usernameFetched = $getUsername->answer(); // Si aucun résultat, on retourne le status FALSE if( $usernameFetched === false ) return [ 'status' => false ]; /* [2] On vérifie le mot de passe =========================================================*/ $hash_password = secure_hash($password, $username); // Si mot de passe faux, on retourne le status FALSE if( $usernameFetched['password'] != $hash_password ) return [ 'status' => false ]; /* [3] On définit le token =========================================================*/ $_SESSION['AUTH'][1] = $usernameFetched['token']; // On retourne le status return [ 'status' => true ]; } /* RETOURNE LA LISTE DSE ADMINISTRATEURS DE L'ENTREPOT * * @return admins Liste des administrateurs de l'entrepôt * */ public function get_admins($params){ /* (1) Fetch admin list ---------------------------------------------------------*/ /* (1) Prepare request */ $listRq = new Repo('admin/getByIdWarehouse', [ $_SESSION['WAREHOUSE']['id'] ]); /* (2) Get response */ $listRs = $listRq->answer(); /* (3) Manage error */ if( !is_array($listRs) ) return ['error' => new Error(Err::RepoError)]; /* (2) Setup data (remove self) ---------------------------------------------------------*/ return ['admins' => $listRs]; } /* MODIFICATION MOT DE PASSE ADMINISTRATEUR * * @old Ancien mot de passe (actuel) * @new Nouveau mot de passe * @confirm Confirmation mot de passe * * @return status TRUE si les crédits sont bons, sinon FALSE * */ public function update_admin($params){ extract($params); /* [1] On vérifie la confirmation de mot de passe =========================================================*/ if( $new !== $confirm ) return [ 'error' => new Error(Err::WrongParam, 'confirm') ]; /* [2] On vérifie le mot de passe actuel =========================================================*/ /* (1) On hash le mot de passe actuel */ $hash_old = secure_hash($old, $_SESSION['ADMIN']['username']); /* (2) On vérifie que le mot de passe est correct */ $checkPassword = new Repo('admin/getById', [ $_SESSION['WAREHOUSE']['id'], $_SESSION['ADMIN']['id'] ]); $adminFetched = $checkPassword->answer(); // Si aucun résultat -> erreur if( $adminFetched === false ) return [ 'error' => new Error(Err::NoMatchFound) ]; /* [3] On vérifie le mot de passe actuel =========================================================*/ // Si mot de passe faux, on retourne une erreur if( $adminFetched['password'] != $hash_old ) return [ 'error' => new Error(Err::WrongParam, 'old') ]; /* [3] On met à jour le mot de passe =========================================================*/ /* (1) On hash le nouveau mot de passe */ $hash_new = secure_hash($new, $adminFetched['username']); /* (w) Requête */ $update = new Repo('admin/edit', [ $adminFetched['id_admin'], $adminFetched['username'], $adminFetched['mail'], $hash_new ]); /* (3) Gestion erreur */ if( !$update->answer() ) return [ 'error' => new Error(Err::RepoError) ]; /* (4) Succès si tout ok */ return [ 'error' => new Error(Err::Success) ]; } /* MODIFICATION CODE D'ACCES ENTREPOT * * @old Ancien code d'accès (actuel) * @new Nouveau code d'accès * @confirm Confirmation code d'accès * * @return status TRUE si les crédits sont bons, sinon FALSE * */ public function update_warehouse($params){ extract($params); /* [1] On vérifie la confirmation de code d'accès =========================================================*/ if( $new !== $confirm ) return [ 'error' => new Error(Err::WrongParam, 'confirm') ]; /* [2] On vérifie le code d'accès actuel =========================================================*/ /* (1) On hash le code d'accès actuel */ $hash_old = secure_hash($old, $_SESSION['WAREHOUSE']['name']); /* (2) On vérifie que le code d'accès est correct */ $checkPassword = new Repo('warehouse/getById', [ $_SESSION['WAREHOUSE']['id'] ]); $warehouseFetched = $checkPassword->answer(); // Si aucun résultat -> erreur if( $warehouseFetched === false ) return [ 'error' => new Error(Err::NoMatchFound) ]; /* [3] On vérifie le code d'accès actuel =========================================================*/ // Si code d'accès faux, on retourne une erreur if( $warehouseFetched['password'] != $hash_old ) return [ 'error' => new Error(Err::WrongParam, 'old') ]; /* [3] On met à jour le code d'accès =========================================================*/ /* (1) On hash le nouveau code d'accès */ $hash_new = secure_hash($new, $warehouseFetched['name']); /* (w) Requête */ $update = new Repo('warehouse/edit', [ $warehouseFetched['id_warehouse'], $warehouseFetched['name'], $hash_new ]); /* (3) Gestion erreur */ if( !$update->answer() ) return [ 'error' => new Error(Err::RepoError) ]; /* (4) Succès si tout ok */ return [ 'error' => new Error(Err::Success) ]; } /* CREATION D'UN NOUVEAL ADMINISTRATEUR * * @username Identifiant du nouvel administrateur * * @return password Mot de passe généré * */ public function create_admin($params){ extract($params); /* [1] On génère un mot de passe =========================================================*/ $password = secure_hash(uniqid(), uniqid()); /* [2] On vérifie l'unicité de l'identifiant =========================================================*/ /* (1) On vérifie que l'identifiant n'existe pas */ $checkPassword = new Repo('admin/getByUsername', [ $_SESSION['WAREHOUSE']['id'], $username ]); $adminFetched = $checkPassword->answer(); // Si un résultat -> erreur if( $adminFetched !== false ) return [ 'error' => new Error(Err::AlreadyExists, 'username') ]; /* [3] On crée l'administrateur =========================================================*/ /* (1) Requête */ $create = new Repo('admin/create', [ $_SESSION['WAREHOUSE']['id'], $username, $mail, $password ]); /* (3) Gestion erreur */ if( !$create->answer() ) return [ 'error' => new Error(Err::RepoError) ]; /* (4) Succès si tout ok */ return [ 'password' => $password ]; } } ?>