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
00079 class tslib_feUserAuth extends t3lib_userAuth {
00080 var $session_table = 'fe_sessions';
00081 var $name = 'fe_typo_user';
00082 var $get_name = 'ftu';
00083
00084 var $user_table = 'fe_users';
00085 var $username_column = 'username';
00086 var $userident_column = 'password';
00087 var $userid_column = 'uid';
00088 var $lastLogin_column = 'lastlogin';
00089
00090 var $enablecolumns = Array (
00091 'deleted' => 'deleted',
00092 'disabled' => 'disable',
00093 'starttime' => 'starttime',
00094 'endtime' => 'endtime'
00095 );
00096 var $formfield_uname = 'user';
00097 var $formfield_uident = 'pass';
00098 var $formfield_chalvalue = 'challenge';
00099 var $formfield_status = 'logintype';
00100 var $formfield_permanent = 'permalogin';
00101 var $security_level = '';
00102
00103 var $auth_include = '';
00104
00105 var $auth_timeout_field = 6000;
00106
00107 var $lifetime = 0;
00108 var $sendNoCacheHeaders = 0;
00109 var $getFallBack = 1;
00110 var $hash_length = 10;
00111 var $getMethodEnabled = 1;
00112
00113 var $usergroup_column = 'usergroup';
00114 var $usergroup_table = 'fe_groups';
00115 var $groupData = Array(
00116 'title' =>Array(),
00117 'uid' =>Array(),
00118 'pid' =>Array()
00119 );
00120 var $TSdataArray=array();
00121 var $userTS = array();
00122 var $userTSUpdated=0;
00123 var $showHiddenRecords=0;
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133 var $sesData = Array();
00134 var $sesData_change = 0;
00135 var $userData_change = 0;
00136
00137
00144 function start() {
00145 if (intval($this->auth_timeout_field)>0 && intval($this->auth_timeout_field) < $this->lifetime) {
00146
00147 $this->auth_timeout_field = $this->lifetime;
00148 }
00149
00150 parent::start();
00151 }
00152
00158 function getNewSessionRecord($tempuser) {
00159 $insertFields = parent::getNewSessionRecord($tempuser);
00160 $insertFields['ses_permanent'] = $this->is_permanent;
00161
00162 return $insertFields;
00163 }
00164
00171 function isSetSessionCookie() {
00172 $retVal = ($this->newSessionID || $this->forceSetCookie) && ($this->lifetime==0 || !$this->user['ses_permanent']);
00173 return $retVal;
00174 }
00175
00182 function isRefreshTimeBasedCookie() {
00183 return $this->lifetime > 0 && $this->user['ses_permanent'];
00184 }
00185
00192 function getLoginFormData() {
00193 $loginData = parent::getLoginFormData();
00194 if($GLOBALS['TYPO3_CONF_VARS']['FE']['permalogin'] == 0 || $GLOBALS['TYPO3_CONF_VARS']['FE']['permalogin'] == 1) {
00195 if ($this->getMethodEnabled) {
00196 $isPermanent = t3lib_div::_GP($this->formfield_permanent);
00197 } else {
00198 $isPermanent = t3lib_div::_POST($this->formfield_permanent);
00199 }
00200 if(strlen($isPermanent) != 1) {
00201 $isPermanent = $GLOBALS['TYPO3_CONF_VARS']['FE']['permalogin'];
00202 } elseif(!$isPermanent) {
00203 $this->forceSetCookie = true;
00204 }
00205 $isPermanent = $isPermanent?1:0;
00206 } elseif($GLOBALS['TYPO3_CONF_VARS']['FE']['permalogin'] == 2) {
00207 $isPermanent = 1;
00208 } else {
00209 $isPermanent = 0;
00210 }
00211 $loginData['permanent'] = $isPermanent;
00212 $this->is_permanent = $isPermanent;
00213
00214 return $loginData;
00215 }
00216
00223 function fetchGroupData() {
00224 $this->TSdataArray = array();
00225 $this->userTS = array();
00226 $this->userTSUpdated = 0;
00227 $this->groupData = Array(
00228 'title' => Array(),
00229 'uid' => Array(),
00230 'pid' => Array()
00231 );
00232
00233
00234 $this->TSdataArray[]=$GLOBALS['TYPO3_CONF_VARS']['FE']['defaultUserTSconfig'];
00235
00236
00237 $authInfo = $this->getAuthInfoArray();
00238
00239 if ($this->writeDevLog) t3lib_div::devLog('Get usergroups for user: '.t3lib_div::arrayToLogString($this->user, array($this->userid_column,$this->username_column)), 'tslib_feUserAuth');
00240
00241 $groupDataArr = array();
00242
00243
00244 $serviceChain='';
00245 $subType = 'getGroups'.$this->loginType;
00246 while (is_object($serviceObj = t3lib_div::makeInstanceService('auth', $subType, $serviceChain))) {
00247 $serviceChain.=','.$serviceObj->getServiceKey();
00248 $serviceObj->initAuth($subType, array(), $authInfo, $this);
00249
00250 $groupData = $serviceObj->getGroups($this->user, $groupDataArr);
00251 if (is_array($groupData) && count($groupData)) {
00252 $groupDataArr = t3lib_div::array_merge($groupDataArr, $groupData);
00253 }
00254 unset($serviceObj);
00255 }
00256 if ($this->writeDevLog AND $serviceChain) t3lib_div::devLog($subType.' auth services called: '.$serviceChain, 'tslib_feUserAuth');
00257 if ($this->writeDevLog AND !count($groupDataArr)) t3lib_div::devLog('No usergroups found by services', 'tslib_feUserAuth');
00258 if ($this->writeDevLog AND count($groupDataArr)) t3lib_div::devLog(count($groupDataArr).' usergroup records found by services', 'tslib_feUserAuth');
00259
00260
00261
00262 foreach ($groupDataArr as $groupData) {
00263
00264 $validGroup = TRUE;
00265
00266 $serviceChain='';
00267 $subType = 'authGroups'.$this->loginType;
00268 while (is_object($serviceObj = t3lib_div::makeInstanceService('auth', $subType, $serviceChain))) {
00269 $serviceChain.=','.$serviceObj->getServiceKey();
00270 $serviceObj->initAuth($subType, array(), $authInfo, $this);
00271
00272 if (!$serviceObj->authGroup($this->user, $groupData)) {
00273 $validGroup = FALSE;
00274 if ($this->writeDevLog) t3lib_div::devLog($subType.' auth service did not auth group: '.t3lib_div::arrayToLogString($groupData, 'uid,title'), 'tslib_feUserAuth', 2);
00275
00276 break;
00277 }
00278 unset($serviceObj);
00279 }
00280 unset($serviceObj);
00281
00282 if ($validGroup) {
00283 $this->groupData['title'][$groupData['uid']]=$groupData['title'];
00284 $this->groupData['uid'][$groupData['uid']]=$groupData['uid'];
00285 $this->groupData['pid'][$groupData['uid']]=$groupData['pid'];
00286 $this->groupData['TSconfig'][$groupData['uid']]=$groupData['TSconfig'];
00287 }
00288 }
00289
00290 if (count($this->groupData) && count($this->groupData['TSconfig'])) {
00291
00292 foreach($this->groupData['TSconfig'] as $TSdata) {
00293 $this->TSdataArray[]=$TSdata;
00294 }
00295
00296 $this->TSdataArray[]=$this->user['TSconfig'];
00297
00298
00299 ksort($this->groupData['title']);
00300 ksort($this->groupData['uid']);
00301 ksort($this->groupData['pid']);
00302 }
00303
00304 return count($this->groupData['uid']) ? count($this->groupData['uid']) : 0;
00305 }
00306
00313 function getUserTSconf() {
00314 if (!$this->userTSUpdated) {
00315
00316 $this->TSdataArray = t3lib_TSparser::checkIncludeLines_array($this->TSdataArray);
00317 $userTS = implode(chr(10).'[GLOBAL]'.chr(10),$this->TSdataArray);
00318 $parseObj = t3lib_div::makeInstance('t3lib_TSparser');
00319 $parseObj->parse($userTS);
00320 $this->userTS = $parseObj->setup;
00321
00322 $this->userTSUpdated=1;
00323 }
00324 return $this->userTS;
00325 }
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00358 function fetchSessionData() {
00359
00360 if ($this->id) {
00361 $dbres = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'fe_session_data', 'hash='.$GLOBALS['TYPO3_DB']->fullQuoteStr($this->id, 'fe_session_data'));
00362 if ($sesDataRow = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($dbres)) {
00363 $this->sesData = unserialize($sesDataRow['content']);
00364 }
00365 }
00366
00367 if ((rand()%100) <= 1) {
00368 $GLOBALS['TYPO3_DB']->exec_DELETEquery('fe_session_data', 'tstamp < '.intval(time()-3600*24));
00369 }
00370 }
00371
00380 function storeSessionData() {
00381
00382 if ($this->userData_change) {
00383 $this->writeUC('');
00384 }
00385 if ($this->sesData_change) {
00386 if ($this->id) {
00387 $insertFields = array (
00388 'hash' => $this->id,
00389 'content' => serialize($this->sesData),
00390 'tstamp' => time()
00391 );
00392 $GLOBALS['TYPO3_DB']->exec_DELETEquery('fe_session_data', 'hash='.$GLOBALS['TYPO3_DB']->fullQuoteStr($this->id, 'fe_session_data'));
00393 $GLOBALS['TYPO3_DB']->exec_INSERTquery('fe_session_data', $insertFields);
00394 }
00395 }
00396 }
00397
00406 function getKey($type,$key) {
00407 if ($key) {
00408 switch($type) {
00409 case 'user':
00410 return $this->uc[$key];
00411 break;
00412 case 'ses':
00413 return $this->sesData[$key];
00414 break;
00415 }
00416 }
00417 }
00418
00431 function setKey($type,$key,$data) {
00432 if ($key) {
00433 switch($type) {
00434 case 'user':
00435 if ($this->user['uid']) {
00436 $this->uc[$key]=$data;
00437 $this->userData_change=1;
00438 }
00439 break;
00440 case 'ses':
00441 $this->sesData[$key]=$data;
00442 $this->sesData_change=1;
00443 break;
00444 }
00445 }
00446 }
00447
00457 function record_registration($recs,$maxSizeOfSessionData=0) {
00458
00459
00460 if (!$maxSizeOfSessionData || $this->cookieId===$this->id) {
00461 if ($recs['clear_all']) {
00462 $this->setKey('ses','recs','');
00463 }
00464 $change=0;
00465 $recs_array=$this->getKey('ses','recs');
00466 reset($recs);
00467 while(list($table,$data)=each($recs)) {
00468 if (is_array($data)) {
00469 reset($data);
00470 while(list($rec_id,$value)=each($data)) {
00471 if ($value != $recs_array[$table][$rec_id]) {
00472 $recs_array[$table][$rec_id] = $value;
00473 $change=1;
00474 }
00475 }
00476 }
00477 }
00478 if ($change && (!$maxSizeOfSessionData || strlen(serialize($recs_array))<$maxSizeOfSessionData)) {
00479 $this->setKey('ses','recs',$recs_array);
00480 }
00481 }
00482 }
00483 }
00484
00485
00486 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['tslib/class.tslib_feuserauth.php']) {
00487 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['tslib/class.tslib_feuserauth.php']);
00488 }
00489 ?>