aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfriendica <info@friendica.com>2012-12-13 16:27:58 -0800
committerfriendica <info@friendica.com>2012-12-13 16:27:58 -0800
commitdd2483221d3ee639088c0baca62a3472c76ecd1c (patch)
treefc0f7aaa577b723aa42385b23fdf94c073bfc2ff
parent2a782597ba85ce4c55181330dde5ec3ff26195fd (diff)
downloadvolse-hubzilla-dd2483221d3ee639088c0baca62a3472c76ecd1c.tar.gz
volse-hubzilla-dd2483221d3ee639088c0baca62a3472c76ecd1c.tar.bz2
volse-hubzilla-dd2483221d3ee639088c0baca62a3472c76ecd1c.zip
admittedly local magic-auth is easy so that's mostly done. Now it gets hard.
-rw-r--r--include/identity.php7
-rw-r--r--mod/chanview.php2
-rw-r--r--mod/magic.php54
-rw-r--r--version.inc2
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