Commit d1991cf1df5efb98d1334824320f3c1f1eedb268

Authored by Geoffrey PREUD'HOMME
1 parent 53e75e11

api/connexion 2/2

Showing 3 changed files with 42 additions and 4 deletions   Show diff stats
@@ -6,6 +6,12 @@ CREATE TABLE Utilisateurs ( @@ -6,6 +6,12 @@ CREATE TABLE Utilisateurs (
6 droit integer DEFAULT '0' 6 droit integer DEFAULT '0'
7 ); 7 );
8 8
  9 +CREATE TABLE Sessions (
  10 + jeton char(30) PRIMARY KEY,
  11 + utilisateur char(30) REFERENCES Utilisateurs(login)Temps de validité du jeton en secondes,
  12 + date datetime DEFAULT CURRENT_TIMESTAMP
  13 +);
  14 +
9 CREATE TABLE Clients ( 15 CREATE TABLE Clients (
10 loginLille1 char(30) PRIMARY KEY, 16 loginLille1 char(30) PRIMARY KEY,
11 solde float(7,2), 17 solde float(7,2),
@@ -23,7 +29,7 @@ CREATE TABLE Prix ( @@ -23,7 +29,7 @@ CREATE TABLE Prix (
23 CREATE TABLE Transactions ( 29 CREATE TABLE Transactions (
24 id serial PRIMARY KEY, 30 id serial PRIMARY KEY,
25 type char(15), 31 type char(15),
26 - date datetime, 32 + date datetime DEFAULT CURRENT_TIMESTAMP,
27 montant float(7,2), 33 montant float(7,2),
28 quantite integer(2), 34 quantite integer(2),
29 utilisateur char(30) REFERENCES Utilisateur(login), 35 utilisateur char(30) REFERENCES Utilisateur(login),
@@ -6,6 +6,11 @@ include_once("constantes.php"); @@ -6,6 +6,11 @@ include_once("constantes.php");
6 header('Access-Control-Allow-Origin: *'); // Histoire de pouvoir accéder à l'API depuis autre part que le serveur 6 header('Access-Control-Allow-Origin: *'); // Histoire de pouvoir accéder à l'API depuis autre part que le serveur
7 header('Content-type: application/json'); // Histoire de faire comprendre au client que c'est du JSON 7 header('Content-type: application/json'); // Histoire de faire comprendre au client que c'est du JSON
8 8
  9 +// Définition des constantes
  10 +
  11 +define("JETON_TAILLE", 30); // Taille d'un jeton
  12 +define("JETON_DUREE", 10*60); // Temps de validité du jeton en secondes
  13 +
9 // Fonctions utiles 14 // Fonctions utiles
10 function retour($status, $donnees = array()) { // Renvoie les données passées 15 function retour($status, $donnees = array()) { // Renvoie les données passées
11 $donnees['status'] = $status; 16 $donnees['status'] = $status;
@@ -34,8 +39,6 @@ if ($db->connect_error) { @@ -34,8 +39,6 @@ if ($db->connect_error) {
34 retour("erreur_bdd", ["message" => $db->connect_error]); 39 retour("erreur_bdd", ["message" => $db->connect_error]);
35 } 40 }
36 41
37 -$db->set_charset("utf8");  
38 -  
39 // Vérification de la présence de bcrypt 42 // Vérification de la présence de bcrypt
40 if (!defined("CRYPT_BLOWFISH") || !CRYPT_BLOWFISH) { 43 if (!defined("CRYPT_BLOWFISH") || !CRYPT_BLOWFISH) {
41 retour("manque_bcrypt"); 44 retour("manque_bcrypt");
@@ -2,6 +2,16 @@ @@ -2,6 +2,16 @@
2 2
3 require_once("commun.php"); 3 require_once("commun.php");
4 4
  5 +function random_str($length, $keyspace = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') {
  6 + // Depuis http://stackoverflow.com/a/31107425/2766106
  7 + $str = '';
  8 + $max = mb_strlen($keyspace, '8bit') - 1;
  9 + for ($i = 0; $i < $length; ++$i) {
  10 + $str .= $keyspace[random_int(0, $max)];
  11 + }
  12 + return $str;
  13 +}
  14 +
5 // Vérification des paramètres 15 // Vérification des paramètres
6 16
7 if (donne("login") && donne("mdp")) { 17 if (donne("login") && donne("mdp")) {
@@ -18,13 +28,32 @@ if (donne(&quot;login&quot;) &amp;&amp; donne(&quot;mdp&quot;)) { @@ -18,13 +28,32 @@ if (donne(&quot;login&quot;) &amp;&amp; donne(&quot;mdp&quot;)) {
18 } else { 28 } else {
19 retour("identifiants_invalides"); // Identifiant inconnu 29 retour("identifiants_invalides"); // Identifiant inconnu
20 } 30 }
  31 + $requete->close();
21 } else if (donne("idCarte")) { 32 } else if (donne("idCarte")) {
22 // Si l'utilisateur s'authentifie par carte 33 // Si l'utilisateur s'authentifie par carte
  34 + // $login = ...
23 retour("non_implemente"); // TODO 35 retour("non_implemente"); // TODO
24 } else { 36 } else {
25 retour("requete_malformee"); 37 retour("requete_malformee");
26 } 38 }
27 39
28 -retour("ok"); 40 +// Ajout du jeton dans la base de données
  41 +$jeton = random_str(JETON_TAILLE);
  42 +
  43 +$requete = $db->prepare("INSERT INTO Sessions (jeton, utilisateur) VALUES (?, ?)");
  44 +$requete->bind_param("ss", $jeton, $login);
  45 +$requete->execute();
  46 +$requete->close();
  47 +
  48 +// Récupération des données de l'utilisateur
  49 +
  50 +$requete = $db->prepare("SELECT droit FROM Utilisateurs WHERE login = ?");
  51 +$requete->bind_param("s", $login);
  52 +$requete->execute();
  53 +$requete->bind_result($droit);
  54 +$requete->fetch();
  55 +$requete->close();
  56 +
  57 +retour("ok", ["jeton" => $jeton, "login" => $login, "droit" => $droit]);
29 58
30 ?> 59 ?>