26 static function login($username, $password, &$reason, $remember =
false) {
29 $user = $userDao->getByUsername($username,
true);
35 if ($user->getAuthId()) {
37 $auth = $authDao->getPlugin($user->getAuthId());
44 $valid = $auth->authenticate($username, $password);
46 $oldEmail = $user->getEmail();
47 $auth->doGetUserInfo($user);
48 if ($user->getEmail() != $oldEmail) {
50 if ($userDao->userExistsByEmail($user->getEmail())) {
51 $user->setEmail($oldEmail);
60 if ($valid && !empty($rehash)) {
62 $user->setPassword($rehash);
85 if (password_needs_rehash($hash, PASSWORD_BCRYPT)) {
89 if ($oldHash === $hash) {
97 return password_verify($password, $hash);
108 if (!is_a($user,
'User'))
return false;
110 if ($user->getDisabled()) {
112 $reason = $user->getDisabledReason();
113 if ($reason ===
null) $reason =
'';
121 $sessionManager->regenerateSessionId();
123 $session = $sessionManager->getUserSession();
124 $session->setSessionVar(
'userId', $user->getId());
125 $session->setUserId($user->getId());
126 $session->setSessionVar(
'username', $user->getUsername());
127 $session->getCSRFToken();
128 $session->setRemember($remember);
130 if ($remember &&
Config::getVar(
'general',
'session_lifetime') > 0) {
132 $sessionManager->updateSessionLifetime(time() +
Config::getVar(
'general',
'session_lifetime') * 86400);
137 $userDao->updateObject($user);
148 $session = $sessionManager->getUserSession();
149 $session->unsetSessionVar(
'userId');
150 $session->unsetSessionVar(
'signedInAs');
151 $session->setUserId(
null);
153 if ($session->getRemember()) {
154 $session->setRemember(0);
155 $sessionManager->updateSessionLifetime(0);
159 $sessionDao->updateObject($session);
171 if (isset($_SERVER[
'REQUEST_URI'])) {
172 $args[
'source'] = $_SERVER[
'REQUEST_URI'];
174 if ($message !==
null) {
175 $args[
'loginMessage'] = $message;
179 $request->redirect(
null,
'login',
null,
null, $args);
190 $user = $userDao->getByUsername($username,
false);
194 if ($user->getAuthId()) {
196 $auth =& $authDao->getPlugin($user->getAuthId());
200 $valid = $auth->authenticate($username, $password);
206 if ($valid && !empty($rehash)) {
208 $user->setPassword($rehash);
211 $userDao->updateObject($user);
226 if (!self::isLoggedIn()) {
230 if ($contextId === -1) {
233 $context = $request->getContext();
234 $contextId = $context ==
null ? 0 : $context->getId();
238 $session = $sessionManager->getUserSession();
239 $user = $session->getUser();
242 return $roleDao->userHasRole($contextId, $user->getId(), $roleId);
257 $valueToEncrypt = $username . $password;
259 if ($encryption ==
false) {
263 switch ($encryption) {
265 if (function_exists(
'sha1')) {
266 return sha1($valueToEncrypt);
270 return md5($valueToEncrypt);
273 return password_hash($password, PASSWORD_BCRYPT);
286 $site = $siteDao->getSite();
287 $length = $site->getMinPasswordLength();
289 $letters =
'abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ';
290 $numbers =
'23456789';
293 for ($i=0; $i<$length; $i++) {
294 $password .= mt_rand(1, 4) == 4 ? $numbers[mt_rand(0,strlen($numbers)-1)] : $letters[mt_rand(0, strlen($letters)-1)];
307 if (($user = $userDao->getById($userId)) ==
null) {
314 if (empty($expiry)) {
315 $expires = (int)
Config::getVar(
'security',
'reset_seconds', 7200);
316 $expiry = time() + $expires;
320 $data = $user->getUsername() . $user->getPassword() . $user->getDateLastLogin() . $expiry;
323 $algos = hash_algos();
325 foreach (array(
'sha256',
'sha1',
'md5') as $algo) {
326 if (in_array($algo, $algos)) {
327 return hash_hmac($algo, $data, $salt) .
':' . $expiry;
332 return md5($data . $salt) .
':' . $expiry;
343 list(, $expiry) = explode(
':', $hash .
':');
345 if (empty($expiry) || ((
int) $expiry < time())) {
350 return ($hash === self::generatePasswordResetHash($userId, $expiry));
361 if (!empty($familyName)) {
363 $name = $initial . $familyName;
366 $suggestion =
PKPString::regexp_replace(
'/[^a-zA-Z0-9_-]/',
'', Stringy\Stringy::create($name)->toAscii()->toLowerCase());
368 for ($i =
''; $userDao->userExistsByUsername($suggestion . $i); $i++);
369 return $suggestion . $i;
378 $session = $sessionManager->getUserSession();
380 $userId = $session->getUserId();
381 return isset($userId) && !empty($userId);
390 $session = $sessionManager->getUserSession();
391 $signedInAs = $session->getSessionVar(
'signedInAs');
393 return isset($signedInAs) && !empty($signedInAs);
414 if ($administeredUserId == $administratorUserId)
return true;
417 if ($roleDao->userHasRole(CONTEXT_SITE, $administeredUserId, ROLE_ID_SITE_ADMIN))
return false;
420 if ($roleDao->userHasRole(CONTEXT_SITE, $administratorUserId, ROLE_ID_SITE_ADMIN))
return true;
425 $userGroups = $userGroupDao->getByUserId($administeredUserId);
426 while ($userGroup = $userGroups->next()) {
427 if ($userGroup->getContextId()!=CONTEXT_SITE && !$roleDao->userHasRole($userGroup->getContextId(), $administratorUserId, ROLE_ID_MANAGER)) {
434 $foundManagerRole =
false;
435 $roles = $roleDao->getByUserId($administratorUserId);
436 foreach ($roles as $role) {
437 if ($role->getRoleId() == ROLE_ID_MANAGER) $foundManagerRole =
true;
439 if (!$foundManagerRole)
return false;