Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
37c6f6c
Initial commit
MarinCD Apr 28, 2025
5b71c48
chore: Remove unnecessary files and functions related to PC notes and…
rundredoffi Apr 28, 2025
08ba97f
chore: Update file paths for database connection in PC and Support di…
rundredoffi Apr 28, 2025
889a12b
:wrench: Fix consult_ticket
MarinCD Apr 28, 2025
f3c1d5f
Merge branch 'marincd/feature/api-php-natif' of https://github.com/Te…
MarinCD Apr 28, 2025
edac9f0
chore: Remove unnecessary CORS headers from consult_notes.php
rundredoffi Apr 28, 2025
f0b582b
Merge branch 'marincd/feature/api-php-natif' of https://github.com/Te…
rundredoffi Apr 28, 2025
8c8cc52
:wrench: Submit
MarinCD Apr 28, 2025
c2c9012
Merge branch 'marincd/feature/api-php-natif' of https://github.com/Te…
MarinCD Apr 28, 2025
87ba015
fix: Improve authentication logic and response structure in authentif…
rundredoffi Apr 28, 2025
68eb089
fix: Update path to dbconnect.php in consult_tickets.php
rundredoffi Apr 28, 2025
078fdc2
feat: Add Get_details.php for fetching categories and statuses with C…
rundredoffi Apr 28, 2025
56c5710
:wrench: Add Submit reponse
MarinCD Apr 28, 2025
6d9d9a9
fix: Update CORS headers in consult_notes.php and correct dbconnect.p…
rundredoffi Apr 28, 2025
a9f8b0f
Merge branch 'marincd/feature/api-php-natif' of https://github.com/Te…
rundredoffi Apr 28, 2025
9e5a37d
fix: Update path to dbconnect.php in submit_ticket.php
rundredoffi Apr 28, 2025
9739adf
feat: Enhance get_ticket_by_id to include ticket responses
rundredoffi Apr 28, 2025
0df4b24
Update submit_response.php
MarinCD Apr 28, 2025
7a6c76a
Add files via upload
MarinCD Apr 28, 2025
c165fa5
Update update_ticket.php
MarinCD Apr 28, 2025
a411975
fix: Update user identification method in submit_ticket.php
rundredoffi Apr 29, 2025
7bd1fd0
:wrench: UpdateTicket
MarinCD Apr 29, 2025
e9fa264
:wrench: Fix
MarinCD Apr 29, 2025
2c3e316
fix: Update user identification method in submit_ticket.php
rundredoffi Apr 29, 2025
6b1a375
Merge branch 'marincd/feature/api-php-natif' of https://github.com/Te…
rundredoffi Apr 29, 2025
795ed1c
chore: Update consult_tickets.php to include user and status information
rundredoffi Apr 29, 2025
290b56e
:wrench: FixDashboard
MarinCD Apr 29, 2025
f449d62
:wrench: LastCommit
MarinCD Apr 29, 2025
80374f5
:wrench: Fix
MarinCD May 20, 2025
f1e7ccf
Update composer.json
MarinCD May 20, 2025
e53b8da
:wrench FixComposer
MarinCD May 20, 2025
6e60728
:wrench: LastFix
MarinCD May 21, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions Configuration/dbconnect.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php
$server = "mysql-jouin-n.alwaysdata.net";
$nomBD = "jouin-n_ocs-trackit";
$login = "jouin-n_ocs";
$psw = "Nicolas.277";

try {
$pdo = new PDO("mysql:host=$server;dbname=$nomBD", $login, $psw);
} catch (Exception $e) {
echo 'Erreur de connexion : ' . $e->getMessage();
exit();
}
?>
101 changes: 101 additions & 0 deletions Connexion/authentification.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
<?php
// Définir les paramètres du cookie de session avant de démarrer la session
session_set_cookie_params([
'lifetime' => 3600, // Durée du cookie (1 heure)
'secure' => false, // Transmettre seulement via HTTPS
'httponly' => true, // Empêcher l'accès via JavaScript
'samesite' => 'Strict' // Empêcher les requêtes inter-domaines
]);

session_start(); // Démarrer la session

// Gestion CORS
header('Content-Type: application/json');
header("Access-Control-Allow-Origin: *");
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization');
header('Access-Control-Allow-Credentials: true');

// Si la méthode est OPTIONS (preflight CORS), on répond immédiatement
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
http_response_code(200);
exit;
}

// Inclure la configuration de la base de données
require_once '../Configuration/dbconnect.php';

// Vérifier si la méthode de la requête est POST
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405); // Méthode non autorisée
echo json_encode(["message" => "Méthode non autorisée"]);
exit;
}

// Lire et valider les données envoyées depuis le frontend
$data = json_decode(file_get_contents("php://input"));

