Update dejure-plugin to version 1.6 from upstream. (#58)

* Update dejure-plugin to version 1.6 from upstream.

v1.6 was not yet published.

Improve fsockopen, switch to SSL, add user agent.

Signed-off-by: Thomas Hochstein <thh@inter.net>

* Bugfix: Don't cache results after errors.

djo_vernetzen_ueber_dejure_org() will return FALSE
instead of an output text if the API call fails
or results in any error.

But the "master" function djo_vernetzen() will call
integritaetskontrolle() anyway. The latter function
checks whether input and output texts match after
removing all added links. If the check succeeds, it
will return the output text; if the check fails, the
input text. So the result will always be TRUE.

And only after this will cache the output text if
it's not FALSE - which it can't be, ever. So if the
API call fails, the unmodified input text will be
cached.

But if we don't call integritaetskontrolle() after
API failures - which isn't necessary as the output
text is just FALSE anyway -, the FALSE will carry
through so nothing is cached.

Signed-off-by: Thomas Hochstein <thh@inter.net>
This commit is contained in:
Thomas Hochstein 2017-05-27 19:51:08 +02:00 committed by onli
parent 31c9242b7f
commit 1a67d98bbb

View file

@ -12,6 +12,7 @@ if (file_exists($probelang)) {
include dirname(__FILE__) . '/lang_en.inc.php';
define('DJO_VERSION', '1.6');
define('CACHE_VORHALT', 4); # (Tage) Wann ein vernetzter Text aus dem Cache entfernt und neu vernetzt werden soll
class serendipity_event_dejure extends serendipity_event
@ -22,7 +23,7 @@ class serendipity_event_dejure extends serendipity_event
$propbag->add('name', DEJURE_TITLE);
$propbag->add('description', DEJURE_DESCRIPTION);
$propbag->add('author', 'Garvin Hicking, Bjoern Urban, dejure.org');
$propbag->add('version', '1.5');
$propbag->add('version', DJO_VERSION);
$propbag->add('stackable', false);
$propbag->add('groups', array('FRONTEND_EXTERNAL_SERVICES'));
@ -179,17 +180,21 @@ class serendipity_event_dejure extends serendipity_event
$zeitlimit_in_sekunden = $wert_ARR[1];
}
$header = "POST http://rechtsnetz.dejure.org/dienste/vernetzung/vernetzen HTTP/1.0\r\n";
$header = "POST /dienste/vernetzung/vernetzen HTTP/1.0\r\n";
$header .= 'User-Agent: '.$_SERVER['SERVER_NAME'] . ' (Serendipity-Vernetzung ' . DJO_VERSION . ')' . "\r\n";
$header .= "Content-type: application/x-www-form-urlencoded\r\n";
$header .= "Content-length: " . strlen($uebergabe) . "\r\n\r\n";
$header .= "Content-length: " . strlen($uebergabe) . "\r\n";
$header .= 'Host: rechtsnetz.dejure.org'."\r\n";
$header .= 'Connection: close'."\r\n";
$header .= "\r\n";
$fp = fsockopen("rechtsnetz.dejure.org", 80, $errno, $errstr, 12);
$fp = @fsockopen('ssl://rechtsnetz.dejure.org', 443, $errno, $errstr, $zeitlimit_in_sekunden);
if ($fp === false) { // Verbindung gescheitert
return false;
} else {
socket_set_timeout($fp, $zeitlimit_in_sekunden, 0); // Socket nach $zeitlimit_in_sekunden Sekunden auf jeden Fall wieder frei geben
socket_set_blocking($fp, true);
stream_set_timeout($fp, $zeitlimit_in_sekunden, 0); // Verbindung nach $zeitlimit_in_sekunden Sekunden abbrechen
stream_set_blocking($fp, true);
fputs($fp, $header.$uebergabe);
$timeOutSock = false;
$eofSock = false;
@ -273,11 +278,14 @@ class serendipity_event_dejure extends serendipity_event
'format' => $this->get_config('linkstyle'),
'target' => $this->get_config('target'),
'class' => $this->get_config('css'),
'newsletter' => serendipity_db_bool($this->get_config('newsletter')) ? 'ja' : 'nein'
'newsletter' => serendipity_db_bool($this->get_config('newsletter')) ? 'ja' : 'nein',
'Schema' => 'https'
)
);
$ergebnis = $this->integritaetskontrolle($text, $ergebnis);
if ($ergebnis !== false) {
$ergebnis = $this->integritaetskontrolle($text, $ergebnis);
}
if ($ergebnis) {
$this->djo_vernetzung_in_cache_schreiben[] = array($text, $ergebnis);
@ -292,7 +300,7 @@ class serendipity_event_dejure extends serendipity_event
}
function integritaetskontrolle($ausgangstext, $neuertext) {
if (preg_replace("/<a href=\"http:\/\/dejure.org\/[^>]*>([^<]*)<\/a>/i", "\\1", $ausgangstext) == preg_replace("/<a href=\"http:\/\/dejure.org\/[^>]*>([^<]*)<\/a>/i", "\\1", $neuertext)) {
if (preg_replace("/<a href=\"https?:\/\/dejure.org\/[^>]*>([^<]*)<\/a>/i", "\\1", $ausgangstext) == preg_replace("/<a href=\"https?:\/\/dejure.org\/[^>]*>([^<]*)<\/a>/i", "\\1", $neuertext)) {
return $neuertext;
} else {
return $ausgangstext;