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 | 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("login") && donne("mdp")) { |
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 | ?> | ... | ... |