X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=mod%2Fredir.php;h=b7292384268a4bc21f94e62b4c242701e54bd4f9;hb=bc848526829c9808868bb8520f8e3510b1a0000e;hp=cc58b9cd126ed73d10679564b7d1beb6856fa5b0;hpb=a96da925712184eec97f6ca01072b7c2bee92a7e;p=friendica.git diff --git a/mod/redir.php b/mod/redir.php index cc58b9cd12..b729238426 100644 --- a/mod/redir.php +++ b/mod/redir.php @@ -1,43 +1,89 @@ argc == 2)) || (! intval($a->argv[1]))) - goaway($a->get_baseurl()); - $cid = $a->argv[1]; +function redir_init(App $a) { - $r = q("SELECT `network`, `issued-id`, `dfrn-id`, `duplex`, `poll` FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1", - intval($cid), - intval(local_user()) - ); + $url = ((x($_GET,'url')) ? $_GET['url'] : ''); + $quiet = ((x($_GET,'quiet')) ? '&quiet=1' : ''); + $con_url = ((x($_GET,'conurl')) ? $_GET['conurl'] : ''); - if((! count($r)) || ($r[0]['network'] !== 'dfrn')) - goaway($a->get_baseurl()); + // traditional DFRN - $dfrn_id = $orig_id = (($r[0]['issued-id']) ? $r[0]['issued-id'] : $r[0]['dfrn-id']); + if ($con_url || (local_user() && $a->argc > 1 && intval($a->argv[1]))) { - if($r[0]['duplex'] && $r[0]['issued-id']) { - $orig_id = $r[0]['issued-id']; - $dfrn_id = '1:' . $orig_id; + if ($con_url) { + $con_url = str_replace('https', 'http', $con_url); + + $r = q("SELECT * FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d LIMIT 1", + dbesc($con_url), + intval(local_user()) + ); + + if (!DBM::is_result($r)) { + goaway(System::baseUrl()); + } + if ($r[0]['network'] !== NETWORK_DFRN) { + goaway(($url != '' ? $url : $r[0]['url'])); + } + $cid = $r[0]['id']; + } else { + $cid = $a->argv[1]; + + $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1", + intval($cid), + intval(local_user()) + ); + + if (!DBM::is_result($r)) { + goaway(System::baseUrl()); + } + if ($r[0]['network'] !== NETWORK_DFRN) { + goaway(($url != '' ? $url : $r[0]['url'])); + } + } + + $dfrn_id = $orig_id = (($r[0]['issued-id']) ? $r[0]['issued-id'] : $r[0]['dfrn-id']); + + if ($r[0]['duplex'] && $r[0]['issued-id']) { + $orig_id = $r[0]['issued-id']; + $dfrn_id = '1:' . $orig_id; + } + if ($r[0]['duplex'] && $r[0]['dfrn-id']) { + $orig_id = $r[0]['dfrn-id']; + $dfrn_id = '0:' . $orig_id; + } + + $sec = random_string(); + + q("INSERT INTO `profile_check` ( `uid`, `cid`, `dfrn_id`, `sec`, `expire`) + VALUES( %d, %s, '%s', '%s', %d )", + intval(local_user()), + intval($cid), + dbesc($dfrn_id), + dbesc($sec), + intval(time() + 45) + ); + + logger('mod_redir: ' . $r[0]['name'] . ' ' . $sec, LOGGER_DEBUG); + $dest = (($url) ? '&destination_url=' . $url : ''); + goaway ($r[0]['poll'] . '?dfrn_id=' . $dfrn_id + . '&dfrn_version=' . DFRN_PROTOCOL_VERSION . '&type=profile&sec=' . $sec . $dest . $quiet); + } + + if (local_user()) { + $handle = $a->user['nickname'] . '@' . substr(System::baseUrl(),strpos(System::baseUrl(),'://')+3); + } + if (remote_user()) { + $handle = $_SESSION['handle']; } - if($r[0]['duplex'] && $r[0]['dfrn-id']) { - $orig_id = $r[0]['dfrn-id']; - $dfrn_id = '0:' . $orig_id; + + if ($url) { + $url = str_replace('{zid}','&zid=' . $handle,$url); + goaway($url); } - $sec = random_string(); - - q("INSERT INTO `profile_check` ( `uid`, `cid`, `dfrn_id`, `sec`, `expire`) - VALUES( %d, %s, '%s', '%s', %d )", - intval(local_user()), - intval($cid), - dbesc($dfrn_id), - dbesc($sec), - intval(time() + 45) - ); - - goaway ($r[0]['poll'] . '?dfrn_id=' . $dfrn_id -// . '&dfrn_version=' . DFRN_PROTOCOL_VERSION . '&type=profile'); - . '&dfrn_version=' . DFRN_PROTOCOL_VERSION . '&type=profile&sec=' . $sec); - + goaway(System::baseUrl()); }