2012-09-21 01:44:40 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
function magic_init(&$a) {
|
|
|
|
|
|
|
|
$url = ((x($_REQUEST,'url')) ? $_REQUEST['url'] : '');
|
2012-12-14 00:27:58 +00:00
|
|
|
$addr = ((x($_REQUEST,'addr')) ? $_REQUEST['addr'] : '');
|
|
|
|
$hash = ((x($_REQUEST,'hash')) ? $_REQUEST['hash'] : '');
|
|
|
|
$dest = ((x($_REQUEST,'dest')) ? $_REQUEST['dest'] : '');
|
2012-09-21 01:44:40 +00:00
|
|
|
|
|
|
|
|
2012-12-14 00:27:58 +00:00
|
|
|
if(local_user()) {
|
|
|
|
|
|
|
|
if($hash) {
|
|
|
|
$x = q("select xchan.xchan_url, hubloc.* from xchan left join hubloc on xchan_hash = hubloc_hash
|
|
|
|
where hublock_hash = '%s' and (hubloc_flags & %d) limit 1",
|
|
|
|
intval(HUBLOC_FLAGS_PRIMARY)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
elseif($addr) {
|
|
|
|
$x = q("select hubloc.* from xchan left join hubloc on xchan_hash = hubloc_hash
|
|
|
|
where xchan_addr = '%s' and (hubloc_flags & %d) limit 1",
|
|
|
|
dbesc($addr),
|
|
|
|
intval(HUBLOC_FLAGS_PRIMARY)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
if(! $x) {
|
|
|
|
notice( t('Channel not found.') . EOL);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if($x[0]['hubloc_url'] === z_root()) {
|
|
|
|
$webbie = substr($x[0]['hubloc_addr'],0,strpos('@',$x[0]['hubloc_addr']));
|
|
|
|
switch($dest) {
|
|
|
|
case 'channel':
|
|
|
|
$desturl = z_root() . '/channel/' . $webbie;
|
|
|
|
break;
|
|
|
|
case 'photos':
|
|
|
|
$desturl = z_root() . '/photos/' . $webbie;
|
|
|
|
break;
|
|
|
|
case 'profile':
|
|
|
|
$desturl = z_root() . '/profile/' . $webbie;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
$desturl = $dest;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
// We are already authenticated on this site and a registered observer.
|
|
|
|
// Just redirect.
|
|
|
|
goaway($desturl);
|
|
|
|
}
|
2012-12-14 04:00:50 +00:00
|
|
|
$recip = array(array('guid' => $x[0]['hubloc_guid'],'guid_sig' => $x[0]['hubloc_guid_sig']));
|
|
|
|
$channel = $a->get_channel();
|
|
|
|
$hash = random_string();
|
|
|
|
$packet = zot_build_packet($channel,'auth',$recip,$x[0]['hubloc_sitekey'],$hash);
|
|
|
|
$result = zot_zot($x[0]['hubloc_callback'],$packet);
|
|
|
|
if($result['success']) {
|
|
|
|
$j = json_decode($result['body'],true);
|
|
|
|
if($j['iv']) {
|
|
|
|
$y = aes_unencapsulate($j,$channel['prvkey']);
|
|
|
|
$j = json_decode($y,true);
|
|
|
|
}
|
|
|
|
if($y['token'])
|
|
|
|
goaway($x[0]['callback'] . '?f=&token=' . $token . '&dest=' . $dest);
|
|
|
|
}
|
|
|
|
goaway($dest);
|
2012-09-21 01:44:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
goaway(z_root());
|
|
|
|
}
|