From 6ff86dcc44f0033d9ce29c3cc58d6ba05c9878d5 Mon Sep 17 00:00:00 2001 From: NunoSempere Date: Sat, 17 Dec 2022 20:47:44 +0100 Subject: [PATCH] feat: redirect websites to open-source frontends 1. Adds code for redirecting annoying websites to their open-source frontends, when these exist. 2. Organize this in a "plugins" folder --- plugins/libre_redirect/libre_redirect.c | 69 ++++++++++++++++++ plugins/libre_redirect/libre_redirect.h | 9 +++ plugins/libre_redirect/str_replace_start.c | 60 +++++++++++++++ plugins/libre_redirect/str_replace_start.h | 6 ++ .../str_replace_test/build-example.sh | 11 +++ .../libre_redirect/str_replace_test/example | Bin 0 -> 17040 bytes .../libre_redirect/str_replace_test/example.c | 20 +++++ 7 files changed, 175 insertions(+) create mode 100644 plugins/libre_redirect/libre_redirect.c create mode 100755 plugins/libre_redirect/libre_redirect.h create mode 100755 plugins/libre_redirect/str_replace_start.c create mode 100755 plugins/libre_redirect/str_replace_start.h create mode 100644 plugins/libre_redirect/str_replace_test/build-example.sh create mode 100755 plugins/libre_redirect/str_replace_test/example create mode 100644 plugins/libre_redirect/str_replace_test/example.c diff --git a/plugins/libre_redirect/libre_redirect.c b/plugins/libre_redirect/libre_redirect.c new file mode 100644 index 0000000..b9da2b1 --- /dev/null +++ b/plugins/libre_redirect/libre_redirect.c @@ -0,0 +1,69 @@ +#include "str_replace_start.h" +#include +#include +#include +#define LIBRE_N 19 +#define DEBUG false + +/* Inspired by https://libredirect.github.io/, but in C. */ + +void str_init(char* str, int n){ + for(int i=0; i + +int libre_redirect(const char* uri, char* output){ + int l1 = strlen(uri); + int l2 = strlen(output); + + if((l2 - l1) < LIBRE_N){ + if(DEBUG) printf("Not enough memory\n"); + return 1; // not enough memory. + }else{ + char tmp_uri[l2++]; + char tmp_output[l2++]; + strcpy(tmp_uri, uri); // strcpy also copies the terminating '\0' + strcpy(tmp_output, output); + + char* annoying_sites[] = { + "https://www.youtube.com", + "https://www.reddit.com", + "https://medium.com", + "https://translate.google.com", + "https://forum.effectivealtruism.org", + "https://www.bloomberg.com", + "https://twitter.com" + }; + char* alternatives[] = { + "https://yt.artemislena.eu", + "https://teddit.nunosempere.com", + "https://scribe.rip", + "https://simplytranslate.org/", + "https://ea.greaterwrong.com", + "https://archive.is/https://www.bloomberg.com", + "https://nitter.net" + }; + int n = sizeof(annoying_sites)/sizeof(annoying_sites[0]); + for(int i=0; i +#include +#include +#define DEBUG false + +/* +See also: +* +* https://github.com/irl/la-cucina/blob/master/str_replace.c +*/ + +int str_replace_start(const char* string, const char* target, const char* replacement, char* output){ + + int l1 = strlen(string); + int l2 = strlen(target); + int l3 = strlen(replacement); + int l4 = strlen(output); + if(DEBUG) printf("%d,%d,%d,%d\n", l1, l2, l3, l4); + // if(DEBUG) printf("%s,%s,%s,%s\n", string, target, replacement, output); + + if((l4 < (l1 - l2 + l3)) || l4 < l1 ){ + // Not enough memory in output string. + if(DEBUG) printf("String not long enough.\n"); + return 1; + } + /* else if(l1 < l2){ + // Not even possible that there is a match. + if(DEBUG) printf("Target larger than string.\n"); + strcpy(output, string); + } */ + else { + if(DEBUG) printf("Looking for a match for %s in %s.\n", target, string); + int match = true; + for(int i=0; i_L9CMB5M zp)w#%qEW2G?|Si|SPFiL#4LG}MIg1(m5O3orEoVW+0{~}1bx7Q1yimeQL=@0KJroGCpPf@lbmh489 z-H5VdI!hHoV#@KPn9$Xz;_0Mb$S8T`uMkeV!^+M{_b7d)R0gF(9~hzkPI+z0F7K6Y zgp)pJ!GbB5_Z8Twu2mX$Cfv;jRe6i`!%-D~rYgK*b2QSqZOi6ps4g0br~B&q8n@ML z+u}e5sa{kDjj4T4cL=x{BTR)+_Qe{-ll;tc!$16^zmI)yYV^bCp@Wkb%nL7G zXCG81=};nj9umY;emO4EvD$wcISV6tIsB6t(Zx~^1l|(DyMe7Pfj_ngPP(P^A6^7+ zS_FRyxEGf*{UHFa69nIY>!A|3K>u`6cWe_WBiYs4F9Ly-5$t+C(AD#NpgS0eir!=- zZgi748jeHU)fWtON8-U~w)30_6yl zBT$Y&IRbZ#z;CJ_{8Z0euhMgs|Fl^MePGO}FemlQ534RpJ9F!cfNz)^G9cCK1?l&Y zA~*C%!L9^4|F$X{)%~cJ0ZR85z-&{ItRbO!GGStueI|H zziP=|{+gb>s%NHW+uBVuW5iEN)U z)}rY@fsC5I+?=Xje+ug2qN32BA>rWGt3)<_re|mM3m-kHUzl_2u6OjypBZc5;JeB} zl{wX2y&mmidy3DgT_hIiO&xk>*Nc?ZvmY2M^xUqO!Q^K?GtGPm!Fi|h1bEjG*cRE( zd;>yq)B!vHv;JrN9sc%1=(WQkJ-1}Tqtc-^(J-cGr}XSaeYD3gdQ&?#Z`R*ThC`u< z;p@_~+OVGOcugNo#5N~4cSeIiM!Ltf(H^voWaIhMs7GdOWmY?z)6VK$7zDp`!R8#Y zE!m&@{{h7anSa-RUgn41q+N?tb4|WM`8Os0+mH3<$7=NKTl(p%V%9YE?ECu0%X;>b zzWrTewSM|K?RNCc*+=H8p?_@#ny0Ut$m<*5ozD;a)Tr4Y(M-NdcTMS;DnSj*jDcuF zxsJ1XP8-VpoT^S+2|d>_WHm)XTL2A=rPq;?o_z=XxE33$QL146Z*QCCwOUJ=Br6M& zKZ8Wiz9-f6+>wcp{-p&(jC{P@GGu0|$A5+e;_(1948g+<+w<&+kNyvI8`o_1pld zQn!9Vf<54J1N6H|DrDyFenEBUkI_}u?6njI+g#aKNt3EB=i#fp7WcnyDh~8f#d5F8 z0OTyrnw8#9AsDQD1N(o>*i*>9Wo6GGd&$aTL9YC%mBs9>oVK#V$bM>NUqjY&m-H}# z?7dcYbbR0_ilqU5Es~RYeMrx>zdbz97;m4_bAz%AxLV`+r)Yu=L}8mbPrt&jdH|FD z+EZvnk-D5vzyI&hwMxsJr$XH)UxA|4YSqJ1u>p#UtsPrQR=jpt_X%1-{Li)y?z-m- zLinGd-tB0~e&TQUXK!`rgLO*)A8Orro9@y119R|l;kMgY-|!1{e`?L%Xw81KC;Oq_ zT=Oq_=AujA{?F-O(*66ZM|hpO*xl``UjGtJ2YJ7xJ3Eyt@B4*2y%d*!$`L3>pd5j6 z1j-R8N8tZK1nB+K-bfU$w!$HAIvLsF-H^IVbZ|!SRwfo6dZ&!XN749e{BZ$#29!1rL!gtOS3vtf zFU(>?4*JXu)2ziK=GEVrW+Ujvo2Gdfbm-qq^9*R!Z(#>YiQe^6a((llaP`%=?q9L2 z>KtT*KY;5ne4`pd>{&(|W$_5EEx3k1GR-yuJT-egwNF*w{f(+q;>mS89{bWG4-riE zRPPDsNkamW2sdzz0dE53^hIRO;<}9TUZuKeo|=~{cCTEz|6A@?mJC*&U7A_ue!+#> zSr$~czr(fdW79lq*LP>663O4g^&P}wA85hfNy`P5cMI2#Adg_nU68lg%4@4Al!w1Y z#1~Oc)hDJIMqcdo)O@R=#Z&u=Tl07amuQ|x&sOg7)W5t`_cUgf?ejFnJ&k@(z2Ea_ zv&Y-)scrVuG<&M#`%(jb>fxvS{*MA#PUQ%cBT$Y&IRfPflp|1%Ksf^c7b3vl_wo09 z^oUN0=?aT2d_agdSu)Li&Z74zp1&KsU-9bkU#wF+e?Lgi`;=Jz$!BJQ_+fg7i^R{` zqf0CvZ&+oTP;%N|QTj`Z2>Q;HQmsYAT1A;CGcl~b=c6qIrK9q9eqY7k9I9rCUR5yT zBdTIt?=fYMmk2U(`41|d_3&awwvV{I4&0ZijOJ zKSubwZ>Ph0wHa(uv`x{Y_D!PG=ni~UlO^1@d-o3SqaB^;xRLg5_igdj*EOUi*KqRj zdSCq(U&BTVzk@R+a$}U%mIw@e1c+nf`tR5g)?X`lU9n5u;$Fe)NiqI8QEEK9u{!Yl zFV@HE)nrGkyc?@lO-Y&`hJ@2sQIMN>oDVA zM#g2U50yu0FD_S!IK+UHA70l`YhD*j<*@IGh_=0$B2d$8!QP#-FHOwGH^O8f-;kiK(XKc)PCPt8a9pC)V$DEt!r z5sD=Ln*==!oa*oN69VofMMpXb{2>P>*{-CKGSYZ+-X-Rbe*}zJpo6YjqC+T=KropM_6NdoBiS#ylfhUx5K6~l zbd1Hu1)ymZsfPQ4R03*+b1i{nxHlT?3R_1|fZ-0{dDIH2Yfv2lnngq_qdy{mrc! zd6h?Lx>9M`vO6A`vCir=HSu8^dBi3h3L3$M?NKLp9LkPUKJ(Ho>cG!DBAq+W`8dT? zwiQ1#r06_PaWEkbr4oUjU_3-ee_9T}C=`hY(y1`wI3EJ)G4P$Kl=3PM7g1*^362nP zchK3Qk_U#04=WW{S@=@@F(cRsY9uY%!#Nyy3MYGoFP@;+E%CIkH<`dY6Qkb-b*3XY z)fNdU$lu&jX9SN4sooPz^$1_6KaL_SY9uYmAB2;sNFrXu1RzU>qd_uIx!$NDe6pcF zWbwuaEM-#RF5xr6ePC(yLpvcm-52gr}k)(_WT^qbXJv1 zb)-16J@3yVz^KV=&(G^jd0zzS(Cg*r<)Uk>Y^ggxy6ndj$! zruC{YXZ^VjgUC=!*`D_aOvjX>Gk)CuKUVh5N{{!sOpn^^$;KJKZv&&4uz%cCt)!^) z3EA2If9kOJDm$ia${iDjd+`?zd)~(|W&OqMM;!L2lmXKwHdK`TF@3{fKc)msw^GO1 z65BCEUpd?3$NMLyD_K!dXZ+q)_T2x%s}vReP_az7|Cs+rWTVjY^!bdybpY>4j>ZiS=>C&_-zPi z>~i_MU*z-feD0mQk?pu2zYkk#BHQ!6a#%fR9)--F*q-T97~AbdlhUrYD3`-N*pB%X zFeZ%4=jYHGW$)Cdvg~P +#include + +int main(){ + char uri[] = "https://reddit.com/r/blah"; + + int l = LIBRE_N + strlen(uri) + 1; + char uri_filtered[l]; + str_init(uri_filtered, l); + + if(!libre_redirect(uri, uri_filtered)){ + printf("Filtered uri: %s\n", uri_filtered); + }else{ + printf("Uri: %s\n", uri); + // failure; do something with the original uri. + } +} + +