Gestion des membres : extension SPIP

Publié le par AiSpirit

undefinedundefinedGestion des membres : extension SPIP
projet pour l'ADER
v 1.0 (béta)
Julien Thomas

Une présentation r
apide

Dans le cadre de  ma thèse, je fais partie de l'association ADER (Association des doctorants de TELECOM Bretagne,  http://www.telecom-bretagne.eu, Rennes) : http://ader.rennes.enst-bretagne.fr/.    Dans le cadre de cet association, je m'occupe principalement des comptes rendus et publicités externes, étant donné que je suis le secrétaire général.

Le projet de gestion des anciens

Bon, c'est pas tout, mais il n'y a pas d'informatique là dedans :d
Donc l'idée du projet de gestion des anciens membres m'a paru intéressant, et me voici chargé du projet !
Pour les membres de l'association (authentification spip du site de l'ADER obligatoire), le projet en version béta est accessible à l'adresse http://ader.rennes.enst-bretagne.fr/bd_anciens/

Voici quelques images décrivant le projet. Mais je compte faire une présentation sur mon site de développemennt http://julienthomas.no-ip.fr/~publi/ ultérieurement. C'est à dire quand il sera plus avancé et que j'aurai le temps :d
undefined
- Une fiche d'un membre -

undefined
- la liste des membres -

Extension SPIP

Bien entendu, comme le titre l'évoque, il va y avoir du spip (http://www.spip.net/)  Je ne m'attarde pas sur SPIP car je ne le connais pas trop et l'extension était nécessaire vu l'authentification mise en place sur le site associé :d Théoriquement, cela devrait être un simple .htaccess mais pourquoi faire simple quand on peut faire compliqué :d

Donc : comment faire pour gérer une authentification faite sous spip dans un autre projet ?

Voici le code (je le détaillerai plus sur mon site de développement, plus tard, là encore)

define("_DIR_SESSIONS", "<REPERTOIRE_SPIP>/tmp/sessions/");
define("_DIR_TMP", "/<REPERTOIRE_SPIP>/tmp/");

require_once("includes/include.php");
 /*
  * fonctions définies dans lesmodules de SPIP
 */

//
// Permet de tester la validité du cookie SPIP
//
function fichier_session($id_session, $alea) {
        if (ereg("^([0-9]+_)", $id_session, $regs))
                $id_auteur = $regs[1];

        $repertoire = _DIR_SESSIONS;
        if(!@file_exists($repertoire)) {
                $repertoire = preg_replace(','._DIR_TMP.',', '', $repertoire);
                $repertoire = sous_repertoire(_DIR_TMP, $repertoire);
        }
        return $repertoire . 'session_'.$id_auteur.md5($id_session.' '.$alea). '.php';
}


//
// informations utilisateurs
//
function lire_php_auth($user, $pw) {
    $row = mysql_query("SELECT * FROM spip_auteurs WHERE login='" .($user)."'");
    $row = mysql_fetch_array($row);
    return ($row['pass'] == md5($row['alea_actuel'] . $pw)) ? $row : false;
}

//
// la fonction de test
//
function verifier_php_auth() {
 // si session php ... (pas testé)
    if (@$_SERVER['PHP_AUTH_USER'] && $_SERVER['PHP_AUTH_PW']) {
        if ($r = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) {
    return true;   
        }
    }

    //si cookie SPIP (mon cas)
    if (isset($_COOKIE['spip_session'])) {
        $row = mysql_query("SELECT valeur FROM spip_meta WHERE nom='alea_ephemere'");
        $row = mysql_fetch_array($row);
       
        $fichier_session = fichier_session($_COOKIE['spip_session'], $row ["valeur"], true);
        if($fichier_session AND @file_exists($fichier_session))       return true;  
    }
    return false;
}

//
// fonction annexe nécessarie
//
function sous_repertoire($base, $subdir='', $nobase = false) {
        $base = str_replace("//", "/", $base);
        if (preg_match(',[/_]$,', $base)) $base = substr($base,0,-1);
        if (!strlen($subdir)) {
                $n = strrpos($base, "/");
                if ($n === false) return $nobase ? '' : ($base .'/');
                $subdir = substr($base, $n+1);
                $base = substr($base, 0, $n+1);
        } else {
                $base .= '/';
                $subdir = str_replace("/", "", "$subdir");
        }
        $baseaff = $nobase ? '' : $base;

        if (@file_exists("$base${subdir}.plat"))
                return "$baseaff${subdir}_";;

        $path = $base.$subdir; # $path = 'IMG/distant/pdf' ou 'IMG/distant_pdf'

        if (file_exists("$path/.ok"))
            return "$baseaff$subdir/";

        @mkdir($path, _SPIP_CHMOD);
        @chmod($path, _SPIP_CHMOD);

        $ok = false;
        if ($test = @fopen("$path/dir_test.php", "w")) {
                @fputs($test, '<'.'?php $ok = true; ?'.'>');
                @fclose($test);
                @include("$path/dir_test.php");
                @unlink("$path/dir_test.php");
        }
        if ($ok) {
                @touch ("$path/.ok");
                spip_log("creation $base$subdir/");

                return "$baseaff$subdir/";
        }

        $f = @fopen("$base${subdir}.plat", "w");
        if ($f)
                fclose($f);
        else {
                spip_log("echec creation $base${subdir}");
                if (!_DIR_RESTREINT)
                        $base = preg_replace(',^' . _DIR_RACINE .',', '',$base);
                if ($test) $base .= $subdir;
                include_spip('inc/headers');
                redirige_par_entete(generer_url_action('test_dirs',"test_dir=$base",true));
        }
        spip_log("faux sous-repertoire $base${subdir}");
        return "$baseaff${subdir}";
}


//
// et le test de sécurité
//
$rep = verifier_php_auth();

if($rep == false) die(<MESSAGE_DERREUR>);



Récupération du projet

Quand celui-ci sera plus complet, je compte le mettre en téléchargement (sur mon site de développement ?). mais vous pouvez aussi me contacter pour plus d'informations ou si vous voulez participer (dans  ce cas, cela deviendra peut-être un projet sourceforge).

Publicité

Publié dans these

Pour être informé des derniers articles, inscrivez vous :
Commenter cet article