Merge branch '1702-detect-server' of github.com:annando/friendica into 1702-detect-server
This commit is contained in:
commit
20e07fa0ed
7 changed files with 99 additions and 18 deletions
12
CHANGELOG
12
CHANGELOG
|
@ -40,6 +40,7 @@ Version 3.5.1
|
||||||
When creating new postings in the UI, focus is automatically put into the Title field [Hypolite]
|
When creating new postings in the UI, focus is automatically put into the Title field [Hypolite]
|
||||||
We are now shipping config files for "tx" (the Transifex client) and the "EditorConfig" addon for many common editors [fabrixxm, tobiasd]
|
We are now shipping config files for "tx" (the Transifex client) and the "EditorConfig" addon for many common editors [fabrixxm, tobiasd]
|
||||||
The TinyMCE richtext editor was removed [Hypolite]
|
The TinyMCE richtext editor was removed [Hypolite]
|
||||||
|
We defined a coding style, PSR-2 with some adjustments
|
||||||
Various bugfixes
|
Various bugfixes
|
||||||
|
|
||||||
Friendica Addons:
|
Friendica Addons:
|
||||||
|
@ -58,11 +59,12 @@ Version 3.5.1
|
||||||
Twitter-bridge now supports quotes and long posts when importing tweets [heluecht]
|
Twitter-bridge now supports quotes and long posts when importing tweets [heluecht]
|
||||||
|
|
||||||
Closed Issues
|
Closed Issues
|
||||||
1019, 1163, 1612, 1613, 2177, 2252, 2260, 2403, 2991, 2614, 2751,
|
1019, 1163, 1612, 1613, 2103, 2177, 2252, 2260, 2403, 2991, 2614,
|
||||||
2752, 2772, 2791, 2800, 2804, 2813, 2814, 2816, 2817, 2823, 2850,
|
2751, 2752, 2772, 2791, 2800, 2804, 2813, 2814, 2816, 2817, 2823,
|
||||||
2858, 2865, 2892, 2894, 2895, 2907, 2908, 2914, 2015, 2926, 2948,
|
2850, 2858, 2865, 2892, 2894, 2895, 2907, 2908, 2914, 2015, 2926,
|
||||||
2955, 2958, 2963, 2964, 2968, 2987, 2993, 3020, 3052, 3062, 3066,
|
2948, 2955, 2958, 2963, 2964, 2968, 2987, 2993, 3020, 3052, 3062,
|
||||||
3091, 3108, 3116, 3117, 3118, 3126, 3130, 3135, 3155, 3163
|
3066, 3091, 3108, 3113, 3116, 3117, 3118, 3126, 3130, 3135, 3155,
|
||||||
|
3163
|
||||||
|
|
||||||
Version 3.5 (2016-09-13)
|
Version 3.5 (2016-09-13)
|
||||||
Friendica Core:
|
Friendica Core:
|
||||||
|
|
|
@ -146,7 +146,9 @@ class ParseUrl {
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||||
curl_setopt($ch, CURLOPT_USERAGENT, $a->get_useragent());
|
curl_setopt($ch, CURLOPT_USERAGENT, $a->get_useragent());
|
||||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false));
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false));
|
||||||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, (($check_cert) ? 2 : false));
|
if ($check_cert) {
|
||||||
|
@curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
|
||||||
|
}
|
||||||
|
|
||||||
$header = curl_exec($ch);
|
$header = curl_exec($ch);
|
||||||
$curl_info = @curl_getinfo($ch);
|
$curl_info = @curl_getinfo($ch);
|
||||||
|
|
|
@ -242,7 +242,7 @@ function update_structure($verbose, $action, $tables=null, $definition=null) {
|
||||||
if (!isset($database[$name]["fields"][$fieldname])) {
|
if (!isset($database[$name]["fields"][$fieldname])) {
|
||||||
$sql2=db_add_table_field($fieldname, $parameters);
|
$sql2=db_add_table_field($fieldname, $parameters);
|
||||||
if ($sql3 == "") {
|
if ($sql3 == "") {
|
||||||
$sql3 = "ALTER TABLE `".$temp_name."` ".$sql2;
|
$sql3 = "ALTER" . $ignore . " TABLE `".$temp_name."` ".$sql2;
|
||||||
} else {
|
} else {
|
||||||
$sql3 .= ", ".$sql2;
|
$sql3 .= ", ".$sql2;
|
||||||
}
|
}
|
||||||
|
@ -253,7 +253,7 @@ function update_structure($verbose, $action, $tables=null, $definition=null) {
|
||||||
if ($current_field_definition != $new_field_definition) {
|
if ($current_field_definition != $new_field_definition) {
|
||||||
$sql2=db_modify_table_field($fieldname, $parameters);
|
$sql2=db_modify_table_field($fieldname, $parameters);
|
||||||
if ($sql3 == "") {
|
if ($sql3 == "") {
|
||||||
$sql3 = "ALTER TABLE `".$temp_name."` ".$sql2;
|
$sql3 = "ALTER" . $ignore . " TABLE `".$temp_name."` ".$sql2;
|
||||||
} else {
|
} else {
|
||||||
$sql3 .= ", ".$sql2;
|
$sql3 .= ", ".$sql2;
|
||||||
}
|
}
|
||||||
|
|
|
@ -118,7 +118,9 @@ function z_fetch_url($url,$binary = false, &$redirects = 0, $opts=array()) {
|
||||||
|
|
||||||
$check_cert = get_config('system','verifyssl');
|
$check_cert = get_config('system','verifyssl');
|
||||||
@curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false));
|
@curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false));
|
||||||
@curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, (($check_cert) ? 2 : false));
|
if ($check_cert) {
|
||||||
|
@curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
|
||||||
|
}
|
||||||
|
|
||||||
$prx = get_config('system','proxy');
|
$prx = get_config('system','proxy');
|
||||||
if(strlen($prx)) {
|
if(strlen($prx)) {
|
||||||
|
@ -265,7 +267,9 @@ function post_url($url,$params, $headers = null, &$redirects = 0, $timeout = 0)
|
||||||
|
|
||||||
$check_cert = get_config('system','verifyssl');
|
$check_cert = get_config('system','verifyssl');
|
||||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false));
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false));
|
||||||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, (($check_cert) ? 2 : false));
|
if ($check_cert) {
|
||||||
|
@curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
|
||||||
|
}
|
||||||
$prx = get_config('system','proxy');
|
$prx = get_config('system','proxy');
|
||||||
if(strlen($prx)) {
|
if(strlen($prx)) {
|
||||||
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
|
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
|
||||||
|
|
|
@ -11,7 +11,6 @@ if (!file_exists("boot.php") AND (sizeof($_SERVER["argv"]) != 0)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
use \Friendica\Core\Config;
|
use \Friendica\Core\Config;
|
||||||
use \Friendica\Core\PConfig;
|
|
||||||
|
|
||||||
require_once("boot.php");
|
require_once("boot.php");
|
||||||
|
|
||||||
|
@ -29,6 +28,8 @@ function poller_run($argv, $argc){
|
||||||
unset($db_host, $db_user, $db_pass, $db_data);
|
unset($db_host, $db_user, $db_pass, $db_data);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Config::load();
|
||||||
|
|
||||||
// Quit when in maintenance
|
// Quit when in maintenance
|
||||||
if (Config::get('system', 'maintenance', true)) {
|
if (Config::get('system', 'maintenance', true)) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -680,6 +680,43 @@ function poco_to_boolean($val) {
|
||||||
return ($val);
|
return ($val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function poco_detect_friendica_server($body) {
|
||||||
|
$server = false;
|
||||||
|
|
||||||
|
$doc = new \DOMDocument();
|
||||||
|
@$doc->loadHTML($body);
|
||||||
|
$xpath = new \DomXPath($doc);
|
||||||
|
|
||||||
|
$list = $xpath->query("//meta[@name]");
|
||||||
|
|
||||||
|
foreach ($list as $node) {
|
||||||
|
$attr = array();
|
||||||
|
if ($node->attributes->length) {
|
||||||
|
foreach ($node->attributes as $attribute) {
|
||||||
|
$attr[$attribute->name] = $attribute->value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($attr['name'] == 'generator') {
|
||||||
|
$version_part = explode(" ", $attr['content']);
|
||||||
|
if (count($version_part) == 2) {
|
||||||
|
if (in_array($version_part[0], array("Friendika", "Friendica"))) {
|
||||||
|
$server = array();
|
||||||
|
$server["platform"] = $version_part[0];
|
||||||
|
$server["version"] = $version_part[1];
|
||||||
|
$server["network"] = NETWORK_DFRN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$server) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$server["site_name"] = $xpath->evaluate($element."//head/title/text()", $context)->item(0)->nodeValue;
|
||||||
|
return $server;
|
||||||
|
}
|
||||||
|
|
||||||
function poco_check_server($server_url, $network = "", $force = false) {
|
function poco_check_server($server_url, $network = "", $force = false) {
|
||||||
|
|
||||||
// Unify the server address
|
// Unify the server address
|
||||||
|
@ -729,7 +766,9 @@ function poco_check_server($server_url, $network = "", $force = false) {
|
||||||
logger("Server ".$server_url." is outdated or unknown. Start discovery. Force: ".$force." Created: ".$servers[0]["created"]." Failure: ".$last_failure." Contact: ".$last_contact, LOGGER_DEBUG);
|
logger("Server ".$server_url." is outdated or unknown. Start discovery. Force: ".$force." Created: ".$servers[0]["created"]." Failure: ".$last_failure." Contact: ".$last_contact, LOGGER_DEBUG);
|
||||||
|
|
||||||
$failure = false;
|
$failure = false;
|
||||||
|
$possible_failure = false;
|
||||||
$orig_last_failure = $last_failure;
|
$orig_last_failure = $last_failure;
|
||||||
|
$orig_last_contact = $last_contact;
|
||||||
|
|
||||||
// Check if the page is accessible via SSL.
|
// Check if the page is accessible via SSL.
|
||||||
$server_url = str_replace("http://", "https://", $server_url);
|
$server_url = str_replace("http://", "https://", $server_url);
|
||||||
|
@ -750,6 +789,7 @@ function poco_check_server($server_url, $network = "", $force = false) {
|
||||||
$last_failure = datetime_convert();
|
$last_failure = datetime_convert();
|
||||||
$failure = true;
|
$failure = true;
|
||||||
}
|
}
|
||||||
|
$possible_failure = true;
|
||||||
} elseif ($network == NETWORK_DIASPORA)
|
} elseif ($network == NETWORK_DIASPORA)
|
||||||
$last_contact = datetime_convert();
|
$last_contact = datetime_convert();
|
||||||
|
|
||||||
|
@ -757,11 +797,12 @@ function poco_check_server($server_url, $network = "", $force = false) {
|
||||||
// Test for Diaspora
|
// Test for Diaspora
|
||||||
$serverret = z_fetch_url($server_url);
|
$serverret = z_fetch_url($server_url);
|
||||||
|
|
||||||
if (!$serverret["success"] OR ($serverret["body"] == ""))
|
if (!$serverret["success"] OR ($serverret["body"] == "")) {
|
||||||
|
$last_failure = datetime_convert();
|
||||||
$failure = true;
|
$failure = true;
|
||||||
else {
|
} else {
|
||||||
$lines = explode("\n",$serverret["header"]);
|
$lines = explode("\n",$serverret["header"]);
|
||||||
if(count($lines))
|
if(count($lines)) {
|
||||||
foreach($lines as $line) {
|
foreach($lines as $line) {
|
||||||
$line = trim($line);
|
$line = trim($line);
|
||||||
if(stristr($line,'X-Diaspora-Version:')) {
|
if(stristr($line,'X-Diaspora-Version:')) {
|
||||||
|
@ -771,6 +812,7 @@ function poco_check_server($server_url, $network = "", $force = false) {
|
||||||
$network = NETWORK_DIASPORA;
|
$network = NETWORK_DIASPORA;
|
||||||
$versionparts = explode("-", $version);
|
$versionparts = explode("-", $version);
|
||||||
$version = $versionparts[0];
|
$version = $versionparts[0];
|
||||||
|
$last_contact = datetime_convert();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(stristr($line,'Server: Mastodon')) {
|
if(stristr($line,'Server: Mastodon')) {
|
||||||
|
@ -778,9 +820,20 @@ function poco_check_server($server_url, $network = "", $force = false) {
|
||||||
$network = NETWORK_OSTATUS;
|
$network = NETWORK_OSTATUS;
|
||||||
// Mastodon doesn't reveal version numbers
|
// Mastodon doesn't reveal version numbers
|
||||||
$version = "";
|
$version = "";
|
||||||
|
$last_contact = datetime_convert();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$friendica_server = poco_detect_friendica_server($serverret["body"]);
|
||||||
|
if ($friendica_server) {
|
||||||
|
$platform = $friendica_server['platform'];
|
||||||
|
$network = $friendica_server['network'];
|
||||||
|
$version = $friendica_server['version'];
|
||||||
|
$site_name = $friendica_server['site_name'];
|
||||||
|
$last_contact = datetime_convert();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$failure) {
|
if (!$failure) {
|
||||||
|
@ -793,6 +846,7 @@ function poco_check_server($server_url, $network = "", $force = false) {
|
||||||
$platform = "StatusNet";
|
$platform = "StatusNet";
|
||||||
$version = trim($serverret["body"], '"');
|
$version = trim($serverret["body"], '"');
|
||||||
$network = NETWORK_OSTATUS;
|
$network = NETWORK_OSTATUS;
|
||||||
|
$last_contact = datetime_convert();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test for GNU Social
|
// Test for GNU Social
|
||||||
|
@ -802,12 +856,12 @@ function poco_check_server($server_url, $network = "", $force = false) {
|
||||||
$platform = "GNU Social";
|
$platform = "GNU Social";
|
||||||
$version = trim($serverret["body"], '"');
|
$version = trim($serverret["body"], '"');
|
||||||
$network = NETWORK_OSTATUS;
|
$network = NETWORK_OSTATUS;
|
||||||
|
$last_contact = datetime_convert();
|
||||||
}
|
}
|
||||||
|
|
||||||
$serverret = z_fetch_url($server_url."/api/statusnet/config.json");
|
$serverret = z_fetch_url($server_url."/api/statusnet/config.json");
|
||||||
if ($serverret["success"]) {
|
if ($serverret["success"]) {
|
||||||
$data = json_decode($serverret["body"]);
|
$data = json_decode($serverret["body"]);
|
||||||
|
|
||||||
if (isset($data->site->server)) {
|
if (isset($data->site->server)) {
|
||||||
$last_contact = datetime_convert();
|
$last_contact = datetime_convert();
|
||||||
|
|
||||||
|
@ -847,6 +901,7 @@ function poco_check_server($server_url, $network = "", $force = false) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Query statistics.json. Optional package for Diaspora, Friendica and Redmatrix
|
// Query statistics.json. Optional package for Diaspora, Friendica and Redmatrix
|
||||||
if (!$failure) {
|
if (!$failure) {
|
||||||
$serverret = z_fetch_url($server_url."/statistics.json");
|
$serverret = z_fetch_url($server_url."/statistics.json");
|
||||||
|
@ -922,6 +977,23 @@ function poco_check_server($server_url, $network = "", $force = false) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($possible_failure AND !$failure) {
|
||||||
|
$last_failure = datetime_convert();
|
||||||
|
$failure = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($failure) {
|
||||||
|
$last_contact = $orig_last_contact;
|
||||||
|
} else {
|
||||||
|
$last_failure = $orig_last_failure;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (($last_contact <= $last_failure) AND !$failure) {
|
||||||
|
logger("Server ".$server_url." seems to be alive, but last contact wasn't set - could be a bug", LOGGER_DEBUG);
|
||||||
|
} else if (($last_contact >= $last_failure) AND $failure) {
|
||||||
|
logger("Server ".$server_url." seems to be dead, but last failure wasn't set - could be a bug", LOGGER_DEBUG);
|
||||||
|
}
|
||||||
|
|
||||||
// Check again if the server exists
|
// Check again if the server exists
|
||||||
$servers = q("SELECT `nurl` FROM `gserver` WHERE `nurl` = '%s'", dbesc(normalise_link($server_url)));
|
$servers = q("SELECT `nurl` FROM `gserver` WHERE `nurl` = '%s'", dbesc(normalise_link($server_url)));
|
||||||
|
|
||||||
|
|
|
@ -270,8 +270,8 @@ function admin_page_federation(App $a) {
|
||||||
// off one % two of them are needed in the query
|
// off one % two of them are needed in the query
|
||||||
// Add more platforms if you like, when one returns 0 known nodes it is not
|
// Add more platforms if you like, when one returns 0 known nodes it is not
|
||||||
// displayed on the stats page.
|
// displayed on the stats page.
|
||||||
$platforms = array('Friendica', 'Diaspora', '%%red%%', 'Hubzilla', 'BlaBlaNet', 'GNU Social', 'StatusNet', 'Mastodon');
|
$platforms = array('Friendi%%a', 'Diaspora', '%%red%%', 'Hubzilla', 'BlaBlaNet', 'GNU Social', 'StatusNet', 'Mastodon');
|
||||||
$colors = array('Friendica' => '#ffc018', // orange from the logo
|
$colors = array('Friendi%%a' => '#ffc018', // orange from the logo
|
||||||
'Diaspora' => '#a1a1a1', // logo is black and white, makes a gray
|
'Diaspora' => '#a1a1a1', // logo is black and white, makes a gray
|
||||||
'%%red%%' => '#c50001', // fire red from the logo
|
'%%red%%' => '#c50001', // fire red from the logo
|
||||||
'Hubzilla' => '#43488a', // blue from the logo
|
'Hubzilla' => '#43488a', // blue from the logo
|
||||||
|
@ -333,7 +333,7 @@ function admin_page_federation(App $a) {
|
||||||
// early friendica versions have the format x.x.xxxx where xxxx is the
|
// early friendica versions have the format x.x.xxxx where xxxx is the
|
||||||
// DB version stamp; those should be operated out and versions be
|
// DB version stamp; those should be operated out and versions be
|
||||||
// conbined
|
// conbined
|
||||||
if($p=='Friendica') {
|
if($p=='Friendi%%a') {
|
||||||
$newV = array();
|
$newV = array();
|
||||||
$newVv = array();
|
$newVv = array();
|
||||||
foreach ($v as $vv) {
|
foreach ($v as $vv) {
|
||||||
|
|
Loading…
Reference in a new issue