if (empty($data->username) || empty($data->password)) {
http_response_code(400); // Mauvaise requête
echo json_encode(["message" => "Nom d'utilisateur et mot de passe requis"]);
exit;
}

$username = htmlspecialchars($data->username, ENT_QUOTES, 'UTF-8');
$password = htmlspecialchars($data->password, ENT_QUOTES, 'UTF-8');

// Connexion à la base de données
try {
// Requête pour vérifier l'utilisateur
$sql = "SELECT idUtilisateur, Login, idRole, email, password FROM users WHERE Login = :username";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->execute();

$user = $stmt->fetch(PDO::FETCH_ASSOC);

// Vérification de l'utilisateur et du mot de passe en clair
if ($user && $password === $user['password']) { // Comparer les mots de passe en clair
// Charger les rôles autorisés depuis une configuration centralisée
$rolesAutorises = [1, 2, 3]; // ID des rôles autorisés
if (in_array($user['idRole'], $rolesAutorises)) {
// Stocker les informations de l'utilisateur dans la session
$_SESSION['user'] = [
'id' => $user['idUtilisateur'],
'username' => $user['Login'],
'role' => $user['idRole'],
'email' => $user['email']
];

// Sécuriser le cookie de session
session_regenerate_id(true); // Empêcher les attaques de fixation de session

// Réponse JSON avec les données utilisateur utiles
http_response_code(200); // Succès
echo json_encode([
"message" => "Connexion réussie",
"user" => [
"id" => $user['idUtilisateur'],
"username" => $user['Login'],
"role" => $user['idRole'],
"email" => $user['email']

]
]);
} else {
http_response_code(403); // Accès refusé
echo json_encode(["message" => "Rôle non autorisé"]);
}
} else {
http_response_code(401); // Non autorisé
echo json_encode(["message" => "Identifiants incorrects"]);
}
} catch (PDOException $e) {
http_response_code(500); // Erreur interne du serveur
echo json_encode(["message" => "Erreur interne du serveur"]);
// Optionnel : Vous pouvez logger $e->getMessage() dans un fichier de log pour le débogage
}



?>
40 changes: 40 additions & 0 deletions Connexion/detailrole.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php
// Gestion CORS
header('Content-Type: application/json');
header("Access-Control-Allow-Origin: http://localhost:3000"); // ou l'origine exacte de votre front-endheader('Access-Control-Allow-Methods: GET');
header('Access-Control-Allow-Headers: Content-Type, Authorization');
header('Access-Control-Allow-Credentials: true');

// Inclure la configuration de la base de données
require_once '../Configuration/dbconnect.php';

// Vérifier si la méthode de la requête est GET
if ($_SERVER['REQUEST_METHOD'] !== 'GET') {
http_response_code(405); // Méthode non autorisée
echo json_encode(["message" => "Méthode non autorisée"]);
exit;
}

try {
// Connexion à la base de données et récupération des rôles
$sql_roles = "SELECT idRole, libelleRole, nivPermissions FROM roles";
$stmt_roles = $pdo->prepare($sql_roles);
$stmt_roles->execute();
$roles = $stmt_roles->fetchAll(PDO::FETCH_ASSOC);

// Préparer la réponse JSON
$response = [
"message" => "Rôles récupérés avec succès",
"roles" => $roles
];

http_response_code(200); // Succès
echo json_encode($response);
} catch (PDOException $e) {
http_response_code(500); // Erreur interne du serveur
echo json_encode([
"message" => "Erreur interne du serveur",
"error" => $e->getMessage() // Optionnel : uniquement pour débogage
]);
}
?>
26 changes: 26 additions & 0 deletions Connexion/userinfo.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php
session_start();

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");
header("Access-Control-Allow-Headers: Content-Type, Authorization");
header("Access-Control-Allow-Credentials: true");

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
http_response_code(200);
exit;
}

if (isset($_SESSION['user'])) {
http_response_code(200);
// Ajoutez un var_dump pour déboguer la session si nécessaire
// var_dump($_SESSION);
echo json_encode([
"message" => "Utilisateur connecté",
"user" => $_SESSION['user']
]);
} else {
http_response_code(401);
echo json_encode(["message" => "Aucun utilisateur connecté"]);
}
?>
96 changes: 96 additions & 0 deletions Dashboard/dashboard.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
<?php
require_once '../Configuration/dbconnect.php';

// Fonction générique pour compter les OS contenant un mot-clé donné
function get_os_count($keyword) {
global $pdo;

try {
$stmt = $pdo->prepare("SELECT COUNT(*) AS total FROM hardware WHERE OSNAME LIKE ?");
$stmt->execute(["%$keyword%"]);
$result = $stmt->fetch(PDO::FETCH_ASSOC);
return (int)$result['total'];
} catch (Exception $e) {
return 0;
}
}

