Browse Source

Merge pull request #179 from juniorbotelho/refactor/solve-search-errors

resolves a number of bugs, both in docker and master branch
hnhx 2 years ago
parent
commit
a24708edec

+ 1 - 1
Dockerfile

@@ -1,6 +1,6 @@
 # syntax = edrevo/dockerfile-plus
 ARG VERSION="3.17"
-FROM alpine:${VERSION} AS runner
+FROM alpine:${VERSION} AS librex
 WORKDIR "/var/www/html"
 
 # Docker metadata contains information about the maintainer, such as the name, repository, and support email

+ 3 - 3
config.php.example

@@ -12,10 +12,10 @@
         "wikipedia_language" => "en",
 
         // You can use any Invidious instance here
-        "invidious_instance_for_video_results" => "https://invidious.namazso.eu",
+        "invidious_instance_for_video_results" => "https://invidious.snopyta.org",
 
         "disable_bittorent_search" => false,
-        "bittorent_trackers" => "&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce",
+        "bittorent_trackers" => "&tr=http://nyaa.tracker.wf:7777/announce&tr=udp://open.stealth.si:80/announce&tr=udp://tracker.opentrackr.org:1337/announce&tr=udp://exodus.desync.com:6969/announce&tr=udp://tracker.torrent.eu.org:451/announce",
 
         "disable_hidden_service_search" => false,
 
@@ -132,7 +132,7 @@
             CURLOPT_RETURNTRANSFER => true,
             CURLOPT_ENCODING => "",
             CURLOPT_USERAGENT => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
-            CURLOPT_IPRESOLVE => CURL_IPRESOLVE_V4,
+            CURLOPT_IPRESOLVE => CURL_IPRESOLVE_WHATEVER,
             CURLOPT_CUSTOMREQUEST => "GET",
             CURLOPT_PROTOCOLS => CURLPROTO_HTTPS | CURLPROTO_HTTP,
             CURLOPT_REDIR_PROTOCOLS => CURLPROTO_HTTPS | CURLPROTO_HTTP,

+ 21 - 0
docker-compose.yml

@@ -0,0 +1,21 @@
+version: "2.1"
+services:
+  librex:
+    image: librex:latest
+    container_name: librex
+    network_mode: bridge
+    ports:
+      - 8080:8080
+    environment:
+      - PUID=1000
+      - PGID=1000
+      - VERSION=docker
+      - TZ=America/New_York
+      - CONFIG_GOOGLE_DOMAIN=com
+      - CONFIG_GOOGLE_LANGUAGE_SITE=en
+      - CONFIG_GOOGLE_LANGUAGE_RESULTS=en
+      - CONFIG_WIKIPEDIA_LANGUAGE=en
+    volumes:
+      - ./nginx_logs:/var/log/nginx
+      - ./php_logs:/var/log/php7
+    restart: unless-stopped

+ 8 - 7
docker/attributes.sh

@@ -19,12 +19,13 @@ export OPEN_SEARCH_HOST=${OPEN_SEARCH_HOST:-"127.0.0.1"}
 
 # Replace the 'config.php' script, which contains the most common search engine configurations, with these environment setups
 # These environment setups can be found in 'config.php', and the default configurations can be useful for most use cases
-export CONFIG_GOOGLE_DOMAIN=${CONFIG_GOOGLE_DOMAIN:-"com"}
-export CONFIG_GOOGLE_LANGUAGE=${CONFIG_GOOGLE_LANGUAGE:-"en"}
-export CONFIG_INVIDIOUS_INSTANCE=${CONFIG_INVIDIOUS_INSTANCE:-"invidious.namazso.eu"}
+export CONFIG_GOOGLE_DOMAIN="${CONFIG_GOOGLE_DOMAIN:-"com"}"
+export CONFIG_GOOGLE_LANGUAGE_SITE="${CONFIG_GOOGLE_LANGUAGE_SITE:-"en"}"
+export CONFIG_GOOGLE_LANGUAGE_RESULTS="${CONFIG_GOOGLE_LANGUAGE_RESULTS:-"en"}"
+export CONFIG_INVIDIOUS_INSTANCE="${CONFIG_INVIDIOUS_INSTANCE:-"invidious.snopyta.org"}"
 export CONFIG_HIDDEN_SERVICE_SEARCH=${CONFIG_HIDDEN_SERVICE_SEARCH:-false}
 export CONFIG_DISABLE_BITTORRENT_SEARCH=${CONFIG_DISABLE_BITTORRENT_SEARCH:-false}
