mirror of
https://github.com/friendica/friendica
synced 2024-11-18 08:23:53 +00:00
Query other servers periodically for their known contacts
This commit is contained in:
parent
38d7b5e326
commit
cf3214c904
5 changed files with 183 additions and 25 deletions
71
include/discover_poco.php
Normal file
71
include/discover_poco.php
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once("boot.php");
|
||||||
|
require_once("include/socgraph.php");
|
||||||
|
|
||||||
|
|
||||||
|
function discover_poco_run(&$argv, &$argc){
|
||||||
|
global $a, $db;
|
||||||
|
|
||||||
|
if(is_null($a)) {
|
||||||
|
$a = new App;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(is_null($db)) {
|
||||||
|
@include(".htconfig.php");
|
||||||
|
require_once("include/dba.php");
|
||||||
|
$db = new dba($db_host, $db_user, $db_pass, $db_data);
|
||||||
|
unset($db_host, $db_user, $db_pass, $db_data);
|
||||||
|
};
|
||||||
|
|
||||||
|
require_once('include/session.php');
|
||||||
|
require_once('include/datetime.php');
|
||||||
|
require_once('include/pidfile.php');
|
||||||
|
|
||||||
|
load_config('config');
|
||||||
|
load_config('system');
|
||||||
|
|
||||||
|
$maxsysload = intval(get_config('system','maxloadavg'));
|
||||||
|
if($maxsysload < 1)
|
||||||
|
$maxsysload = 50;
|
||||||
|
if(function_exists('sys_getloadavg')) {
|
||||||
|
$load = sys_getloadavg();
|
||||||
|
if(intval($load[0]) > $maxsysload) {
|
||||||
|
logger('system: load ' . $load[0] . ' too high. discover_poco deferred to next scheduled run.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$lockpath = get_lockpath();
|
||||||
|
if ($lockpath != '') {
|
||||||
|
$pidfile = new pidfile($lockpath, 'discover_poco');
|
||||||
|
if($pidfile->is_already_running()) {
|
||||||
|
logger("discover_poco: Already running");
|
||||||
|
if ($pidfile->running_time() > 19*60) {
|
||||||
|
$pidfile->kill();
|
||||||
|
logger("discover_poco: killed stale process");
|
||||||
|
// Calling a new instance
|
||||||
|
proc_run('php','include/discover_poco.php');
|
||||||
|
}
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$a->set_baseurl(get_config('system','url'));
|
||||||
|
|
||||||
|
load_hooks();
|
||||||
|
|
||||||
|
logger('start');
|
||||||
|
|
||||||
|
if (get_config('system','poco_discovery'))
|
||||||
|
poco_discover();
|
||||||
|
|
||||||
|
logger('end');
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (array_search(__file__,get_included_files())===0){
|
||||||
|
discover_poco_run($_SERVER["argv"],$_SERVER["argc"]);
|
||||||
|
killme();
|
||||||
|
}
|
|
@ -82,6 +82,10 @@ function poller_run(&$argv, &$argc){
|
||||||
|
|
||||||
proc_run('php',"include/dsprphotoq.php");
|
proc_run('php',"include/dsprphotoq.php");
|
||||||
|
|
||||||
|
// run the process to discover global contacts in the background
|
||||||
|
|
||||||
|
proc_run('php',"include/discover_poco.php");
|
||||||
|
|
||||||
// expire any expired accounts
|
// expire any expired accounts
|
||||||
|
|
||||||
q("UPDATE user SET `account_expired` = 1 where `account_expired` = 0
|
q("UPDATE user SET `account_expired` = 1 where `account_expired` = 0
|
||||||
|
|
|
@ -2,12 +2,7 @@
|
||||||
|
|
||||||
require_once('include/datetime.php');
|
require_once('include/datetime.php');
|
||||||
require_once("include/Scrape.php");
|
require_once("include/Scrape.php");
|
||||||
|
require_once("include/html2bbcode.php");
|
||||||
/*
|
|
||||||
To-Do:
|
|
||||||
- noscrape for updating contact fields and "last updated"
|
|
||||||
- use /poco/@global for discovering contacts from other servers
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* poco_load
|
* poco_load
|
||||||
|
@ -28,8 +23,6 @@ require_once("include/Scrape.php");
|
||||||
|
|
||||||
function poco_load($cid,$uid = 0,$zcid = 0,$url = null) {
|
function poco_load($cid,$uid = 0,$zcid = 0,$url = null) {
|
||||||
|
|
||||||
require_once("include/html2bbcode.php");
|
|
||||||
|
|
||||||
$a = get_app();
|
$a = get_app();
|
||||||
|
|
||||||
if($cid) {
|
if($cid) {
|
||||||
|
@ -246,7 +239,7 @@ function poco_check($profile_url, $name, $network, $profile_photo, $about, $loca
|
||||||
logger("profile-check generation: ".$generation." Network: ".$network." URL: ".$profile_url." name: ".$name." avatar: ".$profile_photo, LOGGER_DEBUG);
|
logger("profile-check generation: ".$generation." Network: ".$network." URL: ".$profile_url." name: ".$name." avatar: ".$profile_photo, LOGGER_DEBUG);
|
||||||
|
|
||||||
// Only fetch last update manually if it wasn't provided and enabled in the system
|
// Only fetch last update manually if it wasn't provided and enabled in the system
|
||||||
if (get_config('system','ld_discover_activity') AND ($orig_updated == "0000-00-00 00:00:00") AND poco_do_update($updated, $last_contact, $last_failure)) {
|
if (get_config('system','poco_completion') AND ($orig_updated == "0000-00-00 00:00:00") AND poco_do_update($updated, $last_contact, $last_failure)) {
|
||||||
$last_updated = poco_last_updated($profile_url);
|
$last_updated = poco_last_updated($profile_url);
|
||||||
if ($last_updated) {
|
if ($last_updated) {
|
||||||
$updated = $last_updated;
|
$updated = $last_updated;
|
||||||
|
@ -266,10 +259,10 @@ function poco_check($profile_url, $name, $network, $profile_photo, $about, $loca
|
||||||
poco_check_server($server_url, $network);
|
poco_check_server($server_url, $network);
|
||||||
|
|
||||||
// Test - remove before flight
|
// Test - remove before flight
|
||||||
if ($last_contact > $last_failure)
|
//if ($last_contact > $last_failure)
|
||||||
q("UPDATE `gserver` SET `last_contact` = '%s' WHERE `nurl` = '%s'", dbesc($last_contact), dbesc(normalise_link($server_url)));
|
// q("UPDATE `gserver` SET `last_contact` = '%s' WHERE `nurl` = '%s'", dbesc($last_contact), dbesc(normalise_link($server_url)));
|
||||||
else
|
//else
|
||||||
q("UPDATE `gserver` SET `last_failure` = '%s' WHERE `nurl` = '%s'", dbesc($last_failure), dbesc(normalise_link($server_url)));
|
// q("UPDATE `gserver` SET `last_failure` = '%s' WHERE `nurl` = '%s'", dbesc($last_failure), dbesc(normalise_link($server_url)));
|
||||||
|
|
||||||
if(count($x)) {
|
if(count($x)) {
|
||||||
$gcid = $x[0]['id'];
|
$gcid = $x[0]['id'];
|
||||||
|
@ -448,12 +441,12 @@ function poco_do_update($updated, $last_contact, $last_failure) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function poco_to_boolean($val) {
|
function poco_to_boolean($val) {
|
||||||
if (($val == "true") OR ($val == 1))
|
if (($val == "true") OR ($val == 1))
|
||||||
return(true);
|
return(true);
|
||||||
if (($val == "false") OR ($val == 0))
|
if (($val == "false") OR ($val == 0))
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
return ($val);
|
return ($val);
|
||||||
}
|
}
|
||||||
|
|
||||||
function poco_check_server($server_url, $network = "") {
|
function poco_check_server($server_url, $network = "") {
|
||||||
|
@ -976,3 +969,89 @@ function update_suggestions() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function poco_discover() {
|
||||||
|
|
||||||
|
$last_update = date("c", time() - (60 * 60 * 24));
|
||||||
|
|
||||||
|
$r = q("SELECT `poco`, `nurl` FROM `gserver` WHERE `last_contact` > `last_failure` AND `poco` != '' AND `last_poco_query` < '%s' ORDER BY RAND()", dbesc($last_update));
|
||||||
|
if ($r)
|
||||||
|
foreach ($r AS $server) {
|
||||||
|
$url = $server["poco"]."/@global?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,generation";
|
||||||
|
|
||||||
|
$retdata = z_fetch_url($url);
|
||||||
|
if ($retdata["success"]) {
|
||||||
|
poco_discover_server(json_decode($retdata["body"]));
|
||||||
|
q("UPDATE `gserver` SET `last_poco_query` = '%s' WHERE `nurl` = '%s'", dbesc(datetime_convert()), dbesc($server["nurl"]));
|
||||||
|
break;
|
||||||
|
} else
|
||||||
|
q("UPDATE `gserver` SET `last_poco_query` = '%s' WHERE `nurl` = '%s'", dbesc(datetime_convert()), dbesc($server["nurl"]));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function poco_discover_server($data) {
|
||||||
|
|
||||||
|
foreach ($data->entry AS $entry) {
|
||||||
|
$profile_url = '';
|
||||||
|
$profile_photo = '';
|
||||||
|
$connect_url = '';
|
||||||
|
$name = '';
|
||||||
|
$network = '';
|
||||||
|
$updated = '0000-00-00 00:00:00';
|
||||||
|
$location = '';
|
||||||
|
$about = '';
|
||||||
|
$keywords = '';
|
||||||
|
$gender = '';
|
||||||
|
$generation = 0;
|
||||||
|
|
||||||
|
$name = $entry->displayName;
|
||||||
|
|
||||||
|
if(isset($entry->urls)) {
|
||||||
|
foreach($entry->urls as $url) {
|
||||||
|
if($url->type == 'profile') {
|
||||||
|
$profile_url = $url->value;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if($url->type == 'webfinger') {
|
||||||
|
$connect_url = str_replace('acct:' , '', $url->value);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(isset($entry->photos)) {
|
||||||
|
foreach($entry->photos as $photo) {
|
||||||
|
if($photo->type == 'profile') {
|
||||||
|
$profile_photo = $photo->value;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isset($entry->updated))
|
||||||
|
$updated = date("Y-m-d H:i:s", strtotime($entry->updated));
|
||||||
|
|
||||||
|
if(isset($entry->network))
|
||||||
|
$network = $entry->network;
|
||||||
|
|
||||||
|
if(isset($entry->currentLocation))
|
||||||
|
$location = $entry->currentLocation;
|
||||||
|
|
||||||
|
if(isset($entry->aboutMe))
|
||||||
|
$about = html2bbcode($entry->aboutMe);
|
||||||
|
|
||||||
|
if(isset($entry->gender))
|
||||||
|
$gender = $entry->gender;
|
||||||
|
|
||||||
|
if(isset($entry->generation) AND ($entry->generation > 0))
|
||||||
|
$generation = ++$entry->generation;
|
||||||
|
|
||||||
|
if(isset($entry->tags))
|
||||||
|
foreach($entry->tags as $tag)
|
||||||
|
$keywords = implode(", ", $tag);
|
||||||
|
|
||||||
|
if ($generation > 0)
|
||||||
|
poco_check($profile_url, $name, $network, $profile_photo, $about, $location, $gender, $keywords, $connect_url, $updated, $generation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
|
@ -358,7 +358,8 @@ function admin_page_site_post(&$a){
|
||||||
$poll_interval = ((x($_POST,'poll_interval')) ? intval(trim($_POST['poll_interval'])) : 0);
|
$poll_interval = ((x($_POST,'poll_interval')) ? intval(trim($_POST['poll_interval'])) : 0);
|
||||||
$maxloadavg = ((x($_POST,'maxloadavg')) ? intval(trim($_POST['maxloadavg'])) : 50);
|
$maxloadavg = ((x($_POST,'maxloadavg')) ? intval(trim($_POST['maxloadavg'])) : 50);
|
||||||
$maxloadavg_frontend = ((x($_POST,'maxloadavg_frontend')) ? intval(trim($_POST['maxloadavg_frontend'])) : 50);
|
$maxloadavg_frontend = ((x($_POST,'maxloadavg_frontend')) ? intval(trim($_POST['maxloadavg_frontend'])) : 50);
|
||||||
$ld_discover_activity = ((x($_POST,'ld_discover_activity')) ? intval(trim($_POST['ld_discover_activity'])) : false);
|
$poco_completion = ((x($_POST,'poco_completion')) ? intval(trim($_POST['poco_completion'])) : false);
|
||||||
|
$poco_discovery = ((x($_POST,'poco_discovery')) ? intval(trim($_POST['poco_discovery'])) : false);
|
||||||
$dfrn_only = ((x($_POST,'dfrn_only')) ? True : False);
|
$dfrn_only = ((x($_POST,'dfrn_only')) ? True : False);
|
||||||
$ostatus_disabled = !((x($_POST,'ostatus_disabled')) ? True : False);
|
$ostatus_disabled = !((x($_POST,'ostatus_disabled')) ? True : False);
|
||||||
$ostatus_poll_interval = ((x($_POST,'ostatus_poll_interval')) ? intval(trim($_POST['ostatus_poll_interval'])) : 0);
|
$ostatus_poll_interval = ((x($_POST,'ostatus_poll_interval')) ? intval(trim($_POST['ostatus_poll_interval'])) : 0);
|
||||||
|
@ -428,7 +429,8 @@ function admin_page_site_post(&$a){
|
||||||
set_config('system','poll_interval',$poll_interval);
|
set_config('system','poll_interval',$poll_interval);
|
||||||
set_config('system','maxloadavg',$maxloadavg);
|
set_config('system','maxloadavg',$maxloadavg);
|
||||||
set_config('system','maxloadavg_frontend',$maxloadavg_frontend);
|
set_config('system','maxloadavg_frontend',$maxloadavg_frontend);
|
||||||
set_config('system','ld_discover_activity',$ld_discover_activity);
|
set_config('system','poco_completion',$poco_completion);
|
||||||
|
set_config('system','poco_discovery',$poco_discovery);
|
||||||
set_config('config','sitename',$sitename);
|
set_config('config','sitename',$sitename);
|
||||||
set_config('config','hostname',$hostname);
|
set_config('config','hostname',$hostname);
|
||||||
set_config('config','sender_email', $sender_email);
|
set_config('config','sender_email', $sender_email);
|
||||||
|
@ -436,7 +438,7 @@ function admin_page_site_post(&$a){
|
||||||
set_config('system','suppress_tags',$suppress_tags);
|
set_config('system','suppress_tags',$suppress_tags);
|
||||||
set_config('system','shortcut_icon',$shortcut_icon);
|
set_config('system','shortcut_icon',$shortcut_icon);
|
||||||
set_config('system','touch_icon',$touch_icon);
|
set_config('system','touch_icon',$touch_icon);
|
||||||
|
|
||||||
if ($banner==""){
|
if ($banner==""){
|
||||||
// don't know why, but del_config doesn't work...
|
// don't know why, but del_config doesn't work...
|
||||||
q("DELETE FROM `config` WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1",
|
q("DELETE FROM `config` WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1",
|
||||||
|
@ -632,7 +634,7 @@ function admin_page_site(&$a) {
|
||||||
'$upload' => t('File upload'),
|
'$upload' => t('File upload'),
|
||||||
'$corporate' => t('Policies'),
|
'$corporate' => t('Policies'),
|
||||||
'$advanced' => t('Advanced'),
|
'$advanced' => t('Advanced'),
|
||||||
'$local_directory' => t('Local Directory (Portable Contacts)'),
|
'$portable_contacts' => t('Portable Contact Directory'),
|
||||||
'$performance' => t('Performance'),
|
'$performance' => t('Performance'),
|
||||||
'$relocate'=> t('Relocate - WARNING: advanced function. Could make this server unreachable.'),
|
'$relocate'=> t('Relocate - WARNING: advanced function. Could make this server unreachable.'),
|
||||||
'$baseurl' => $a->get_baseurl(true),
|
'$baseurl' => $a->get_baseurl(true),
|
||||||
|
@ -690,7 +692,8 @@ function admin_page_site(&$a) {
|
||||||
'$maxloadavg' => array('maxloadavg', t("Maximum Load Average"), ((intval(get_config('system','maxloadavg')) > 0)?get_config('system','maxloadavg'):50), t("Maximum system load before delivery and poll processes are deferred - default 50.")),
|
'$maxloadavg' => array('maxloadavg', t("Maximum Load Average"), ((intval(get_config('system','maxloadavg')) > 0)?get_config('system','maxloadavg'):50), t("Maximum system load before delivery and poll processes are deferred - default 50.")),
|
||||||
'$maxloadavg_frontend' => array('maxloadavg_frontend', t("Maximum Load Average (Frontend)"), ((intval(get_config('system','maxloadavg_frontend')) > 0)?get_config('system','maxloadavg_frontend'):50), t("Maximum system load before the frontend quits service - default 50.")),
|
'$maxloadavg_frontend' => array('maxloadavg_frontend', t("Maximum Load Average (Frontend)"), ((intval(get_config('system','maxloadavg_frontend')) > 0)?get_config('system','maxloadavg_frontend'):50), t("Maximum system load before the frontend quits service - default 50.")),
|
||||||
|
|
||||||
'$ld_discover_activity' => array('ld_discover_activity', t("Discover last activity"), get_config('system','ld_discover_activity'), t("Update the last activity when this isn't provided via the 'portable contacts' functionality. (Useful for poco exchange with Redmatrix and friendica servers before 3.3)")),
|
'$poco_completion' => array('poco_completion', t("Completion of incoming contacts"), get_config('system','poco_completion'), t("Complete data of incomplete incoming contacts that are provided by the 'portable contacts' functionality. (Useful for poco exchange with Redmatrix and friendica servers before 3.3)")),
|
||||||
|
'$poco_discovery' => array('poco_discovery', t("Discover contacts from other servers"), get_config('system','poco_discovery'), t("Periodically query other friendica servers for their recent contacts.")),
|
||||||
|
|
||||||
'$use_fulltext_engine' => array('use_fulltext_engine', t("Use MySQL full text engine"), get_config('system','use_fulltext_engine'), t("Activates the full text engine. Speeds up search - but can only search for four and more characters.")),
|
'$use_fulltext_engine' => array('use_fulltext_engine', t("Use MySQL full text engine"), get_config('system','use_fulltext_engine'), t("Activates the full text engine. Speeds up search - but can only search for four and more characters.")),
|
||||||
'$suppress_language' => array('suppress_language', t("Suppress Language"), get_config('system','suppress_language'), t("Suppress language information in meta information about a posting.")),
|
'$suppress_language' => array('suppress_language', t("Suppress Language"), get_config('system','suppress_language'), t("Suppress language information in meta information about a posting.")),
|
||||||
|
|
|
@ -115,8 +115,9 @@
|
||||||
{{include file="field_checkbox.tpl" field=$suppress_tags}}
|
{{include file="field_checkbox.tpl" field=$suppress_tags}}
|
||||||
<div class="submit"><input type="submit" name="page_site" value="{{$submit|escape:'html'}}" /></div>
|
<div class="submit"><input type="submit" name="page_site" value="{{$submit|escape:'html'}}" /></div>
|
||||||
|
|
||||||
<h3>{{$local_directory}}</h3>
|
<h3>{{$portable_contacts}}</h3>
|
||||||
{{include file="field_checkbox.tpl" field=$ld_discover_activity}}
|
{{include file="field_checkbox.tpl" field=$poco_completion}}
|
||||||
|
{{include file="field_checkbox.tpl" field=$poco_discovery}}
|
||||||
<div class="submit"><input type="submit" name="page_site" value="{{$submit|escape:'html'}}" /></div>
|
<div class="submit"><input type="submit" name="page_site" value="{{$submit|escape:'html'}}" /></div>
|
||||||
|
|
||||||
<h3>{{$performance}}</h3>
|
<h3>{{$performance}}</h3>
|
||||||
|
|
Loading…
Reference in a new issue