ci #6

Merged
n merged 2 commits from ci into main 2024-02-11 22:11:45 +01:00
2 changed files with 105 additions and 91 deletions

27
.gitea/workflows/lint.yml Normal file
View file

@ -0,0 +1,27 @@
name: lint
run-name: lint is launched by ${{ github.actor }}
on: [push]
jobs:
check:
runs-on: ubuntu-latest
name: lint
steps:
- run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by Gitea!"
- run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
- name: Install linters using Composer
run: |
export COMPOSER_HOME=/tmp
echo "{}" > composer.json
composer config --no-interaction allow-plugins.bamarni/composer-bin-plugin true
composer require --dev bamarni/composer-bin-plugin
composer bin phplint require --dev overtrue/phplint
composer require --dev friendsofphp/php-cs-fixer
- name: Lint
run: vendor/bin/phplint --no-cache --no-progress --exclude=vendor --verbose
- name: PHP CS Fixer
run: vendor/bin/php-cs-fixer fix --dry-run --verbose --diff .
- run: echo "🍏 This job's status is ${{ job.status }}."

View file

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