-export CONFIG_BITTORRENT_TRACKERS=${CONFIG_BITTORRENT_TRACKERS:-"&tr=http://nyaa.tracker.wf:7777/announce&tr=udp://open.stealth.si:80/announce&tr=udp://tracker.opentrackr.org:1337/announce&tr=udp://exodus.desync.com:6969/announce&tr=udp://tracker.torrent.eu.org:451/announce"}
+export CONFIG_BITTORRENT_TRACKERS="${CONFIG_BITTORRENT_TRACKERS:-"&tr=http://nyaa.tracker.wf:7777/announce&tr=udp://open.stealth.si:80/announce&tr=udp://tracker.opentrackr.org:1337/announce&tr=udp://exodus.desync.com:6969/announce&tr=udp://tracker.torrent.eu.org:451/announce"}"
 
 # The settings that will be used to handle Wikipedia results displayed on the libreX search page
 # the settings below can be edited via environment variables.
@@ -53,11 +54,11 @@ export CURLOPT_PROXY_ENABLED=${CURLOPT_PROXY_ENABLED:-false}
 export CURLOPT_PROXY=${CURLOPT_PROXY:-""}
 export CURLOPT_RETURNTRANSFER=${CURLOPT_RETURNTRANSFER:-true}
 export CURLOPT_ENCODING=${CURLOPT_ENCODING:-""}
-export CURLOPT_USERAGENT=${CURLOPT_USERAGENT:-"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"}
-export CURLOPT_CUSTOMREQUEST=${CURLOPT_CUSTOMREQUEST:-"GET"}
+export CURLOPT_USERAGENT="${CURLOPT_USERAGENT:-"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"}"
+export CURLOPT_CUSTOMREQUEST="${CURLOPT_CUSTOMREQUEST:-"GET"}"
 export CURLOPT_MAXREDIRS=${CURLOPT_MAXREDIRS:-5}
 export CURLOPT_TIMEOUT=${CURLOPT_TIMEOUT:-18}
-export CURLOPT_VERBOSE=${CURLOPT_VERBOSE:-false}
+export CURLOPT_VERBOSE=${CURLOPT_VERBOSE:-true}
 
 # These shell functions will be available for use by any function calls
 function AwkTrim() { awk '{$1=$1};1'; }

+ 93 - 19
docker/php/config.php

