ci #6

Merged
n merged 2 commits from ci into main 2024-02-11 22:11:45 +01:00
Showing only changes of commit 1372755830 - Show all commits

View file

@ -24,7 +24,7 @@ const EXT_TRANSLATION_DOMAIN = 'shaargem';
*/
function shaargem_t($text, $nText = '', $nb = 1)
{
return t($text, $nText, $nb, EXT_TRANSLATION_DOMAIN);
return t($text, $nText, $nb, EXT_TRANSLATION_DOMAIN);
}
/**
@ -60,15 +60,15 @@ function shaargem_init($conf)
*/
function hook_shaargem_render_editlink($data)
{
// fetch title only for gemini:// iris
if(isset($data['link']['url'])) {
if(strstr($data['link']['url'],"gemini://")) {
if ($data['link']['title'] == '') {
$data['link']['title'] = fetch_iri_title($data['link']['url']);
}
}
}
return $data;
// fetch title only for gemini:// iris
if(isset($data['link']['url'])) {
if(strstr($data['link']['url'], "gemini://")) {
if ($data['link']['title'] == '') {
$data['link']['title'] = fetch_iri_title($data['link']['url']);
}
}
}
return $data;
}
/**
@ -83,15 +83,14 @@ function hook_shaargem_render_editlink($data)
*/
function hook_shaargem_save_link($data)
{
// ugly hack to get scheme
if(isset($_POST['lf_url'])) {
if(strstr($_POST['lf_url'],"gemini://"))
{
$new_url = str_replace("http://","gemini://",$data['url']);
$data['url'] = $new_url;
}
}
return $data;
// ugly hack to get scheme
if(isset($_POST['lf_url'])) {
if(strstr($_POST['lf_url'], "gemini://")) {
$new_url = str_replace("http://", "gemini://", $data['url']);
$data['url'] = $new_url;
}
}
return $data;
}
/**
@ -112,10 +111,10 @@ function hook_shaargem_save_link($data)
*/
function hook_shaargem_render_linklist($data)
{
foreach ($data['links'] as &$value) {
$value['description'] = preg_replace(',gemini://([\d\w\.\+\-@\:%._\~#=/]+),','<a href="gemini://\1">gemini://\1</a>',$value['description']);
}
return $data;
foreach ($data['links'] as &$value) {
$value['description'] = preg_replace(',gemini://([\d\w\.\+\-@\:%._\~#=/]+),', '<a href="gemini://\1">gemini://\1</a>', $value['description']);
}
return $data;
}
/**
@ -123,8 +122,8 @@ function hook_shaargem_render_linklist($data)
*/
function shaargem_dummy_translation()
{
// meta
shaargem_t('Provides Gemini protocol support.');
// meta
shaargem_t('Provides Gemini protocol support.');
}
/**
@ -132,74 +131,62 @@ function shaargem_dummy_translation()
*/
function fetch_iri_title($iri)
{
$ret = preg_match(",gemini://([\d\w\.\+\-@\:%._\~#=]+)/?,", $iri ,$domain);
static $redirect_counter = 0;
if ($ret)
{
$stream_context = stream_context_create([ 'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true,
'verify_depth' => 0 ]]);
$ret = preg_match(",gemini://([\d\w\.\+\-@\:%._\~#=]+)/?,", $iri, $domain);
static $redirect_counter = 0;
if ($ret) {
$stream_context = stream_context_create([ 'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true,
'verify_depth' => 0 ]]);
$fp = stream_socket_client("tls://".$domain[1].":1965", $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $stream_context);
$fp = stream_socket_client("tls://".$domain[1].":1965", $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $stream_context);
if (!$fp) {
error_log("[shaargem] $errstr ($errno)");
} else {
fwrite($fp, $iri."\r\n");
$header = fgets($fp);
$ret = preg_match(",^(\d\d) (.*)\r\n$,", $header, $headers);
$status = $headers[1];
$meta = $headers[2];
$max_redirects = 10;
if (!$fp) {
error_log("[shaargem] $errstr ($errno)");
} else {
fwrite($fp, $iri."\r\n");
$header = fgets($fp);
$ret = preg_match(",^(\d\d) (.*)\r\n$,", $header, $headers);
$status = $headers[1];
$meta = $headers[2];
$max_redirects = 10;
error_log("[shaargem] status:".$status.", meta:".$meta);
error_log("[shaargem] status:".$status.", meta:".$meta);
// status 1x cannot be handled by shaarli, but input field can be used as title
if ($status[0] == 1)
{
return $meta;
}
// status 2x ok
elseif ($status[0] == 2)
{
$nblines = 1;
while($line = fgets($fp)) {
$ret = preg_match(",# (.*),",$line,$title);
if ($title[0] or $nblines > 100 ) {
break;
}
$nblines++;
}
}
// status 3x redirect
elseif ($status[0] == 3 and $redirect_counter < $max_redirects)
{
$redirect_counter++;
error_log("[shaargem] ".shaargem_t("Redirecting to")." ".$meta." (".$redirect_counter."/".$max_redirects.")");
$title[1] = fetch_iri_title($meta);
}
// 4x 5x 6x are error statuses, should find a better way to display that
elseif ($status[0] == 4)
{
return shaargem_t('Error').' '.$status.' ('.shaargem_t('TEMPORARY FAILURE').'): '.$meta;
}
elseif ($status[0] == 5)
{
return shaargem_t('Error').' '.$status.' ('.shaargem_t('PERMANENT FAILURE').'): '.$meta;
}
elseif ($status[0] == 6)
{
return shaargem_t('Error').' '.$status.' ('.shaargem_t('CLIENT CERTIFICATE REQUIRED').'): '.$meta;
}
else
{
return shaargem_t('Invalid response').': '.$header;
}
fclose($fp);
}
return $title[1];
}
// status 1x cannot be handled by shaarli, but input field can be used as title
if ($status[0] == 1) {
return $meta;
}
// status 2x ok
elseif ($status[0] == 2) {
$nblines = 1;
while($line = fgets($fp)) {
$ret = preg_match(",# (.*),", $line, $title);
if ($title[0] or $nblines > 100) {
break;
}
$nblines++;
}
}
// status 3x redirect
elseif ($status[0] == 3 and $redirect_counter < $max_redirects) {
$redirect_counter++;
error_log("[shaargem] ".shaargem_t("Redirecting to")." ".$meta." (".$redirect_counter."/".$max_redirects.")");
$title[1] = fetch_iri_title($meta);
}
// 4x 5x 6x are error statuses, should find a better way to display that
elseif ($status[0] == 4) {
return shaargem_t('Error').' '.$status.' ('.shaargem_t('TEMPORARY FAILURE').'): '.$meta;
} elseif ($status[0] == 5) {
return shaargem_t('Error').' '.$status.' ('.shaargem_t('PERMANENT FAILURE').'): '.$meta;
} elseif ($status[0] == 6) {
return shaargem_t('Error').' '.$status.' ('.shaargem_t('CLIENT CERTIFICATE REQUIRED').'): '.$meta;
} else {
return shaargem_t('Invalid response').': '.$header;
}
fclose($fp);
}
return $title[1];
}
}