function redir_init(App $a) {
- $url = defaults($_GET, 'url', '');
+ $url = $_GET['url'] ?? '';
$quiet = !empty($_GET['quiet']) ? '&quiet=1' : '';
if ($a->argc > 1 && intval($a->argv[1])) {
$contact_url = $contact['url'];
- if ((!local_user() && !remote_user()) // Visitors (not logged in or not remotes) can't authenticate.
+ if (!Session::isAuthenticated() // Visitors (not logged in or not remotes) can't authenticate.
|| (!empty($a->contact['id']) && $a->contact['id'] == $cid)) // Local user is already authenticated.
{
- $a->redirect(defaults($url, $contact_url));
+ $a->redirect($url ?: $contact_url);
}
if ($contact['uid'] == 0 && local_user()) {
if (!empty($a->contact['id']) && $a->contact['id'] == $cid) {
// Local user is already authenticated.
- $target_url = defaults($url, $contact_url);
+ $target_url = $url ?: $contact_url;
Logger::log($contact['name'] . " is already authenticated. Redirecting to " . $target_url, Logger::DEBUG);
$a->redirect($target_url);
}
// with the local contact. Otherwise the local user would ask the local contact
// for authentification everytime he/she is visiting a profile page of the local
// contact.
- if ($host == $remotehost
- && !empty($_SESSION['remote'])
- && is_array($_SESSION['remote']))
- {
- foreach ($_SESSION['remote'] as $v) {
- if (!empty($v['uid']) && !empty($v['cid']) &&
- $v['uid'] == Session::get('visitor_visiting') &&
- $v['cid'] == Session::get('visitor_id')) {
- // Remote user is already authenticated.
- $target_url = defaults($url, $contact_url);
- Logger::log($contact['name'] . " is already authenticated. Redirecting to " . $target_url, Logger::DEBUG);
- $a->redirect($target_url);
- }
- }
+ if (($host == $remotehost) && (Session::getRemoteContactID(Session::get('visitor_visiting')) == Session::get('visitor_id'))) {
+ // Remote user is already authenticated.
+ $target_url = $url ?: $contact_url;
+ Logger::log($contact['name'] . " is already authenticated. Redirecting to " . $target_url, Logger::DEBUG);
+ $a->redirect($target_url);
}
}
- // When the remote page does support OWA, then we enforce the use of it
- $basepath = Contact::getBasepath($contact_url);
- if (Strings::compareLink($basepath, System::baseUrl())) {
- $use_magic = true;
- } else {
- $serverret = Network::curl($basepath . '/magic');
- $use_magic = $serverret->isSuccess();
- }
-
// Doing remote auth with dfrn.
- if (local_user() && !$use_magic && (!empty($contact['dfrn-id']) || !empty($contact['issued-id'])) && empty($contact['pending'])) {
+ if (local_user() && (!empty($contact['dfrn-id']) || !empty($contact['issued-id'])) && empty($contact['pending'])) {
$dfrn_id = $orig_id = (($contact['issued-id']) ? $contact['issued-id'] : $contact['dfrn-id']);
if ($contact['duplex'] && $contact['issued-id']) {
. '&dfrn_version=' . DFRN_PROTOCOL_VERSION . '&type=profile&sec=' . $sec . $dest . $quiet);
}
- $url = defaults($url, $contact_url);
+ $url = $url ?: $contact_url;
}
// If we don't have a connected contact, redirect with
Logger::info('Got my url', ['visitor' => $visitor]);
}
- if (empty(visitor) && remote_user()) {
- $contact = DBA::selectFirst('contact', ['url'], ['id' => remote_user()]);
- if (!empty($contact['url'])) {
- $visitor = $contact['url'];
- Logger::info('Got remote user', ['visitor' => $visitor]);
- }
- }
-
- if (empty(visitor) && local_user()) {
- $contact = DBA::selectFirst('contact', ['url'], ['id' => local_user()]);
- if (!empty($contact['url'])) {
- $visitor = $contact['url'];
- Logger::info('Got local user', ['visitor' => $visitor]);
- }
- }
-
$contact = DBA::selectFirst('contact', ['url'], ['id' => $cid]);
if (!DBA::isResult($contact)) {
Logger::info('Contact not found', ['id' => $cid]);
}
} else {
$contact_url = $contact['url'];
- $target_url = defaults($url, $contact_url);
+ $target_url = $url ?: $contact_url;
}
$basepath = Contact::getBasepath($contact_url);
$serverret = Network::curl($basepath . '/magic');
if ($serverret->isSuccess()) {
$separator = strpos($target_url, '?') ? '&' : '?';
- $target_url .= $separator . 'zrl=' . urlencode($visitor);
+ $target_url .= $separator . 'zrl=' . urlencode($visitor) . '&addr=' . urlencode($contact_url);
Logger::info('Redirecting with magic', ['target' => $target_url, 'visitor' => $visitor, 'contact' => $contact_url]);
$a->redirect($target_url);