mirror of
https://github.com/JMP-MS/ASPIC.git
synced 2026-10-27 16:07:10 +00:00
98 lines
3.5 KiB
PHP
98 lines
3.5 KiB
PHP
<?php
|
|
/**
|
|
* ASPIC — espaces.php
|
|
*
|
|
* Endpoint du BackOffice (11 septembre 2026) — vérification/administration
|
|
* des espaces disque privés (voir espace_utilisateur.php). Construit pour
|
|
* répondre à un besoin explicite de Jean-Marc : pouvoir toujours retrouver,
|
|
* en un clic, le dossier réel d'un utilisateur — l'opacité des noms de
|
|
* dossiers protège contre un visiteur extérieur, jamais contre lui.
|
|
*
|
|
* GET : pour chaque ligne de MIR_Users, le chemin résolu (calculé, jamais
|
|
* deviné), s'il existe déjà sur disque, et sa taille.
|
|
* POST { "action": "provisionner", "MIR_Code": "JMP" } : force la création
|
|
* immédiate du dossier (au lieu d'attendre un premier besoin réel).
|
|
*/
|
|
|
|
session_start();
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
require __DIR__ . '/db.php';
|
|
require __DIR__ . '/espace_utilisateur.php';
|
|
|
|
if (empty($_SESSION['USR_Code'])) {
|
|
http_response_code(401);
|
|
echo json_encode(['error' => 'Non identifié — veuillez vous connecter.']);
|
|
exit;
|
|
}
|
|
|
|
try {
|
|
$pdoRouter = getRouterConnection();
|
|
} catch (PDOException $e) {
|
|
http_response_code(500);
|
|
echo json_encode(['error' => 'Connexion à MIRADOR impossible']);
|
|
exit;
|
|
}
|
|
|
|
function tailleDossier(string $chemin): int
|
|
{
|
|
if (!is_dir($chemin)) return 0;
|
|
$total = 0;
|
|
$iterateur = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($chemin, FilesystemIterator::SKIP_DOTS));
|
|
foreach ($iterateur as $fichier) {
|
|
if ($fichier->isFile()) $total += $fichier->getSize();
|
|
}
|
|
return $total;
|
|
}
|
|
|
|
$method = $_SERVER['REQUEST_METHOD'];
|
|
|
|
if ($method === 'GET') {
|
|
$lignes = $pdoRouter->query('SELECT MIR_Email, MIR_Code, MIR_ServeurHost, MIR_BaseNom, MIR_Espace FROM MIR_Users ORDER BY MIR_Email')->fetchAll();
|
|
$resultat = [];
|
|
foreach ($lignes as $l) {
|
|
$dossierRelatif = cheminTenant($l['MIR_ServeurHost'], $l['MIR_BaseNom']) . '/' . ($l['MIR_Espace'] ?: '(pas encore créé)');
|
|
$cheminAbsolu = RACINE_ESPACES . '/' . $dossierRelatif;
|
|
$existe = $l['MIR_Espace'] && is_dir($cheminAbsolu);
|
|
$resultat[] = [
|
|
'MIR_Email' => $l['MIR_Email'],
|
|
'MIR_Code' => $l['MIR_Code'],
|
|
'MIR_BaseNom' => $l['MIR_BaseNom'],
|
|
'dossier_relatif' => $dossierRelatif,
|
|
'existe' => $existe,
|
|
'taille_octets' => $existe ? tailleDossier($cheminAbsolu) : 0,
|
|
];
|
|
}
|
|
echo json_encode(['espaces' => $resultat]);
|
|
exit;
|
|
}
|
|
|
|
if ($method === 'POST') {
|
|
$data = json_decode(file_get_contents('php://input'), true) ?? [];
|
|
$action = (string) ($data['action'] ?? '');
|
|
$mirEmail = trim((string) ($data['MIR_Email'] ?? ''));
|
|
|
|
if ($action !== 'provisionner' || $mirEmail === '') {
|
|
http_response_code(400);
|
|
echo json_encode(['error' => 'Requête invalide']);
|
|
exit;
|
|
}
|
|
|
|
// Clé MIR_Email, jamais MIR_Code — voir commentaire de jetonUtilisateur()
|
|
// dans espace_utilisateur.php (MIR_Code n'est pas unique dans MIR_Users).
|
|
$stmt = $pdoRouter->prepare('SELECT MIR_ServeurHost, MIR_BaseNom FROM MIR_Users WHERE MIR_Email = ? LIMIT 1');
|
|
$stmt->execute([$mirEmail]);
|
|
$ligne = $stmt->fetch();
|
|
if (!$ligne) {
|
|
http_response_code(404);
|
|
echo json_encode(['error' => 'Utilisateur introuvable dans MIRADOR']);
|
|
exit;
|
|
}
|
|
|
|
$chemin = resoudreEspaceUtilisateur($pdoRouter, $mirEmail, $ligne['MIR_ServeurHost'], $ligne['MIR_BaseNom']);
|
|
echo json_encode(['success' => true, 'chemin' => $chemin]);
|
|
exit;
|
|
}
|
|
|
|
http_response_code(405);
|
|
echo json_encode(['error' => 'Méthode non autorisée']);
|