-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathauthapi.php
More file actions
104 lines (92 loc) · 4.46 KB
/
Copy pathauthapi.php
File metadata and controls
104 lines (92 loc) · 4.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<?php
// Inclusion des fichiers nécessaires pour le JWT et les fonctions utilitaires
include 'jwt_utils.php';
include 'functions.php';
// Récupération de la méthode HTTP utilisée pour la requête
$http_method = $_SERVER['REQUEST_METHOD'];
// Switch pour gérer les différentes méthodes HTTP
switch ($http_method){
case "POST" :
// Récupération des données envoyées en POST
$postedData = file_get_contents('php://input');
$data = json_decode($postedData,true);
// Extraction du login et du mot de passe
$login = $data['login'];
$mdp = $data['password'];
//Vérification de si le login a été rentré sinon, envoi d'erreur personnalisé
if (!isset($login)){
deliver_response(400,"Un login doit être spécifié");
} else {
//Vérification de si le mot de passe a été rentré sinon, envoi d'erreur personnalisé
if (!isset($mdp)){
deliver_response(400,"Un mot de passe doit être spécifié");
} else {
// Vérification si l'utilisateur existe
if(userExist($login)){
// Vérification du mot de passe
if(password_verify($mdp,getPassword($login))){
// Création du JWT avec les informations nécessaires
$headers = array('alg'=>'HS256', 'typ'=>'JWT');
$payload = array('username'=>$login,'exp'=>(time()+1800));
$jwt = generate_jwt($headers,$payload,'supersecretdelamortquitue');
// Envoi de la réponse avec le JWT
deliver_response(200,"Connexion établie",$jwt);
} else {
// Erreur si le mot de passe est incorrect
deliver_response(401,"Invalid password");
}
} else {
// Erreur si l'utilisateur n'existe pas
deliver_response(400,"Invalid user");
}
}
}
break;
case "GET":
// Récupération du token JWT depuis l'en-tête Authorization
$jeton = get_bearer_token();
// Vérification de la validité du JWT
if(is_jwt_valid($jeton,'supersecretdelamortquitue')){
deliver_response(200,"Jeton valide");
} else {
//Ceci est évidemment une blague, nous avons trouvé le code 418 en lisant la documentation
//Nous avons voulu l'implémenter dans un endroit où l'on pourrait le voir
//Le vrai code est 401 !
deliver_response(418,"Jeton expiré ou invalide");
}
break;
//Methode a implémenter pour les CORS
case "OPTIONS":
deliver_response(200,"Prerequest validée");
break;
default:
deliver_response(405,"Méthode non reconnue (L'authentification ne gère que GET et POST)");
break;
}
/**
* Fonction pour envoyer la réponse au format JSON
* @param string $status_code Code de statut HTTP
* @param string $status_message Message de statut
* @param mixed $data Données à envoyer (optionnel)
*/
function deliver_response($status_code, $status_message, $data=null){
// Configuration des en-têtes CORS pour permettre l'accès depuis n'importe quelle origine
header('Access-Control-Allow-Methods: *');
header('Access-Control-Allow-Headers: Content-Type, Authorization');
// Définition du code de statut HTTP
http_response_code($status_code);
// Configuration des en-têtes de la réponse
header('Content-Type:application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
// Construction de la réponse
$response['status_code'] = $status_code;
$response['status_message'] = $status_message;
$response['data'] = $data;
// Conversion de la réponse en JSON
$json_response = json_encode($response);
if($json_response===false)
die('json encode ERROR : '.json_last_error_msg());
// Envoi de la réponse
echo $json_response;
}
?>