aboutsummaryrefslogtreecommitdiffstats
path: root/mayor-orig/www/include/share/auth/base.php
blob: 9b4fa21a03b31e6a2d23b24c3ba0b4ae94e65527 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<?php
/*
    module: base/login

    A bejelentkezések kezeléséhez szükséges konstansok, beállítások.
*/

    define('_AUTH_SUCCESS',0);
    define('_AUTH_EXPIRED',1);
    define('_AUTH_FAILURE',2);
    define('_AUTH_FAILURE_1',21); // nincs ilyen azonosító
    define('_AUTH_FAILURE_2',22); // több ilyen azonosító is van
    define('_AUTH_FAILURE_3',23); // rossz jelszó
    define('_AUTH_FAILURE_4',24); // le van tiltva
    define('_AUTH_FAILURE_5',25); // a bejelentkezés korlátozva van

######################################################################
# Új session indítása és regisztrálása (vagy vissza a login-hoz)
######################################################################

    function newSession($accountInformation, $policy) {

        global $lang, $skin,  $sessionID, $SKINS, $AUTH;

        $lr = db_connect('login', array('fv' => 'newSession'));

        if (!$lr) {
            $_SESSION['alert'][] =  'message:sql_failure:session';
            return false;
        }

        $userAccount = db_escape_string($accountInformation['account'], $lr);
        // nem tárolunk jelszót! // 
        // $userPassword = 'nem tárolunk jelszót!'; // mégis tároljuk - session/search (backend: ads)
	$userPassword = db_escape_string($accountInformation['password'], $lr);
        $userCn = db_escape_string($accountInformation['cn'], $lr);
        $studyId = db_escape_string($accountInformation['studyId'], $lr);

        (bool)$toRegister = true; // be kell jegyezni (lásd alább)
        if ($sessionID == '') {
            // A sessionID generálása
            $sessionID = sessionHash();
        } else {
            // A meglevő sessionID használata - csak akkor hagyjuk ha az adott policy-hez még nincs ilyen,
            // de másik policy-hez van
            $query = "SELECT policy FROM session WHERE sessionID='%s'";
	    $ret = db_query($query, array('fv' => 'newSession', 'modul' => 'login', 'result' => 'idonly', 'values' => array($sessionID)), $lr);
            if (is_array($ret) && count($ret) > 0) {
		reset($ret);
		while ((list($key, $_policy) = each($ret)) && $toRegister) {
                //while ((list($_policy) = m_ysql_fetch_row($r)) && $toRegister) {
                    if ($_policy == $policy) $toRegister = false;
                    // mégsem kell bejegyezni, már van; és ez az. $sessionID=$sessionID
                    // else be kell jegyezni, de ezt a $sessionID-t, nem generálunk
                }
            } else {
                $sessionID = sessionHash();
            }
        }
        // fetch predefined lang+skin
        {
            $query = "SELECT skin,lang,lastlogin FROM settings WHERE userAccount='%s' AND policy='%s'";
	    $ret = db_query($query, array('fv' => 'newSession', 'modul' => 'login', 'result' => 'record', 'values' => array($userAccount, $policy)), $lr);
            if (is_array($ret) && count($ret) > 0) {
		extract($ret);
		$_SESSION['lastLogin'] = $ret['lastlogin'];
		if (!in_array($skin,$SKINS))
		    $skin = (in_array($AUTH[$policy]['skin'],$SKINS)) ? $AUTH[$policy]['skin'] : _DEFAULT_SKIN;
                $q = "UPDATE settings SET lastlogin=now() WHERE userAccount='%s' AND policy='%s'";
		$v = array($userAccount, $policy);
            } else {
		/* Policy szerinti default skin*/
		$_SESSION['lastLogin'] = '2002-04-19';
		$skin = (in_array($AUTH[$policy]['skin'],$SKINS)) ? $AUTH[$policy]['skin'] : _DEFAULT_SKIN;
                $lang = _DEFAULT_LANG;
                $q = "INSERT INTO settings (userAccount,policy,skin,lang,lastlogin) VALUES ('%s', '%s', '%s', '%s', now())";
		$v = array($userAccount, $policy, '', $lang);
            }
            db_query($q, array('fv' => 'newSession', 'modul' => 'login', 'values' => $v), $lr);
        }
        // Ellenőrizzük, hogy hány karaktér fér bele az adatbázisba(!); ha eltérő, mint a generált, csonkoljuk.
        $_q = "SHOW COLUMNS FROM session WHERE Field='sessionID'";
        $_a = db_query($_q, array('fv' => 'newSession', 'modul' => 'login', 'result' => 'record'), $lr);
        $_mezohossz = intval(substr($_a['Type'],strpos($_a['Type'],'(')+1,2));
        if ($_mezohossz==0) $_SESSION['alert'][] = 'message:session_alter_needed:'.$_mezohossz;
        if (strlen($sessionID)!=$_mezohossz) {
    	    $_SESSION['alert'][] = 'message:session_alter_needed:'.$_mezohossz.':'.strlen($sessionID);
    	    $sessionID = substr($sessionID,0,$_mezohossz);
        }
        // Felvétel az adatbázisba
        if ($toRegister===false) {
	    $query = "DELETE FROM session WHERE sessionId='%s' and policy='%s'";
	    db_query($query, array('fv' => 'newSession', 'modul' => 'login', 'values' => array($sessionID, $policy)), $lr);
	} 
	$now = date('Y-m-d H:i:s');
	$_SC = sessionCookieEncode($sessionID, $now);
	$_studyId = ($studyId=='') ? 'NULL' : $studyId;
	if ($studyId=='') {
    	    $query="INSERT INTO session
		(sessionID, userPassword, userAccount, userCn, studyId, dt, policy, skin, lang, activity, sessionCookie)
		VALUES ('%s', aes_encrypt('%s', '%s'), '%s', '%s', NULL, '%s', '%s', '%s', %u, NOW(), '%s')"; // [SECURITY 002]
	    $v = array($sessionID, $userPassword, $_SC['pwHash'], $userAccount, $userCn, $now, $policy, $skin, $lang, $_SC['store']);
	} else {
    	    $query="INSERT INTO session
		(sessionID, userPassword, userAccount, userCn, studyId, dt, policy, skin, lang, activity, sessionCookie)
		VALUES ('%s', aes_encrypt('%s', '%s'), '%s', '%s', '%s', '%s', '%s', '%s', %u, NOW(), '%s')"; // [SECURITY 002]
	    $v = array($sessionID, $userPassword, $_SC['pwHash'],$userAccount, $userCn, $_studyId, $now, $policy, $skin, $lang, $_SC['store']);
	}
        db_query($query, array('fv' => 'newSession', 'modul' => 'login', 'values' => $v), $lr);
        db_close($lr);

	// Megjegyzés: a sessionID elhashelése nem jelent semmiféle védelmet, így tökéletesen megfelelő az md5 is
	// értékénél viszont a $now alkalmazása tökéletesen hibás, hiszen a lejárati dátumból 1:1-ben reprodukálható
	
	setcookie($_SC['name'],$_SC['value'],time()+60*60*_SESSION_MAX_TIME,'/','',_SECURECOOKIE);

        return $sessionID;
    }

?>