Пример #1
0
/**
 * Inscription rapide d'un client, sans confirmation email, par simple saisie email
 * @param string $statut
 * @param string $retour
 * @return array
 */
function formulaires_inscription_rapide_traiter_dist($statut = '6forum', $retour = '')
{
    $inscription_traiter = charger_fonction("traiter", "formulaires/inscription");
    $res = $inscription_traiter($statut);
    // confirmer directement l'inscription, sans attendre validation de l'email
    // et autologer
    if (isset($res['id_auteur']) and $id_auteur = $res['id_auteur']) {
        sql_updateq('spip_auteurs', array('cookie_oubli' => '', 'statut' => $statut), 'id_auteur=' . intval($id_auteur));
        include_spip('inc/auth');
        $auteur = sql_fetsel("*", "spip_auteurs", "id_auteur=" . intval($id_auteur));
        auth_loger($auteur);
        $res['message_ok'] = _T('profils:message_succes_inscription_rapide');
    }
    if ($retour) {
        $res['redirect'] = $retour;
    }
    return $res;
}
Пример #2
0
function action_usurper_profil_dist()
{
    $securiser_action = charger_fonction("securiser_action", "inc");
    $id_auteur = $securiser_action();
    if (isset($GLOBALS['visiteur_session']['id_auteur']) and intval($GLOBALS['visiteur_session']['id_auteur']) and isset($GLOBALS['visiteur_session']['email']) and include_spip("inc/autoriser") and autoriser('webmestre') and $auteur = sql_fetsel("*", "spip_auteurs", "id_auteur=" . intval($id_auteur)) and $auteur['statut'] == '6forum') {
        // securite : on envoi un mail au webmestre qui utilise la fonction, pour prevenir toute utilisation abusive
        $envoyer_mail = charger_fonction("envoyer_mail", "inc");
        $envoyer_mail($GLOBALS['visiteur_session']['email'], "[" . $GLOBALS['meta']['nom_site'] . "] SECURITE : Connexion avec Profil client", "Vous vous etes connecte avec le compte ci-dessous.\nSi ce n'est pas vous qui avez fait cette operation avertissez tout de suite le support technique pour des raisons de sécurité\n" . var_export(array('nom' => $auteur['name'], 'prenom' => $auteur['prenom'], 'email' => $auteur['email']), true));
        include_spip('inc/auth');
        /*
        		auth_trace($GLOBALS['visiteur_session'], '0000-00-00 00:00:00');
        		// le logout explicite vaut destruction de toutes les sessions
        		if (isset($_COOKIE['spip_session'])) {
        			$session = charger_fonction('session', 'inc');
        			$session($GLOBALS['visiteur_session']['id_auteur']);
        			spip_setcookie('spip_session', $_COOKIE['spip_session'], time()-3600);
        		}*/
        auth_loger($auteur);
    }
}
Пример #3
0
/**
 * Action de confirmation d'une inscription
 * 
 * @global array $GLOBALS['visiteur_session']
 * @global string $GLOBALS['redirect']
 * @return void
 */
function action_confirmer_inscription_dist()
{
    $jeton = _request('jeton');
    $email = _request('email');
    include_spip('action/inscrire_auteur');
    if ($auteur = auteur_verifier_jeton($jeton) and $auteur['email'] == $email and $auteur['statut'] == 'nouveau') {
        // OK c'est un nouvel inscrit qui confirme :
        // on le loge => ca va confirmer son statut et c'est plus sympa
        include_spip('inc/auth');
        auth_loger($auteur);
        // et on efface son jeton
        auteur_effacer_jeton($auteur['id_auteur']);
        // si pas de redirection demandee, rediriger vers public ou prive selon le statut de l'auteur
        // TODO: ne semble pas marcher si inscrit non visiteur, a debug
        if (!_request('redirect')) {
            // on passe id_auteur explicite pour forcer une lecture en base de toutes les infos
            if (autoriser('ecrire', '', '', $auteur['id_auteur'])) {
                // poser un cookie admin aussi
                $cookie = charger_fonction('cookie', 'action');
                $cookie("@" . $GLOBALS['visiteur_session']['login']);
                $GLOBALS['redirect'] = _DIR_RESTREINT_ABS;
            } else {
                $GLOBALS['redirect'] = $GLOBALS['meta']['adresse_site'];
            }
        }
    } else {
        // lien perime :
        if ($GLOBALS['visiteur_session']['id_auteur']) {
            // on passe id_auteur explicite pour forcer une lecture en base de toutes les infos
            if (autoriser('ecrire', '', '', $GLOBALS['visiteur_session']['id_auteur'])) {
                $GLOBALS['redirect'] = _DIR_RESTREINT_ABS;
            } else {
                $GLOBALS['redirect'] = $GLOBALS['meta']['adresse_site'];
            }
        } else {
            // rediriger vers la page de login si pas encore loge
            $GLOBALS['redirect'] = parametre_url(generer_url_public('login', '', false), 'url', _request('redirect'));
        }
    }
}
Пример #4
0
/**
 * Retour d'authentification pour les SSO
 */