function get_returned_hardware_per_month() {
global $pdo;

try {
// Requête pour obtenir le nombre de PC ayant un retour par mois
$stmt = $pdo->prepare("
SELECT
MONTH(LASTCOME) AS month,
COUNT(*) AS total_returns
FROM
hardware
WHERE
LASTCOME IS NOT NULL
AND YEAR(LASTCOME) = YEAR(CURRENT_DATE)
GROUP BY
MONTH(LASTCOME)
ORDER BY
MONTH(LASTCOME);
");
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

// Créer un tableau avec tous les mois de l'année, initialisés à 0
$months = [
'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin',
'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'
];

$returns_per_month = array_fill(0, 12, 0);

foreach ($result as $row) {
$returns_per_month[$row['month'] - 1] = $row['total_returns'];
}

return array_map(function($month, $returns) {
return ['month' => $month, 'total_returns' => $returns];
}, $months, $returns_per_month);

} catch (Exception $e) {
return [];
}
}

// En-têtes CORS et JSON
header('Content-Type: application/json');
header("Access-Control-Allow-Origin: *");
header('Access-Control-Allow-Methods: GET');
header('Access-Control-Allow-Headers: Content-Type, Authorization');

// Méthode HTTP autorisée : GET uniquement
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
try {
$stats = [
'windows' => get_os_count('Windows'),
'unix' => get_os_count('unix'),
'android' => get_os_count('android'),
'macos' => get_os_count('macos'),
'monthly_stats' => get_returned_hardware_per_month(),

];

echo json_encode([
'success' => true,
'data' => $stats
]);
} catch (Exception $e) {
http_response_code(500);
echo json_encode([
'success' => false,
'error' => 'Erreur serveur : ' . $e->getMessage()
]);
}
} else {
http_response_code(405);
echo json_encode([
'error' => 'Méthode HTTP non autorisée.'
]);
}
?>
85 changes: 85 additions & 0 deletions Pc/Pull.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
<?php
// Lire les données JSON
require_once '../Configuration/dbconnect.php';

// Vérifier le Content-Type
$contentType = $_SERVER['CONTENT_TYPE'] ?? '';
if (stripos($contentType, 'application/json') === false) {
http_response_code(415);
echo json_encode(["error" => "Type de contenu non pris en charge, attendu application/json."]);
exit;
}

$rawInput = file_get_contents('php://input');

// Pour debug, décommente la ligne suivante pour voir ce qui est reçu
// file_put_contents('debug_input.txt', $rawInput);

$input = json_decode($rawInput, true);

// Vérifier que les données JSON sont valides
if ($input === null) {
http_response_code(400);
echo json_encode(["error" => "JSON invalide."]);
exit;
}


// Vérifier les sous-champs attendus
if (
!isset($rapport['Risques']) ||
!isset($rapport['ScoreSécurité']) ||
!isset($rapport['InfosSysteme'])
) {
http_response_code(400);
echo json_encode(["error" => "Champs manquants dans 'rapport'."]);
exit;
}

$infos = $rapport['InfosSysteme'];

$nomMachine = $infos['NomMachine'] ?? null;
$utilisateur = $infos['Utilisateur'] ?? null;
$dateRapport = $infos['Date'] ?? null;
$architecture = $infos['Architecture'] ?? null;
$build = $infos['Build'] ?? null;
$uptime = $infos['Uptime_H'] ?? null;

// Nettoyage du score : extraire uniquement la partie numérique
preg_match('/\d+/', $rapport['ScoreSécurité'], $matches);
$score = isset($matches[0]) ? intval($matches[0]) : null;

// Conversion des risques en chaîne JSON ou texte (selon DB)
$risques = json_encode($rapport['Risques'], JSON_UNESCAPED_UNICODE);

try {
// Insertion dans la table Rapport
$stmt = $pdo->prepare("
INSERT INTO Rapport (
NomMachine, Utilisateur, DateRapport, Architecture,
Build, UptimeHeures, ScoreSecurite, Risques
) VALUES (
:NomMachine, :Utilisateur, :DateRapport, :Architecture,
:Build, :UptimeHeures, :ScoreSecurite, :Risques
)
");

$stmt->execute([
'NomMachine' => $nomMachine,
'Utilisateur' => $utilisateur,
'DateRapport' => $dateRapport,
'Architecture' => $architecture,
'Build' => $build,
'UptimeHeures' => $uptime,
'ScoreSecurite' => $score,
'Risques' => $risques
]);

http_response_code(200);
echo json_encode(["success" => true, "message" => "Rapport inséré avec succès."]);

} catch (Exception $e) {
http_response_code(500);
echo json_encode(["error" => "Erreur lors de l'insertion du rapport: " . $e->getMessage()]);
}
?>
Loading