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 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 15 CREATE TABLE Clients (
10 16 loginLille1 char(30) PRIMARY KEY,
11 17 solde float(7,2),
... ... @@ -23,7 +29,7 @@ CREATE TABLE Prix (
23 29 CREATE TABLE Transactions (
24 30 id serial PRIMARY KEY,
25 31 type char(15),
26   - date datetime,
  32 + date datetime DEFAULT CURRENT_TIMESTAMP,
27 33 montant float(7,2),
28 34 quantite integer(2),
29 35 utilisateur char(30) REFERENCES Utilisateur(login),
... ...
api/commun.php
... ... @@ -6,6 +6,11 @@ include_once("constantes.php");
6 6 header('Access-Control-Allow-Origin: *'); // Histoire de pouvoir accéder à l'API depuis autre part que le serveur
7 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 14 // Fonctions utiles
10 15 function retour($status, $donnees = array()) { // Renvoie les données passées
11 16 $donnees['status'] = $status;
... ... @@ -34,8 +39,6 @@ if ($db->connect_error) {
34 39 retour("erreur_bdd", ["message" => $db->connect_error]);
35 40 }
36 41  
37   -$db->set_charset("utf8");
38   -
39 42 // Vérification de la présence de bcrypt
40 43 if (!defined("CRYPT_BLOWFISH") || !CRYPT_BLOWFISH) {
41 44 retour("manque_bcrypt");
... ...
api/connexion.php
... ... @@ -2,6 +2,16 @@
2 2  
3 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 15 // Vérification des paramètres
6 16  
7 17 if (donne("login") && donne("mdp")) {
... ... @@ -18,13 +28,32 @@ if (donne(&quot;login&quot;) &amp;&amp; donne(&quot;mdp&quot;)) {
18 28 } else {
19 29 retour("identifiants_invalides"); // Identifiant inconnu
20 30 }
  31 + $requete->close();
21 32 } else if (donne("idCarte")) {
22 33 // Si l'utilisateur s'authentifie par carte
  34 + // $login = ...
23 35 retour("non_implemente"); // TODO
24 36 } else {
25 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 ?>
... ...