function action_auth_dist()
{
    $securiser_action = charger_fonction('securiser_action', 'inc');
    $arg = $securiser_action();
    if (!preg_match(",^(\\w+)[/](.+)\$,", $arg, $r)) {
        spip_log("action_auth_dist {$arg} pas compris");
    } else {
        $auth_methode = $r[1];
        $login = $r[2];
        include_spip('inc/auth');
        $res = auth_terminer_identifier_login($auth_methode, $login);
        if (is_string($res)) {
            // Erreur
            $redirect = _request('redirect');
            $redirect = parametre_url($redirect, 'var_erreur', $res, '&');
            include_spip('inc/headers');
            redirige_par_entete($redirect);
        }
        // sinon on loge l'auteur identifie, et on finit (redirection automatique)
        auth_loger($res);
    }
}
Пример #5
0
function formulaires_login_verifier_dist($cible = "", $login = "", $prive = null)
{
    $session_login = _request('var_login');
    $session_password = _request('password');
    $session_remember = _request('session_remember');
    if (!$session_login) {
        # pas de login saisi !
        return array('var_login' => _T('info_obligatoire'));
    }
    // appeler auth_identifier_login qui va :
    // - renvoyer un string si echec (message d'erreur)
    // - un array decrivant l'auteur identifie si possible
    // - rediriger vers un SSO qui renverra in fine sur action/auth qui finira l'authentification
    include_spip('inc/auth');
    $auteur = auth_identifier_login($session_login, $session_password);
    // on arrive ici si on ne s'est pas identifie avec un SSO
    if (!is_array($auteur)) {
        $erreurs = array();
        if (is_string($auteur)) {
            $erreurs['var_login'] = $auteur;
        }
        include_spip('inc/cookie');
        spip_setcookie("spip_admin", "", time() - 3600);
        if (strlen($session_password)) {
            $erreurs['password'] = _T('login_erreur_pass');
        } else {
            $erreurs['password'] = '******';
        }
        return $erreurs;
    }
    // on a ete authentifie, construire la session
    // en gerant la duree demandee pour son cookie
    if ($session_remember !== NULL) {
        $auteur['cookie'] = $session_remember;
    }
    auth_loger($auteur);
    return is_null($prive) ? is_url_prive($cible) : $prive ? login_autoriser() : array();
}
Пример #6
0
function action_cookie_dist($set_cookie_admin = null, $change_session = null)
{
    $redirect_echec = $redirect = null;
    $test_echec_cookie = null;
    $url = "";
    if (is_null($set_cookie_admin)) {
        $set_cookie_admin = _request('cookie_admin');
        $change_session = _request('change_session');
        $test_echec_cookie = _request('test_echec_cookie');
        // La cible de notre operation de connexion
        $url = securiser_redirect_action(_request('url'));
        $redirect = $url ? $url : generer_url_ecrire('accueil');
        $redirect_echec = _request('url_echec');
        if (!isset($redirect_echec)) {
            if (strpos($redirect, _DIR_RESTREINT_ABS) !== false) {
                $redirect_echec = generer_url_public('login', '', true);
            } else {
                $redirect_echec = $redirect;
            }
        }
    }
    // rejoue le cookie pour renouveler spip_session
    if ($change_session == 'oui') {
        $session = charger_fonction('session', 'inc');
        $session(true);
        spip_log("statut 204 pour " . $_SERVER['REQUEST_URI']);
        http_status(204);
        // No Content
        return;
    }
    // tentative de connexion en auth_http
    if (_request('essai_auth_http') and !$GLOBALS['ignore_auth_http']) {
        include_spip('inc/auth');
        if (@$_SERVER['PHP_AUTH_USER'] and @$_SERVER['PHP_AUTH_PW'] and $auteur = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) {
            auth_loger($auteur);
            redirige_par_entete(parametre_url($redirect, 't', time(), '&'));
        } else {
            ask_php_auth(_T('info_connexion_refusee'), _T('login_login_pass_incorrect'), _T('login_retour_site'), "url=" . rawurlencode($redirect), _T('login_nouvelle_tentative'), strpos($url, _DIR_RESTREINT_ABS) !== false);
        }
    } else {
        // en cas de login sur bonjour=oui, on tente de poser un cookie
        // puis de passer au login qui diagnostiquera l'echec de cookie
        // le cas echeant.
        if ($test_echec_cookie == 'oui') {
            spip_setcookie('spip_session', 'test_echec_cookie');
            if ($redirect) {
                $redirect = parametre_url(parametre_url($redirect_echec, 'var_echec_cookie', 'oui', '&'), 'url', rawurlencode($redirect), '&');
            }
        } else {
            $cook = isset($_COOKIE['spip_admin']) ? $_COOKIE['spip_admin'] : '';
            // Suppression cookie d'admin ?
            if ($set_cookie_admin == "non") {
                if ($cook) {
                    spip_setcookie('spip_admin', $cook, time() - 3600 * 24);
                }
            } else {
                if ($set_cookie_admin) {
                    spip_setcookie('spip_admin', $set_cookie_admin, time() + 14 * 24 * 3600);
                }
            }
        }
    }
    // Redirection finale
    if ($redirect) {
        redirige_par_entete($redirect, true);
    }
}
Пример #7
0
function install_etape_3b_dist()
{
    $login = _request('login');
    $email = _request('email');
    $nom = _request('nom');
    $pass = _request('pass');
    $pass_verif = _request('pass_verif');
    $server_db = defined('_INSTALL_SERVER_DB') ? _INSTALL_SERVER_DB : _request('server_db');
    if (!defined('_PASS_LONGUEUR_MINI')) {
        define('_PASS_LONGUEUR_MINI', 6);
    }
    if (!defined('_LOGIN_TROP_COURT')) {
        define('_LOGIN_TROP_COURT', 4);
    }
    if ($login) {
        $echec = $pass != $pass_verif ? _T('info_passes_identiques') : (strlen($pass) < _PASS_LONGUEUR_MINI ? _T('info_passe_trop_court_car_pluriel', array('nb' => _PASS_LONGUEUR_MINI)) : (strlen($login) < _LOGIN_TROP_COURT ? _T('info_login_trop_court') : ''));
        include_spip('inc/filtres');
        if (!$echec and $email and !email_valide($email)) {
            $echec = _T('form_email_non_valide');
        }
        if ($echec) {
            echo minipres('AUTO', info_progression_etape(3, 'etape_', 'install/', true) . "<div class='error'><h3>{$echec}</h3>\n" . "<p>" . _T('avis_connexion_echec_2') . "</p>" . "</div>");
            exit;
        }
    }
    if (@file_exists(_FILE_CHMOD_TMP)) {
        include _FILE_CHMOD_TMP;
    } else {
        redirige_url_ecrire('install');
    }
    if (!@file_exists(_FILE_CONNECT_TMP)) {
        redirige_url_ecrire('install');
    }
    # maintenant on connait le vrai charset du site s'il est deja configure
    # sinon par defaut lire_meta reglera _DEFAULT_CHARSET
    # (les donnees arrivent de toute facon postees en _DEFAULT_CHARSET)
    lire_metas();
    if ($login) {
        include_spip('inc/charsets');
        $nom = importer_charset($nom, _DEFAULT_CHARSET);
        $login = importer_charset($login, _DEFAULT_CHARSET);
        $email = importer_charset($email, _DEFAULT_CHARSET);
        # pour le passwd, bizarrement il faut le convertir comme s'il avait
        # ete tape en iso-8859-1 ; car c'est en fait ce que voit md5.js
        $pass = unicode2charset(utf_8_to_unicode($pass), 'iso-8859-1');
        include_spip('auth/sha256.inc');
        include_spip('inc/acces');
        $htpass = generer_htpass($pass);
        $alea_actuel = creer_uniqid();
        $alea_futur = creer_uniqid();
        $shapass = _nano_sha256($alea_actuel . $pass);
        // prelablement, creer le champ webmestre si il n'existe pas (install neuve
        // sur une vieille base
        $t = sql_showtable("spip_auteurs", true);
        if (!isset($t['field']['webmestre'])) {
            @sql_alter("TABLE spip_auteurs ADD webmestre varchar(3)  DEFAULT 'non' NOT NULL");
        }
        $id_auteur = sql_getfetsel("id_auteur", "spip_auteurs", "login="******"nom" => $nom, 'email' => $email, 'login' => $login, 'pass' => $shapass, 'alea_actuel' => $alea_actuel, 'alea_futur' => $alea_futur, 'htpass' => $htpass, 'statut' => '0minirezo'), "id_auteur={$id_auteur}");
        } else {
            $id_auteur = sql_insertq('spip_auteurs', array('nom' => $nom, 'email' => $email, 'login' => $login, 'pass' => $shapass, 'htpass' => $htpass, 'alea_actuel' => $alea_actuel, 'alea_futur' => $alea_futur, 'statut' => '0minirezo'));
        }
        // le passer webmestre separrement du reste, au cas ou l'alter n'aurait pas fonctionne
        @sql_updateq('spip_auteurs', array('webmestre' => 'oui'), "id_auteur={$id_auteur}");
        // inserer email comme email webmaster principal
        // (sauf s'il est vide: cas de la re-installation)
        if ($email) {
            ecrire_meta('email_webmaster', $email);
        }
        // Connecter directement celui qui vient de (re)donner son login
        // mais sans cookie d'admin ni connexion longue
        include_spip('inc/auth');
        if (!($auteur = auth_identifier_login($login, $pass)) or !auth_loger($auteur, true)) {
            spip_log("login automatique impossible {$auth_spip} {$session}" . count($row));
        }
    }
    // installer les metas
    $config = charger_fonction('config', 'inc');
    $config();
    // activer les plugins
    // leur installation ne peut pas se faire sur le meme hit, il faudra donc
    // poursuivre au hit suivant
    include_spip('inc/plugin');
    actualise_plugins_actifs();
    include_spip('inc/distant');
    redirige_par_entete(parametre_url(self(), 'etape', '4', '&'));
}
Пример #8
0
/**
 * Modification du mot de passe d'un auteur.
 * Utilise le cookie d'oubli fourni en url ou l'argument du formulaire pour identifier l'auteur
 *
 * @param int $id_auteur
 */
function formulaires_mot_de_passe_traiter_dist($id_auteur = null, $jeton = null)
{
    $res = array('message_ok' => '');
    refuser_traiter_formulaire_ajax();
    // puisqu'on va loger l'auteur a la volee (c'est bonus)
    // compatibilite anciens appels du formulaire
    if (is_null($jeton)) {
        $jeton = _request('p');
    }
    $row = retrouve_auteur($id_auteur, $jeton);
    if ($row && ($id_auteur = $row['id_auteur']) && ($oubli = _request('oubli'))) {
        include_spip('action/editer_auteur');
        include_spip('action/inscrire_auteur');
        if ($err = auteur_modifier($id_auteur, array('pass' => $oubli))) {
            $res = array('message_erreur' => $err);
        } else {
            auteur_effacer_jeton($id_auteur);
            $login = $row['login'];
            $res['message_ok'] = "<b>" . _T('pass_nouveau_enregistre') . "</b>" . "<br />" . _T('pass_rappel_login', array('login' => $login));
            include_spip('inc/auth');
            $row = sql_fetsel("*", "spip_auteurs", "id_auteur=" . intval($id_auteur));
            auth_loger($row);
        }
    }
    return $res;
}