Outils pour utilisateurs

Outils du site


lumo:creation_complete_du_plugin_dokuwiki

Ceci est une ancienne révision du document !


Création complète du plugin DokuWiki

Structure du Plugin

/lib/plugins/bashexec/
├── action.php          # Gestion des actions et appels
├── syntax.php          # Syntaxe pour l'insertion dans les pages
├── helper.php          # Fonctions utilitaires
├── script.sh           # Votre script bash (optionnel)
└── manifest.ini        # Métadonnées du plugin

1. manifest.ini

[plugin]
name=Bash Exec Plugin
desc=Exécute des scripts bash avec validation sécurisée
author=Votre Nom
email=votre@email.com
url=https://votre-site.com
date=2026-03-12
version=1.0.0

2. helper.php (Fonctions utilitaires)

<?php
/**
 * Helper class for Bash Exec Plugin
 */
class helper_plugin_bashexec extends DokuWiki_Plugin {
 
    /**
     * Validation stricte des arguments
     */
    public function validateArgument($arg) {
        // Autorise uniquement alphanumérique, tirets et underscores
        if (!preg_match('/^[a-zA-Z0-9_-]{1,50}$/', $arg)) {
            return false;
        }
        return true;
    }
 
    /**
     * Validation du chemin du script
     */
    public function validateScriptPath($path) {
        $allowedPaths = array(
            DOKU_PLUGIN . 'bashexec/scripts/',
            '/usr/local/bin/'
        );
 
        foreach ($allowedPaths as $allowed) {
            if (strpos($path, $allowed) === 0) {
                return true;
            }
        }
        return false;
    }
 
    /**
     * Journalisation des exécutions
     */
    public function logExecution($script, $args, $returnCode, $user) {
        $logFile = DOKU_LOG . '/bashexec.log';
        $timestamp = date('Y-m-d H:i:s');
        $entry = sprintf(
            "[%s] User: %s | Script: %s | Args: %s | Return: %d\n",
            $timestamp,
            $user,
            basename($script),
            implode(' ', $args),
            $returnCode
        );
        file_put_contents($logFile, $entry, FILE_APPEND);
    }
 
    /**
     * Vérification des permissions
     */
    public function checkPermissions() {
        global $USERINFO;
 
        // Vérifie si l'utilisateur est connecté
        if (!isset($USERINFO['name'])) {
            return false;
        }
 
        // Optionnel : Restreindre à certains groupes
        $allowedGroups = $this->getConf('allowed_groups');
        if ($allowedGroups) {
            $userGroups = explode(',', $allowedGroups);
            foreach ($userGroups as $group) {
                if (in_array(trim($group), $USERINFO['groups'])) {
                    return true;
                }
            }
            return false;
        }
 
        return true;
    }
}
lumo/creation_complete_du_plugin_dokuwiki.1773311077.txt.gz · Dernière modification : de estro

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki