From e814e63f0b7f803b9c239b79f30780c6d85b1dcb Mon Sep 17 00:00:00 2001 From: hnhx Date: Sat, 3 Sep 2022 19:45:47 +0200 Subject: [PATCH] replaced google video results with brave, fixed an xss exploit, added bang search support at the end of query, added instances.json, optimized some image sizes --- README.md | 6 +-- config.php.example | 16 ++++---- engines/brave/video.php | 65 +++++++++++++++++++++++++++++++ engines/google/video.php | 61 ----------------------------- image_proxy.php | 4 +- instances.json | 46 ++++++++++++++++++++++ misc/tools.php | 12 ++++-- search.php | 15 ++++--- static/images/image_result.png | Bin 5387 -> 704 bytes static/images/text_result.png | Bin 5281 -> 598 bytes static/images/torrent_result.png | Bin 5340 -> 657 bytes static/images/video_result.png | Bin 5043 -> 360 bytes 12 files changed, 141 insertions(+), 84 deletions(-) create mode 100644 engines/brave/video.php delete mode 100644 engines/google/video.php create mode 100644 instances.json diff --git a/README.md b/README.md index 6bc78a6..0a3c1da 100644 --- a/README.md +++ b/README.md @@ -19,13 +19,13 @@ | [search.funami.tech](https://search.funami.tech/) | ❌ | ❌ | πŸ‡°πŸ‡· KR | | [librex.catalyst.sx](https://librex.catalyst.sx/) | ❌ | ❌ | πŸ‡ΊπŸ‡Έ US | | [search.madreyk.xyz](https://search.madreyk.xyz/) | ❌ | ❌ | πŸ‡©πŸ‡ͺ DE | -| ❌ | [βœ…](http://librex.so2mpiyfo4cje7bof5v52y3cvjyo2haxpqfvut4sr6gj2ul4mddx2jid.onion/) | ❌ | ??? | +| ❌ | [βœ…](http://librex.so2mpiyfo4cje7bof5v52y3cvjyo2haxpqfvut4sr6gj2ul4mddx2jid.onion/) | ❌ | ??? |
### About LibreX -LibreX gives you results from Google, Qwant and popular torrent sites without spying on you. +LibreX gives you results from Google, Brave, Qwant and popular torrent sites without spying on you.

If you would like to learn more about LibreX check out the [Wiki](https://github.com/hnhx/librex/wiki). @@ -33,7 +33,7 @@ If you would like to learn more about LibreX check out the [Wiki](https://github
### Mirror -In case GitHub would remove LibreX, you can access the source code via this git mirror +You can access the source code via this git mirror ``` git clone https://git.beparanoid.de/librex ``` diff --git a/config.php.example b/config.php.example index 6c42f62..5d90e18 100644 --- a/config.php.example +++ b/config.php.example @@ -10,16 +10,16 @@ "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", - /* + /* Preset privacy friendly frontends for users, these can be overwritten by users in settings e.g.: "invidious" => "https://yewtu.be", */ - "invidious" => "", - "bibliogram" => "", - "nitter" => "", - "libreddit" => "", - "proxitok" => "", - "wikiless" => "", + "invidious" => "", // youtube + "bibliogram" => "", // instagram + "nitter" => "", // twitter + "libreddit" => "", // reddit + "proxitok" => "", // tiktok + "wikiless" => "", // wikipedia /* To send requests trough a proxy uncomment CURLOPT_PROXY and CURLOPT_PROXYTYPE: @@ -45,7 +45,7 @@ CURLOPT_PROTOCOLS => CURLPROTO_HTTPS | CURLPROTO_HTTP, CURLOPT_REDIR_PROTOCOLS => CURLPROTO_HTTPS | CURLPROTO_HTTP, CURLOPT_MAXREDIRS => 5, - CURLOPT_TIMEOUT => 8, + CURLOPT_TIMEOUT => 18, CURLOPT_VERBOSE => false ) diff --git a/engines/brave/video.php b/engines/brave/video.php new file mode 100644 index 0000000..77fbc26 --- /dev/null +++ b/engines/brave/video.php @@ -0,0 +1,65 @@ +query("//div[@id='results']//div[@class='card']") as $result) + { + $url = $xpath->evaluate(".//a/@href", $result)[0]->textContent; + $title = $xpath->evaluate(".//div/@title", $result)[0]->textContent; + $views = $xpath->evaluate(".//div/@title", $result)[1]->textContent; + $date = $xpath->evaluate(".//div//span", $result)[0]->textContent; + $thumbnail_raw1 = $xpath->evaluate(".//div/@style", $result)[0]->textContent; + $thumbnail_raw2 = explode("url('", $thumbnail_raw1)[1]; + $thumbnail = explode("'), url", $thumbnail_raw2)[0]; + + $url = check_for_privacy_frontend($url); + + array_push($results, + array ( + "title" => htmlspecialchars($title), + "url" => htmlspecialchars($url), + "base_url" => htmlspecialchars(get_base_url($url)), + "views" => htmlspecialchars($views), + "date" => htmlspecialchars($date), + "thumbnail" => htmlspecialchars($thumbnail) + ) + ); + } + + return $results; + } + + function print_video_results($results) + { + echo "
"; + + foreach($results as $result) + { + $title = $result["title"]; + $url = $result["url"]; + $base_url = $result["base_url"]; + $views = $result["views"]; + $date = $result["date"]; + $thumbnail = $result["thumbnail"]; + + echo ""; + } + + echo "
"; + } +?> diff --git a/engines/google/video.php b/engines/google/video.php deleted file mode 100644 index a9a2b6c..0000000 --- a/engines/google/video.php +++ /dev/null @@ -1,61 +0,0 @@ -google_domain/search?&q=$query&start=$page&hl=$config->google_language&tbm=vid"; - $response = request($url); - $xpath = get_xpath($response); - - $results = array(); - - foreach($xpath->query("//div[@id='search']//div[contains(@class, 'g')]") as $result) - { - $url = $xpath->evaluate(".//a/@href", $result)[0]; - - if ($url == null) - continue; - - if (!empty($results)) // filter duplicate results - if (end($results)["url"] == $url->textContent) - continue; - - $url = $url->textContent; - - $url = check_for_privacy_frontend($url); - - $title = $xpath->evaluate(".//h3", $result)[0]; - - array_push($results, - array ( - "title" => htmlspecialchars($title->textContent), - "url" => htmlspecialchars($url), - "base_url" => htmlspecialchars(get_base_url($url)) - ) - ); - } - - return $results; - } - - function print_video_results($results) - { - echo "
"; - - foreach($results as $result) - { - $title = $result["title"]; - $url = $result["url"]; - $base_url = $result["base_url"]; - - echo ""; - } - - echo "
"; - } -?> diff --git a/image_proxy.php b/image_proxy.php index c0d536f..9521952 100644 --- a/image_proxy.php +++ b/image_proxy.php @@ -7,11 +7,11 @@ $split_url = explode("/", $url); $base_url = $split_url[2]; - + $base_url_main_split = explode(".", strrev($base_url)); $base_url_main = strrev($base_url_main_split[1]) . "." . strrev($base_url_main_split[0]); - if ($base_url_main == "qwant.com" || $base_url_main == "wikimedia.org") + if ($base_url_main == "qwant.com" || $base_url_main == "wikimedia.org" || $base_url_main == "brave.com") { $image = $url; $image_src = request($image); diff --git a/instances.json b/instances.json new file mode 100644 index 0000000..d99885c --- /dev/null +++ b/instances.json @@ -0,0 +1,46 @@ +{ + "instances": [ + { + "clearnet": "https://librex.beparanoid.de/", + "tor": "http://librex.2356uhnbpv5nk3bni5bv6jg2cd6lgj664kwx3lhyelstpttpyv4kk2qd.onion/", + "i2p": null, + "country": "HU" + }, + { + "clearnet": "https://librex.extravi.dev/", + "tor": "http://ncblhz7q4sfbf755bdbhebfzxcpypz7ewafgi4agatecojz7pln4i3id.onion/", + "i2p": "http://rra33hiaf6nmby7jfpqe2gqmng3jnzkvbu2n7jgce7vbhoyuhzya.b32.i2p/", + "country": "DE" + }, + { + "clearnet": "https://search.davidovski.xyz/", + "tor": null, + "i2p": null, + "country": "UK" + }, + { + "clearnet": "https://search.funami.tech/", + "tor": null, + "i2p": null, + "country": "KR" + }, + { + "clearnet": "https://librex.catalyst.sx/", + "tor": null, + "i2p": null, + "country": "US" + }, + { + "clearnet": "https://search.madreyk.xyz/", + "tor": null, + "i2p": null, + "country": "DE" + }, + { + "clearnet": null, + "tor": "http://librex.so2mpiyfo4cje7bof5v52y3cvjyo2haxpqfvut4sr6gj2ul4mddx2jid.onion/", + "i2p": null, + "country": null + } + ] +} diff --git a/misc/tools.php b/misc/tools.php index ccec96f..b2ca595 100644 --- a/misc/tools.php +++ b/misc/tools.php @@ -19,12 +19,12 @@ else if (!empty($config->$frontend)) $frontend = $config->$frontend; - if ($original == "instagram.com") + if ($original == "instagram.com") { if (!strpos($url, "/p/")) $frontend .= "/u"; } - + $url = $frontend . explode($original, $url)[1]; return $url; @@ -59,10 +59,14 @@ function check_ddg_bang($query) { - $bangs_json = file_get_contents("static/misc/ddg_bang.json"); + $bangs_json = file_get_contents("static/misc/ddg_bang.json"); $bangs = json_decode($bangs_json, true); + + if (substr($query, 0, 1) == "!") + $search_word = substr(explode(" ", $query)[0], 1); + else + $search_word = substr(end(explode(" ", $query)), 1); - $search_word = substr(explode(" ", $query)[0], 1); $bang_url = null; foreach($bangs as $bang) diff --git a/search.php b/search.php index 4d1fb1d..c02c7cb 100644 --- a/search.php +++ b/search.php @@ -1,6 +1,10 @@ - <?php echo $_REQUEST["q"]; ?> - LibreX + +<?php + $query = htmlspecialchars(trim($_REQUEST["q"])); + echo $query; +?> - LibreX
@@ -8,7 +12,6 @@ strlen($query) || strlen($query) > 256) @@ -46,7 +49,7 @@ switch ($type) { case 0: - if (substr($query, 0, 1) == "!") + if (substr($query, 0, 1) == "!" || substr(end(explode(" ", $query)), 0, 1) == "!") check_ddg_bang($query); require "engines/google/text.php"; $results = get_text_results($query, $page); @@ -62,8 +65,8 @@ break; case 2: - require "engines/google/video.php"; - $results = get_video_results($query_encoded, $page); + require "engines/brave/video.php"; + $results = get_video_results($query_encoded); print_elapsed_time($start_time); print_video_results($results); break; @@ -91,7 +94,7 @@ } - if ($type != 3) + if (2 > $type) { echo "
"; diff --git a/static/images/image_result.png b/static/images/image_result.png index 732a29537d9f9636fa91d71c2558173fd98c9b77..84dfca07e6e3c5ca17c0f60a62fc374345700133 100644 GIT binary patch delta 11 ScmeCyI>0(XWplpJ93}u70|Ws8 literal 5387 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 diff --git a/static/images/text_result.png b/static/images/text_result.png index ef8a43ac678d6e5dc106cf86c327053ebbea3434..bdb859ded252d7b5be46f82c5f684a63657a4238 100644 GIT binary patch delta 11 ScmZ3ed5vX)%I16_BPIYE)dRr* literal 5281 zcmeHLc~Dd57QcYV@=y`A3KfY#r6M=E*_RTKB`iXaB^D47Z;~5`WFrd%s0s)!V9RDj z5fnvAQGw!G6|^dfh)av8D6|49@LT|u3M$~c38*-)GjE)E{m(mdm+yS%{JwL3=X_`K zWwXDZ=Oj}rQvd)ad3(7BqHjoh8&5=^!TPT@0)YOr1a62b5RSvh6*8enj9^spas-2D zL_z@2+Y(W3pZ6_7g?->t1aQzcDqg#^%I^zE|~gdh|AUk7yE34%x(>G`#j> zQE5bKb-2M_@t8WFdl9LF>0EAa|bARYSic;1t5V2jRPV>}>a*aQ#kJxa+4@ zR)TCwQI?s?7w)p6O=xRin z{vD5*_peNP;?-eKzBA9qD0JJgD$n+>zqos&vp9{lli%qlM^a{$uX%REV(sfR#_a$M zbLiTP4&KUok69V5``agC$(8#a`Slf7J7pY5Dynd(w9UzGPFTV%ai%4Uf7AD5C+>1N zwAKW}-oAXQnTc_d)#kvx=eK`nyjca<8yC)380rN+{2s$F^~iX%I%4hpB3 zEWf=OCj>6ewb<0+nl$NZ#+~-*ws=LxoovfeS4)>iyj!BF250G;)Q#)I+j6_H1G|4Q z%vjnwD63CP>)H6=v@+4NymI%RW19<0<@5hCFE|~rVdhI>RaW}FQ#YM^sMS^@$A*p9 zq&m6U?8*Giv)i`+t;M-}8)vUIfZ9vDHuMY50DxYq$j!~)+s*A=@uMYQuqK=3b$;>e z3lU)@?ETnS^O#Hig$|q2nX6}{`_FAMEoW|D@!F7Ml{0;&=h>reZFRhxXD@^X8wI48!9c3J!uIi<;VYc^NC%ZY6?v&ch z6?x%n@2`+IUnkjmFeyuC&;7zw;&7a>$jbiNycli(s4*ud1m$5`sCqPj(uxA?rk-EElaMT96#Ra2&}J0E@n!O55*#d$@erIwB1fAQ0602p}2YwVWI#MLIYCsT~0LLg)Yx_gX4pd%JGN~MxB z@%Xs7I9wbFCsRb?2@D1U4-xT1B8X~$%6O>?)__u_trlVw!yQrb6(YGxB$Hyam@rSK zRHbRP50KZ%^fc@HmDjm%Q^GrDlbJA#_O$NfnAUF4mkC6|`2VG?-8>k_(Ug0Ml<4~LI??Ek3PNH=N25crNVkzEk@`!SUmZy#@%vZWZE&NzJE(+0R0VNEC=->y!(4men z{8+$vZO?cYu_OM!IC0b|jB7He-KY$0UT81Gzi)iWOYW%}Vbg-Fp~L2>9|so(g}S@fVak>}&-4h(D0 zT;5&yT=Zok_X<@4z`v$xZ#^KtU=}JgQh9UOMxDk}0UI;(zUV6SuOw@4cNcEdpHD;n zkaR3IAEC4JgPHUo7caxS8`I_cQpBbqhW3CxP;XdJ*4CIbqr!kmzu}_k4_kS$G0IRF zM<6sl9S~$XK7Qr+cA~}DH4T6m67*MRj@r-&kG7TJ zbz5u8PmcU)l@^UUudjLTurU#EE-Y)hv{Er`QAzfp{IVE6{s-ZKX}5MP zsd0=^>rYKx@6|dx+24ZZjY)NX64;w@>!EW>ZSI=^Y;4)Ug`sn+g$0ke>Z47GiAC#k k#QWws)4z6e9ld%7CoCAMDb8(~KB6luwx4^2>#CIh0OLaM-2eap diff --git a/static/images/torrent_result.png b/static/images/torrent_result.png index 9dcfb01f3a68009f49523356f04736f8a19b2bc0..7104820e7677bfc48897244a002cac6b4245ab47 100644 GIT binary patch delta 11 ScmcbkIgxdO%I18bTqXb;Zv*oH literal 5340 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 diff --git a/static/images/video_result.png b/static/images/video_result.png index bceeab4db824b0084875b6dc0715cfe61f5f52f6..d59dd77b5f0ad38f4161aca0f9e5d4539b97d8b8 100644 GIT binary patch delta 11 Scmdn2{(@MunItzMGXxnDAjU9Pp+fQI<|YKlKym{CtAKSzMFz`I zwAR*I)cPDt8Tu53qT>8edFZQDEp~V^v=#)UzLS86>vgTSTd9*;q?AgxX#SEgeSo~^|o z%&3$T2*!@bA4-bnEOgi~P_?gcXR(uW%lB-l8gA*asklO^Z>ZjLQ^46`<@0dUHJf(i z+3;0|)4fssF8eAERNcs*-&J0__d&~GY0^KYWqspWyRmohf=4%Tqv#J~PTe!l%sT5U zpYJ`8yuKmH^7m}0MSL%L{nM@K!jnTI&KJve_HqNu0=Z>|&;H$SurpMtat}9MWglKN zq;J0$Fzfhj*WYY^b1JqxW&1Jld=57}s3p3@JK(Z)#7XknEnZ$dzv4?~PP^=y`u;CZ z1V40NU%lG6-*r$|ROWr4eoflc�EVtLKsxJJ$aG^q=a!Qu`Kh|7}0TK<({q@06DB z{23?ze5~|eA0#)sq@_;1Cf@Y@JK^n=na#%z&H5^MNk??FJ0|U{bg7R0M1Stb7vtwxG zO`h%gID68Cp}Bc3NU9L_h6t(NOSeoxStRcp#4jNH!}G3I;k*3SJzT&MetRV?_5J3Q z`s4IV#LPrF^ht5knR#O3;Tf*OE&I@^uCCh;R<^Y<(?rG68>Pkj4GZ1gDrjsguBgQp zQ#_LRwY97Ji@B32lFJKM_E+f_mY)c$?Yv_>Wq;g}81!aT?5Urbw{IL>^KN=a%!w{? z&5c@d%gFWEnr{98J!RG6?Hv3weB*uO-$=` zb?VVdzIRH}{JL`Dj7{N?dNPs4pvpJJZfiJCmWRo!>@lnAf`kJ?2df9rEz#7>{K$O; zcXRK%`2=JpGCi#ERA*<4^k!po z!U~%eK~B#I8MrP6FLHif=JIZnQG2&AYrrF`hmiZtrMMHQLlm<$eD3|=dG(8|lBWfG z=6Ng=Uut_KpxIsRGfeeN?veVp4&VLw)0G!09D41VPAp^l+;_ZREfGIzh@6cGMP32( zJ(xePYbs1EOIrINQQLmicTOme89Cd_&0ghGLtE^=sLwkiE}D69K#{ndqsds_`p&I} z`MC(^z?VMy-Ca)3@lDPG+nv!uJ1lhrx1reBy_a>y!lhjrZEVBNFM z+}`??zDsD`^ENyPd{m&yb+Bwq+8cf1aSwV&T}8-ObS_OBTx?j?Rr2Irae)W%n>%Nk z4dRl4ywj)P>qU$$TU)nVpM5Cvmy}uml(AOnug(! z6jLbGd{R&SX%eKA@kuL~5?G=Q!BUjrIXWyhCn65bNkh3Z(vkpse&FRQcDwd9^fU6#?N_%C=Fp(r`Ji;V_LaEZ4qk!12 zc;ZU=OR-+zW|}dlGm!`gAIE*g`$g_%XW%7~@B|vvV4^1y@JXiic`^;El<~|%6z0NG zMCMDDF==u#gTsKy2&f1$odMH1QVv_jMvw_mBDEez)F@_x0^k%Sz(HsXmYmLzljX1+ zAv5G`IT>O2vdJ_P0#oYCLTD2qB6Uhol}P$TRwgK!35vtU7${3d=CWukGJ^#uN!b`o zmU8I`n@fY)ER1DlBSU$i8l4IO+o@C`3XG~%E6fun!FfSZB0h;ufnQpp(h*z^0{En5 zO0~iGaw1Nt!eVj6q$Z8Uf>~S^oz3NPm^64o^m0t62bE~Tq`?$lx;fmmEj*A65Ee1j zDF86rK`y)y9fsf-x93G7oM~8X7G#-sZ zh8esu0wy?#My8Z!|1WRT;eq^tKiKkcr5>!GZ8nXbs8}px^lkJtU1>f_5M(|SJOmw0 zL62l&GBZzrH9Cc+AZi5$y2n_#zOXC*q!eH|ER)MwzGMcI4yuX8K*yfSVGjAFVB9gmsACCJ zO+Dj9#{Sg*(!}5FFrmqSxKSHuUZ59J$D84pW`OTs`5D`bzj6r(db7xD>H9{mH*&p} z0#+8z3%We1$Um^2=;IX4`q37*H0O1-2o-y6$L%1!wCc^|by2S;}w>rC?Tv*~bJ^5}hSg2D~`>RNhHo|QL5v