/** * 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; }
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); } }
/** * 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')); } } }
/** * 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); } }
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(); }
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); } }
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', '&')); }
/** * 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; }