@@ -1,37 +1,112 @@
 <?php
     return (object) array(
         "google_domain" => "${CONFIG_GOOGLE_DOMAIN}",
-        "google_language" => "${CONFIG_GOOGLE_LANGUAGE}",
-        "invidious_instance_for_video_results" => "${CONFIG_INVIDIOUS_INSTANCE}",
+        "google_language_site" => "${CONFIG_GOOGLE_LANGUAGE_SITE}",
+        "google_language_results" => "${CONFIG_GOOGLE_LANGUAGE_RESULTS}",
 
         "wikipedia_language" => "${CONFIG_WIKIPEDIA_LANGUAGE}",
+        "invidious_instance_for_video_results" => "${CONFIG_INVIDIOUS_INSTANCE}",
 
         "disable_bittorent_search" => ${CONFIG_DISABLE_BITTORRENT_SEARCH},
         "bittorent_trackers" => "${CONFIG_BITTORRENT_TRACKERS}",
         "disable_hidden_service_search" => ${CONFIG_HIDDEN_SERVICE_SEARCH},
 
-        "invidious" => "${APP_INVIDIOUS}", // youtube
-        "bibliogram" => "${APP_BIBLIOGRAM}", // instagram
-        "rimgo" => "${APP_RIMGO}", // imgur
-        "scribe" => "${APP_SCRIBE}", // medium
-        "librarian" => "${APP_LIBRARIAN}", // odysee
-        "gothub" => "${APP_GOTHUB}", // github
-        "nitter" => "${APP_NITTER}", // twitter
-        "libreddit" => "${APP_LIBREREDDIT}", // reddit
-        "proxitok" => "${APP_PROXITOK}", // tiktok
-        "wikiless" => "${APP_WIKILESS}", // wikipedia
-        "quetre" => "${APP_QUETRE}", // quora
-        "libremdb" => "${APP_LIBREMDB}", // imdb,
-        "breezewiki" => "${APP_BREEZEWIKI}", // fandom,
-        "anonymousoverflow" => "${APP_ANONYMOUS_OVERFLOW}", // stackoverflow
+        "frontends" => array(
+            "invidious" => array(
+                "instance_url" => "${APP_INVIDIOUS}",
+                "project_url" => "https://docs.invidious.io/instances/",
+                "original_name" => "YouTube",
+                "original_url" => "youtube.com"
+            ),
+            "bibliogram" => array(
+                "instance_url" => "${APP_BIBLIOGRAM}",
+                "project_url" => "https://git.sr.ht/~cadence/bibliogram-docs/tree/master/docs/Instances.md",
+                "original_name" => "Instagram",
+                "original_url" => "instagram.com"
+            ),
+            "rimgo" => array(
+                "instance_url" => "${APP_RIMGO}",
+                "project_url" => "https://codeberg.org/video-prize-ranch/rimgo#instances",
+                "original_name" => "Imgur",
+                "original_url" => "imgur.com"
+            ),
+            "scribe" => array(
+                "instance_url" => "${APP_SCRIBE}",
+                "project_url" => "https://git.sr.ht/~edwardloveall/scribe/tree/main/docs/instances.md",
+                "original_name" => "Medium",
+                "original_url" => "medium.com"
+            ),
+            "gothub" => array(
+                "instance_url" => "${APP_GOTHUB}",
+                "project_url" => "https://codeberg.org/gothub/gothub/wiki/Instances",
+                "original_name" => "GitHub",
+                "original_url" => "github.com"
+            ),
+            "librarian" => array(
+                "instance_url" => "${APP_LIBRARIAN}",
+                "project_url" => "https://codeberg.org/librarian/librarian#clearnet",
+                "original_name" => "Odysee",
+                "original_url" => "odysee.com"
+            ),
+
+            "nitter" => array(
+                "instance_url" => "${APP_NITTER}",
+                "project_url" => "https://github.com/zedeus/nitter/wiki/Instances",
+                "original_name" => "Twitter",
+                "original_url" => "twitter.com"
+            ),
+
+            "libreddit" => array(
+                "instance_url" => "${APP_LIBREREDDIT}",
+                "project_url" => "https://github.com/spikecodes/libreddit",
+                "original_name" => "Reddit",
+                "original_url" => "reddit.com"
+            ),
+            "proxitok" => array(
+                "instance_url" => "${APP_PROXITOK}",
+                "project_url" => "https://github.com/pablouser1/ProxiTok/wiki/Public-instances",
+                "original_name" => "TikTok",
+                "original_url" => "tiktok.com"
+            ),
+            "wikiless" => array(
+                "instance_url" => "${APP_WIKILESS}",
+                "project_url" => "https://github.com/Metastem/wikiless#instances",
+                "original_name" => "Wikipedia",
+                "original_url" => "wikipedia.com"
+            ),
+            "quetre" => array(
+                "instance_url" => "${APP_QUETRE}",
+                "project_url" => "https://github.com/zyachel/quetre",
+                "original_name" => "Quora",
+                "original_url" => "quora.com"
+            ),
+            "libremdb" => array(
+                "instance_url" => "${APP_LIBREMDB}",
+                "project_url" => "https://github.com/zyachel/libremdb",
+                "original_name" => "IMDb",
+                "original_url" => "imdb.com"
+            ),
+            "breezewiki" => array(
+                "instance_url" => "${APP_BREEZEWIKI}",
+                "project_url" => "https://gitdab.com/cadence/breezewiki",
+                "original_name" => "Fandom",
+                "original_url" => "fandom.com"
+            ),
+            "anonymousoverflow" => array(
+                "instance_url" => "${APP_ANONYMOUS_OVERFLOW}",
+                "project_url" => "https://github.com/httpjamesm/AnonymousOverflow#clearnet-instances",
+                "original_name" => "StackOverflow",
+                "original_url" => "stackoverflow.com"
+            )
+        ),
 
         "curl_settings" => array(
-            CURLOPT_PROXY => "",
+            CURLOPT_PROXY => "${CURLOPT_PROXY}",
             CURLOPT_PROXYTYPE => CURLPROXY_HTTP,
             CURLOPT_RETURNTRANSFER => ${CURLOPT_RETURNTRANSFER},
             CURLOPT_ENCODING => "${CURLOPT_ENCODING}",
             CURLOPT_USERAGENT => "${CURLOPT_USERAGENT}",
-            CURLOPT_IPRESOLVE => CURL_IPRESOLVE_V4,
+            CURLOPT_IPRESOLVE => CURL_IPRESOLVE_WHATEVER,
             CURLOPT_CUSTOMREQUEST => "${CURLOPT_CUSTOMREQUEST}",
             CURLOPT_PROTOCOLS => CURLPROTO_HTTPS | CURLPROTO_HTTP,
             CURLOPT_REDIR_PROTOCOLS => CURLPROTO_HTTPS | CURLPROTO_HTTP,
@@ -39,6 +114,5 @@
             CURLOPT_TIMEOUT => ${CURLOPT_TIMEOUT},
             CURLOPT_VERBOSE => ${CURLOPT_VERBOSE}
         )
-
     );
 ?>

