Compare commits

..

No commits in common. "c6bd06d3d796f5412d7d69fc3221a789ff328084" and "79af1bbfa8124832e57adf5d0771bf317a6c48d8" have entirely different histories.

3 changed files with 24 additions and 78 deletions

View file

@ -106,40 +106,12 @@ function mailstream_send_hook(array $data)
$user = User::getById($item['uid']);
if (empty($user)) {
Logger::error('mailstream_send_hook could not find user', ['uid' => $item['uid']]);
Logger::error('could not find user', ['uid' => $item['uid']]);
return;
}
$author = DBA::selectFirst('contact', ['nick', 'blocked', 'uri-id'], ['id' => $data['author-id'], 'self' => false]);
if (!DBA::isResult($author)) {
Logger::error('mailstream_send_hook could not find author', ['guid' => $item['guid'], 'author-id' => $data['author-id']]);
return;
}
if ($author['blocked']) {
Logger::info('mailstream_send_hook author is blocked', ['guid' => $item['guid'], 'author-id' => $data['author-id']]);
return;
}
$collapsed = false;
$user_contact = DBA::selectFirst('user-contact', ['cid', 'blocked', 'ignored', 'collapsed'], ['uid' => $item['uid'], 'uri-id' => $item['author-uri-id']]);
if (!DBA::isResult($user_contact)) {
$user_contact = DBA::selectFirst('user-contact', ['cid', 'blocked', 'ignored', 'collapsed'], ['uid' => $item['uid'], 'cid' => $item['author-id']]);
}
if (DBA::isResult($user_contact)) {
if ($user_contact['blocked']) {
Logger::info('mailstream_send_hook author is blocked', ['guid' => $item['guid'], 'cid' => $user_contact['cid']]);
return;
}
if ($user_contact['ignored']) {
Logger::info('mailstream_send_hook author is ignored', ['guid' => $item['guid'], 'cid' => $user_contact['cid']]);
return;
}
if ($user_contact['collapsed']) {
$collapsed = true;
}
}
if (!mailstream_send($data['message_id'], $item, $user, $collapsed)) {
Logger::debug('mailstream_send_hook send failed, will retry', $data);
if (!mailstream_send($data['message_id'], $item, $user)) {
Logger::debug('send failed, will retry', $data);
if (!Worker::defer()) {
Logger::error('failed and could not defer', $data);
}
@ -161,8 +133,8 @@ function mailstream_post_hook(array &$item)
return;
}
if (!DI::pConfig()->get($item['uid'], 'mailstream', 'enabled')) {
Logger::debug('mailstream: not enabled.', ['item' => $item['id'], ' uid ' => $item['uid']]);
return;
Logger::debug('mailstream: not enabled for item ' . $item['id'] . ' uid ' . $item['uid']);
// return;
}
if (!$item['contact-id']) {
Logger::debug('no contact-id', ['item' => $item['id']]);
@ -192,7 +164,6 @@ function mailstream_post_hook(array &$item)
$send_hook_data = [
'uid' => $item['uid'],
'contact-id' => $item['contact-id'],
'author-id' => $item['author-id'],
'uri' => $item['uri'],
'message_id' => $message_id,
'tries' => 0,
@ -379,11 +350,10 @@ function mailstream_subject(array $item): string
* @param string $message_id ID of the message (RFC 1036)
* @param array $item content of the item
* @param array $user results from the user table
* @param bool $collapsed true if the content should be hidden
*
* @return bool True if this message has been completed. False if it should be retried.
*/
function mailstream_send(string $message_id, array $item, array $user, bool $collapsed): bool
function mailstream_send(string $message_id, array $item, array $user): bool
{
if (!is_array($item)) {
Logger::error('item is empty', ['message_id' => $message_id]);
@ -401,16 +371,10 @@ function mailstream_send(string $message_id, array $item, array $user, bool $col
require_once(dirname(__file__) . '/phpmailer/class.phpmailer.php');
if ($collapsed) {
$item['body'] = DI::l10n()->t('Content from %s is collapsed', $item['author-name']);
} else {
$item['body'] = Post\Media::addAttachmentsToBody($item['uri-id'], $item['body']);
}
$attachments = [];
if (!$collapsed) {
mailstream_do_images($item, $attachments);
}
$frommail = DI::config()->get('mailstream', 'frommail');
if ($frommail == '') {
$frommail = 'friendica@localhost.local';
@ -465,9 +429,9 @@ function mailstream_send(string $message_id, array $item, array $user, bool $col
'address' => $address
]);
} catch (phpmailerException $e) {
Logger::debug('mailstream_send PHPMailer exception sending message', ['item uri' => $item['uri'], 'message_id' => $message_id, 'error' => $e->errorMessage()]);
Logger::debug('PHPMailer exception sending message', ['id' => $message_id, 'error' => $e->errorMessage()]);
} catch (Exception $e) {
Logger::debug('mailstream_send exception sending message', ['item uri' => $item['uri'], 'message_id' => $message_id, 'error' => $e->errorMessage()]);
Logger::debug('exception sending message', ['id' => $message_id, 'error' => $e->getMessage()]);
}
return true;

View file

@ -16,8 +16,6 @@ use Friendica\Core\System;
use Friendica\Content\Text\HTML;
use Friendica\Content\Text\BBCode;
use Friendica\Model\Photo;
use Friendica\Network\HTTPClient\Client\HttpClientAccept;
use Friendica\Network\HTTPClient\Client\HttpClientOptions;
use Friendica\Object\Image;
use Friendica\Util\Network;
use Friendica\Database\DBA;
@ -37,7 +35,6 @@ function retriever_install() {
Hook::register('addon_settings_post', 'addon/retriever/retriever.php', 'retriever_addon_settings_post');
Hook::register('post_remote', 'addon/retriever/retriever.php', 'retriever_post_remote_hook');
Hook::register('contact_photo_menu', 'addon/retriever/retriever.php', 'retriever_contact_photo_menu');
Hook::register('retriever_mod_post', 'addon/retriever/retriever.php', 'retriever_content');
Hook::register('cron', 'addon/retriever/retriever.php', 'retriever_cron');
if (DI::config()->get('retriever', 'dbversion') == '0.14') {
@ -78,7 +75,6 @@ function retriever_uninstall() {
Hook::unregister('addon_settings', 'addon/retriever/retriever.php', 'retriever_addon_settings');
Hook::unregister('addon_settings_post', 'addon/retriever/retriever.php', 'retriever_addon_settings_post');
Hook::unregister('contact_photo_menu', 'addon/retriever/retriever.php', 'retriever_contact_photo_menu');
Hook::unregister('retriever_mod_post', 'addon/retriever/retriever.php', 'retriever_content');
Hook::unregister('cron', 'addon/retriever/retriever.php', 'retriever_cron');
}
@ -295,12 +291,13 @@ function retrieve_resource(array $resource) {
try {
Logger::debug('retrieve_resource: ' . ($resource['num-tries'] + 1) . ' attempt at resource ' . $resource['id'] . ' ' . $resource['url']);
$redirects = 0;
$cookiejar = '';
if (array_key_exists('storecookies', $rule_data) && $rule_data['storecookies']) {
$cookiejar = tempnam(System::getTempPath(), 'cookiejar-retriever-');
file_put_contents($cookiejar, $rule_data['cookiedata']);
}
$fetch_result = DI::httpClient()->get($resource['url'], HttpClientAccept::DEFAULT, [HttpClientOptions::COOKIEJAR => $cookiejar]);
$fetch_result = DI::httpClient()->fetchFull($resource['url'], $redirects, 0, $cookiejar);
if (array_key_exists('storecookies', $rule_data) && $rule_data['storecookies']) {
$retriever_rule['data']['cookiedata'] = file_get_contents($cookiejar);
DBA::update('retriever_rule', ['data' => json_encode($retriever_rule['data'])], ['id' => intval($retriever_rule["id"])], $retriever_rule);
@ -451,10 +448,8 @@ function retriever_on_item_insert(array $retriever, array &$item) {
}
$resource = add_retriever_resource($url, $item['uid'], $item['contact-id']);
if (is_array($resource)) {
$retriever_item_id = add_retriever_item($item, $resource);
}
}
/**
* @brief Creates a new resource to be downloaded from the supplied URL. Unique resources are created for each URL, UID and contact ID, because different contact IDs may have different rules for how to retrieve them. If the URL is actually a data URL, the resource is completed immediately.
@ -665,16 +660,12 @@ function retriever_extract(DOMDocument $doc, array $retriever) {
* @return DOMDocument New DOM document with global URLs
*/
function retriever_globalise_urls(DOMDocument $doc, array $resource) {
$url = $resource['redirect-url'];
if ($url == "") {
$url = $resource['url'];
}
$components = parse_url($url);
$components = parse_url($resource['redirect-url']);
if (!array_key_exists('scheme', $components) || !array_key_exists('host', $components) || !array_key_exists('path', $components)) {
return $doc;
}
$rooturl = $components['scheme'] . "://" . $components['host'];
$dirurl = $rooturl . dirname($components['path']);
$dirurl = $rooturl . dirname($components['path']) . "/";
$params = array('$dirurl' => $dirurl, '$rooturl' => $rooturl);
$fix_urls_template = Renderer::getMarkupTemplate('fix-urls.tpl', 'addon/retriever/');
$fix_urls_xslt = Renderer::replaceMacros($fix_urls_template, $params);
@ -749,18 +740,15 @@ function retrieve_images(array &$item) {
}
if (strpos($url, (string)(DI::baseUrl())) === FALSE) {
$resource = add_retriever_resource($url, $item['uid'], $item['contact-id'], true);
if (!is_array($resource)) {
Logger::error('retrieve_images: could not add resource', ['url' => $url, 'uid' => $item['uid'], 'contact-id' => $item['contact-id']]);
continue;
}
if (!$resource['completed']) {
add_retriever_item($item, $resource);
continue;
}
else {
retriever_transform_images($item, $resource);
}
}
}
}
/**
* @brief Checks if an item has been completed, i.e. all its associated retriever_item rows have been retrieved. If so, update the item to be visible again.
@ -858,12 +846,11 @@ function retriever_transform_images(array &$item, array $resource) {
* @brief Displays the retriever configuration page for a contact. Alternatively, if the user clicked the "help" button, display the help content.
*/
function retriever_content() {
$e = new \Exception;
if (!DI::userSession()->getLocalUserId()) {
DI::page()['content'] .= "<p>Please log in</p>";
return;
}
if (DI::args()->get(1) === 'help') {
if (isset(DI::args()->getArgv()[1]) and DI::args()->getArgv()[1] === 'help') {
$feeds = DBA::selectToArray('contact', ['id', 'name', 'thumb'], ['uid' => DI::userSession()->getLocalUserId(), 'network' => 'feed']);
for ($i = 0; $i < count($feeds); ++$i) {
$feeds[$i]['url'] = DI::baseUrl() . '/retriever/' . $feeds[$i]['id'];
@ -875,8 +862,8 @@ function retriever_content() {
'$feeds' => $feeds));
return;
}
if (DI::args()->get(1)) {
$arg1 = DI::args()->get(1);
if (isset(DI::args()->getArgv()[1])) {
$arg1 = DI::args()->getArgv()[1];
$retriever_rule = get_retriever_rule($arg1, DI::userSession()->getLocalUserId(), false);
if (!$retriever_rule) {
$retriever_rule = ['id' => 0, 'data' => ['enable' => 0, 'modurl' => '', 'pattern' => '', 'replace' => '', 'images' => 0, 'storecookies' => 0, 'cookiedata' => '', 'customxslt' => '', 'include' => '', 'exclude' => '']];

View file

@ -14,7 +14,7 @@
<xsl:template match="*/@src[starts-with(.,'.')]">
<xsl:attribute name="src">
<xsl:value-of select="concat('{{$dirurl}}/',.)"/>
<xsl:value-of select="concat('{{$dirurl}}',.)"/>
</xsl:attribute>
</xsl:template>
<xsl:template match="*/@src[starts-with(.,'/')]">
@ -22,10 +22,5 @@
<xsl:value-of select="concat('{{$rooturl}}',.)"/>
</xsl:attribute>
</xsl:template>
<xsl:template match="*/@src[not(starts-with(.,'/')) and not(contains(.,':'))]">
<xsl:attribute name="src">
<xsl:value-of select="concat('{{$dirurl}}',.)"/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>