X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Fplatal.php;h=9e2f0f2d78c37f62dcb582510b818490d77f6505;hb=9fdacf8d3f30d59d44a8988449db6aae6e4aae21;hp=c68f8dc574de2759e9a2c763da490eb42e71e6fc;hpb=7927d719895927e369649d71e64c21a49e8c1ff3;p=platal.git diff --git a/modules/platal.php b/modules/platal.php index c68f8dc..9e2f0f2 100644 --- a/modules/platal.php +++ b/modules/platal.php @@ -19,19 +19,73 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * ***************************************************************************/ +function bugize($list) +{ + $list = split(',', $list); + $ans = array(); + + foreach ($list as $bug) { + $clean = str_replace('#', '', $bug); + $ans[] = "$bug"; + } + + return join(',', $ans); +} + + class PlatalModule extends PLModule { function handlers() { return array( - 'prefs' => $this->make_hook('prefs', AUTH_COOKIE), - 'prefs/rss' => $this->make_hook('rss', AUTH_COOKIE), - 'password' => $this->make_hook('password', AUTH_MDP), - 'tmpPWD' => $this->make_hook('tmpPWD', AUTH_PUBLIC), - 'skin' => $this->make_hook('skin', AUTH_COOKIE), + 'index' => $this->make_hook('index', AUTH_PUBLIC), + 'cacert.pem' => $this->make_hook('cacert', AUTH_PUBLIC), + 'changelog' => $this->make_hook('changelog', AUTH_PUBLIC), + + // Preferences thingies + 'prefs' => $this->make_hook('prefs', AUTH_COOKIE), + 'prefs/rss' => $this->make_hook('prefs_rss', AUTH_COOKIE), + 'prefs/webredirect' + => $this->make_hook('webredir', AUTH_MDP), + 'skin' => $this->make_hook('skin', AUTH_COOKIE), + + // password related thingies + 'password' => $this->make_hook('password', AUTH_MDP), + 'tmpPWD' => $this->make_hook('tmpPWD', AUTH_PUBLIC), + 'password/smtp' => $this->make_hook('smtppass', AUTH_MDP), + 'recovery' => $this->make_hook('recovery', AUTH_PUBLIC), + 'exit' => $this->make_hook('exit', AUTH_PUBLIC), + + // happenings related thingies + 'rss' => $this->make_hook('rss', AUTH_PUBLIC), ); } + function handler_index(&$page) + { + if (logged()) { + redirect("events"); + } + } + + function handler_cacert(&$page) + { + $data = file_get_contents('/etc/ssl/xorgCA/cacert.pem'); + header('Content-Type: application/x-x509-ca-cert'); + header('Content-Length: '.strlen($data)); + echo $data; + exit; + } + + function handler_changelog(&$page) + { + $page->changeTpl('changeLog.tpl'); + + $clog = htmlentities(file_get_contents(dirname(__FILE__).'/../ChangeLog')); + $clog = preg_replace('!(#[0-9]+(,[0-9]+)*)!e', 'bugize("\1")', $clog); + $page->assign('ChangeLog', $clog); + } + function __set_rss_state($state) { global $globals; @@ -65,7 +119,7 @@ class PlatalModule extends PLModule WHERE user_id = {?}", Session::getInt('uid')); $_SESSION['mail_fmt'] = $fmt; - redirect('preferences'); + redirect($globals->baseurl.'/preferences'); } if (Env::has('rss')) { @@ -73,11 +127,43 @@ class PlatalModule extends PLModule } $page->assign('prefs', $globals->hook->prefs()); + } + + function handler_webredir(&$page) + { + global $globals; + + $page->changeTpl('webredirect.tpl'); + + $page->assign('xorg_title','Polytechnique.org - Redirection de page WEB'); - return PL_OK; + $log =& Session::getMixed('log'); + $url = Env::get('url'); + + if (Env::get('submit') == 'Valider' and Env::has('url')) { + $globals->xdb->execute('UPDATE auth_user_quick + SET redirecturl = {?} WHERE user_id = {?}', + $url, Session::getInt('uid')); + $log->log('carva_add', 'http://'.Env::get('url')); + $page->trig("Redirection activée vers $url"); + } elseif (Env::get('submit') == "Supprimer") { + $globals->xdb->execute("UPDATE auth_user_quick + SET redirecturl = '' + WHERE user_id = {?}", + Session::getInt('uid')); + $log->log("carva_del", $url); + Post::kill('url'); + $page->trig('Redirection supprimée'); + } + + $res = $globals->xdb->query('SELECT redirecturl + FROM auth_user_quick + WHERE user_id = {?}', + Session::getInt('uid')); + $page->assign('carva', $res->fetchOneCell()); } - function handler_rss(&$page) + function handler_prefs_rss(&$page) { global $globals; @@ -89,8 +175,6 @@ class PlatalModule extends PLModule $this->__set_rss_state(true); $page->trig("Ton Fil RSS est activé."); } - - return PL_OK; } function handler_password(&$page) @@ -121,8 +205,100 @@ class PlatalModule extends PLModule $page->changeTpl('motdepasse.tpl'); $page->addJsLink('javascript/motdepasse.js'); $page->assign('xorg_title','Polytechnique.org - Mon mot de passe'); + } + + function handler_smtppass(&$page) + { + global $globals; + + $page->changeTpl('acces_smtp.tpl'); + $page->assign('xorg_title','Polytechnique.org - Acces SMTP/NNTP'); + + $uid = Session::getInt('uid'); + $pass = Env::get('smtppass1'); + $log = Session::getMixed('log'); + + if (Env::get('op') == "Valider" && strlen($pass) >= 6 + && Env::get('smtppass1') == Env::get('smtppass2')) + { + $globals->xdb->execute('UPDATE auth_user_md5 SET smtppass = {?} + WHERE user_id = {?}', $pass, $uid); + $page->trig('Mot de passe enregistré'); + $log->log("passwd_ssl"); + } elseif (Env::get('op') == "Supprimer") { + $globals->xdb->execute('UPDATE auth_user_md5 SET smtppass = "" + WHERE user_id = {?}', $uid); + $page->trig('Compte SMTP et NNTP supprimé'); + $log->log("passwd_del"); + } + + $res = $globals->xdb->query("SELECT IF(smtppass != '', 'actif', '') + FROM auth_user_md5 + WHERE user_id = {?}", $uid); + $page->assign('actif', $res->fetchOneCell()); + } + + function handler_recovery(&$page) + { + global $globals; + + $page->changeTpl('recovery.tpl'); + + if (!Env::has('login') || !Env::has('birth')) { + return; + } + + if (!ereg('[0-3][0-9][0-1][0-9][1][9]([0-9]{2})', Env::get('birth'))) { + $page->trig_run('Date de naissance incorrecte ou incohérente'); + } + $birth = sprintf('%s-%s-%s', substr(Env::get('birth'),4,4), substr(Env::get('birth'),2,2), substr(Env::get('birth'),0,2)); + + $mailorg = strtok(Env::get('login'), '@'); + + // paragraphe rajouté : si la date de naissance dans la base n'existe pas, on l'update + // avec celle fournie ici en espérant que c'est la bonne + + $res = $globals->xdb->query( + "SELECT user_id, naissance + FROM auth_user_md5 AS u + INNER JOIN aliases AS a ON (u.user_id=a.id AND type!='homonyme') + WHERE a.alias={?} AND u.perms IN ('admin','user') AND u.deces=0", $mailorg); + list($uid, $naissance) = $res->fetchOneRow(); + + if ($naissance == $birth) { + $page->assign('ok', true); - return PL_OK; + $url = rand_url_id(); + $globals->xdb->execute('INSERT INTO perte_pass (certificat,uid,created) VALUES ({?},{?},NOW())', $url, $uid); + $res = $globals->xdb->query('SELECT email FROM emails WHERE uid = {?} AND NOT FIND_IN_SET("filter", flags)', $uid); + $mails = implode(', ', $res->fetchColumn()); + + require_once "diogenes/diogenes.hermes.inc.php"; + $mymail = new HermesMailer(); + $mymail->setFrom('"Gestion des mots de passe" '); + $mymail->addTo($mails); + $mymail->setSubject('Ton certificat d\'authentification'); + $mymail->setTxtBody("Visite la page suivante qui expire dans six heures : +{$globals->baseurl}/tmpPWD/$url + +Si en cliquant dessus tu n'y arrives pas, copie intégralement l'adresse dans la barre de ton navigateur. + +-- +Polytechnique.org +\"Le portail des élèves & anciens élèves de l'Ecole polytechnique\"".(Post::get('email') ? " + +Adresse de secours : + ".Post::get('email') : "")." + +Mail envoyé à ".Env::get('login')); + $mymail->send(); + + // on cree un objet logger et on log l'evenement + $logger = $_SESSION['log'] = new DiogenesCoreLogger($uid); + $logger->log('recovery', $emails); + } else { + $page->trig('Pas de résultat correspondant aux champs entrés dans notre base de données.'); + } } function handler_tmpPWD(&$page, $certif = null) @@ -153,8 +329,6 @@ class PlatalModule extends PLModule $page->changeTpl('motdepasse.tpl'); $page->addJsLink('javascript/motdepasse.js'); } - - return PL_OK; } function handler_skin(&$page) @@ -182,7 +356,68 @@ class PlatalModule extends PLModule WHERE skin_tpl != '' AND ext != '' GROUP BY id ORDER BY s.date DESC"; $page->assign_by_ref('skins', $globals->xdb->iterator($sql)); - return PL_OK; + } + + function handler_exit(&$page, $level = null) + { + if (Session::has('suid')) { + if (Session::has('suid')) { + $a4l = Session::get('forlife'); + $suid = Session::getMixed('suid'); + $log = Session::getMixed('log'); + $log->log("suid_stop", Session::get('forlife') . " by " . $suid['forlife']); + $_SESSION = $suid; + Session::kill('suid'); + redirect($globals->baseurl.'/admin/utilisateurs.php?login='.$a4l); + } else { + redirect("events"); + } + } + + if ($level == 'forget' || $level == 'forgetall') { + setcookie('ORGaccess', '', time() - 3600, '/', '', 0); + Cookie::kill('ORGaccess'); + if (isset($_SESSION['log'])) + $_SESSION['log']->log("cookie_off"); + } + + if ($level == 'forgetuid' || $level == 'forgetall') { + setcookie('ORGuid', '', time() - 3600, '/', '', 0); + Cookie::kill('ORGuid'); + setcookie('ORGdomain', '', time() - 3600, '/', '', 0); + Cookie::kill('ORGdomain'); + } + + if (isset($_SESSION['log'])) { + $ref = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; + $_SESSION['log']->log('deconnexion',$ref); + } + + XorgSession::destroy(); + + if (Get::has('redirect')) { + redirect(rawurldecode(Get::get('redirect'))); + } else { + $page->changeTpl('exit.tpl'); + } + } + + function handler_rss(&$page, $user = null, $hash = null) + { + global $globals; + + require_once 'rss.inc.php'; + + $uid = init_rss('rss.tpl', $user, $hash); + + $rss = $globals->xdb->iterator( + 'SELECT e.id, e.titre, e.texte, e.creation_date + FROM auth_user_md5 AS u + INNER JOIN evenements AS e ON ( (e.promo_min = 0 || e.promo_min <= u.promo) + AND (e.promo_max = 0 || e.promo_max >= u.promo) ) + WHERE u.user_id = {?} AND FIND_IN_SET(e.flags, "valide") + AND peremption >= NOW()', $uid); + $page->assign('rss', $rss); } }