diff --git a/BDD.sql b/BDD.sql index 8b8dc94..7157dd5 100644 --- a/BDD.sql +++ b/BDD.sql @@ -6,6 +6,12 @@ CREATE TABLE Utilisateurs ( droit integer DEFAULT '0' ); +CREATE TABLE Sessions ( + jeton char(30) PRIMARY KEY, + utilisateur char(30) REFERENCES Utilisateurs(login)Temps de validité du jeton en secondes, + date datetime DEFAULT CURRENT_TIMESTAMP +); + CREATE TABLE Clients ( loginLille1 char(30) PRIMARY KEY, solde float(7,2), @@ -23,7 +29,7 @@ CREATE TABLE Prix ( CREATE TABLE Transactions ( id serial PRIMARY KEY, type char(15), - date datetime, + date datetime DEFAULT CURRENT_TIMESTAMP, montant float(7,2), quantite integer(2), utilisateur char(30) REFERENCES Utilisateur(login), diff --git a/api/commun.php b/api/commun.php index a2dd652..386ba31 100644 --- a/api/commun.php +++ b/api/commun.php @@ -6,6 +6,11 @@ include_once("constantes.php"); header('Access-Control-Allow-Origin: *'); // Histoire de pouvoir accéder à l'API depuis autre part que le serveur header('Content-type: application/json'); // Histoire de faire comprendre au client que c'est du JSON +// Définition des constantes + +define("JETON_TAILLE", 30); // Taille d'un jeton +define("JETON_DUREE", 10*60); // Temps de validité du jeton en secondes + // Fonctions utiles function retour($status, $donnees = array()) { // Renvoie les données passées $donnees['status'] = $status; @@ -34,8 +39,6 @@ if ($db->connect_error) { retour("erreur_bdd", ["message" => $db->connect_error]); } -$db->set_charset("utf8"); - // Vérification de la présence de bcrypt if (!defined("CRYPT_BLOWFISH") || !CRYPT_BLOWFISH) { retour("manque_bcrypt"); diff --git a/api/connexion.php b/api/connexion.php index 769ff4b..6c37f10 100644 --- a/api/connexion.php +++ b/api/connexion.php @@ -2,6 +2,16 @@ require_once("commun.php"); +function random_str($length, $keyspace = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') { + // Depuis http://stackoverflow.com/a/31107425/2766106 + $str = ''; + $max = mb_strlen($keyspace, '8bit') - 1; + for ($i = 0; $i < $length; ++$i) { + $str .= $keyspace[random_int(0, $max)]; + } + return $str; +} + // Vérification des paramètres if (donne("login") && donne("mdp")) { @@ -18,13 +28,32 @@ if (donne("login") && donne("mdp")) { } else { retour("identifiants_invalides"); // Identifiant inconnu } + $requete->close(); } else if (donne("idCarte")) { // Si l'utilisateur s'authentifie par carte + // $login = ... retour("non_implemente"); // TODO } else { retour("requete_malformee"); } -retour("ok"); +// Ajout du jeton dans la base de données +$jeton = random_str(JETON_TAILLE); + +$requete = $db->prepare("INSERT INTO Sessions (jeton, utilisateur) VALUES (?, ?)"); +$requete->bind_param("ss", $jeton, $login); +$requete->execute(); +$requete->close(); + +// Récupération des données de l'utilisateur + +$requete = $db->prepare("SELECT droit FROM Utilisateurs WHERE login = ?"); +$requete->bind_param("s", $login); +$requete->execute(); +$requete->bind_result($droit); +$requete->fetch(); +$requete->close(); + +retour("ok", ["jeton" => $jeton, "login" => $login, "droit" => $droit]); ?> -- libgit2 0.21.2