aboutsummaryrefslogtreecommitdiffstats
path: root/mod/zfinger.php
diff options
context:
space:
mode:
authorfriendica <info@friendica.com>2013-12-15 14:36:43 -0800
committerfriendica <info@friendica.com>2013-12-15 14:36:43 -0800
commit0272ab4cd9a6428396489d88c7a1a89be76e5810 (patch)
tree78ae24629cb4fd9b52442fdad2f307107460b048 /mod/zfinger.php
parent950bd72e020daf887ac487c95d6f4f2e42b1dee9 (diff)
downloadvolse-hubzilla-0272ab4cd9a6428396489d88c7a1a89be76e5810.tar.gz
volse-hubzilla-0272ab4cd9a6428396489d88c7a1a89be76e5810.tar.bz2
volse-hubzilla-0272ab4cd9a6428396489d88c7a1a89be76e5810.zip
Provide a fallback channel to probe for magic-auth when we have no prior communications with a site.
This will be a system channel if one exists, otherwise any channel will do. We'll try to use the first valid channel on the site because that was probably created when the site was installed and is the closest thing to a system channel we've got.
Diffstat (limited to 'mod/zfinger.php')
-rw-r--r--mod/zfinger.php32
1 files changed, 27 insertions, 5 deletions
diff --git a/mod/zfinger.php b/mod/zfinger.php
index 0827f3424..aad8e224d 100644
--- a/mod/zfinger.php
+++ b/mod/zfinger.php
@@ -52,11 +52,33 @@ function zfinger_init(&$a) {
);
}
elseif(strlen($zaddr)) {
- $r = q("select channel.*, xchan.* from channel left join xchan on channel_hash = xchan_hash
- where ( channel_address = '%s' or xchan_addr = '%s' ) limit 1",
- dbesc($zaddr),
- dbesc($zaddr)
- );
+ if(strpos($zaddr,'[system]') === false) { /* normal address lookup */
+ $r = q("select channel.*, xchan.* from channel left join xchan on channel_hash = xchan_hash
+ where ( channel_address = '%s' or xchan_addr = '%s' ) limit 1",
+ dbesc($zaddr),
+ dbesc($zaddr)
+ );
+ }
+
+ else {
+
+ /**
+ * The special address '[system]' will return a system channel if one has been defined,
+ * Or the first valid channel we find if there are no system channels.
+ *
+ * This is used by magic-auth if we have no prior communications with this site - and
+ * returns an identity on this site which we can use to create a valid hub record so that
+ * we can exchange signed messages. The precise identity is irrelevant. It's the hub
+ * information that we really need at the other end - and this will return it.
+ *
+ */
+
+ $r = q("select channel.*, xchan.* from channel left join xchan on channel_hash = xchan_hash
+ where (( channel_pageflags & %d ) or not ( channel_pageflags & %d )) order by channel_id limit 1",
+ intval(PAGE_SYSTEM),
+ intval(PAGE_REMOVED)
+ );
+ }
}
else {
$ret['message'] = 'Invalid request';