function verifier_action_auteur($action, $valeur, $id_auteur = 0) { if ($valeur == _action_auteur($action, $id_auteur, 'alea_ephemere')) { return true; } if ($valeur == _action_auteur($action, $id_auteur, 'alea_ephemere_ancien')) { return true; } return false; }
function action_redirect_dist() { $type = _request('type'); $id = intval(_request('id')); if ($m = _request('var_mode')) { $GLOBALS['var_urls'] = true; // forcer la mise a jour de l'url de cet objet ! } if (preg_match('/^\w+$/', $type)) { $h = generer_url_entite_absolue($id, $type, '', '', true); } else if ($page = _request('page') AND preg_match('/^\w+$/', $page)) { $h = generer_url_public($page, '', true); } else return; if ($m > '') $h = parametre_url($h, 'var_mode', $m); if ($m == 'preview' AND defined('_PREVIEW_TOKEN') AND _PREVIEW_TOKEN AND autoriser('previsualiser') AND $aut = $GLOBALS['visiteur_session']['id_auteur'] ) { include_spip('inc/securiser_action'); $token = _action_auteur('previsualiser', $aut, null, 'alea_ephemere'); $h = parametre_url($h, 'var_previewtoken', "$aut*$token"); } $status = '302'; if (_request('status') AND _request('status')=='301') $status = '301'; if ($h) redirige_par_entete(str_replace('&', '&', $h),'',$status); else redirige_par_entete('/','',$status); }
/** * Autorisation de prévisualiser un contenu * * @param string $faire Action demandée * @param string $type Type d'objet sur lequel appliquer l'action * @param int $id Identifiant de l'objet * @param array $qui Description de l'auteur demandant l'autorisation * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon **/ function autoriser_previsualiser_dist($faire, $type, $id, $qui, $opt) { // Le visiteur a-t-il un statut prevu par la config ? if (strpos($GLOBALS['meta']['preview'], "," . $qui['statut'] . ",") !== false) { return test_previsualiser_objet_champ($type, $id, $qui, $opt); } // Sinon, on regarde s'il a un jeton (var_token) et on lui pose // le cas echeant une session contenant l'autorisation // de l'utilisateur ayant produit le jeton if ($token = _request('var_previewtoken')) { include_spip('inc/session'); session_set('previewtoken', $token); } // A-t-on un token valable ? if (is_array($GLOBALS['visiteur_session']) and $token = session_get('previewtoken') and preg_match('/^(\\d+)\\*(.*)$/', $token, $r) and $action = 'previsualiser' and include_spip('inc/securiser_action') and ($r[2] == _action_auteur($action, $r[1], null, 'alea_ephemere') or $r[2] == _action_auteur($action, $r[1], null, 'alea_ephemere_ancien'))) { return true; } return false; }
/** * Verifier le hash de signature d'une action * toujours exclusivement pour l'auteur en cours * http://doc.spip.org/@verifier_action_auteur * * @param $action * @param $hash * @return bool */ function verifier_action_auteur($action, $hash) { list($id_auteur, $pass) = caracteriser_auteur(); if ($hash == _action_auteur($action, $id_auteur, $pass, 'alea_ephemere')) { return true; } if ($hash == _action_auteur($action, $id_auteur, $pass, 'alea_ephemere_ancien')) { return true; } return false; }
function formulaires_signature_reponse_confirmation_dist($var_confirm = '') { static $confirm = null; // reponse mise en cache dans la session ? $code_message = 'signature_message_'.strval($var_confirm); if (isset($GLOBALS['visiteur_session'][$code_message])) return $GLOBALS['visiteur_session'][$code_message]; // reponse deja calculee depuis public/assembler.php if (isset($confirm)) return $confirm; if ($var_confirm == 'publie' OR $var_confirm == 'poubelle') return ''; if (!spip_connect()) { $confirm = _T('form_pet_probleme_technique'); return ''; } include_spip('inc/texte'); include_spip('inc/filtres'); // Suppression d'une signature par un moderateur ? // Cf. plugin notifications if (isset($_GET['refus'])) { // verifier validite de la cle de suppression // l'id_signature est dans var_confirm include_spip('inc/securiser_action'); if ($id_signature = intval($var_confirm) AND ( $_GET['refus'] == _action_auteur("supprimer signature $id_signature", '', '', 'alea_ephemere') OR $_GET['refus'] == _action_auteur("supprimer signature $id_signature", '', '', 'alea_ephemere_ancien') )) { sql_updateq("spip_signatures", array("statut" => 'poubelle'), "id_signature=$id_signature"); $confirm = _T('info_signature_supprimee'); } else $confirm = _T('info_signature_supprimee_erreur'); return ''; } $row = sql_fetsel('*', 'spip_signatures', "statut=" . sql_quote($var_confirm), '', "1"); if (!$row) { $confirm = _T('form_pet_aucune_signature'); return ''; } $id_signature = $row['id_signature']; $id_article = $row['id_article']; $adresse_email = $row['ad_email']; $url_site = $row['url_site']; $row = sql_fetsel('email_unique, site_unique', 'spip_petitions', "id_article=$id_article"); $email_unique = $row['email_unique'] == "oui"; $site_unique = $row['site_unique'] == "oui"; sql_updateq('spip_signatures', array('statut' => 'publie', 'date_time' => date('Y-m-d H:i:s')), "id_signature=$id_signature"); if ($email_unique) { $r = "id_article=$id_article AND ad_email=" . sql_quote($adresse_email); if (signature_entrop($r)) $confirm = _T('form_pet_deja_signe'); } if ($site_unique) { $r = "id_article=$id_article AND url_site=" . sql_quote($url_site); if (signature_entrop($r)) $confirm = _T('form_pet_site_deja_enregistre'); } include_spip('inc/session'); if (!$confirm) { $confirm = _T('form_pet_signature_validee'); // noter dans la session que l'email est valide // de facon a permettre de signer les prochaines // petitions sans refaire un tour d'email session_set('email_confirme', $adresse_email); // invalider les pages ayant des boucles signatures include_spip('inc/invalideur'); suivre_invalideur("id='varia/pet$id_article'"); } // Conserver la reponse dans la session du visiteur if ($confirm) session_set($code_message, $confirm); }
/** * Confirmer une signature * Retour a l'ecran du lien de confirmation d'une signature de petition. * var_confirm contient le hash de la signature. * Au premier appel on traite et on publie * Au second appel on retourne le resultat a afficher * * @staticvar string $confirm * @param <type> $var_confirm * @return string */ function action_confirmer_signature_dist($var_confirm = null) { static $confirm = null; // reponse mise en cache dans la session ? $code_message = 'signature_message_' . strval($var_confirm); if (isset($GLOBALS['visiteur_session'][$code_message])) { return $GLOBALS['visiteur_session'][$code_message]; } // reponse deja calculee depuis public/assembler.php if (isset($confirm)) { return $confirm; } if (is_null($var_confirm)) { $securiser_action = charger_fonction('securiser_action', 'inc'); $var_confirm = $securiser_action(); } if (!$var_confirm or $var_confirm == 'publie' or $var_confirm == 'poubelle') { return ''; } if (!spip_connect()) { $confirm = _T('petitions:form_pet_probleme_technique'); return ''; } include_spip('inc/texte'); include_spip('inc/filtres'); // Suppression d'une signature par un moderateur ? // Cf. plugin notifications if (isset($_GET['refus'])) { // verifier validite de la cle de suppression // l'id_signature est dans var_confirm include_spip('inc/securiser_action'); if ($id_signature = intval($var_confirm) and ($_GET['refus'] == _action_auteur("supprimer signature {$id_signature}", '', '', 'alea_ephemere') or $_GET['refus'] == _action_auteur("supprimer signature {$id_signature}", '', '', 'alea_ephemere_ancien'))) { include_spip('action/editer_signature'); signature_modifier($id_signature, array("statut" => 'poubelle')); $confirm = _T('petitions:info_signature_supprimee'); } else { $confirm = _T('petitions:info_signature_supprimee_erreur'); } return ''; } $row = sql_fetsel('*', 'spip_signatures', "statut=" . sql_quote($var_confirm), '', "1"); if (!$row) { $confirm = _T('petitions:form_pet_aucune_signature'); return ''; } $id_signature = $row['id_signature']; $id_petition = $row['id_petition']; $adresse_email = $row['ad_email']; $url_site = $row['url_site']; $row = sql_fetsel('email_unique, site_unique, id_article', 'spip_petitions', "id_petition=" . intval($id_petition)); $email_unique = $row['email_unique'] == "oui"; $site_unique = $row['site_unique'] == "oui"; $id_article = $row['id_article']; include_spip('action/editer_signature'); signature_modifier($id_signature, array('statut' => 'publie')); if ($email_unique) { $r = "id_petition=" . intval($id_petition) . " AND ad_email=" . sql_quote($adresse_email); if (signature_entrop($r)) { $confirm = _T('petitions:form_pet_deja_signe'); } } if ($site_unique) { $r = "id_petition=" . intval($id_petition) . " AND url_site=" . sql_quote($url_site); if (signature_entrop($r)) { $confirm = _T('petitions:form_pet_site_deja_enregistre'); } } include_spip('inc/session'); if (!$confirm) { $confirm = _T('petitions:form_pet_signature_validee'); // noter dans la session que l'email est valide // de facon a permettre de signer les prochaines // petitions sans refaire un tour d'email session_set('email_confirme', $adresse_email); // invalider les pages ayant des boucles signatures include_spip('inc/invalideur'); suivre_invalideur("id='signature/{$id_signature}'"); suivre_invalideur("id='article/{$id_article}'"); } // Conserver la reponse dans la session du visiteur if ($confirm) { session_set($code_message, $confirm); } }
function verifier_action_auteur($action, $valeur) { list($id_auteur, $pass) = caracteriser_auteur(); if ($valeur == _action_auteur($action, $id_auteur, $pass, 'alea_ephemere')) return true; if ($valeur == _action_auteur($action, $id_auteur, $pass, 'alea_ephemere_ancien')) return true; return false; }