diff options
-rw-r--r-- | include/identity.php | 7 | ||||
-rw-r--r-- | mod/chanview.php | 2 | ||||
-rw-r--r-- | mod/magic.php | 54 | ||||
-rw-r--r-- | version.inc | 2 |
4 files changed, 56 insertions, 9 deletions
diff --git a/include/identity.php b/include/identity.php index c188c5025..914da6384 100644 --- a/include/identity.php +++ b/include/identity.php @@ -55,10 +55,9 @@ function create_identity($arr) { $sig = base64url_encode(rsa_sign($guid,$key['prvkey'])); $hash = base64url_encode(hash('whirlpool',$guid . $sig,true)); - $r = q("select channel_id from channel where channel_account_id = %d and channel_primary = 1 limit 1", - intval($arr['account_id']) - ); - $primary = (! $r) ? true : false; + // Force primary until importation works, then we'll offer a choice + + $primary = true; $r = q("insert into channel ( channel_account_id, channel_primary, channel_name, channel_address, channel_guid, channel_guid_sig, diff --git a/mod/chanview.php b/mod/chanview.php index 42e5e1ed9..1de4f4e1b 100644 --- a/mod/chanview.php +++ b/mod/chanview.php @@ -40,7 +40,7 @@ function chanview_content(&$a) { } $o = replace_macros(get_markup_template('chanview.tpl'),array( - '$url' => $xchan['xchan_url'] + '$url' => z_root() . '/magic?f=&dest=' . $xchan['xchan_url'] . '&addr=' . $xchan['xchan_addr'] )); return $o; diff --git a/mod/magic.php b/mod/magic.php index 656fb9fad..c1f42f1d1 100644 --- a/mod/magic.php +++ b/mod/magic.php @@ -3,9 +3,57 @@ function magic_init(&$a) { $url = ((x($_REQUEST,'url')) ? $_REQUEST['url'] : ''); - - - if(local_user() && argc() > 1 && intval(argv(1))) { + $addr = ((x($_REQUEST,'addr')) ? $_REQUEST['addr'] : ''); + $hash = ((x($_REQUEST,'hash')) ? $_REQUEST['hash'] : ''); + $dest = ((x($_REQUEST,'dest')) ? $_REQUEST['dest'] : ''); + + + 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); + } + + + + + $cid = $argv(1); diff --git a/version.inc b/version.inc index 20b016bd4..1ee5b111a 100644 --- a/version.inc +++ b/version.inc @@ -1 +1 @@ -2012-12-12.167 +2012-12-13.168 |