00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00077 class tslib_feUserAuth extends t3lib_userAuth {
00078 var $session_table = 'fe_sessions';
00079 var $name = 'fe_typo_user';
00080 var $get_name = 'ftu';
00081
00082 var $user_table = 'fe_users';
00083 var $username_column = 'username';
00084 var $userident_column = 'password';
00085 var $userid_column = 'uid';
00086 var $lastLogin_column = 'lastlogin';
00087
00088 var $enablecolumns = Array (
00089 'deleted' => 'deleted',
00090 'disabled' => 'disable',
00091 'starttime' => 'starttime',
00092 'endtime' => 'endtime'
00093 );
00094 var $formfield_uname = 'user';
00095 var $formfield_uident = 'pass';
00096 var $formfield_chalvalue = 'challenge';
00097 var $formfield_status = 'logintype';
00098 var $security_level = '';
00099
00100 var $auth_include = '';
00101
00102 var $auth_timeout_field = 6000;
00103
00104 var $lifetime = 0;
00105 var $sendNoCacheHeaders = 0;
00106 var $getFallBack = 1;
00107 var $hash_length = 10;
00108 var $getMethodEnabled = 1;
00109
00110 var $usergroup_column = 'usergroup';
00111 var $usergroup_table = 'fe_groups';
00112 var $groupData = Array(
00113 'title' =>Array(),
00114 'uid' =>Array(),
00115 'pid' =>Array()
00116 );
00117 var $TSdataArray=array();
00118 var $userTS = array();
00119 var $userTSUpdated=0;
00120 var $showHiddenRecords=0;
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130 var $sesData = Array();
00131 var $sesData_change = 0;
00132 var $userData_change = 0;
00133
00134
00141 function fetchGroupData() {
00142 $this->TSdataArray = array();
00143 $this->userTS = array();
00144 $this->userTSUpdated = 0;
00145
00146
00147 $this->TSdataArray[]=$GLOBALS['TYPO3_CONF_VARS']['FE']['defaultUserTSconfig'];
00148
00149 if (is_array($this->user) && $this->user['usergroup']) {
00150 $groups = t3lib_div::intExplode(',',$this->user['usergroup']);
00151 $list = implode(',',$groups);
00152 $lockToDomain_SQL = ' AND (lockToDomain="" OR lockToDomain="'.t3lib_div::getIndpEnv('HTTP_HOST').'")';
00153 if (!$this->showHiddenRecords) $hiddenP = 'AND NOT hidden ';
00154
00155 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', $this->usergroup_table, 'NOT deleted '.$hiddenP.'AND uid IN ('.$list.')'.$lockToDomain_SQL);
00156 while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00157 $this->groupData['title'][$row['uid']] = $row['title'];
00158 $this->groupData['uid'][$row['uid']] = $row['uid'];
00159 $this->groupData['pid'][$row['uid']] = $row['pid'];
00160 $this->groupData['TSconfig'][$row['uid']] = $row['TSconfig'];
00161 }
00162
00163 if ($GLOBALS['TYPO3_DB']->sql_num_rows($res)) {
00164 $GLOBALS['TYPO3_DB']->sql_free_result($res);
00165
00166 reset($groups);
00167 while(list(,$TSuid)=each($groups)) {
00168 $this->TSdataArray[]=$this->groupData['TSconfig'][$TSuid];
00169 }
00170 $this->TSdataArray[]=$this->user['TSconfig'];
00171
00172
00173 ksort($this->groupData['title']);
00174 ksort($this->groupData['uid']);
00175 ksort($this->groupData['pid']);
00176 return count($this->groupData['uid']);
00177 } else {
00178 return 0;
00179 }
00180 }
00181 }
00182
00189 function getUserTSconf() {
00190 if (!$this->userTSUpdated) {
00191
00192 $this->TSdataArray = t3lib_TSparser::checkIncludeLines_array($this->TSdataArray);
00193 $userTS = implode(chr(10).'[GLOBAL]'.chr(10),$this->TSdataArray);
00194 $parseObj = t3lib_div::makeInstance('t3lib_TSparser');
00195 $parseObj->parse($userTS);
00196 $this->userTS = $parseObj->setup;
00197
00198 $this->userTSUpdated=1;
00199 }
00200 return $this->userTS;
00201 }
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00234 function fetchSessionData() {
00235
00236 if ($this->id) {
00237 $dbres = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'fe_session_data', 'hash="'.$GLOBALS['TYPO3_DB']->quoteStr($this->id, 'fe_session_data').'"');
00238 if ($sesDataRow = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($dbres)) {
00239 $this->sesData = unserialize($sesDataRow['content']);
00240 }
00241 }
00242
00243 if ((rand()%100) <= 1) {
00244 $GLOBALS['TYPO3_DB']->exec_DELETEquery('fe_session_data', 'tstamp < '.intval(time()-3600*24));
00245 }
00246 }
00247
00256 function storeSessionData() {
00257
00258 if ($this->userData_change) {
00259 $this->writeUC('');
00260 }
00261 if ($this->sesData_change) {
00262 if ($this->id) {
00263 $insertFields = array (
00264 'hash' => $this->id,
00265 'content' => serialize($this->sesData),
00266 'tstamp' => time()
00267 );
00268 $GLOBALS['TYPO3_DB']->exec_DELETEquery('fe_session_data', 'hash="'.$GLOBALS['TYPO3_DB']->quoteStr($this->id, 'fe_session_data').'"');
00269 $GLOBALS['TYPO3_DB']->exec_INSERTquery('fe_session_data', $insertFields);
00270 }
00271 }
00272 }
00273
00282 function getKey($type,$key) {
00283 if ($key) {
00284 switch($type) {
00285 case 'user':
00286 return $this->uc[$key];
00287 break;
00288 case 'ses':
00289 return $this->sesData[$key];
00290 break;
00291 }
00292 }
00293 }
00294
00307 function setKey($type,$key,$data) {
00308 if ($key) {
00309 switch($type) {
00310 case 'user':
00311 if ($this->user['uid']) {
00312 $this->uc[$key]=$data;
00313 $this->userData_change=1;
00314 }
00315 break;
00316 case 'ses':
00317 $this->sesData[$key]=$data;
00318 $this->sesData_change=1;
00319 break;
00320 }
00321 }
00322 }
00323
00332 function record_registration($recs) {
00333 if ($recs['clear_all']) {
00334 $this->setKey('ses','recs','');
00335 }
00336 $change=0;
00337 $recs_array=$this->getKey('ses','recs');
00338 reset($recs);
00339 while(list($table,$data)=each($recs)) {
00340 if (is_array($data)) {
00341 reset($data);
00342 while(list($rec_id,$value)=each($data)) {
00343 if ($value != $recs_array[$table][$rec_id]) {
00344 $recs_array[$table][$rec_id] = $value;
00345 $change=1;
00346 }
00347 }
00348 }
00349 }
00350 if ($change) {
00351 $this->setKey('ses','recs',$recs_array);
00352 }
00353 }
00354 }
00355
00356
00357 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['tslib/class.tslib_feuserauth.php']) {
00358 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['tslib/class.tslib_feuserauth.php']);
00359 }
00360 ?>