aboutsummaryrefslogtreecommitdiffstats
path: root/mod
diff options
context:
space:
mode:
Diffstat (limited to 'mod')
-rw-r--r--mod/hostxrd.php3
-rw-r--r--mod/invite.php2
-rw-r--r--mod/mail.php5
-rw-r--r--mod/message.php50
-rw-r--r--mod/photos.php4
-rw-r--r--mod/profile_photo.php72
-rw-r--r--mod/siteinfo.php5
-rw-r--r--mod/thing.php10
-rw-r--r--mod/webfinger.php2
-rw-r--r--mod/wfinger.php19
-rw-r--r--mod/xrd.php3
-rw-r--r--mod/zfinger.php292
12 files changed, 130 insertions, 337 deletions
diff --git a/mod/hostxrd.php b/mod/hostxrd.php
index ef86f2dd9..0e18c133b 100644
--- a/mod/hostxrd.php
+++ b/mod/hostxrd.php
@@ -2,7 +2,8 @@
function hostxrd_init(&$a) {
header('Access-Control-Allow-Origin: *');
- header("Content-type: text/xml");
+ header("Content-type: application/xrd+xml");
+ logger('hostxrd',LOGGER_DEBUG);
$tpl = get_markup_template('xrd_host.tpl');
$x = replace_macros(get_markup_template('xrd_host.tpl'), array(
diff --git a/mod/invite.php b/mod/invite.php
index 1fdfbacc6..46fa7b413 100644
--- a/mod/invite.php
+++ b/mod/invite.php
@@ -73,7 +73,7 @@ function invite_post(&$a) {
$account = $a->get_account();
- $res = mail($recip, sprintf( t('Please join us on Red'), $a->config['sitename']),
+ $res = mail($recip, sprintf( t('Please join us on $Projectname'), $a->config['sitename']),
$nmessage,
"From: " . $account['account_email'] . "\n"
. 'Content-type: text/plain; charset=UTF-8' . "\n"
diff --git a/mod/mail.php b/mod/mail.php
index 152db3231..80d7f477d 100644
--- a/mod/mail.php
+++ b/mod/mail.php
@@ -125,8 +125,7 @@ function mail_content(&$a) {
$tpl = get_markup_template('mail_head.tpl');
$header = replace_macros($tpl, array(
- '$messages' => t('Messages'),
- '$tab_content' => $tab_content
+ '$header' => t('Messages'),
));
if((argc() == 3) && (argv(1) === 'drop')) {
@@ -160,8 +159,6 @@ function mail_content(&$a) {
if((argc() > 1) && (argv(1) === 'new')) {
- $o .= $header;
-
$plaintext = true;
$tpl = get_markup_template('msg-header.tpl');
diff --git a/mod/message.php b/mod/message.php
index 9cf4b6987..9f62f6b61 100644
--- a/mod/message.php
+++ b/mod/message.php
@@ -25,11 +25,7 @@ function message_content(&$a) {
$cipher = 'aes256';
- $tpl = get_markup_template('mail_head.tpl');
- $header = replace_macros($tpl, array(
- '$messages' => t('Messages'),
- '$tab_content' => $tab_content
- ));
+
if((argc() == 3) && (argv(1) === 'dropconv')) {
if(! intval(argv(2)))
@@ -42,9 +38,6 @@ function message_content(&$a) {
}
if(argc() == 1) {
- // list messages
-
- $o .= $header;
// private_messages_list() can do other more complicated stuff, for now keep it simple
@@ -55,24 +48,33 @@ function message_content(&$a) {
return $o;
}
- $tpl = get_markup_template('mail_list.tpl');
+ $messages = array();
+
foreach($r as $rr) {
-
- $o .= replace_macros($tpl, array(
- '$id' => $rr['id'],
- '$from_name' => $rr['from']['xchan_name'],
- '$from_url' => chanlink_hash($rr['from_xchan']),
- '$from_photo' => $rr['from']['xchan_photo_s'],
- '$to_name' => $rr['to']['xchan_name'],
- '$to_url' => chanlink_hash($rr['to_xchan']),
- '$to_photo' => $rr['to']['xchan_photo_s'],
- '$subject' => (($rr['seen']) ? $rr['title'] : '<strong>' . $rr['title'] . '</strong>'),
- '$delete' => t('Delete conversation'),
- '$body' => smilies(bbcode($rr['body'])),
- '$date' => datetime_convert('UTC',date_default_timezone_get(),$rr['created'], t('D, d M Y - g:i A')),
- '$seen' => $rr['seen']
- ));
+ $messages[] = array(
+ 'id' => $rr['id'],
+ 'from_name' => $rr['from']['xchan_name'],
+ 'from_url' => chanlink_hash($rr['from_xchan']),
+ 'from_photo' => $rr['from']['xchan_photo_s'],
+ 'to_name' => $rr['to']['xchan_name'],
+ 'to_url' => chanlink_hash($rr['to_xchan']),
+ 'to_photo' => $rr['to']['xchan_photo_s'],
+ 'subject' => (($rr['seen']) ? $rr['title'] : '<strong>' . $rr['title'] . '</strong>'),
+ 'delete' => t('Delete conversation'),
+ 'body' => smilies(bbcode($rr['body'])),
+ 'date' => datetime_convert('UTC',date_default_timezone_get(),$rr['created'], t('D, d M Y - g:i A')),
+ 'seen' => $rr['seen']
+ );
}
+
+
+ $tpl = get_markup_template('mail_head.tpl');
+ $o = replace_macros($tpl, array(
+ '$header' => t('Messages'),
+ '$messages' => $messages
+ ));
+
+
$o .= alt_pager($a,count($r));
return $o;
}
diff --git a/mod/photos.php b/mod/photos.php
index f48603d71..cd293b39d 100644
--- a/mod/photos.php
+++ b/mod/photos.php
@@ -770,7 +770,7 @@ function photos_content(&$a) {
// fetch image, item containing image, then comments
- $ph = q("SELECT aid,uid,xchan,resource_id,created,edited,title,`description`,album,filename,`type`,height,width,`size`,scale,photo_usage,is_nsfw,allow_cid,allow_gid,deny_cid,deny_gid FROM `photo` WHERE `uid` = %d AND `resource_id` = '%s'
+ $ph = q("SELECT id,aid,uid,xchan,resource_id,created,edited,title,`description`,album,filename,`type`,height,width,`size`,scale,photo_usage,is_nsfw,allow_cid,allow_gid,deny_cid,deny_gid FROM `photo` WHERE `uid` = %d AND `resource_id` = '%s'
$sql_extra ORDER BY `scale` ASC ",
intval($owner_uid),
dbesc($datum)
@@ -1147,7 +1147,7 @@ function photos_content(&$a) {
$photo_tpl = get_markup_template('photo_view.tpl');
$o .= replace_macros($photo_tpl, array(
- '$id' => $link_item['id'], //$ph[0]['id'],
+ '$id' => $ph[0]['id'],
'$album' => $album_e,
'$tools' => $tools,
'$lock' => $lockstate[1],
diff --git a/mod/profile_photo.php b/mod/profile_photo.php
index 7564a3f69..7067a9f76 100644
--- a/mod/profile_photo.php
+++ b/mod/profile_photo.php
@@ -92,12 +92,15 @@ function profile_photo_post(&$a) {
$is_default_profile = 1;
if($_REQUEST['profile']) {
- $r = q("select id, is_default from profile where id = %d and uid = %d limit 1",
+ $r = q("select id, profile_guid, is_default, gender from profile where id = %d and uid = %d limit 1",
intval($_REQUEST['profile']),
intval(local_channel())
);
- if(($r) && (! intval($r[0]['is_default'])))
- $is_default_profile = 0;
+ if($r) {
+ $profile = $r[0];
+ if(! intval($profile['is_default']))
+ $is_default_profile = 0;
+ }
}
@@ -167,6 +170,8 @@ function profile_photo_post(&$a) {
return;
}
+ $channel = $a->get_channel();
+
// If setting for the default profile, unset the profile photo flag from any other photos I own
if($is_default_profile) {
@@ -177,6 +182,9 @@ function profile_photo_post(&$a) {
dbesc($base_image['resource_id']),
intval(local_channel())
);
+
+ send_profile_photo_activity($channel,$base_image,$profile);
+
}
else {
$r = q("update profile set photo = '%s', thumb = '%s' where id = %d and uid = %d",
@@ -190,7 +198,6 @@ function profile_photo_post(&$a) {
// We'll set the updated profile-photo timestamp even if it isn't the default profile,
// so that browsers will do a cache update unconditionally
- $channel = $a->get_channel();
$r = q("UPDATE xchan set xchan_photo_mimetype = '%s', xchan_photo_date = '%s'
where xchan_hash = '%s'",
@@ -206,7 +213,9 @@ function profile_photo_post(&$a) {
// Now copy profile-permissions to pictures, to prevent privacyleaks by automatically created folder 'Profile Pictures'
- profile_photo_set_profile_perms($_REQUEST['profile']);
+ profile_photo_set_profile_perms($_REQUEST['profile']);
+
+
}
else
@@ -262,6 +271,59 @@ function profile_photo_post(&$a) {
}
+function send_profile_photo_activity($channel,$photo,$profile) {
+
+ // for now only create activities for the default profile
+
+ if(! intval($profile['is_default']))
+ return;
+
+ $arr = array();
+ $arr['item_thread_top'] = 1;
+ $arr['item_origin'] = 1;
+ $arr['item_wall'] = 1;
+ $arr['obj_type'] = ACTIVITY_OBJ_PHOTO;
+ $arr['verb'] = ACTIVITY_UPDATE;
+
+ $arr['object'] = json_encode(array(
+ 'type' => $arr['obj_type'],
+ 'id' => z_root() . '/photo/profile/l/' . $channel['channel_id'],
+ 'link' => array('rel' => 'photo', 'type' => $photo['type'], 'href' => z_root() . '/photo/profile/l/' . $channel['channel_id'])
+ ));
+
+ if(stripos($profile['gender'],t('female')) !== false)
+ $t = t('%1$s updated her %2$s');
+ elseif(stripos($profile['gender'],t('male')) !== false)
+ $t = t('%1$s updated his %2$s');
+ else
+ $t = t('%1$s updated their %2$s');
+
+ $ptext = '[zrl=' . z_root() . '/photos/' . $channel['channel_address'] . '/image/' . $photo['resource_id'] . ']' . t('profile photo') . '[/zrl]';
+
+ $ltext = '[zrl=' . z_root() . '/profile/' . $channel['channel_address'] . ']' . '[zmg=150x150]' . z_root() . '/photo/' . $photo['resource_id'] . '-4[/zmg][/zrl]';
+
+ $arr['body'] = sprintf($t,$channel['channel_name'],$ptext) . "\n\n" . $ltext;
+
+ $acl = new AccessList($channel);
+ $x = $acl->get();
+ $arr['allow_cid'] = $x['allow_cid'];
+
+ $arr['allow_gid'] = $x['allow_gid'];
+ $arr['deny_cid'] = $x['deny_cid'];
+ $arr['deny_gid'] = $x['deny_gid'];
+
+ $arr['uid'] = $channel['channel_id'];
+ $arr['aid'] = $channel['channel_account_id'];
+
+ $arr['owner_xchan'] = $channel['channel_hash'];
+ $arr['author_xchan'] = $channel['channel_hash'];
+
+ post_activity_item($arr);
+
+
+}
+
+
/* @brief Generate content of profile-photo view
*
* @param $a Current application
diff --git a/mod/siteinfo.php b/mod/siteinfo.php
index 8281a7a0a..14aaef144 100644
--- a/mod/siteinfo.php
+++ b/mod/siteinfo.php
@@ -150,6 +150,9 @@ function siteinfo_content(&$a) {
if(file_exists('doc/site_donate.html'))
$donate .= file_get_contents('doc/site_donate.html');
+ if(function_exists('sys_getloadavg'))
+ $loadavg = sys_getloadavg();
+
$o = replace_macros(get_markup_template('siteinfo.tpl'), array(
'$title' => t('$Projectname'),
'$description' => t('This is a hub of $Projectname - a global cooperative network of decentralized privacy enhanced websites.'),
@@ -158,6 +161,8 @@ function siteinfo_content(&$a) {
'$tag' => $tag,
'$polled' => t('Last background fetch: '),
'$lastpoll' => get_poller_runtime(),
+ '$load_average' => t('Current load average: '),
+ '$loadavg_all' => $loadavg[0] . ', ' . $loadavg[1] . ', ' . $loadavg[2],
'$commit' => $commit,
'$web_location' => t('Running at web location') . ' ' . z_root(),
'$visit' => t('Please visit <a href="https://redmatrix.me">redmatrix.me</a> to learn more about $Projectname.'),
diff --git a/mod/thing.php b/mod/thing.php
index 03dc7db5b..280cc194d 100644
--- a/mod/thing.php
+++ b/mod/thing.php
@@ -234,9 +234,17 @@ function thing_init(&$a) {
function thing_content(&$a) {
+ // @FIXME one problem with things is we can't share them unless we provide the channel in the url
+ // so we can definitively lookup the owner.
+
if(argc() == 2) {
- $sql_extra = permissions_sql();
+ $r = q("select obj_channel from obj where obj_type = %d and obj_obj = '%s' limit 1",
+ intval(TERM_OBJ_THING),
+ dbesc(argv(1))
+ );
+ if($r)
+ $sql_extra = permissions_sql($r[0]['obj_channel']);
$r = q("select * from obj where obj_type = %d and obj_obj = '%s' $sql_extra limit 1",
intval(TERM_OBJ_THING),
diff --git a/mod/webfinger.php b/mod/webfinger.php
index a646961a8..74bfc3ce5 100644
--- a/mod/webfinger.php
+++ b/mod/webfinger.php
@@ -15,7 +15,7 @@ function webfinger_content(&$a) {
if(x($_GET,'addr')) {
$addr = trim($_GET['addr']);
if(strpos($addr,'@') !== false) {
- $res = webfinger_rfc7033($addr);
+ $res = webfinger_rfc7033($addr,true);
if(! $res)
$res = old_webfinger($addr);
}
diff --git a/mod/wfinger.php b/mod/wfinger.php
index 1493dd6ba..8b9abe4af 100644
--- a/mod/wfinger.php
+++ b/mod/wfinger.php
@@ -1,5 +1,7 @@
<?php
+require_once('include/zot.php');
+
function wfinger_init(&$a) {
$result = array();
@@ -11,15 +13,16 @@ function wfinger_init(&$a) {
elseif(x($_SERVER,'SERVER_PORT') && (intval($_SERVER['SERVER_PORT']) == 443))
$scheme = 'https';
- // Don't complain to me - I'm just implementing the spec.
+ $zot = intval($_REQUEST['zot']);
- if($scheme !== 'https') {
+ if(($scheme !== 'https') && (! $zot)) {
header($_SERVER["SERVER_PROTOCOL"] . ' ' . 500 . ' ' . 'Webfinger requires HTTPS');
killme();
}
- $resource = $_REQUEST['resource'];
+ $resource = $_REQUEST['resource'];
+ logger('webfinger: ' . $resource,LOGGER_DEBUG);
$r = null;
@@ -30,7 +33,7 @@ function wfinger_init(&$a) {
if(strpos($channel,'@') !== false) {
$host = substr($channel,strpos($channel,'@')+1);
if(strcasecmp($host,get_app()->get_hostname())) {
- goaway('https://' . $host . '/.well-known/webfinger?resource=' . $resource);
+ goaway('https://' . $host . '/.well-known/webfinger?f=&resource=' . $resource . (($zot) ? '&zot=' . $zot : ''));
}
$channel = substr($channel,0,strpos($channel,'@'));
}
@@ -46,16 +49,14 @@ function wfinger_init(&$a) {
}
-
header('Access-Control-Allow-Origin: *');
header('Content-type: application/jrd+json');
-
if($resource && $r) {
- $h = q("select hubloc_addr from hubloc where hubloc_hash = '%s'",
+ $h = q("select hubloc_addr from hubloc where hubloc_hash = '%s' and hubloc_deleted = 0",
dbesc($r[0]['channel_hash'])
);
@@ -105,6 +106,10 @@ function wfinger_init(&$a) {
)
);
+ if($zot) {
+ // get a zotinfo packet and return it with webfinger
+ $result['zot'] = zotinfo(array('address' => $r[0]['xchan_addr']));
+ }
}
else {
header($_SERVER["SERVER_PROTOCOL"] . ' ' . 400 . ' ' . 'Bad Request');
diff --git a/mod/xrd.php b/mod/xrd.php
index d547194ad..a373f8bf5 100644
--- a/mod/xrd.php
+++ b/mod/xrd.php
@@ -5,6 +5,7 @@ require_once('include/crypto.php');
function xrd_init(&$a) {
$uri = urldecode(notags(trim($_GET['uri'])));
+ logger('xrd: ' . $uri,LOGGER_DEBUG);
if(substr($uri,0,4) === 'http')
$name = basename($uri);
@@ -31,7 +32,7 @@ function xrd_init(&$a) {
$salmon_key = salmon_key($r[0]['channel_pubkey']);
header('Access-Control-Allow-Origin: *');
- header("Content-type: text/xml");
+ header("Content-type: application/xrd+xml");
$tpl = get_markup_template('view/xrd_person.tpl');
diff --git a/mod/zfinger.php b/mod/zfinger.php
index 54ea52bc9..fb3333280 100644
--- a/mod/zfinger.php
+++ b/mod/zfinger.php
@@ -5,297 +5,9 @@ function zfinger_init(&$a) {
require_once('include/zot.php');
require_once('include/crypto.php');
- $ret = array('success' => false);
- $zhash = ((x($_REQUEST,'guid_hash')) ? $_REQUEST['guid_hash'] : '');
- $zguid = ((x($_REQUEST,'guid')) ? $_REQUEST['guid'] : '');
- $zguid_sig = ((x($_REQUEST,'guid_sig')) ? $_REQUEST['guid_sig'] : '');
- $zaddr = ((x($_REQUEST,'address')) ? $_REQUEST['address'] : '');
- $ztarget = ((x($_REQUEST,'target')) ? $_REQUEST['target'] : '');
- $zsig = ((x($_REQUEST,'target_sig')) ? $_REQUEST['target_sig'] : '');
- $zkey = ((x($_REQUEST,'key')) ? $_REQUEST['key'] : '');
- $mindate = ((x($_REQUEST,'mindate')) ? $_REQUEST['mindate'] : '');
- $feed = ((x($_REQUEST,'feed')) ? intval($_REQUEST['feed']) : 0);
+ $x = zotinfo($_REQUEST);
+ json_return_and_die($x);
- if($ztarget) {
- if((! $zkey) || (! $zsig) || (! rsa_verify($ztarget,base64url_decode($zsig),$zkey))) {
- logger('zfinger: invalid target signature');
- $ret['message'] = t("invalid target signature");
- json_return_and_die($ret);
- }
- }
-
- // allow re-written domains so bob@foo.example.com can provide an address of bob@example.com
- // The top-level domain also needs to redirect .well-known/zot-info to the sub-domain with a 301 or 308
-
- // TODO: Make 308 work in include/network.php for zot_fetch_url and zot_post_url
-
- if(($zaddr) && ($s = get_config('system','zotinfo_domainrewrite'))) {
- $arr = explode('^',$s);
- if(count($arr) == 2)
- $zaddr = str_replace($arr[0],$arr[1],$zaddr);
- }
-
- $r = null;
-
- if(strlen($zhash)) {
- $r = q("select channel.*, xchan.* from channel left join xchan on channel_hash = xchan_hash
- where channel_hash = '%s' limit 1",
- dbesc($zhash)
- );
- }
- elseif(strlen($zguid) && strlen($zguid_sig)) {
- $r = q("select channel.*, xchan.* from channel left join xchan on channel_hash = xchan_hash
- where channel_guid = '%s' and channel_guid_sig = '%s' limit 1",
- dbesc($zguid),
- dbesc($zguid_sig)
- );
- }
- elseif(strlen($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_system = 1 order by channel_id limit 1");
- if(! $r) {
- $r = q("select channel.*, xchan.* from channel left join xchan on channel_hash = xchan_hash
- where channel_removed = 0 order by channel_id limit 1");
- }
- }
- }
- else {
- $ret['message'] = 'Invalid request';
- json_return_and_die($ret);
- }
-
- if(! $r) {
- $ret['message'] = 'Item not found.';
- json_return_and_die($ret);
- }
-
- $e = $r[0];
-
- $id = $e['channel_id'];
-
- $sys_channel = (intval($e['channel_system']) ? true : false);
- $special_channel = (($e['channel_pageflags'] & PAGE_PREMIUM) ? true : false);
- $adult_channel = (($e['channel_pageflags'] & PAGE_ADULT) ? true : false);
- $censored = (($e['channel_pageflags'] & PAGE_CENSORED) ? true : false);
- $searchable = (($e['channel_pageflags'] & PAGE_HIDDEN) ? false : true);
- $deleted = (intval($e['xchan_deleted']) ? true : false);
-
- if($deleted || $censored || $sys_channel)
- $searchable = false;
-
- $public_forum = false;
-
- $role = get_pconfig($e['channel_id'],'system','permissions_role');
- if($role === 'forum' || $role === 'repository') {
- $public_forum = true;
- }
- else {
- // check if it has characteristics of a public forum based on custom permissions.
- $t = q("select abook_my_perms from abook where abook_channel = %d and abook_self = 1 limit 1",
- intval($e['channel_id'])
- );
- if(($t) && (($t[0]['abook_my_perms'] & PERMS_W_TAGWALL) && (! ($t[0]['abook_my_perms'] & PERMS_W_STREAM))))
- $public_forum = true;
- }
-
-
- // This is for birthdays and keywords, but must check access permissions
- $p = q("select * from profile where uid = %d and is_default = 1",
- intval($e['channel_id'])
- );
-
- $profile = array();
-
- if($p) {
-
- if(! intval($p[0]['publish']))
- $searchable = false;
-
- $profile['description'] = $p[0]['pdesc'];
- $profile['birthday'] = $p[0]['dob'];
- if(($profile['birthday'] != '0000-00-00') && (($bd = z_birthday($p[0]['dob'],$e['channel_timezone'])) !== ''))
- $profile['next_birthday'] = $bd;
-
- if($age = age($p[0]['dob'],$e['channel_timezone'],''))
- $profile['age'] = $age;
- $profile['gender'] = $p[0]['gender'];
- $profile['marital'] = $p[0]['marital'];
- $profile['sexual'] = $p[0]['sexual'];
- $profile['locale'] = $p[0]['locality'];
- $profile['region'] = $p[0]['region'];
- $profile['postcode'] = $p[0]['postal_code'];
- $profile['country'] = $p[0]['country_name'];
- $profile['about'] = $p[0]['about'];
- $profile['homepage'] = $p[0]['homepage'];
- $profile['hometown'] = $p[0]['hometown'];
-
- if($p[0]['keywords']) {
- $tags = array();
- $k = explode(' ',$p[0]['keywords']);
- if($k) {
- foreach($k as $kk) {
- if(trim($kk," \t\n\r\0\x0B,")) {
- $tags[] = trim($kk," \t\n\r\0\x0B,");
- }
- }
- }
- if($tags)
- $profile['keywords'] = $tags;
- }
- }
-
- $ret['success'] = true;
-
- // Communication details
-
- $ret['guid'] = $e['xchan_guid'];
- $ret['guid_sig'] = $e['xchan_guid_sig'];
- $ret['key'] = $e['xchan_pubkey'];
- $ret['name'] = $e['xchan_name'];
- $ret['name_updated'] = $e['xchan_name_date'];
- $ret['address'] = $e['xchan_addr'];
- $ret['photo_mimetype'] = $e['xchan_photo_mimetype'];
- $ret['photo'] = $e['xchan_photo_l'];
- $ret['photo_updated'] = $e['xchan_photo_date'];
- $ret['url'] = $e['xchan_url'];
- $ret['connections_url']= (($e['xchan_connurl']) ? $e['xchan_connurl'] : z_root() . '/poco/' . $e['channel_address']);
- $ret['target'] = $ztarget;
- $ret['target_sig'] = $zsig;
- $ret['searchable'] = $searchable;
- $ret['adult_content'] = $adult_channel;
- $ret['public_forum'] = $public_forum;
- if($deleted)
- $ret['deleted'] = $deleted;
-
- // premium or other channel desiring some contact with potential followers before connecting.
- // This is a template - %s will be replaced with the follow_url we discover for the return channel.
-
- if($special_channel)
- $ret['connect_url'] = z_root() . '/connect/' . $e['channel_address'];
-
- // This is a template for our follow url, %s will be replaced with a webbie
-
- $ret['follow_url'] = z_root() . '/follow?f=&url=%s';
-
- $ztarget_hash = (($ztarget && $zsig)
- ? make_xchan_hash($ztarget,$zsig)
- : '' );
-
- $permissions = get_all_perms($e['channel_id'],$ztarget_hash,false);
-
- if($ztarget_hash) {
- $permissions['connected'] = false;
- $b = q("select * from abook where abook_xchan = '%s' and abook_channel = %d limit 1",
- dbesc($ztarget_hash),
- intval($e['channel_id'])
- );
- if($b)
- $permissions['connected'] = true;
- }
-
- $ret['permissions'] = (($ztarget && $zkey) ? crypto_encapsulate(json_encode($permissions),$zkey) : $permissions);
-
- if($permissions['view_profile'])
- $ret['profile'] = $profile;
-
- // array of (verified) hubs this channel uses
-
- $x = zot_encode_locations($e);
- if($x)
- $ret['locations'] = $x;
-
- $ret['site'] = array();
- $ret['site']['url'] = z_root();
- $ret['site']['url_sig'] = base64url_encode(rsa_sign(z_root(),$e['channel_prvkey']));
-
- $dirmode = get_config('system','directory_mode');
- if(($dirmode === false) || ($dirmode == DIRECTORY_MODE_NORMAL))
- $ret['site']['directory_mode'] = 'normal';
-
- if($dirmode == DIRECTORY_MODE_PRIMARY)
- $ret['site']['directory_mode'] = 'primary';
- elseif($dirmode == DIRECTORY_MODE_SECONDARY)
- $ret['site']['directory_mode'] = 'secondary';
- elseif($dirmode == DIRECTORY_MODE_STANDALONE)
- $ret['site']['directory_mode'] = 'standalone';
- if($dirmode != DIRECTORY_MODE_NORMAL)
- $ret['site']['directory_url'] = z_root() . '/dirsearch';
-
-
- // hide detailed site information if you're off the grid
-
- if($dirmode != DIRECTORY_MODE_STANDALONE) {
-
- $register_policy = intval(get_config('system','register_policy'));
-
- if($register_policy == REGISTER_CLOSED)
- $ret['site']['register_policy'] = 'closed';
- if($register_policy == REGISTER_APPROVE)
- $ret['site']['register_policy'] = 'approve';
- if($register_policy == REGISTER_OPEN)
- $ret['site']['register_policy'] = 'open';
-
-
- $access_policy = intval(get_config('system','access_policy'));
-
- if($access_policy == ACCESS_PRIVATE)
- $ret['site']['access_policy'] = 'private';
- if($access_policy == ACCESS_PAID)
- $ret['site']['access_policy'] = 'paid';
- if($access_policy == ACCESS_FREE)
- $ret['site']['access_policy'] = 'free';
- if($access_policy == ACCESS_TIERED)
- $ret['site']['access_policy'] = 'tiered';
-
- $ret['site']['accounts'] = account_total();
-
- require_once('include/identity.php');
- $ret['site']['channels'] = channel_total();
-
-
- $ret['site']['version'] = PLATFORM_NAME . ' ' . RED_VERSION . '[' . DB_UPDATE_VERSION . ']';
-
- $ret['site']['admin'] = get_config('system','admin_email');
-
- $visible_plugins = array();
- if(is_array($a->plugins) && count($a->plugins)) {
- $r = q("select * from addon where hidden = 0");
- if($r)
- foreach($r as $rr)
- $visible_plugins[] = $rr['name'];
- }
-
- $ret['site']['plugins'] = $visible_plugins;
- $ret['site']['sitehash'] = get_config('system','location_hash');
- $ret['site']['sitename'] = get_config('system','sitename');
- $ret['site']['sellpage'] = get_config('system','sellpage');
- $ret['site']['location'] = get_config('system','site_location');
- $ret['site']['realm'] = get_directory_realm();
-
- }
- call_hooks('zot_finger',$ret);
- json_return_and_die($ret);
}