uawdijnntqw1x1x1
IP : 216.73.216.249
Hostname : webm001.cluster110.gra.hosting.ovh.net
Kernel : Linux webm001.cluster110.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
OS : Linux
PATH:
/
home
/
etiennec
/
www
/
b9da6
/
..
/
squelettes-dist
/
modeles
/
..
/
..
/
f1f54
/
teleporter.tar
/
/
git.php000066600000007445152503076270006065 0ustar00<?php /** * Gestion du téléporteur GIT. * * @plugin SVP pour SPIP * @license GPL * @package SPIP\SVP\Teleporteur */ /** * Téléporter et déballer un composant GIT * * Déployer un repository GIT depuis une source et une révision données * * @param string $methode * Méthode de téléportation : http|git|svn|... * @param string $source * URL de la source GIT * @param string $dest * Chemin du répertoire de destination * @param array $options * Tableau d'options. Index possibles : * - revision => 'ae89' * - branche => 'xxx' * @return bool * True si l'opération réussie, false sinon. */ function teleporter_git_dist($methode,$source,$dest,$options=array()){ $branche = (isset($options['branche'])?$options['branche']:'master'); if (is_dir($dest)){ $infos = teleporter_git_read($dest,array('format'=>'assoc')); if (!$infos){ spip_log("Suppression de $dest qui n'est pas au format GIT","teleport"); $old = teleporter_nettoyer_vieille_version($dest); } elseif ($infos['source']!==$source) { spip_log("Suppression de $dest qui n'est pas sur le bon repository GIT","teleport"); $old = teleporter_nettoyer_vieille_version($dest); } elseif (!isset($options['revision']) OR $options['revision']!=$infos['revision']){ $command = "git checkout ".escapeshellarg($branche); teleporter_git_exec($dest,$command); $command = "git pull --all"; teleporter_git_exec($dest,$command); if (isset($options['revision'])){ $command = "git checkout ".escapeshellarg($options['revision']); teleporter_git_exec($dest,$command); } else { $command = "git checkout ".escapeshellarg($branche); teleporter_git_exec($dest,$command); } } else { spip_log("$dest deja sur GIT $source Revision ".$options['revision'],"teleport"); } } if (!is_dir($dest)){ $command = "git clone "; $command .= escapeshellarg($source)." ".escapeshellarg($dest); teleporter_git_exec($dest,$command); if (isset($options['revision'])){ $command = "git checkout ".escapeshellarg($options['revision']); teleporter_git_exec($dest,$command); } } // verifier que tout a bien marche $infos = teleporter_git_read($dest); if (!$infos) return false; return true; } /** * Lire l'état GIT du repository * * Retourne les informations GIT d'un répertoire donné * * @param string $dest * Chemin du répertoire à tester * @param array $options * Tableau d'options * @return string|bool|array * - Chaîne vide si pas un dépot GIT * - False si erreur sur le dépot GIT * - array sinon. Tableau avec 3 index : * -- source : Source du dépot GIT à cette destination * -- revision : Révision du dépot * -- dest : Répertoire du dépot. */ function teleporter_git_read($dest, $options=array()) { if (!is_dir("$dest/.git")) return ""; $curdir = getcwd(); chdir($dest); exec("git remote -v",$output); $output = implode("\n",$output); $source = ""; if (preg_match(",(\w+://.*)\s+\(fetch\)$,Uims",$output,$m)) $source = $m[1]; elseif (preg_match(",([^@\s]+@[^:\s]+:.*)\s+\(fetch\)$,Uims",$output,$m)) $source = $m[1]; if (!$source){ chdir($curdir); return ""; } $source = $m[1]; exec("git log -1",$output); $hash = explode(" ",reset($output)); $hash = end($hash); // [TODO] lire la branche ? chdir($curdir); if (preg_match(",[^0-9a-f],i",$hash)) return false; return array( 'source' => $source, 'revision' => substr($hash,0,7), 'dest' => $dest ); } /** * Exécuter une commande GIT * * @param string $dest * Répertoire de destination * @param string $command * Commande à exécuter * @return void */ function teleporter_git_exec($dest,$command) { spip_log("{$dest}:{$command}","teleport"); $curdir = getcwd(); chdir($dest); exec($command); chdir($curdir); } http_deballe_zip.php000066600000010404152503076270010600 0ustar00<?php /** * Gestion du téléporteur HTTP \ Zip. * * @plugin SVP pour SPIP * @license GPL * @package SPIP\SVP\Teleporteur */ /** * Déballer le fichier au format zip dans le répertoire $dest * en utilisant le dossier temporaire $tmp si besoin * * @param string $archive * Chemin du fichier zip * @param string $dest * Répertoire où on veut décompresser * @param string $tmp * Répertoire de stockage temporaire * @return bool|string * Répertoire où a été décompressé le zip, false sinon. */ function teleporter_http_deballe_zip_dist($archive, $dest, $tmp){ $status = teleporter_http_charger_zip( array( 'archive' => $archive, // normalement l'url source mais on l'a pas ici 'fichier' => $archive, 'dest' => $dest, 'tmp' => $tmp, 'extract' => true, 'root_extract' => true, # extraire a la racine de dest ) ); // le fichier .zip est la et bien forme if (is_array($status) AND is_dir($status['target'])) { return $status['target']; } // fichier absent else if ($status == -1) { spip_log("dezip de $archive impossible : fichier absent","teleport"._LOG_ERREUR); return false; } // fichier la mais pas bien dezippe else { spip_log("probleme lors du dezip de $archive","teleport"._LOG_ERREUR); return false; } } /** * Charger un zip à partir d'un tableau d'options descriptives * * @param array $quoi * Tableau d'options * @return array|bool|int|string * En cas de réussite, Tableau décrivant le zip, avec les index suivant : * - files : la liste des fichiers présents dans le zip, * - size : la taille décompressée * - compressed_size : la taille compressée * - dirname : répertoire où les fichiers devront être décompréssés * - tmpname : répertoire temporaire où les fichiers sont décompressés * - target : cible sur laquelle décompresser les fichiers... */ function teleporter_http_charger_zip($quoi = array()){ if (!$quoi) return false; foreach (array( 'remove' => 'spip', 'rename' => array(), 'edit' => array(), 'root_extract' => false, # extraire a la racine de dest ? 'tmp' => sous_repertoire(_DIR_CACHE, 'chargeur') ) as $opt=>$def) { isset($quoi[$opt]) || ($quoi[$opt] = $def); } if (!@file_exists($fichier = $quoi['fichier'])) return 0; include_spip('inc/pclzip'); $zip = new PclZip($fichier); $list = $zip->listContent(); $racine = http_deballe_recherche_racine($list); $quoi['remove'] = $racine; // si pas de racine commune, reprendre le nom du fichier zip // en lui enlevant la racine h+md5 qui le prefixe eventuellement // cf action/charger_plugin L74 if (!strlen($nom = basename($racine))) $nom = preg_replace(",^h[0-9a-f]{8}-,i","",basename($fichier, '.zip')); $dir_export = $quoi['root_extract'] ? $quoi['dest'] : $quoi['dest'] . $nom; $dir_export = rtrim($dir_export,'/').'/'; $tmpname = $quoi['tmp'].$nom.'/'; // choisir la cible selon si on veut vraiment extraire ou pas $target = $quoi['extract'] ? $dir_export : $tmpname; // ici, il faut vider le rep cible si il existe deja, non ? if (is_dir($target)) supprimer_repertoire($target); // et enfin on extrait $ok = $zip->extract( PCLZIP_OPT_PATH, $target , PCLZIP_OPT_SET_CHMOD, _SPIP_CHMOD, PCLZIP_OPT_REPLACE_NEWER, PCLZIP_OPT_REMOVE_PATH, $quoi['remove'] ); if ($zip->error_code < 0) { spip_log('charger_decompresser erreur zip ' . $zip->error_code .' pour paquet: ' . $quoi['archive'],"teleport"._LOG_ERREUR); return //$zip->error_code $zip->errorName(true); } spip_log('charger_decompresser OK pour paquet: ' . $quoi['archive'],"teleport"); $size = $compressed_size = 0; $removex = ',^'.preg_quote($quoi['remove'], ',').','; foreach ($list as $a => $f) { $size += $f['size']; $compressed_size += $f['compressed_size']; $list[$a] = preg_replace($removex,'',$f['filename']); } // Indiquer par un fichier install.log // a la racine que c'est chargeur qui a installe ce plugin ecrire_fichier($target.'install.log', "installation: charger_plugin\n" ."date: ".gmdate('Y-m-d\TH:i:s\Z', time())."\n" ."source: ".$quoi['archive']."\n" ); return array( 'files' => $list, 'size' => $size, 'compressed_size' => $compressed_size, 'dirname' => $dir_export, 'tmpname' => $tmpname, 'target' => $target, ); } http.php000066600000012045152503076270006251 0ustar00<?php /** * Gestion du téléporteur HTTP. * * @plugin SVP pour SPIP * @license GPL * @package SPIP\SVP\Teleporteur */ /** * Téléporter et déballer un composant HTTP * * @param string $methode * Méthode de téléportation : http|git|svn|... * @param string $source * URL de la source HTTP * @param string $dest * Chemin du répertoire de destination * @param array $options * Tableau d'options. * Doit au moins avoir l'index : * - dir_tmp : Indique un répertoire temporaire pour stocker * les fichiers. Par exemple défini avec : sous_repertoire(_DIR_CACHE, 'chargeur'); * @return bool|string * Texte d'erreur si erreur, * True si l'opération réussie. */ function teleporter_http_dist($methode,$source,$dest,$options=array()){ $tmp = $options['dir_tmp']; # on ne se contente pas du basename qui peut etre un simple v1 # exemple de l'url http://nodeload.github.com/kbjr/Git.php/zipball/v0.1.1-rc $fichier = $tmp . (basename($dest)."-".substr(md5($source),0,8)."-".basename($source)); $res = teleporter_http_recuperer_source($source,$fichier); if (!is_array($res)) return $res; list($fichier,$extension) = $res; if (!$deballe = charger_fonction("http_deballe_".preg_replace(",\W,","_",$extension),"teleporter",true)) return _T('svp:erreur_teleporter_format_archive_non_supporte',array('extension' => $extension)); $old = teleporter_nettoyer_vieille_version($dest); if (!$target = $deballe($fichier, $dest, $tmp)){ // retablir l'ancien sinon if ($old) rename($old,$dest); return _T('svp:erreur_teleporter_echec_deballage_archive',array('fichier' => $fichier)); } return true; } /** * Récupérer la source et détecter son extension * * @param string $source * URL de la source HTTP * @param string $dest_tmp * Répertoire de destination * @return array|string * - Texte d'erreur si une erreur survient, * - Liste sinon (répertoire de destination temporaire, extension du fichier source) */ function teleporter_http_recuperer_source($source,$dest_tmp){ # securite : ici on repart toujours d'une source neuve if (file_exists($dest_tmp)) spip_unlink($dest_tmp); $extension = ""; # si on ne dispose pas encore du fichier # verifier que le zip en est bien un (sans se fier a son extension) # en chargeant son entete car l'url initiale peut etre une simple # redirection et ne pas comporter d'extension .zip include_spip('inc/distant'); $head = recuperer_page($source, false, true, 0); if (preg_match(",^Content-Type:\s*?(.*)$,Uims",$head,$m) AND include_spip('base/typedoc')){ $mime = $m[1]; // passer du mime a l'extension ! if ($e = array_search($mime,$GLOBALS['tables_mime'])) $extension = $e; } if (!$extension // cas des extensions incertaines car mime-type ambigu OR in_array($extension,array('bin','gz'))){ if (preg_match(",^Content-Disposition:\s*attachment;\s*filename=(.*)['\"]?$,Uims",$head,$m) AND $e=teleporter_http_extension($m[1])){ $extension = $e; } // au cas ou, si le content-type n'est pas la // mais que l'extension est explicite else{ $extension = teleporter_http_extension($source); } } # format de fichier inconnu if (!$extension) { spip_log("Type de fichier inconnu pour la source $source","teleport"._LOG_ERREUR); return _T('svp:erreur_teleporter_type_fichier_inconnu',array('source' => $source)); } $dest_tmp = preg_replace(";\.[\w]{2,3}$;i","",$dest_tmp).".$extension"; include_spip('inc/distant'); $dest_tmp = copie_locale($source,'force',$dest_tmp); if (!$dest_tmp OR !file_exists($dest_tmp = _DIR_RACINE . $dest_tmp)) { spip_log("Chargement impossible de la source $source","teleport"._LOG_ERREUR); return _T('svp:erreur_teleporter_chargement_source_impossible',array('source' => $source)); } return array($dest_tmp,$extension); } /** * Retrouve l'extension d'un fichier * * @note * Retourne tgz pour un fichier .tar.gz * * @param string $file * Chemin du fichier * @return string * Extension du fichier, sinon vide **/ function teleporter_http_extension($file){ $e = pathinfo($file, PATHINFO_EXTENSION); // cas particuliers : redresser .tar.gz if ($e=='gz' AND preg_match(',tar\.gz,i',$file)) $e = 'tgz'; return $e; } /** * Cherche la plus longue racine commune à tous les fichiers * * @param array $list * Liste de chemin de fichiers * @return string * Chemin commun entre tous les fichiers **/ function http_deballe_recherche_racine($list){ // on cherche la plus longue racine commune a tous les fichiers // pour l'enlever au deballage $max_n = 999999; $paths = array(); foreach($list as $n) { $p = array(); foreach(explode('/', $n['filename']) as $n => $x) { if ($n>$max_n) continue; $sofar = join('/',$p); $paths[$n][$sofar]++; $p[] = $x; } $max_n = min($n,$max_n); } $total = $paths[0]['']; $i = 0; while (isset($paths[$i]) AND count($paths[$i]) <= 1 AND array_values($paths[$i]) == array($total)) $i++; $racine = ''; if ($i){ $racine = array_keys($paths[$i-1]); $racine = array_pop($racine).'/'; } return $racine; } http_deballe_tgz.php000066600000010402152503076270010600 0ustar00<?php /** * Gestion du téléporteur HTTP \ Tar. * * @plugin SVP pour SPIP * @license GPL * @package SPIP\SVP\Teleporteur */ /** * Déballer le fichier au format tgz dans le répertoire $dest * en utilisant le dossier temporaire $tmp si besoin * * @param string $archive * Chemin du fichier tgz * @param string $dest * Répertoire où on veut décompresser * @param string $tmp * Répertoire de stockage temporaire * @return bool|string * Répertoire où a été décompressé le tgz, false sinon. */ function teleporter_http_deballe_tgz_dist($archive, $dest, $tmp){ $status = teleporter_http_charger_tgz( array( 'archive' => $archive, // normalement l'url source mais on l'a pas ici 'fichier' => $archive, 'dest' => $dest, 'tmp' => $tmp, 'extract' => true, 'root_extract' => true, # extraire a la racine de dest ) ); // le fichier .zip est la et bien forme if (is_array($status) AND is_dir($status['target'])) { return $status['target']; } // fichier absent else if ($status == -1) { spip_log("dezip de $archive impossible : fichier absent","teleport"._LOG_ERREUR); return false; } // fichier la mais pas bien dezippe else { spip_log("probleme lors du dezip de $archive","teleport"._LOG_ERREUR); return false; } } /** * Charger un tgz à partir d'un tableau d'options descriptives * * @param array $quoi * Tableau d'options * @return array|bool|int|string * En cas de réussite, Tableau décrivant le zip, avec les index suivant : * - files : la liste des fichiers présents dans le zip, * - size : la taille décompressée * - compressed_size : la taille compressée * - dirname : répertoire où les fichiers devront être décompréssés * - tmpname : répertoire temporaire où les fichiers sont décompressés * - target : cible sur laquelle décompresser les fichiers... */ function teleporter_http_charger_tgz($quoi = array()){ if (!$quoi) return false; foreach (array( 'remove' => '', 'rename' => array(), 'edit' => array(), 'root_extract' => false, # extraire a la racine de dest ? 'tmp' => sous_repertoire(_DIR_CACHE, 'chargeur') ) as $opt=>$def) { isset($quoi[$opt]) || ($quoi[$opt] = $def); } if (!@file_exists($fichier = $quoi['fichier'])) return 0; include_spip('inc/pcltar'); $racine = ''; if ($list = PclTarList($fichier)){ $racine = http_deballe_recherche_racine($list); $quoi['remove'] = $racine; } else { spip_log('charger_decompresser erreur lecture liste tar ' . PclErrorString() .' pour paquet: ' . $quoi['archive'],"teleport"._LOG_ERREUR); return PclErrorString(); } // si pas de racine commune, reprendre le nom du fichier zip // en lui enlevant la racine h+md5 qui le prefixe eventuellement // cf action/charger_plugin L74 if (!strlen($nom = basename($racine))) $nom = preg_replace(",^h[0-9a-f]{8}-,i","",basename($fichier, '.zip')); $dir_export = $quoi['root_extract'] ? $quoi['dest'] : $quoi['dest'] . $nom; $dir_export = rtrim($dir_export,'/').'/'; $tmpname = $quoi['tmp'].$nom.'/'; // choisir la cible selon si on veut vraiment extraire ou pas $target = $quoi['extract'] ? $dir_export : $tmpname; // ici, il faut vider le rep cible si il existe deja, non ? if (is_dir($target)) supprimer_repertoire($target); $ok = PclTarExtract($fichier,$target,$quoi['remove']); if ($ok == 0) { spip_log('charger_decompresser erreur tar ' . PclErrorString() .' pour paquet: ' . $quoi['archive'],"teleport"._LOG_ERREUR); return PclErrorString(); } spip_log('charger_decompresser OK pour paquet: ' . $quoi['archive'],"teleport"); $size = $compressed_size = 0; $removex = ',^'.preg_quote($quoi['remove'], ',').','; foreach ($list as $a => $f) { $size += $f['size']; $compressed_size += $f['compressed_size']; $list[$a] = preg_replace($removex,'',$f['filename']); } // Indiquer par un fichier install.log // a la racine que c'est chargeur qui a installe ce plugin ecrire_fichier($target.'install.log', "installation: charger_plugin\n" ."date: ".gmdate('Y-m-d\TH:i:s\Z', time())."\n" ."source: ".$quoi['archive']."\n" ); return array( 'files' => $list, 'size' => $size, 'compressed_size' => $compressed_size, 'dirname' => $dir_export, 'tmpname' => $tmpname, 'target' => $target, ); } svn.php000066600000006213152503076270006100 0ustar00<?php /** * Gestion du téléporteur HTTP. * * @plugin SVP pour SPIP * @license GPL * @package SPIP\SVP\Teleporteur */ /** * Téléporter et déballer un composant SVN * * Déployer un repository SVN depuis une source et une révision données * * @param string $methode * Méthode de téléportation : http|git|svn|... * @param string $source * URL de la source SVN * @param string $dest * Chemin du répertoire de destination * @param array $options * Tableau d'options. Index possibles : * - revision => 'nnn' * - literal => --ignore-externals * @return bool * True si l'opération réussie, false sinon. */ function teleporter_svn_dist($methode,$source,$dest,$options=array()){ if (is_dir($dest)){ $infos = teleporter_svn_read($dest); if (!$infos){ spip_log("Suppression de $dest qui n'est pas au format SVN","teleport"); $old = teleporter_nettoyer_vieille_version($dest); } elseif ($infos['source']!==$source) { spip_log("Suppression de $dest qui n'est pas sur le bon repository SVN","teleport"); $old = teleporter_nettoyer_vieille_version($dest); } elseif (!isset($options['revision']) OR $options['revision']!=$infos['revision']){ $command = "svn up "; if (isset($options['revision'])) $command .= escapeshellarg("-r".$options['revision'])." "; if (isset($options['ignore-externals'])) $command .= "--ignore-externals "; $command .= escapeshellarg($dest); spip_log($command,"teleport"); exec($command); } else { // Rien a faire ! spip_log("$dest deja a jour (Revision ".$options['revision']." SVN de $source)","teleport"); } } if (!is_dir($dest)){ $command = "svn co "; if (isset($options['revision'])) $command .= escapeshellarg("-r".$options['revision'])." "; if (isset($options['ignore-externals'])) $command .= "--ignore-externals "; $command .= escapeshellarg($source)." ".escapeshellarg($dest); spip_log($command,"teleport"); exec($command); } // verifier que tout a bien marche $infos = teleporter_svn_read($dest); if (!$infos) return false; return true; } /** * Lire source et révision d'un répertoire SVN * et reconstruire la ligne de commande * * @param string $dest * Chemin du répertoire SVN * @param array $options * Options * @return array|string * Chaîne vide si pas SVN ou erreur de lecture, * Tableau sinon avec les index : * - source : URL de la source SVN * - revision : numéro de la révision SVN * - dest : Chemin du répertoire */ function teleporter_svn_read($dest,$options=array()){ if (!is_dir("$dest/.svn")) return ""; // on veut lire ce qui est actuellement deploye // et reconstituer la ligne de commande pour le deployer exec("svn info ".escapeshellarg($dest),$output); $output = implode("\n",$output); // URL // URL: svn://trac.rezo.net/spip/spip if (!preg_match(",^URL[^:\w]*:\s+(.*)$,Uims",$output,$m)) return ""; $source = $m[1]; // Revision // Revision: 18763 if (!preg_match(",^R..?vision[^:\w]*:\s+(\d+)$,Uims",$output,$m)) return ""; $revision = $m[1]; return array( 'source' => $source, 'revision' => $revision, 'dest' => $dest ); }
/home/etiennec/www/b9da6/../squelettes-dist/modeles/../../f1f54/teleporter.tar