diff --git a/include/api.php b/include/api.php index a5e806384..e0dc413c2 100644 --- a/include/api.php +++ b/include/api.php @@ -12,6 +12,7 @@ use Friendica\Core\Config; use Friendica\Core\NotificationsManager; use Friendica\Core\Worker; use Friendica\Database\DBM; +use Friendica\Model\User; use Friendica\Network\HTTPException; use Friendica\Network\HTTPException\BadRequestException; use Friendica\Network\HTTPException\ForbiddenException; @@ -190,7 +191,6 @@ function api_login(App $a) $user = $_SERVER['PHP_AUTH_USER']; $password = $_SERVER['PHP_AUTH_PW']; - $encrypted = hash('whirlpool', trim($password)); // allow "user@server" login (but ignore 'server' part) $at = strstr($user, "@", true); @@ -218,16 +218,9 @@ function api_login(App $a) if (($addon_auth['authenticated']) && (count($addon_auth['user_record']))) { $record = $addon_auth['user_record']; } else { - // process normal login request - $r = q( - "SELECT * FROM `user` WHERE (`email` = '%s' OR `nickname` = '%s') - AND `password` = '%s' AND NOT `blocked` AND NOT `account_expired` AND NOT `account_removed` AND `verified` LIMIT 1", - dbesc(trim($user)), - dbesc(trim($user)), - dbesc($encrypted) - ); - if (DBM::is_result($r)) { - $record = $r[0]; + $user_id = User::authenticate(trim($user), trim($password)); + if ($user_id) { + $record = dba::select('user', [], ['uid' => $user_id], ['limit' => 1]); } } diff --git a/include/auth.php b/include/auth.php index f852ea28a..a02c18d1d 100644 --- a/include/auth.php +++ b/include/auth.php @@ -4,22 +4,31 @@ use Friendica\App; use Friendica\Core\System; use Friendica\Core\Config; use Friendica\Database\DBM; +use Friendica\Model\User; -require_once('include/security.php'); -require_once('include/datetime.php'); +require_once 'include/security.php'; +require_once 'include/datetime.php'; // When the "Friendica" cookie is set, take the value to authenticate and renew the cookie. if (isset($_COOKIE["Friendica"])) { $data = json_decode($_COOKIE["Friendica"]); if (isset($data->uid)) { - $r = q("SELECT `user`.*, `user`.`pubkey` as `upubkey`, `user`.`prvkey` as `uprvkey` - FROM `user` WHERE `uid` = %d AND NOT `blocked` AND NOT `account_expired` AND NOT `account_removed` AND `verified` LIMIT 1", - intval($data->uid) + + $user = dba::select('user', + [], + [ + 'uid' => $data->uid, + 'blocked' => false, + 'account_expired' => false, + 'account_removed' => false, + 'verified' => true, + ], + ['limit' => 1] ); - if ($r) { - if ($data->hash != cookie_hash($r[0])) { - logger("Hash for user ".$data->uid." doesn't fit."); + if (DBM::is_result($user)) { + if ($data->hash != cookie_hash($user)) { + logger("Hash for user " . $data->uid . " doesn't fit."); nuke_session(); goaway(System::baseUrl()); } @@ -28,14 +37,15 @@ if (isset($_COOKIE["Friendica"])) { // Expires after 7 days by default, // can be set via system.auth_cookie_lifetime $authcookiedays = Config::get('system', 'auth_cookie_lifetime', 7); - new_cookie($authcookiedays*24*60*60, $r[0]); + new_cookie($authcookiedays * 24 * 60 * 60, $user); // Do the authentification if not done by now if (!isset($_SESSION) || !isset($_SESSION['authenticated'])) { - authenticate_success($r[0]); + authenticate_success($user); - if (Config::get('system','paranoia')) + if (Config::get('system', 'paranoia')) { $_SESSION['addr'] = $data->ip; + } } } } @@ -44,18 +54,16 @@ if (isset($_COOKIE["Friendica"])) { // login/logout -if (isset($_SESSION) && x($_SESSION,'authenticated') && (!x($_POST,'auth-params') || ($_POST['auth-params'] !== 'login'))) { - - if ((x($_POST,'auth-params') && ($_POST['auth-params'] === 'logout')) || ($a->module === 'logout')) { - +if (isset($_SESSION) && x($_SESSION, 'authenticated') && (!x($_POST, 'auth-params') || ($_POST['auth-params'] !== 'login'))) { + if ((x($_POST, 'auth-params') && ($_POST['auth-params'] === 'logout')) || ($a->module === 'logout')) { // process logout request call_hooks("logging_out"); nuke_session(); - info(t('Logged out.').EOL); + info(t('Logged out.') . EOL); goaway(System::baseUrl()); } - if (x($_SESSION,'visitor_id') && !x($_SESSION,'uid')) { + if (x($_SESSION, 'visitor_id') && !x($_SESSION, 'uid')) { $r = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1", intval($_SESSION['visitor_id']) ); @@ -64,25 +72,29 @@ if (isset($_SESSION) && x($_SESSION,'authenticated') && (!x($_POST,'auth-params' } } - if (x($_SESSION,'uid')) { - + if (x($_SESSION, 'uid')) { // already logged in user returning - - $check = Config::get('system','paranoia'); + $check = Config::get('system', 'paranoia'); // extra paranoia - if the IP changed, log them out if ($check && ($_SESSION['addr'] != $_SERVER['REMOTE_ADDR'])) { - logger('Session address changed. Paranoid setting in effect, blocking session. '. - $_SESSION['addr'].' != '.$_SERVER['REMOTE_ADDR']); + logger('Session address changed. Paranoid setting in effect, blocking session. ' . + $_SESSION['addr'] . ' != ' . $_SERVER['REMOTE_ADDR']); nuke_session(); goaway(System::baseUrl()); } - $r = q("SELECT `user`.*, `user`.`pubkey` as `upubkey`, `user`.`prvkey` as `uprvkey` - FROM `user` WHERE `uid` = %d AND NOT `blocked` AND NOT `account_expired` AND NOT `account_removed` AND `verified` LIMIT 1", - intval($_SESSION['uid']) + $user = dba::select('user', + [], + [ + 'uid' => $_SESSION['uid'], + 'blocked' => false, + 'account_expired' => false, + 'account_removed' => false, + 'verified' => true, + ], + ['limit' => 1] ); - - if (!DBM::is_result($r)) { + if (!DBM::is_result($user)) { nuke_session(); goaway(System::baseUrl()); } @@ -91,61 +103,57 @@ if (isset($_SESSION) && x($_SESSION,'authenticated') && (!x($_POST,'auth-params' // stays logged in for a long time, e.g. with "Remember Me" $login_refresh = false; if (!x($_SESSION['last_login_date'])) { - $_SESSION['last_login_date'] = datetime_convert('UTC','UTC'); + $_SESSION['last_login_date'] = datetime_convert('UTC', 'UTC'); } - if (strcmp(datetime_convert('UTC','UTC','now - 12 hours'), $_SESSION['last_login_date']) > 0) { - - $_SESSION['last_login_date'] = datetime_convert('UTC','UTC'); + if (strcmp(datetime_convert('UTC', 'UTC', 'now - 12 hours'), $_SESSION['last_login_date']) > 0) { + $_SESSION['last_login_date'] = datetime_convert('UTC', 'UTC'); $login_refresh = true; } - authenticate_success($r[0], false, false, $login_refresh); + authenticate_success($user, false, false, $login_refresh); } } else { - session_unset(); + if ( + !(x($_POST, 'password') && strlen($_POST['password'])) + && ( + x($_POST, 'openid_url') && strlen($_POST['openid_url']) + || x($_POST, 'username') && strlen($_POST['username']) + ) + ) { + $noid = Config::get('system', 'no_openid'); - if (x($_POST,'password') && strlen($_POST['password'])) - $encrypted = hash('whirlpool',trim($_POST['password'])); - else { - if ((x($_POST,'openid_url')) && strlen($_POST['openid_url']) || - (x($_POST,'username')) && strlen($_POST['username'])) { + $openid_url = trim(strlen($_POST['openid_url']) ? $_POST['openid_url'] : $_POST['username']); - $noid = Config::get('system','no_openid'); + // validate_url alters the calling parameter - $openid_url = trim((strlen($_POST['openid_url'])?$_POST['openid_url']:$_POST['username'])); + $temp_string = $openid_url; - // validate_url alters the calling parameter + // if it's an email address or doesn't resolve to a URL, fail. - $temp_string = $openid_url; - - // if it's an email address or doesn't resolve to a URL, fail. - - if ($noid || strpos($temp_string,'@') || !validate_url($temp_string)) { - $a = get_app(); - notice(t('Login failed.').EOL); - goaway(System::baseUrl()); - // NOTREACHED - } - - // Otherwise it's probably an openid. - - try { - require_once('library/openid.php'); - $openid = new LightOpenID; - $openid->identity = $openid_url; - $_SESSION['openid'] = $openid_url; - $_SESSION['remember'] = $_POST['remember']; - $openid->returnUrl = System::baseUrl(true).'/openid'; - goaway($openid->authUrl()); - } catch (Exception $e) { - notice(t('We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID.').'

