Browse Source

Refactorinng massif des derniers ajouts pour pouvoir les réutiliser autre part

Guichen 4 năm trước cách đây
mục cha
commit
36cd9b6cfa
4 tập tin đã thay đổi với 75 bổ sung46 xóa
  1. 3 44
      apiTableauFromClassement.php
  2. 7 1
      composer.json
  3. 3 1
      libs/fnMain.php
  4. 62 0
      libs/fnSessionCheck.php

+ 3 - 44
apiTableauFromClassement.php

@@ -1,66 +1,25 @@
 <?php
 require_once "libs/fnMain.php";
-require_once "vendor/autoload.php";
-use \Firebase\JWT\JWT;
 
 /**************************
  * Contrôle du token JWT
  **************************/
-$isClassementValid = isset($_GET["classement"]) && (int) $_GET["classement"] !== 0;
 if (!isset($_GET["jwt"], $_SETTINGS["jwt_secret"])) {
 	echo "Manque d'arguments";
 	die();
 }
 
-try {
-	$jwtPayload = JWT::decode($_GET["jwt"], $_SETTINGS["jwt_secret"], ["HS256"]);
-} catch (\Firebase\JWT\SignatureInvalidException $e) {
-	echo "Identité invalide";
-	die();
-} catch (Exception $e) {
-	// echo $e->getMessage();
-	echo "Erreur lors de la vérification de l'identité";
-	die();
-}
+verifyJWTtoken($_GET["jwt"], $_SETTINGS["jwt_secret"]);
 
 /**************************
  * Contrôle du statut premium de l'utilisateur
  **************************/
-$curl = curl_init();
-curl_setopt($curl, CURLOPT_URL, "https://interface.asclepia.io/auth/user");
-curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
-curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
-curl_setopt($curl, CURLOPT_TIMEOUT, 60);
-curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
-curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
-curl_setopt($curl, CURLOPT_HTTPHEADER, [
-	"authorization: JWT ".$_GET["jwt"],
-	"accept: application/json, text/plain, */*"
-]);
-$response = curl_exec($curl);
-
-// Vérification de la réponse
-$httpResponseCode = curl_getinfo($curl, CURLINFO_RESPONSE_CODE);
-if ($httpResponseCode === 200) {
-	$userData = json_decode($response, true);
-	if ($userData === NULL || !isset($userData["premium"])) {
-		echo "Echec de récupération des données utilisateur";
-		die();
-	}
-	
-	// Vérification du statut premium de l'utilisateur
-	if ($userData["premium"] === FALSE) {
-		echo "Abonnement requis.";
-		die();
-	}
-} else {
-	echo "Echec de l'authentification utilisateur";
-	die();
-}
+verifyUserPremium($_GET["jwt"]);
 
 /**************************
  * GENERATION DES CLASSEMENTS
  **************************/
+$isClassementValid = isset($_GET["classement"]) && (int) $_GET["classement"] !== 0;
 if ($isClassementValid) {
 	$rangMoyen = (int) $_GET["classement"];
 	// HTML renvoyé au site

+ 7 - 1
composer.json

@@ -9,6 +9,12 @@
         }
     ],
     "require": {
-        "firebase/php-jwt": "^5.2"
+        "firebase/php-jwt": "^5.2",
+	    "ext-curl": "*",
+        "ext-json": "*"
+    }
+    ,
+    "require-dev": {
+        "roave/security-advisories": "dev-latest"
     }
 }

+ 3 - 1
libs/fnMain.php

@@ -1,7 +1,9 @@
 <?php
 $_SETTINGS = require "_settings.php";
+require_once "vendor/autoload.php";
 
 // Connexion aux DB
 $db = new PDO("mysql:dbname=".$_SETTINGS["dbName"].";host=localhost", $_SETTINGS["dbUsername"], $_SETTINGS["dbPassword"]);
 
-require_once "fnStaticData.php";
+require_once "fnStaticData.php";
+require_once "fnSessionCheck.php";

+ 62 - 0
libs/fnSessionCheck.php

@@ -0,0 +1,62 @@
+<?php
+use \Firebase\JWT\JWT;
+
+/**
+ * Verification du token JWT seul, validité, signature, expiration
+ *
+ * @param string $token Token JWT à vérifier
+ * @param string $jwtSecret Clé secrète JWT
+ * @return object Payload JWT
+ */
+function verifyJWTtoken(string $token, string $jwtSecret) {
+	try {
+		return JWT::decode($token, $jwtSecret, ["HS256"]);
+	} catch (\Firebase\JWT\SignatureInvalidException $e) {
+		echo "Identité invalide";
+		die();
+	} catch (Exception $e) {
+		// echo $e->getMessage();
+		echo "Erreur lors de la vérification de l'identité";
+		die();
+	}
+}
+
+/**
+ * Contacte le backend d'Asclepia pour vérifier que la session existe, que l'utilisateur existe et qu'il soit
+ * bien premium
+ *
+ * @param string $token Token JWT de l'utilisateur à authentifier
+ */
+function verifyUserPremium(string $token) {
+	$curl = curl_init();
+	curl_setopt($curl, CURLOPT_URL, "https://interface.asclepia.io/auth/user");
+	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+	curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
+	curl_setopt($curl, CURLOPT_TIMEOUT, 60);
+	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
+	curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
+	curl_setopt($curl, CURLOPT_HTTPHEADER, [
+		"authorization: JWT ".$_GET["jwt"],
+		"accept: application/json, text/plain, */*"
+	]);
+	$response = curl_exec($curl);
+
+// Vérification de la réponse
+	$httpResponseCode = curl_getinfo($curl, CURLINFO_RESPONSE_CODE);
+	if ($httpResponseCode === 200) {
+		$userData = json_decode($response, true);
+		if ($userData === NULL || !isset($userData["premium"])) {
+			echo "Echec de récupération des données utilisateur";
+			die();
+		}
+		
+		// Vérification du statut premium de l'utilisateur
+		if ($userData["premium"] === FALSE) {
+			echo "Abonnement requis.";
+			die();
+		}
+	} else {
+		echo "Echec de l'authentification utilisateur";
+		die();
+	}
+}