Commit d1991cf1df5efb98d1334824320f3c1f1eedb268
1 parent
53e75e11
api/connexion 2/2
Showing
3 changed files
with
42 additions
and
4 deletions
Show diff stats
BDD.sql
@@ -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), |
api/commun.php
@@ -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"); |
api/connexion.php
@@ -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("login") && donne("mdp")) { | @@ -18,13 +28,32 @@ if (donne("login") && donne("mdp")) { | ||
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 | ?> |