<?php
/**
- * @file mod/dfrn_confirm.php
- * @brief Module: dfrn_confirm
- * Purpose: Friendship acceptance for DFRN contacts
+ * @copyright Copyright (C) 2020, Friendica
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Friendship acceptance for DFRN contacts
*
* There are two possible entry points and three scenarios.
*
*/
use Friendica\App;
-use Friendica\Core\Config;
-use Friendica\Core\L10n;
use Friendica\Core\Logger;
use Friendica\Core\Protocol;
use Friendica\Core\System;
use Friendica\Database\DBA;
+use Friendica\DI;
use Friendica\Model\Contact;
use Friendica\Model\Group;
+use Friendica\Model\Notify\Type;
use Friendica\Model\User;
-use Friendica\Network\Probe;
+use Friendica\Protocol\Activity;
use Friendica\Util\Crypto;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Network;
* since we are operating on behalf of our registered user to approve a friendship.
*/
if (empty($_POST['source_url'])) {
- $uid = defaults($handsfree, 'uid', local_user());
+ $uid = ($handsfree['uid'] ?? 0) ?: local_user();
if (!$uid) {
- notice(L10n::t('Permission denied.') . EOL);
+ notice(DI::l10n()->t('Permission denied.') . EOL);
return;
}
$user = DBA::selectFirst('user', [], ['uid' => $uid]);
if (!DBA::isResult($user)) {
- notice(L10n::t('Profile not found.') . EOL);
+ notice(DI::l10n()->t('Profile not found.') . EOL);
return;
}
$intro_id = $handsfree['intro_id'];
$duplex = $handsfree['duplex'];
$cid = 0;
- $hidden = intval(defaults($handsfree, 'hidden' , 0));
+ $hidden = intval($handsfree['hidden'] ?? 0);
} else {
- $dfrn_id = Strings::escapeTags(trim(defaults($_POST, 'dfrn_id' , '')));
- $intro_id = intval(defaults($_POST, 'intro_id' , 0));
- $duplex = intval(defaults($_POST, 'duplex' , 0));
- $cid = intval(defaults($_POST, 'contact_id', 0));
- $hidden = intval(defaults($_POST, 'hidden' , 0));
+ $dfrn_id = Strings::escapeTags(trim($_POST['dfrn_id'] ?? ''));
+ $intro_id = intval($_POST['intro_id'] ?? 0);
+ $duplex = intval($_POST['duplex'] ?? 0);
+ $cid = intval($_POST['contact_id'] ?? 0);
+ $hidden = intval($_POST['hidden'] ?? 0);
}
/*
);
if (!DBA::isResult($r)) {
Logger::log('Contact not found in DB.');
- notice(L10n::t('Contact not found.') . EOL);
- notice(L10n::t('This may occasionally happen if contact was requested by both persons and it has already been approved.') . EOL);
+ notice(DI::l10n()->t('Contact not found.') . EOL);
+ notice(DI::l10n()->t('This may occasionally happen if contact was requested by both persons and it has already been approved.') . EOL);
return;
}
$params['dfrn_id'] = bin2hex($result);
$params['public_key'] = $public_key;
- $my_url = System::baseUrl() . '/profile/' . $user['nickname'];
+ $my_url = DI::baseUrl() . '/profile/' . $user['nickname'];
openssl_public_encrypt($my_url, $params['source_url'], $site_pubkey);
$params['source_url'] = bin2hex($params['source_url']);
// We shouldn't proceed, because the xml parser might choke,
// and $status is going to be zero, which indicates success.
// We can hardly call this a success.
- notice(L10n::t('Response from remote site was not understood.') . EOL);
+ notice(DI::l10n()->t('Response from remote site was not understood.') . EOL);
return;
}
- if (strlen($leading_junk) && Config::get('system', 'debugging')) {
+ if (strlen($leading_junk) && DI::config()->get('system', 'debugging')) {
// This might be more common. Mixed error text and some XML.
// If we're configured for debugging, show the text. Proceed in either case.
- notice(L10n::t('Unexpected response from remote site: ') . EOL . $leading_junk . EOL);
+ notice(DI::l10n()->t('Unexpected response from remote site: ') . EOL . $leading_junk . EOL);
}
if (stristr($res, "<status") === false) {
// wrong xml! stop here!
Logger::log('Unexpected response posting to ' . $dfrn_confirm);
- notice(L10n::t('Unexpected response from remote site: ') . EOL . htmlspecialchars($res) . EOL);
+ notice(DI::l10n()->t('Unexpected response from remote site: ') . EOL . htmlspecialchars($res) . EOL);
return;
}
$message = XML::unescape($xml->message); // human readable text of what may have gone wrong.
switch ($status) {
case 0:
- info(L10n::t("Confirmation completed successfully.") . EOL);
+ info(DI::l10n()->t("Confirmation completed successfully.") . EOL);
break;
case 1:
// birthday paradox - generate new dfrn-id and fall through.
);
case 2:
- notice(L10n::t("Temporary failure. Please wait and try again.") . EOL);
+ notice(DI::l10n()->t("Temporary failure. Please wait and try again.") . EOL);
break;
case 3:
- notice(L10n::t("Introduction failed or was revoked.") . EOL);
+ notice(DI::l10n()->t("Introduction failed or was revoked.") . EOL);
break;
}
if (strlen($message)) {
- notice(L10n::t('Remote site reported: ') . $message . EOL);
+ notice(DI::l10n()->t('Remote site reported: ') . $message . EOL);
}
if (($status == 0) && $intro_id) {
// Let's send our user to the contact editor in case they want to
// do anything special with this new friend.
if ($handsfree === null) {
- $a->internalRedirect('contact/' . intval($contact_id));
+ DI::baseUrl()->redirect('contact/' . intval($contact_id));
} else {
return;
}
*/
if (!empty($_POST['source_url'])) {
// We are processing an external confirmation to an introduction created by our user.
- $public_key = defaults($_POST, 'public_key', '');
- $dfrn_id = hex2bin(defaults($_POST, 'dfrn_id' , ''));
- $source_url = hex2bin(defaults($_POST, 'source_url', ''));
- $aes_key = defaults($_POST, 'aes_key' , '');
- $duplex = intval(defaults($_POST, 'duplex' , 0));
- $page = intval(defaults($_POST, 'page' , 0));
+ $public_key = $_POST['public_key'] ?? '';
+ $dfrn_id = hex2bin($_POST['dfrn_id'] ?? '');
+ $source_url = hex2bin($_POST['source_url'] ?? '');
+ $aes_key = $_POST['aes_key'] ?? '';
+ $duplex = intval($_POST['duplex'] ?? 0);
+ $page = intval($_POST['page'] ?? 0);
$forum = (($page == 1) ? 1 : 0);
$prv = (($page == 2) ? 1 : 0);
// Find our user's account
$user = DBA::selectFirst('user', [], ['nickname' => $node]);
if (!DBA::isResult($user)) {
- $message = L10n::t('No user record found for \'%s\' ', $node);
+ $message = DI::l10n()->t('No user record found for \'%s\' ', $node);
System::xmlExit(3, $message); // failure
// NOTREACHED
}
if (!strstr($my_prvkey, 'PRIVATE KEY')) {
- $message = L10n::t('Our site encryption key is apparently messed up.');
+ $message = DI::l10n()->t('Our site encryption key is apparently messed up.');
System::xmlExit(3, $message);
}
if (!strlen($decrypted_source_url)) {
- $message = L10n::t('Empty site URL was provided or URL could not be decrypted by us.');
+ $message = DI::l10n()->t('Empty site URL was provided or URL could not be decrypted by us.');
System::xmlExit(3, $message);
// NOTREACHED
}
$contact = DBA::selectFirst('contact', [], ['url' => $newurl, 'uid' => $local_uid]);
if (!DBA::isResult($contact)) {
// this is either a bogus confirmation (?) or we deleted the original introduction.
- $message = L10n::t('Contact record was not found for you on our site.');
+ $message = DI::l10n()->t('Contact record was not found for you on our site.');
System::xmlExit(3, $message);
return; // NOTREACHED
}
$dfrn_record = $contact['id'];
if (!$foreign_pubkey) {
- $message = L10n::t('Site public key not available in contact record for URL %s.', $decrypted_source_url);
+ $message = DI::l10n()->t('Site public key not available in contact record for URL %s.', $decrypted_source_url);
System::xmlExit(3, $message);
}
}
if (DBA::exists('contact', ['dfrn-id' => $decrypted_dfrn_id])) {
- $message = L10n::t('The ID provided by your system is a duplicate on our system. It should work if you try again.');
+ $message = DI::l10n()->t('The ID provided by your system is a duplicate on our system. It should work if you try again.');
System::xmlExit(1, $message); // Birthday paradox - duplicate dfrn-id
// NOTREACHED
}
intval($dfrn_record)
);
if (!DBA::isResult($r)) {
- $message = L10n::t('Unable to set your contact credentials on our system.');
+ $message = DI::l10n()->t('Unable to set your contact credentials on our system.');
System::xmlExit(3, $message);
}
if (DBA::isResult($contact)) {
$photo = $contact['photo'];
} else {
- $photo = System::baseUrl() . '/images/person-300.jpg';
+ $photo = DI::baseUrl() . '/images/person-300.jpg';
}
Contact::updateAvatar($photo, $local_uid, $dfrn_record);
intval($dfrn_record)
);
if (!DBA::isResult($r)) { // indicates schema is messed up or total db failure
- $message = L10n::t('Unable to update your contact profile details on our system');
+ $message = DI::l10n()->t('Unable to update your contact profile details on our system');
System::xmlExit(3, $message);
}
if (DBA::isResult($r)) {
$combined = $r[0];
- if ($combined['notify-flags'] & NOTIFY_CONFIRM) {
+ if ($combined['notify-flags'] & Type::CONFIRM) {
$mutual = ($new_relation == Contact::FRIEND);
notification([
- 'type' => NOTIFY_CONFIRM,
+ 'type' => Type::CONFIRM,
'notify_flags' => $combined['notify-flags'],
'language' => $combined['language'],
'to_name' => $combined['username'],
'to_email' => $combined['email'],
'uid' => $combined['uid'],
- 'link' => System::baseUrl() . '/contact/' . $dfrn_record,
- 'source_name' => ((strlen(stripslashes($combined['name']))) ? stripslashes($combined['name']) : L10n::t('[Name Withheld]')),
+ 'link' => DI::baseUrl() . '/contact/' . $dfrn_record,
+ 'source_name' => ((strlen(stripslashes($combined['name']))) ? stripslashes($combined['name']) : DI::l10n()->t('[Name Withheld]')),
'source_link' => $combined['url'],
'source_photo' => $combined['photo'],
- 'verb' => ($mutual?ACTIVITY_FRIEND:ACTIVITY_FOLLOW),
+ 'verb' => ($mutual ? Activity::FRIEND : Activity::FOLLOW),
'otype' => 'intro'
]);
}
}
// somebody arrived here by mistake or they are fishing. Send them to the homepage.
- $a->internalRedirect();
+ DI::baseUrl()->redirect();
// NOTREACHED
}