* http://opensource.polytechnique.org/ *
* *
* This program is free software; you can redistribute it and/or modify *
* http://opensource.polytechnique.org/ *
* *
* This program is free software; you can redistribute it and/or modify *
return -1;
}
$res = XDB::query('SELECT user_id, password
FROM auth_user_md5
WHERE user_id = {?} AND perms IN(\'admin\', \'user\')',
return -1;
}
$res = XDB::query('SELECT user_id, password
FROM auth_user_md5
WHERE user_id = {?} AND perms IN(\'admin\', \'user\')',
if ($res->numRows() != 0) {
list($uid, $password) = $res->fetchOneRow();
require_once 'secure_hash.inc.php';
$expected_value = hash_encrypt($password);
if ($res->numRows() != 0) {
list($uid, $password) = $res->fetchOneRow();
require_once 'secure_hash.inc.php';
$expected_value = hash_encrypt($password);
- $uid = $this->checkPassword($uname, $login, Post::v('response'), (!$redirect && preg_match('/^\d*$/', $uname)) ? 'id' : 'alias');
+ $uid = $this->checkPassword($uname, $login, Post::v('response'), (!$redirect && is_numeric($uname)) ? 'id' : 'alias');
+ if (!is_null($uid) && S::has('suid')) {
+ $suid = S::v('suid');
+ if ($suid['uid'] == $uid) {
+ $uid = S::i('uid');
+ } else {
+ $uid = null;
+ }
+ }
- if (Post::has('domain')) {
- if (($domain = Post::v('domain', 'login')) == 'alias') {
- setcookie('ORGdomain', "alias", (time() + 25920000), '/', '', 0);
- } else {
- setcookie('ORGdomain', '', (time() - 3600), '/', '', 0);
+ if (!S::has('suid')) {
+ if (Post::has('domain')) {
+ if (($domain = Post::v('domain', 'login')) == 'alias') {
+ Cookie::set('domain', 'alias', 300);
+ } else {
+ Cookie::kill('domain');
+ }
// Retrieves main user properties.
$res = XDB::query("SELECT u.user_id AS uid, u.hruid, prenom, prenom_ini, nom, nom_ini, nom_usage, perms, promo, promo_sortie,
matricule, password, FIND_IN_SET('femme', u.flags) AS femme,
q.core_mail_fmt AS mail_fmt, UNIX_TIMESTAMP(q.banana_last) AS banana_last, q.watch_last, q.core_rss_hash,
// Retrieves main user properties.
$res = XDB::query("SELECT u.user_id AS uid, u.hruid, prenom, prenom_ini, nom, nom_ini, nom_usage, perms, promo, promo_sortie,
matricule, password, FIND_IN_SET('femme', u.flags) AS femme,
q.core_mail_fmt AS mail_fmt, UNIX_TIMESTAMP(q.banana_last) AS banana_last, q.watch_last, q.core_rss_hash,
- FIND_IN_SET('watch', u.flags) AS watch_account, q.last_version, g.g_account_name IS NOT NULL AS googleapps
+ FIND_IN_SET('watch', u.flags) AS watch_account, q.last_version, g.g_account_name IS NOT NULL AS googleapps,
+ UNIX_TIMESTAMP(s.start) AS lastlogin, s.host
FROM auth_user_md5 AS u
INNER JOIN auth_user_quick AS q USING(user_id)
LEFT JOIN gapps_accounts AS g ON (u.user_id = g.l_userid AND g.g_status = 'active')
FROM auth_user_md5 AS u
INNER JOIN auth_user_quick AS q USING(user_id)
LEFT JOIN gapps_accounts AS g ON (u.user_id = g.l_userid AND g.g_status = 'active')
- // Retrieves account usage information (last login, last host).
- $res = XDB::query('SELECT UNIX_TIMESTAMP(s.start) AS lastlogin, s.host
- FROM logger.sessions AS s
- WHERE s.uid = {?} AND s.suid = 0
- ORDER BY s.start DESC
- LIMIT 1', $uid);
- if ($res->numRows()) {
- $sess = array_merge($sess, $res->fetchOneAssoc());
- }
-
// Loads the data into the real session.
$_SESSION = array_merge($_SESSION, $sess);
// Loads the data into the real session.
$_SESSION = array_merge($_SESSION, $sess);
$logger->log("suid_start", S::v('hruid') . " by " . $suid['hruid']);
} else {
$logger = S::logger($uid);
$logger->log("suid_start", S::v('hruid') . " by " . $suid['hruid']);
} else {
$logger = S::logger($uid);
- setcookie('ORGuid', $uid, (time() + 25920000), '/', '', 0);
+ $logger->saveLastSession();
+ Cookie::set('uid', $uid, 300);
- $cookie = hash_encrypt($sess['password']);
- setcookie('ORGaccess', $cookie, (time() + 25920000), '/', '', 0);
- if ($logger && S::i('auth_by_cookie') != $uid) {
- $logger->log("cookie_on");
- }
+ $this->setAccessCookie(false, S::i('auth_by_cookie') != $uid);
- setcookie('ORGaccess', '', time() - 3600, '/', '', 0);
- if ($logger) {
- $logger->log("cookie_off");
- }
+ $this->killAccessCookie();
$n = select_notifs(false, S::i('uid'), S::v('watch_last'), false);
S::set('notifs', $n->numRows());
}
$n = select_notifs(false, S::i('uid'), S::v('watch_last'), false);
S::set('notifs', $n->numRows());
}
+
+ public function setAccessCookie($replace = false, $log = true) {
+ if (S::has('suid') || ($replace && !Cookie::blank('access'))) {
+ return;
+ }
+ require_once('secure_hash.inc.php');
+ Cookie::set('access', hash_encrypt(S::v('password')), 300, true);
+ if ($log) {
+ S::logger()->log('cookie_on');
+ }
+ }
+
+ public function killAccessCookie($log = true) {
+ Cookie::kill('access');
+ if ($log) {
+ S::logger()->log('cookie_off');
+ }
+ }
+
+ public function killLoginFormCookies() {
+ Cookie::kill('uid');
+ Cookie::kill('domain');
+ }