Merge remote-tracking branch 'upstream/develop' into server-detection
This commit is contained in:
commit
46fdd9893c
11 changed files with 49 additions and 47 deletions
|
@ -1,8 +1,3 @@
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- PHP_MAJOR_VERSION: 7.4
|
|
||||||
PHP_VERSION: 7.4.18
|
|
||||||
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- phpunit
|
- phpunit
|
||||||
- code_standards_check
|
- code_standards_check
|
||||||
|
@ -33,7 +28,7 @@ pipeline:
|
||||||
settings:
|
settings:
|
||||||
backend: "filesystem"
|
backend: "filesystem"
|
||||||
restore: true
|
restore: true
|
||||||
cache_key: "{{ .Repo.Name }}_php${PHP_MAJOR_VERSION}_{{ arch }}_{{ os }}"
|
cache_key: "{{ .Repo.Name }}_php7.4_{{ arch }}_{{ os }}"
|
||||||
archive_format: "gzip"
|
archive_format: "gzip"
|
||||||
mount:
|
mount:
|
||||||
- '.composer'
|
- '.composer'
|
||||||
|
@ -44,7 +39,7 @@ pipeline:
|
||||||
branch: [ develop, '*-rc' ]
|
branch: [ develop, '*-rc' ]
|
||||||
event: push
|
event: push
|
||||||
composer_install:
|
composer_install:
|
||||||
image: friendicaci/php${PHP_MAJOR_VERSION}:php${PHP_VERSION}
|
image: friendicaci/php7.4:php7.4.18
|
||||||
commands:
|
commands:
|
||||||
- export COMPOSER_HOME=.composer
|
- export COMPOSER_HOME=.composer
|
||||||
- composer validate
|
- composer validate
|
||||||
|
|
|
@ -1,8 +1,3 @@
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- PHP_MAJOR_VERSION: 7.4
|
|
||||||
PHP_VERSION: 7.4.18
|
|
||||||
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- phpunit
|
- phpunit
|
||||||
- code_standards_check
|
- code_standards_check
|
||||||
|
@ -31,7 +26,7 @@ pipeline:
|
||||||
settings:
|
settings:
|
||||||
backend: "filesystem"
|
backend: "filesystem"
|
||||||
restore: true
|
restore: true
|
||||||
cache_key: "{{ .Repo.Name }}_php${PHP_MAJOR_VERSION}_{{ arch }}_{{ os }}"
|
cache_key: "{{ .Repo.Name }}_php7.4_{{ arch }}_{{ os }}"
|
||||||
archive_format: "gzip"
|
archive_format: "gzip"
|
||||||
mount:
|
mount:
|
||||||
- '.composer'
|
- '.composer'
|
||||||
|
@ -42,7 +37,7 @@ pipeline:
|
||||||
branch: stable
|
branch: stable
|
||||||
event: tag
|
event: tag
|
||||||
composer_install:
|
composer_install:
|
||||||
image: friendicaci/php${PHP_MAJOR_VERSION}:php${PHP_VERSION}
|
image: friendicaci/php7.4:php7.4.18
|
||||||
commands:
|
commands:
|
||||||
- export COMPOSER_HOME=.composer
|
- export COMPOSER_HOME=.composer
|
||||||
- composer validate
|
- composer validate
|
||||||
|
|
|
@ -118,6 +118,9 @@ HELP;
|
||||||
foreach ($blocklist as $domain) {
|
foreach ($blocklist as $domain) {
|
||||||
fputcsv($fp, $domain);
|
fputcsv($fp, $domain);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Success
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Imports a list of domains and a reason for the block from a CSV
|
* Imports a list of domains and a reason for the block from a CSV
|
||||||
|
@ -130,6 +133,7 @@ HELP;
|
||||||
$filename = $this->getArgument(1);
|
$filename = $this->getArgument(1);
|
||||||
$currBlockList = $config->get('system', 'blocklist', []);
|
$currBlockList = $config->get('system', 'blocklist', []);
|
||||||
$newBlockList = [];
|
$newBlockList = [];
|
||||||
|
|
||||||
if (($fp = fopen($filename, 'r')) !== false) {
|
if (($fp = fopen($filename, 'r')) !== false) {
|
||||||
while (($data = fgetcsv($fp, 1000, ',')) !== false) {
|
while (($data = fgetcsv($fp, 1000, ',')) !== false) {
|
||||||
$domain = $data[0];
|
$domain = $data[0];
|
||||||
|
@ -146,11 +150,13 @@ HELP;
|
||||||
$newBlockList[] = $data;
|
$newBlockList[] = $data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($currBlockList as $blocked) {
|
foreach ($currBlockList as $blocked) {
|
||||||
if (!in_array($blocked, $newBlockList)) {
|
if (!in_array($blocked, $newBlockList)) {
|
||||||
$newBlockList[] = $blocked;
|
$newBlockList[] = $blocked;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($config->set('system', 'blocklist', $newBlockList)) {
|
if ($config->set('system', 'blocklist', $newBlockList)) {
|
||||||
$this->out(sprintf("Entries from %s that were not blocked before are now blocked", $filename));
|
$this->out(sprintf("Entries from %s that were not blocked before are now blocked", $filename));
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -158,7 +164,6 @@ HELP;
|
||||||
$this->out(sprintf("Couldn't save '%s' as blocked server", $domain));
|
$this->out(sprintf("Couldn't save '%s' as blocked server", $domain));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
throw new Exception(sprintf('The file "%s" could not be opened for importing', $filename));
|
throw new Exception(sprintf('The file "%s" could not be opened for importing', $filename));
|
||||||
}
|
}
|
||||||
|
@ -178,6 +183,9 @@ HELP;
|
||||||
$table->addRow($domain);
|
$table->addRow($domain);
|
||||||
}
|
}
|
||||||
$this->out($table->getTable());
|
$this->out($table->getTable());
|
||||||
|
|
||||||
|
// Success
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1169,11 +1169,11 @@ class Contact
|
||||||
* @throws HTTPException\InternalServerErrorException
|
* @throws HTTPException\InternalServerErrorException
|
||||||
* @throws \ImagickException
|
* @throws \ImagickException
|
||||||
*/
|
*/
|
||||||
public static function getIdForURL(string $url, int $uid = 0, $update = null, array $default = []): int
|
public static function getIdForURL(string $url = null, int $uid = 0, $update = null, array $default = []): int
|
||||||
{
|
{
|
||||||
$contact_id = 0;
|
$contact_id = 0;
|
||||||
|
|
||||||
if ($url == '') {
|
if (empty($url)) {
|
||||||
Logger::notice('Empty url, quitting', ['url' => $url, 'user' => $uid, 'default' => $default]);
|
Logger::notice('Empty url, quitting', ['url' => $url, 'user' => $uid, 'default' => $default]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -900,7 +900,7 @@ class Processor
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store send a follow request for every reshare - but only when the item had been stored
|
// Store send a follow request for every reshare - but only when the item had been stored
|
||||||
if ($stored && ($item['private'] != Item::PRIVATE) && ($item['gravity'] == GRAVITY_PARENT) && ($item['author-link'] != $item['owner-link'])) {
|
if ($stored && ($item['private'] != Item::PRIVATE) && ($item['gravity'] == GRAVITY_PARENT) && !empty($item['author-link']) && ($item['author-link'] != $item['owner-link'])) {
|
||||||
$author = APContact::getByURL($item['owner-link'], false);
|
$author = APContact::getByURL($item['owner-link'], false);
|
||||||
// We send automatic follow requests for reshared messages. (We don't need though for forum posts)
|
// We send automatic follow requests for reshared messages. (We don't need though for forum posts)
|
||||||
if ($author['type'] != 'Group') {
|
if ($author['type'] != 'Group') {
|
||||||
|
|
|
@ -48,10 +48,10 @@ use Friendica\Network\Probe;
|
||||||
use Friendica\Util\Crypto;
|
use Friendica\Util\Crypto;
|
||||||
use Friendica\Util\DateTimeFormat;
|
use Friendica\Util\DateTimeFormat;
|
||||||
use Friendica\Util\Images;
|
use Friendica\Util\Images;
|
||||||
use Friendica\Util\Network;
|
|
||||||
use Friendica\Util\Proxy;
|
use Friendica\Util\Proxy;
|
||||||
use Friendica\Util\Strings;
|
use Friendica\Util\Strings;
|
||||||
use Friendica\Util\XML;
|
use Friendica\Util\XML;
|
||||||
|
use GuzzleHttp\Psr7\Uri;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class contain functions to create and send DFRN XML files
|
* This class contain functions to create and send DFRN XML files
|
||||||
|
@ -1013,7 +1013,7 @@ class DFRN
|
||||||
$path_parts = explode('/', $parts['path']);
|
$path_parts = explode('/', $parts['path']);
|
||||||
array_pop($path_parts);
|
array_pop($path_parts);
|
||||||
$parts['path'] = implode('/', $path_parts);
|
$parts['path'] = implode('/', $path_parts);
|
||||||
$contact['batch'] = Network::unparseURL($parts);
|
$contact['batch'] = Uri::fromParts($parts);
|
||||||
}
|
}
|
||||||
|
|
||||||
$dest_url = ($public_batch ? $contact['batch'] : $contact['notify']);
|
$dest_url = ($public_batch ? $contact['batch'] : $contact['notify']);
|
||||||
|
|
|
@ -50,6 +50,7 @@ use Friendica\Util\Network;
|
||||||
use Friendica\Util\Strings;
|
use Friendica\Util\Strings;
|
||||||
use Friendica\Util\XML;
|
use Friendica\Util\XML;
|
||||||
use Friendica\Worker\Delivery;
|
use Friendica\Worker\Delivery;
|
||||||
|
use GuzzleHttp\Psr7\Uri;
|
||||||
use SimpleXMLElement;
|
use SimpleXMLElement;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -755,14 +756,14 @@ class Diaspora
|
||||||
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
||||||
* @throws \ImagickException
|
* @throws \ImagickException
|
||||||
*/
|
*/
|
||||||
private static function key(string $handle): string
|
private static function key(string $handle = null): string
|
||||||
{
|
{
|
||||||
$handle = strval($handle);
|
$handle = strval($handle);
|
||||||
|
|
||||||
Logger::notice("Fetching diaspora key for: " . $handle);
|
Logger::notice("Fetching diaspora key for: " . $handle);
|
||||||
|
|
||||||
$fcontact = FContact::getByURL($handle);
|
$fcontact = FContact::getByURL($handle);
|
||||||
if ($fcontact) {
|
if (!empty($fcontact['pubkey'])) {
|
||||||
return $fcontact['pubkey'];
|
return $fcontact['pubkey'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1417,7 +1418,7 @@ class Diaspora
|
||||||
|
|
||||||
$parts = parse_url($person['url']);
|
$parts = parse_url($person['url']);
|
||||||
unset($parts['path']);
|
unset($parts['path']);
|
||||||
$host_url = Network::unparseURL($parts);
|
$host_url = Uri::fromParts($parts);
|
||||||
|
|
||||||
return $host_url . '/objects/' . $guid;
|
return $host_url . '/objects/' . $guid;
|
||||||
}
|
}
|
||||||
|
@ -4006,12 +4007,12 @@ class Diaspora
|
||||||
/**
|
/**
|
||||||
* Sends profile data
|
* Sends profile data
|
||||||
*
|
*
|
||||||
* @param int $uid The user id
|
* @param int $uid The user id
|
||||||
* @param bool $recips optional, default false
|
* @param array $recips optional, default empty array
|
||||||
* @return void
|
* @return void
|
||||||
* @throws \Exception
|
* @throws \Exception
|
||||||
*/
|
*/
|
||||||
public static function sendProfile(int $uid, bool $recips = false)
|
public static function sendProfile(int $uid, array $recips = [])
|
||||||
{
|
{
|
||||||
if (!$uid) {
|
if (!$uid) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -115,13 +115,13 @@ class Email
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Connection|resource $mbox mailbox
|
* @param Connection|resource $mbox mailbox
|
||||||
* @param integer $uid user id
|
* @param string $sequence
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public static function messageMeta($mbox, int $uid)
|
public static function messageMeta($mbox, string $sequence)
|
||||||
{
|
{
|
||||||
$ret = (($mbox && $uid) ? @imap_fetch_overview($mbox, $uid, FT_UID) : [[]]); // POSSIBLE CLEANUP --> array(array()) is probably redundant now
|
$ret = (($mbox && $sequence) ? @imap_fetch_overview($mbox, $sequence, FT_UID) : [[]]); // POSSIBLE CLEANUP --> array(array()) is probably redundant now
|
||||||
return (count($ret)) ? $ret : [];
|
return (count($ret)) ? $ret : [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -296,6 +296,7 @@ class Email
|
||||||
}
|
}
|
||||||
return $x;
|
return $x;
|
||||||
}
|
}
|
||||||
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -569,9 +570,9 @@ class Email
|
||||||
* Removes signature from message
|
* Removes signature from message
|
||||||
*
|
*
|
||||||
* @param string $message Unfiltered message
|
* @param string $message Unfiltered message
|
||||||
* @return string Message with no signature
|
* @return array Message array with no signature (elements "body" and "sig")
|
||||||
*/
|
*/
|
||||||
private static function removeSig(string $message): string
|
private static function removeSig(string $message): array
|
||||||
{
|
{
|
||||||
$sigpos = strrpos($message, "\n-- \n");
|
$sigpos = strrpos($message, "\n-- \n");
|
||||||
$quotepos = strrpos($message, "[/quote]");
|
$quotepos = strrpos($message, "[/quote]");
|
||||||
|
@ -662,7 +663,7 @@ class Email
|
||||||
return implode("\n", $lines);
|
return implode("\n", $lines);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function convertQuote(strng $body, string $reply): string
|
private static function convertQuote(string $body, string $reply): string
|
||||||
{
|
{
|
||||||
// Convert Quotes
|
// Convert Quotes
|
||||||
$arrbody = explode("\n", trim($body));
|
$arrbody = explode("\n", trim($body));
|
||||||
|
|
|
@ -1168,7 +1168,7 @@ class OStatus
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Logger::warning('Unsupported rel=' . $attribute['rel'] . ', href=' . $attribute['href'] . ', object-type=' . $attribute['object-type']);
|
Logger::warning('Unsupported rel=' . $attribute['rel'] . ', href=' . $attribute['href'] . ', object-type=' . $item['object-type']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,9 +42,9 @@ class XML
|
||||||
* @param bool $remove_header Should the XML header be removed or not?
|
* @param bool $remove_header Should the XML header be removed or not?
|
||||||
* @param array $namespaces List of namespaces
|
* @param array $namespaces List of namespaces
|
||||||
* @param bool $root interally used parameter. Mustn't be used from outside.
|
* @param bool $root interally used parameter. Mustn't be used from outside.
|
||||||
* @return void
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function fromArray(array $array, &$xml, bool $remove_header = false, array $namespaces = [], bool $root = true)
|
public static function fromArray(array $array, &$xml, bool $remove_header = false, array $namespaces = [], bool $root = true): string
|
||||||
{
|
{
|
||||||
if ($root) {
|
if ($root) {
|
||||||
foreach ($array as $key => $value) {
|
foreach ($array as $key => $value) {
|
||||||
|
@ -130,19 +130,20 @@ class XML
|
||||||
self::fromArray($value, $element, $remove_header, $namespaces, false);
|
self::fromArray($value, $element, $remove_header, $namespaces, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copies an XML object
|
* Copies an XML object
|
||||||
*
|
*
|
||||||
* @param object $source The XML source
|
* @param object|string $source The XML source
|
||||||
* @param object $target The XML target
|
* @param object $target The XML target
|
||||||
* @param string $elementname Name of the XML element of the target
|
* @param string $elementname Name of the XML element of the target
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public static function copy(&$source, &$target, string $elementname)
|
public static function copy(&$source, &$target, string $elementname)
|
||||||
{
|
{
|
||||||
if (count($source->children()) == 0) {
|
if (is_string($source)) {
|
||||||
$target->addChild($elementname, self::escape($source));
|
$target->addChild($elementname, self::escape($source));
|
||||||
} else {
|
} else {
|
||||||
$child = $target->addChild($elementname);
|
$child = $target->addChild($elementname);
|
||||||
|
@ -184,9 +185,9 @@ class XML
|
||||||
* @param array $attributes Array containing the attributes
|
* @param array $attributes Array containing the attributes
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public static function addElement(DOMDocument $doc, DOMElement &$parent, string $element, string $value = '', array $attributes = [])
|
public static function addElement(DOMDocument $doc, DOMElement &$parent, string $element, string $value = null, array $attributes = [])
|
||||||
{
|
{
|
||||||
$element = self::createElement($doc, $element, $value, $attributes);
|
$element = self::createElement($doc, $element, $value ?? '', $attributes);
|
||||||
$parent->appendChild($element);
|
$parent->appendChild($element);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -273,6 +274,7 @@ class XML
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$parent = [];
|
||||||
|
|
||||||
libxml_use_internal_errors(true);
|
libxml_use_internal_errors(true);
|
||||||
libxml_clear_errors();
|
libxml_clear_errors();
|
||||||
|
|
|
@ -174,7 +174,7 @@ class ConfigFileLoaderTest extends MockedTest
|
||||||
->at($this->root)
|
->at($this->root)
|
||||||
->setContent(file_get_contents($file));
|
->setContent(file_get_contents($file));
|
||||||
|
|
||||||
$configFileLoader = new \Friendica\Core\Config\Util\ConfigFileLoader(
|
$configFileLoader = new ConfigFileLoader(
|
||||||
$this->root->url(),
|
$this->root->url(),
|
||||||
$this->root->url() . DIRECTORY_SEPARATOR . Config::CONFIG_DIR,
|
$this->root->url() . DIRECTORY_SEPARATOR . Config::CONFIG_DIR,
|
||||||
$this->root->url() . DIRECTORY_SEPARATOR . Config::STATIC_DIR
|
$this->root->url() . DIRECTORY_SEPARATOR . Config::STATIC_DIR
|
||||||
|
@ -228,7 +228,7 @@ class ConfigFileLoaderTest extends MockedTest
|
||||||
->at($this->root->getChild('addon')->getChild('test')->getChild('config'))
|
->at($this->root->getChild('addon')->getChild('test')->getChild('config'))
|
||||||
->setContent(file_get_contents($file));
|
->setContent(file_get_contents($file));
|
||||||
|
|
||||||
$configFileLoader = new \Friendica\Core\Config\Util\ConfigFileLoader(
|
$configFileLoader = new ConfigFileLoader(
|
||||||
$this->root->url(),
|
$this->root->url(),
|
||||||
$this->root->url() . DIRECTORY_SEPARATOR . Config::CONFIG_DIR,
|
$this->root->url() . DIRECTORY_SEPARATOR . Config::CONFIG_DIR,
|
||||||
$this->root->url() . DIRECTORY_SEPARATOR . Config::STATIC_DIR
|
$this->root->url() . DIRECTORY_SEPARATOR . Config::STATIC_DIR
|
||||||
|
@ -265,7 +265,7 @@ class ConfigFileLoaderTest extends MockedTest
|
||||||
->at($this->root->getChild('config'))
|
->at($this->root->getChild('config'))
|
||||||
->setContent(file_get_contents($fileDir . 'B.config.php'));
|
->setContent(file_get_contents($fileDir . 'B.config.php'));
|
||||||
|
|
||||||
$configFileLoader = new \Friendica\Core\Config\Util\ConfigFileLoader(
|
$configFileLoader = new ConfigFileLoader(
|
||||||
$this->root->url(),
|
$this->root->url(),
|
||||||
$this->root->url() . DIRECTORY_SEPARATOR . Config::CONFIG_DIR,
|
$this->root->url() . DIRECTORY_SEPARATOR . Config::CONFIG_DIR,
|
||||||
$this->root->url() . DIRECTORY_SEPARATOR . Config::STATIC_DIR
|
$this->root->url() . DIRECTORY_SEPARATOR . Config::STATIC_DIR
|
||||||
|
@ -299,7 +299,7 @@ class ConfigFileLoaderTest extends MockedTest
|
||||||
->at($this->root->getChild('config'))
|
->at($this->root->getChild('config'))
|
||||||
->setContent(file_get_contents($fileDir . 'B.ini.php'));
|
->setContent(file_get_contents($fileDir . 'B.ini.php'));
|
||||||
|
|
||||||
$configFileLoader = new \Friendica\Core\Config\Util\ConfigFileLoader(
|
$configFileLoader = new ConfigFileLoader(
|
||||||
$this->root->url(),
|
$this->root->url(),
|
||||||
$this->root->url() . DIRECTORY_SEPARATOR . Config::CONFIG_DIR,
|
$this->root->url() . DIRECTORY_SEPARATOR . Config::CONFIG_DIR,
|
||||||
$this->root->url() . DIRECTORY_SEPARATOR . Config::STATIC_DIR
|
$this->root->url() . DIRECTORY_SEPARATOR . Config::STATIC_DIR
|
||||||
|
@ -333,7 +333,7 @@ class ConfigFileLoaderTest extends MockedTest
|
||||||
->at($this->root->getChild('config'))
|
->at($this->root->getChild('config'))
|
||||||
->setContent(file_get_contents($fileDir . 'B.ini.php'));
|
->setContent(file_get_contents($fileDir . 'B.ini.php'));
|
||||||
|
|
||||||
$configFileLoader = new \Friendica\Core\Config\Util\ConfigFileLoader(
|
$configFileLoader = new ConfigFileLoader(
|
||||||
$this->root->url(),
|
$this->root->url(),
|
||||||
$this->root->url() . DIRECTORY_SEPARATOR . Config::CONFIG_DIR,
|
$this->root->url() . DIRECTORY_SEPARATOR . Config::CONFIG_DIR,
|
||||||
$this->root->url() . DIRECTORY_SEPARATOR . Config::STATIC_DIR
|
$this->root->url() . DIRECTORY_SEPARATOR . Config::STATIC_DIR
|
||||||
|
|
Loading…
Reference in a new issue