<?php
-
/**
- * @file mod/dfrn_poll.php
+ * @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/>.
+ *
*/
use Friendica\App;
-use Friendica\Core\Config;
-use Friendica\Core\L10n;
use Friendica\Core\Logger;
+use Friendica\Core\Session;
use Friendica\Core\System;
use Friendica\Database\DBA;
-use Friendica\Module\Login;
+use Friendica\DI;
use Friendica\Protocol\DFRN;
use Friendica\Protocol\OStatus;
-use Friendica\Util\Network;
use Friendica\Util\Strings;
use Friendica\Util\XML;
function dfrn_poll_init(App $a)
{
- Login::sessionAuth();
-
- $dfrn_id = defaults($_GET, 'dfrn_id' , '');
- $type = defaults($_GET, 'type' , 'data');
- $last_update = defaults($_GET, 'last_update' , '');
- $destination_url = defaults($_GET, 'destination_url', '');
- $challenge = defaults($_GET, 'challenge' , '');
- $sec = defaults($_GET, 'sec' , '');
- $dfrn_version = (float) defaults($_GET, 'dfrn_version' , 2.0);
+ DI::auth()->withSession($a);
+
+ $dfrn_id = $_GET['dfrn_id'] ?? '';
+ $type = ($_GET['type'] ?? '') ?: 'data';
+ $last_update = $_GET['last_update'] ?? '';
+ $destination_url = $_GET['destination_url'] ?? '';
+ $challenge = $_GET['challenge'] ?? '';
+ $sec = $_GET['sec'] ?? '';
+ $dfrn_version = floatval(($_GET['dfrn_version'] ?? 0.0) ?: 2.0);
$quiet = !empty($_GET['quiet']);
// Possibly it is an OStatus compatible server that requests a user feed
- $user_agent = defaults($_SERVER, 'HTTP_USER_AGENT', '');
+ $user_agent = $_SERVER['HTTP_USER_AGENT'] ?? '';
if (($a->argc > 1) && ($dfrn_id == '') && !strstr($user_agent, 'Friendica')) {
$nickname = $a->argv[1];
header("Content-type: application/atom+xml");
$hidewall = false;
if (($dfrn_id === '') && empty($_POST['dfrn_id'])) {
- if (Config::get('system', 'block_public') && !local_user() && !remote_user()) {
+ if (DI::config()->get('system', 'block_public') && !Session::isAuthenticated()) {
throw new \Friendica\Network\HTTPException\ForbiddenException();
}
$my_id = '0:' . $dfrn_id;
break;
default:
- $a->internalRedirect();
+ DI::baseUrl()->redirect();
break; // NOTREACHED
}
);
if (DBA::isResult($r)) {
- $s = Network::fetchUrl($r[0]['poll'] . '?dfrn_id=' . $my_id . '&type=profile-check');
+ $s = DI::httpRequest()->fetch($r[0]['poll'] . '?dfrn_id=' . $my_id . '&type=profile-check');
Logger::log("dfrn_poll: old profile returns " . $s, Logger::DATA);
if ((int)$xml->status === 1) {
$_SESSION['authenticated'] = 1;
- if (empty($_SESSION['remote'])) {
- $_SESSION['remote'] = [];
- }
-
- $_SESSION['remote'][$r[0]['uid']] = $r[0]['id'];
-
$_SESSION['visitor_id'] = $r[0]['id'];
$_SESSION['visitor_home'] = $r[0]['url'];
$_SESSION['visitor_handle'] = $r[0]['addr'];
$_SESSION['visitor_visiting'] = $r[0]['uid'];
$_SESSION['my_url'] = $r[0]['url'];
+
+ Session::setVisitorsContacts();
+
if (!$quiet) {
- info(L10n::t('%1$s welcomes %2$s', $r[0]['username'], $r[0]['name']) . EOL);
+ info(DI::l10n()->t('%1$s welcomes %2$s', $r[0]['username'], $r[0]['name']));
}
// Visitors get 1 day session.
if (!empty($destination_url)) {
System::externalRedirect($destination_url);
} else {
- $a->internalRedirect('profile/' . $profile);
+ DI::baseUrl()->redirect('profile/' . $profile);
}
}
- $a->internalRedirect();
+ DI::baseUrl()->redirect();
}
if ($type === 'profile-check' && $dfrn_version < 2.2) {
function dfrn_poll_post(App $a)
{
- $dfrn_id = defaults($_POST, 'dfrn_id' , '');
- $challenge = defaults($_POST, 'challenge', '');
- $url = defaults($_POST, 'url' , '');
- $sec = defaults($_POST, 'sec' , '');
- $ptype = defaults($_POST, 'type' , '');
- $perm = defaults($_POST, 'perm' , 'r');
- $dfrn_version = !empty($_POST['dfrn_version']) ? (float) $_POST['dfrn_version'] : 2.0;
+ $dfrn_id = $_POST['dfrn_id'] ?? '';
+ $challenge = $_POST['challenge'] ?? '';
+ $url = $_POST['url'] ?? '';
+ $sec = $_POST['sec'] ?? '';
+ $ptype = $_POST['type'] ?? '';
+ $perm = ($_POST['perm'] ?? '') ?: 'r';
+ $dfrn_version = floatval(($_GET['dfrn_version'] ?? 0.0) ?: 2.0);
if ($ptype === 'profile-check') {
if (strlen($challenge) && strlen($sec)) {
$sql_extra = sprintf(" AND `dfrn-id` = '%s' AND `duplex` = 1 ", DBA::escape($dfrn_id));
break;
default:
- $a->internalRedirect();
+ DI::baseUrl()->redirect();
break; // NOTREACHED
}
// NOTREACHED
} else {
// Update the writable flag if it changed
- Logger::log('dfrn_poll: post request feed: ' . print_r($_POST, true), Logger::DATA);
+ Logger::debug('post request feed', ['post' => $_POST]);
if ($dfrn_version >= 2.21) {
if ($perm === 'rw') {
$writable = 1;
function dfrn_poll_content(App $a)
{
- $dfrn_id = defaults($_GET, 'dfrn_id' , '');
- $type = defaults($_GET, 'type' , 'data');
- $last_update = defaults($_GET, 'last_update' , '');
- $destination_url = defaults($_GET, 'destination_url', '');
- $sec = defaults($_GET, 'sec' , '');
- $dfrn_version = !empty($_GET['dfrn_version']) ? (float) $_GET['dfrn_version'] : 2.0;
+ $dfrn_id = $_GET['dfrn_id'] ?? '';
+ $type = ($_GET['type'] ?? '') ?: 'data';
+ $last_update = $_GET['last_update'] ?? '';
+ $destination_url = $_GET['destination_url'] ?? '';
+ $sec = $_GET['sec'] ?? '';
+ $dfrn_version = floatval(($_GET['dfrn_version'] ?? 0.0) ?: 2.0);
$quiet = !empty($_GET['quiet']);
$direction = -1;
$my_id = '0:' . $dfrn_id;
break;
default:
- $a->internalRedirect();
+ DI::baseUrl()->redirect();
break; // NOTREACHED
}
// URL reply
if ($dfrn_version < 2.2) {
- $s = Network::fetchUrl($r[0]['poll']
- . '?dfrn_id=' . $encrypted_id
- . '&type=profile-check'
- . '&dfrn_version=' . DFRN_PROTOCOL_VERSION
- . '&challenge=' . $challenge
- . '&sec=' . $sec
+ $s = DI::httpRequest()->fetch($r[0]['poll']
+ . '?dfrn_id=' . $encrypted_id
+ . '&type=profile-check'
+ . '&dfrn_version=' . DFRN_PROTOCOL_VERSION
+ . '&challenge=' . $challenge
+ . '&sec=' . $sec
);
} else {
- $s = Network::post($r[0]['poll'], [
- 'dfrn_id' => $encrypted_id,
- 'type' => 'profile-check',
+ $s = DI::httpRequest()->post($r[0]['poll'], [
+ 'dfrn_id' => $encrypted_id,
+ 'type' => 'profile-check',
'dfrn_version' => DFRN_PROTOCOL_VERSION,
- 'challenge' => $challenge,
- 'sec' => $sec
+ 'challenge' => $challenge,
+ 'sec' => $sec
])->getBody();
}
if (strlen($s) && strstr($s, '<?xml')) {
$xml = XML::parseString($s);
- Logger::log('dfrn_poll: profile: parsed xml: ' . print_r($xml, true), Logger::DATA);
+ Logger::debug(' profile: parsed', ['xml' => $xml]);
Logger::log('dfrn_poll: secure profile: challenge: ' . $xml->challenge . ' expecting ' . $hash);
Logger::log('dfrn_poll: secure profile: sec: ' . $xml->sec . ' expecting ' . $sec);
if (((int) $xml->status == 0) && ($xml->challenge == $hash) && ($xml->sec == $sec)) {
$_SESSION['authenticated'] = 1;
- if (empty($_SESSION['remote'])) {
- $_SESSION['remote'] = [];
- }
-
- $_SESSION['remote'][$r[0]['uid']] = $r[0]['id'];
-
$_SESSION['visitor_id'] = $r[0]['id'];
$_SESSION['visitor_home'] = $r[0]['url'];
$_SESSION['visitor_visiting'] = $r[0]['uid'];
$_SESSION['my_url'] = $r[0]['url'];
+
+ Session::setVisitorsContacts();
+
if (!$quiet) {
- info(L10n::t('%1$s welcomes %2$s', $r[0]['username'], $r[0]['name']) . EOL);
+ info(DI::l10n()->t('%1$s welcomes %2$s', $r[0]['username'], $r[0]['name']));
}
// Visitors get 1 day session.
switch ($destination_url) {
case 'profile':
- $a->internalRedirect('profile/' . $profile . '?f=&tab=profile');
+ DI::baseUrl()->redirect('profile/' . $profile . '/profile');
break;
case 'photos':
- $a->internalRedirect('photos/' . $profile);
+ DI::baseUrl()->redirect('photos/' . $profile);
break;
case 'status':
case '':
- $a->internalRedirect('profile/' . $profile);
+ DI::baseUrl()->redirect('profile/' . $profile);
break;
default:
- $appendix = (strstr($destination_url, '?') ? '&f=&redir=1' : '?f=&redir=1');
- $a->redirect($destination_url . $appendix);
+ $appendix = (strstr($destination_url, '?') ? '&redir=1' : '?redir=1');
+ DI::baseUrl()->redirect($destination_url . $appendix);
break;
}
// NOTREACHED