'.t('The error message was:').' '.$e->getMessage()); - } + if ($noid || strpos($temp_string, '@') || !validate_url($temp_string)) { + $a = get_app(); + notice(t('Login failed.') . EOL); + goaway(System::baseUrl()); // NOTREACHED } + + // Otherwise it's probably an openid. + + try { + require_once('library/openid.php'); + $openid = new LightOpenID; + $openid->identity = $openid_url; + $_SESSION['openid'] = $openid_url; + $_SESSION['remember'] = $_POST['remember']; + $openid->returnUrl = System::baseUrl(true) . '/openid'; + goaway($openid->authUrl()); + } catch (Exception $e) { + notice(t('We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID.') . '

' . t('The error message was:') . ' ' . $e->getMessage()); + } + // NOTREACHED } - if (x($_POST,'auth-params') && $_POST['auth-params'] === 'login') { - + if (x($_POST, 'auth-params') && $_POST['auth-params'] === 'login') { $record = null; $addon_auth = array( @@ -162,39 +170,30 @@ if (isset($_SESSION) && x($_SESSION,'authenticated') && (!x($_POST,'auth-params' * and later plugins should not interfere with an earlier one that succeeded. * */ - call_hooks('authenticate', $addon_auth); - if ($addon_auth['authenticated'] && count($addon_auth['user_record'])) + if ($addon_auth['authenticated'] && count($addon_auth['user_record'])) { $record = $addon_auth['user_record']; - else { - - // process normal login request - - $r = q("SELECT `user`.*, `user`.`pubkey` as `upubkey`, `user`.`prvkey` as `uprvkey` - FROM `user` WHERE (`email` = '%s' OR `nickname` = '%s') - AND `password` = '%s' AND NOT `blocked` AND NOT `account_expired` AND NOT `account_removed` AND `verified` LIMIT 1", - dbesc(trim($_POST['username'])), - dbesc(trim($_POST['username'])), - dbesc($encrypted) - ); - if (DBM::is_result($r)) - $record = $r[0]; + } else { + $user_id = User::authenticate(trim($_POST['username']), trim($_POST['password'])); + if ($user_id) { + $record = dba::select('user', [], ['uid' => $user_id], ['limit' => 1]); + } } if (!$record || !count($record)) { - logger('authenticate: failed login attempt: '.notags(trim($_POST['username'])).' from IP '.$_SERVER['REMOTE_ADDR']); - notice(t('Login failed.').EOL); + logger('authenticate: failed login attempt: ' . notags(trim($_POST['username'])) . ' from IP ' . $_SERVER['REMOTE_ADDR']); + notice(t('Login failed.') . EOL); goaway(System::baseUrl()); } - if (! $_POST['remember']) { + if (!$_POST['remember']) { new_cookie(0); // 0 means delete on browser exit } // if we haven't failed up this point, log them in. $_SESSION['remember'] = $_POST['remember']; - $_SESSION['last_login_date'] = datetime_convert('UTC','UTC'); + $_SESSION['last_login_date'] = datetime_convert('UTC', 'UTC'); authenticate_success($record, true, true); } } @@ -202,8 +201,8 @@ if (isset($_SESSION) && x($_SESSION,'authenticated') && (!x($_POST,'auth-params' /** * @brief Kills the "Friendica" cookie and all session data */ -function nuke_session() { - +function nuke_session() +{ new_cookie(-3600); // make sure cookie is deleted on browser close, as a security measure session_unset(); session_destroy(); diff --git a/include/oauth.php b/include/oauth.php index c6993d05b..8834b9355 100644 --- a/include/oauth.php +++ b/include/oauth.php @@ -182,93 +182,3 @@ class FKOAuth1 extends OAuthServer { } } -/* -class FKOAuth2 extends OAuth2 { - - private function db_secret($client_secret){ - return hash('whirlpool',$client_secret); - } - - public function addClient($client_id, $client_secret, $redirect_uri) { - $client_secret = $this->db_secret($client_secret); - $r = q("INSERT INTO clients (client_id, pw, redirect_uri) VALUES ('%s', '%s', '%s')", - dbesc($client_id), - dbesc($client_secret), - dbesc($redirect_uri) - ); - - return $r; - } - - protected function checkClientCredentials($client_id, $client_secret = NULL) { - $client_secret = $this->db_secret($client_secret); - - $r = q("SELECT pw FROM clients WHERE client_id = '%s'", - dbesc($client_id)); - - if ($client_secret === NULL) - return $result !== FALSE; - - return $result["client_secret"] == $client_secret; - } - - protected function getRedirectUri($client_id) { - $r = q("SELECT redirect_uri FROM clients WHERE client_id = '%s'", - dbesc($client_id)); - if ($r === FALSE) - return FALSE; - - return isset($r[0]["redirect_uri"]) && $r[0]["redirect_uri"] ? $r[0]["redirect_uri"] : NULL; - } - - protected function getAccessToken($oauth_token) { - $r = q("SELECT client_id, expires, scope FROM tokens WHERE id = '%s'", - dbesc($oauth_token)); - - if (DBM::is_result($r)) - return $r[0]; - return null; - } - - - - protected function setAccessToken($oauth_token, $client_id, $expires, $scope = NULL) { - $r = q("INSERT INTO tokens (id, client_id, expires, scope) VALUES ('%s', '%s', %d, '%s')", - dbesc($oauth_token), - dbesc($client_id), - intval($expires), - dbesc($scope)); - - return $r; - } - - protected function getSupportedGrantTypes() { - return array( - OAUTH2_GRANT_TYPE_AUTH_CODE, - ); - } - - - protected function getAuthCode($code) { - $r = q("SELECT id, client_id, redirect_uri, expires, scope FROM auth_codes WHERE id = '%s'", - dbesc($code)); - - if (DBM::is_result($r)) - return $r[0]; - return null; - } - - protected function setAuthCode($code, $client_id, $redirect_uri, $expires, $scope = NULL) { - $r = q("INSERT INTO auth_codes - (id, client_id, redirect_uri, expires, scope) VALUES - ('%s', '%s', '%s', %d, '%s')", - dbesc($code), - dbesc($client_id), - dbesc($redirect_uri), - intval($expires), - dbesc($scope)); - return $r; - } - -} -*/ diff --git a/include/security.php b/include/security.php index 18793ce06..6f6ef94b6 100644 --- a/include/security.php +++ b/include/security.php @@ -15,7 +15,7 @@ use Friendica\Database\DBM; */ function cookie_hash($user) { return(hash("sha256", Config::get("system", "site_prvkey"). - $user["uprvkey"]. + $user["prvkey"]. $user["password"])); } diff --git a/include/user.php b/include/user.php index be03637df..d82671b86 100644 --- a/include/user.php +++ b/include/user.php @@ -4,13 +4,12 @@ use Friendica\Core\Config; use Friendica\Core\System; use Friendica\Database\DBM; -require_once('include/network.php'); -require_once('include/plugin.php'); -require_once('include/text.php'); -require_once('include/pgettext.php'); -require_once('include/datetime.php'); -require_once('include/enotify.php'); - +require_once 'include/network.php'; +require_once 'include/plugin.php'; +require_once 'include/text.php'; +require_once 'include/pgettext.php'; +require_once 'include/datetime.php'; +require_once 'include/enotify.php'; function create_user($arr) { @@ -388,7 +387,7 @@ function user_create_self_contact($uid) { * @param string $email * @param string $sitename * @param string $username - * @return NULL|boolean from notification() and email() inherited + * @return NULL|boolean from notification() and email() inherited */ function send_register_pending_eml($email, $sitename, $username) { $body = deindent(t(' diff --git a/mod/openid.php b/mod/openid.php index 45b80638d..613cd222f 100644 --- a/mod/openid.php +++ b/mod/openid.php @@ -33,7 +33,8 @@ function openid_content(App $a) { // mod/settings.php in 8367cad so it might have left mixed // records in the user table // - $r = q("SELECT *, `user`.`pubkey` as `upubkey`, `user`.`prvkey` as `uprvkey` FROM `user` + $r = q("SELECT * + FROM `user` WHERE ( `openid` = '%s' OR `openid` = '%s' ) AND `blocked` = 0 AND `account_expired` = 0 AND `account_removed` = 0 AND `verified` = 1 diff --git a/mod/removeme.php b/mod/removeme.php index b1ad2e5ca..bf5969982 100644 --- a/mod/removeme.php +++ b/mod/removeme.php @@ -4,21 +4,21 @@ use Friendica\App; use Friendica\Core\System; use Friendica\Model\User; -function removeme_post(App $a) { - - if (! local_user()) { +function removeme_post(App $a) +{ + if (!local_user()) { return; } - if (x($_SESSION,'submanage') && intval($_SESSION['submanage'])) { + if (x($_SESSION, 'submanage') && intval($_SESSION['submanage'])) { return; } - if ((! x($_POST,'qxz_password')) || (! strlen(trim($_POST['qxz_password'])))) { + if ((!x($_POST, 'qxz_password')) || (!strlen(trim($_POST['qxz_password'])))) { return; } - if ((! x($_POST,'verify')) || (! strlen(trim($_POST['verify'])))) { + if ((!x($_POST, 'verify')) || (!strlen(trim($_POST['verify'])))) { return; } @@ -26,18 +26,15 @@ function removeme_post(App $a) { return; } - $encrypted = hash('whirlpool',trim($_POST['qxz_password'])); - - if ((strlen($a->user['password'])) && ($encrypted === $a->user['password'])) { + if (User::authenticate($a->user['uid'], trim($_POST['qxz_password']))) { User::remove($a->user['uid']); // NOTREACHED } - } -function removeme_content(App $a) { - - if (! local_user()) { +function removeme_content(App $a) +{ + if (!local_user()) { goaway(System::baseUrl()); } @@ -59,5 +56,4 @@ function removeme_content(App $a) { )); return $o; - } diff --git a/mod/settings.php b/mod/settings.php index 6a32b7ed0..8ad82b023 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -9,6 +9,7 @@ use Friendica\Core\Config; use Friendica\Core\PConfig; use Friendica\Database\DBM; use Friendica\Model\GlobalContact; +use Friendica\Model\User; require_once 'include/group.php'; @@ -371,7 +372,6 @@ function settings_post(App $a) { $newpass = $_POST['password']; $confirm = $_POST['confirm']; - $oldpass = hash('whirlpool', $_POST['opassword']); $err = false; if ($newpass != $confirm) { @@ -386,8 +386,7 @@ function settings_post(App $a) { // check if the old password was supplied correctly before // changing it to the new value - $r = q("SELECT `password` FROM `user`WHERE `uid` = %d LIMIT 1", intval(local_user())); - if ($oldpass != $r[0]['password']) { + if (User::authenticate(intval(local_user()), $_POST['opassword'])) { notice(t('Wrong password.') . EOL); $err = true; } @@ -501,22 +500,20 @@ function settings_post(App $a) { if ($email != $a->user['email']) { $email_changed = true; // check for the correct password - $r = q("SELECT `password` FROM `user`WHERE `uid` = %d LIMIT 1", intval(local_user())); - $password = hash('whirlpool', $_POST['mpassword']); - if ($password != $r[0]['password']) { + if (!User::authenticate(intval(local_user()), $_POST['mpassword'])) { $err .= t('Wrong Password') . EOL; $email = $a->user['email']; } // check the email is valid if (!valid_email($email)) { - $err .= t(' Not valid email.'); + $err .= t('Invalid email.'); } // ensure new email is not the admin mail //if ((x($a->config, 'admin_email')) && (strcasecmp($email, $a->config['admin_email']) == 0)) { if (x($a->config, 'admin_email')) { $adminlist = explode(",", str_replace(" ", "", strtolower($a->config['admin_email']))); if (in_array(strtolower($email), $adminlist)) { - $err .= t(' Cannot change to that email.'); + $err .= t('Cannot change to that email.'); $email = $a->user['email']; } } diff --git a/src/Model/User.php b/src/Model/User.php index 01bcce28d..b2beb8e19 100644 --- a/src/Model/User.php +++ b/src/Model/User.php @@ -1,22 +1,71 @@ $user_info, + 'blocked' => 0, + 'account_expired' => 0, + 'account_removed' => 0, + 'verified' => 1 + ], + ['limit' => 1] + ); + } elseif (is_string($user_info)) { + $user = dba::fetch_first('SELECT `uid`, `password` + FROM `user` + WHERE (`email` = ? OR `username` = ? OR `nickname` = ?) + AND `blocked` = 0 + AND `account_expired` = 0 + AND `account_removed` = 0 + AND `verified` = 1 + LIMIT 1', + $user_info, + $user_info, + $user_info + ); + } else { + $user = $user_info; + } + + if (!DBM::is_result($user) || !isset($user['uid']) || !isset($user['password'])) { + return false; + } + + $password_hashed = hash('whirlpool', $password); + + if ($password_hashed !== $user['password']) { + return false; + } + + return $user['uid']; + } + /** * @param object $uid user to remove * @return void @@ -29,21 +78,20 @@ class User logger('Removing user: ' . $uid); - $r = dba::select('user', array(), array('uid' => $uid), array("limit" => 1)); + $user = dba::select('user', [], ['uid' => $uid], ['limit' => 1]); - call_hooks('remove_user', $r); + call_hooks('remove_user', $user); // save username (actually the nickname as it is guaranteed // unique), so it cannot be re-registered in the future. - - dba::insert('userd', array('username' => $r['nickname'])); + dba::insert('userd', ['username' => $user['nickname']]); // The user and related data will be deleted in "cron_expire_and_remove_users" (cronjobs.php) - q("UPDATE `user` SET `account_removed` = 1, `account_expires_on` = UTC_TIMESTAMP() WHERE `uid` = %d", intval($uid)); + dba::update('user', ['account_removed' => true, 'account_expires_on' => datetime_convert()], ['uid' => $uid]); Worker::add(PRIORITY_HIGH, "Notifier", "removeme", $uid); // Send an update to the directory - Worker::add(PRIORITY_LOW, "Directory", $r['url']); + Worker::add(PRIORITY_LOW, "Directory", $user['url']); if ($uid == local_user()) { unset($_SESSION['authenticated']); diff --git a/src/Util/ExAuth.php b/src/Util/ExAuth.php index aa3300c4e..f4dc7c052 100644 --- a/src/Util/ExAuth.php +++ b/src/Util/ExAuth.php @@ -37,6 +37,7 @@ namespace Friendica\Util; use Friendica\Core\Config; use Friendica\Core\PConfig; use Friendica\Database\DBM; +use Friendica\Model\User; use dba; require_once 'include/dba.php'; @@ -217,8 +218,8 @@ class ExAuth $aUser = dba::select('user', ['uid', 'password'], ['nickname' => $sUser], ['limit' => 1]); if (DBM::is_result($aUser)) { - $uid = $aUser['uid']; - $Error = $aUser['password'] != hash('whirlpool', $aCommand[3]); + $uid = User::authenticate($aUser, $aCommand[3]); + $Error = $uid === false; } else { $this->writeLog(LOG_WARNING, 'user not found: ' . $sUser); $Error = true; diff --git a/src/Worker/Delivery.php b/src/Worker/Delivery.php index 216d2520d..c47e98287 100644 --- a/src/Worker/Delivery.php +++ b/src/Worker/Delivery.php @@ -140,7 +140,7 @@ class Delivery { } } - $r = q("SELECT `contact`.*, `user`.`pubkey` AS `upubkey`, `user`.`prvkey` AS `uprvkey`, + $r = q("SELECT `contact`.*, `user`.`prvkey` AS `uprvkey`, `user`.`timezone`, `user`.`nickname`, `user`.`sprvkey`, `user`.`spubkey`, `user`.`page-flags`, `user`.`account-type`, `user`.`prvnets` FROM `contact` INNER JOIN `user` ON `user`.`uid` = `contact`.`uid` diff --git a/src/Worker/Notifier.php b/src/Worker/Notifier.php index ac8cf123c..b261b32fc 100644 --- a/src/Worker/Notifier.php +++ b/src/Worker/Notifier.php @@ -108,7 +108,7 @@ class Notifier { $recipients[] = $suggest[0]['cid']; $item = $suggest[0]; } elseif ($cmd === 'removeme') { - $r = q("SELECT `contact`.*, `user`.`pubkey` AS `upubkey`, `user`.`prvkey` AS `uprvkey`, + $r = q("SELECT `contact`.*, `user`.`prvkey` AS `uprvkey`, `user`.`timezone`, `user`.`nickname`, `user`.`sprvkey`, `user`.`spubkey`, `user`.`page-flags`, `user`.`prvnets`, `user`.`account-type`, `user`.`guid` FROM `contact` INNER JOIN `user` ON `user`.`uid` = `contact`.`uid` @@ -173,7 +173,7 @@ class Notifier { } - $r = q("SELECT `contact`.*, `user`.`pubkey` AS `upubkey`, `user`.`prvkey` AS `uprvkey`, + $r = q("SELECT `contact`.*, `user`.`prvkey` AS `uprvkey`, `user`.`timezone`, `user`.`nickname`, `user`.`sprvkey`, `user`.`spubkey`, `user`.`page-flags`, `user`.`prvnets`, `user`.`account-type` FROM `contact` INNER JOIN `user` ON `user`.`uid` = `contact`.`uid` diff --git a/src/Worker/Queue.php b/src/Worker/Queue.php index c15ccfb98..35642ae72 100644 --- a/src/Worker/Queue.php +++ b/src/Worker/Queue.php @@ -1,4 +1,5 @@ PRIORITY_LOW, 'dont_fork' => true), "Queue", (int)$q_item['id']); + logger('Call queue for id ' . $q_item['id']); + Worker::add(array('priority' => PRIORITY_LOW, 'dont_fork' => true), "Queue", (int) $q_item['id']); } } return; @@ -78,80 +80,71 @@ class Queue { $q_item = $r[0]; - $c = q( - "SELECT * FROM `contact` WHERE `id` = %d LIMIT 1", - intval($q_item['cid']) - ); - - if (!DBM::is_result($c)) { + $contact = dba::select('contact', [], ['id' => $q_item['cid']], ['limit' => 1]); + if (!DBM::is_result($contact)) { remove_queue_item($q_item['id']); return; } - $dead = Cache::get($cachekey_deadguy.$c[0]['notify']); + $dead = Cache::get($cachekey_deadguy . $contact['notify']); if (!is_null($dead) && $dead) { - logger('queue: skipping known dead url: '.$c[0]['notify']); + logger('queue: skipping known dead url: ' . $contact['notify']); update_queue_time($q_item['id']); return; } - $server = PortableContact::detectServer($c[0]['url']); + $server = PortableContact::detectServer($contact['url']); if ($server != "") { - $vital = Cache::get($cachekey_server.$server); + $vital = Cache::get($cachekey_server . $server); if (is_null($vital)) { - logger("Check server ".$server." (".$c[0]["network"].")"); + logger("Check server " . $server . " (" . $contact["network"] . ")"); - $vital = PortableContact::checkServer($server, $c[0]["network"], true); - Cache::set($cachekey_server.$server, $vital, CACHE_QUARTER_HOUR); + $vital = PortableContact::checkServer($server, $contact["network"], true); + Cache::set($cachekey_server . $server, $vital, CACHE_QUARTER_HOUR); } if (!is_null($vital) && !$vital) { - logger('queue: skipping dead server: '.$server); + logger('queue: skipping dead server: ' . $server); update_queue_time($q_item['id']); return; } } - $u = q( - "SELECT `user`.*, `user`.`pubkey` AS `upubkey`, `user`.`prvkey` AS `uprvkey` - FROM `user` WHERE `uid` = %d LIMIT 1", - intval($c[0]['uid']) - ); - if (!DBM::is_result($u)) { + $user = dba::select('user', [], ['uid' => $contact['uid']], ['limit' => 1]); + if (!DBM::is_result($user)) { remove_queue_item($q_item['id']); return; } - $data = $q_item['content']; - $public = $q_item['batch']; - $contact = $c[0]; - $owner = $u[0]; + $data = $q_item['content']; + $public = $q_item['batch']; + $owner = $user; $deliver_status = 0; switch ($contact['network']) { case NETWORK_DFRN: - logger('queue: dfrndelivery: item '.$q_item['id'].' for '.$contact['name'].' <'.$contact['url'].'>'); + logger('queue: dfrndelivery: item ' . $q_item['id'] . ' for ' . $contact['name'] . ' <' . $contact['url'] . '>'); $deliver_status = DFRN::deliver($owner, $contact, $data); if ($deliver_status == (-1)) { update_queue_time($q_item['id']); - Cache::set($cachekey_deadguy.$contact['notify'], true, CACHE_QUARTER_HOUR); + Cache::set($cachekey_deadguy . $contact['notify'], true, CACHE_QUARTER_HOUR); } else { remove_queue_item($q_item['id']); } break; case NETWORK_OSTATUS: if ($contact['notify']) { - logger('queue: slapdelivery: item '.$q_item['id'].' for '.$contact['name'].' <'.$contact['url'].'>'); + logger('queue: slapdelivery: item ' . $q_item['id'] . ' for ' . $contact['name'] . ' <' . $contact['url'] . '>'); $deliver_status = slapper($owner, $contact['notify'], $data); if ($deliver_status == (-1)) { update_queue_time($q_item['id']); - Cache::set($cachekey_deadguy.$contact['notify'], true, CACHE_QUARTER_HOUR); + Cache::set($cachekey_deadguy . $contact['notify'], true, CACHE_QUARTER_HOUR); } else { remove_queue_item($q_item['id']); } @@ -159,12 +152,12 @@ class Queue { break; case NETWORK_DIASPORA: if ($contact['notify']) { - logger('queue: diaspora_delivery: item '.$q_item['id'].' for '.$contact['name'].' <'.$contact['url'].'>'); + logger('queue: diaspora_delivery: item ' . $q_item['id'] . ' for ' . $contact['name'] . ' <' . $contact['url'] . '>'); $deliver_status = Diaspora::transmit($owner, $contact, $data, $public, true); if ($deliver_status == (-1)) { update_queue_time($q_item['id']); - Cache::set($cachekey_deadguy.$contact['notify'], true, CACHE_QUARTER_HOUR); + Cache::set($cachekey_deadguy . $contact['notify'], true, CACHE_QUARTER_HOUR); } else { remove_queue_item($q_item['id']); } @@ -182,7 +175,7 @@ class Queue { } break; } - logger('Deliver status '.(int)$deliver_status.' for item '.$q_item['id'].' to '.$contact['name'].' <'.$contact['url'].'>'); + logger('Deliver status ' . (int) $deliver_status . ' for item ' . $q_item['id'] . ' to ' . $contact['name'] . ' <' . $contact['url'] . '>'); return; }