+ 4 - 3
docker/php/php.dockerfile

@@ -12,8 +12,9 @@ ENV OPEN_SEARCH_HOST="http://127.0.0.1:${NGINX_PORT}"
 # Replace the 'config.php' script, which contains the most common search engine configurations, with these environment setups
 # These environment setups can be found in 'config.php', and the default configurations can be useful for most use cases
 ENV CONFIG_GOOGLE_DOMAIN="com"
-ENV CONFIG_GOOGLE_LANGUAGE="en"
-ENV CONFIG_INVIDIOUS_INSTANCE="https://invidious.namazso.eu"
+ENV CONFIG_GOOGLE_LANGUAGE_SITE="en"
+ENV CONFIG_GOOGLE_LANGUAGE_RESULTS="en"
+ENV CONFIG_INVIDIOUS_INSTANCE="https://invidious.snopyta.org"
 ENV CONFIG_HIDDEN_SERVICE_SEARCH=false
 ENV CONFIG_DISABLE_BITTORRENT_SEARCH=false
 ENV CONFIG_BITTORRENT_TRACKERS="&tr=http://nyaa.tracker.wf:7777/announce&tr=udp://open.stealth.si:80/announce&tr=udp://tracker.opentrackr.org:1337/announce&tr=udp://exodus.desync.com:6969/announce&tr=udp://tracker.torrent.eu.org:451/announce"
@@ -45,7 +46,7 @@ ENV CURLOPT_USERAGENT="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537
 ENV CURLOPT_CUSTOMREQUEST="GET"
 ENV CURLOPT_MAXREDIRS=5
 ENV CURLOPT_TIMEOUT=18
-ENV CURLOPT_VERBOSE=false
+ENV CURLOPT_VERBOSE=true
 
 # Install PHP-FPM using Alpine's package manager, apk
 # Configure PHP-FPM to listen on a Unix socket instead of a TCP port, which is more secure and efficient

+ 1 - 1
docker/php/prepare.sh

@@ -10,7 +10,7 @@ source "docker/attributes.sh"
 if [ ! -d "/run/php7" ] || [ ! -S "/run/php7/php-fpm7.sock" ]; then
     mkdir "/run/php7"
     touch "/run/php7/php-fpm7.sock"
-    chmod 0660 "/run/php7/php-fpm7.sock"
+    chmod 660 "/run/php7/php-fpm7.sock"
     chown nginx:nginx "/run/php7/php-fpm7.sock"
 fi
 

+ 4 - 0
docker/server/nginx.dockerfile

@@ -1,5 +1,9 @@
 # Install Nginx with FastCGI enabled, optimizing its performance for serving content
 RUN apk add nginx
 
+# Forward request and error logs to docker log collector
+# RUN ln -sf /dev/stdout /var/log/nginx/access.log &&\
+#     ln -sf /dev/stderr /var/log/nginx/error.log
+
 # After executing the 'docker run' command, run the 'prepare.sh' script
 CMD [ "/bin/sh", "-c", "docker/server/prepare.sh" ]

+ 1 - 3
engines/invidious/video.php

@@ -2,13 +2,11 @@
     function get_video_results($query)
     {
         global $config;
-
         $instance_url = $config->invidious_instance_for_video_results;
-
+        
         $url = "$instance_url/api/v1/search?q=$query";
         $response = request($url);
         $json_response = json_decode($response, true);
-
         $results = array();
 
         foreach ($json_response as $response)