diff --git a/include/socgraph.php b/include/socgraph.php index cf78024dee..6a97e285cf 100644 --- a/include/socgraph.php +++ b/include/socgraph.php @@ -2024,4 +2024,25 @@ function gs_discover() { q("UPDATE `gserver` SET `last_poco_query` = '%s' WHERE `nurl` = '%s'", dbesc(datetime_convert()), dbesc($server["nurl"])); } } + +/** + * @brief Returns a list of all known servers + * @return array List of server urls + */ +function poco_serverlist() { + $r = q("SELECT `id`, `url`, `site_name` AS `displayName`, `network`, `platform`, `version` FROM `gserver` + WHERE `network` IN ('%s', '%s', '%s') AND `last_contact` > `last_failure` + ORDER BY `last_contact` + LIMIT 1000", + dbesc(NETWORK_DFRN), dbesc(NETWORK_DIASPORA), dbesc(NETWORK_OSTATUS)); + if (!dbm::is_result($r)) { + return false; + } + $list = array(); + foreach ($r AS $server) { + $server['id'] = (int)$server['id']; + $list[] = $server; + } + return $list; +} ?> diff --git a/mod/poco.php b/mod/poco.php index 4ce075301c..422bfe5b7c 100644 --- a/mod/poco.php +++ b/mod/poco.php @@ -27,6 +27,12 @@ function poco_init(App $a) { $justme = false; $global = false; + if($a->argc > 1 && $a->argv[1] === '@server') { + $ret = poco_serverlist(); + header('Content-type: application/json'); + echo json_encode($ret); + killme(); + } if($a->argc > 1 && $a->argv[1] === '@global') { $global = true; $update_limit = date("Y-m-d H:i:s", time() - 30 * 86400); @@ -314,11 +320,9 @@ function poco_init(App $a) { $ret['entry'][] = $entry; } - } - else + } else $ret['entry'][] = array(); - } - else + } else http_status_exit(500); logger("End of poco", LOGGER_DEBUG); @@ -332,8 +336,7 @@ function poco_init(App $a) { header('Content-type: application/json'); echo json_encode($ret); killme(); - } - else + } else http_status_exit(500);