From 52e12af4403ddf1a1d485609068c1756e60599ec Mon Sep 17 00:00:00 2001 From: retoor Date: Tue, 31 Dec 2024 18:07:48 +0100 Subject: [PATCH] Update. --- README.md | 40 ++++++++++++++++++++++++++++++++++++++-- pgs.zip | Bin 0 -> 8994 bytes static/C_Logo.png | Bin 0 -> 23215 bytes 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 pgs.zip create mode 100644 static/C_Logo.png diff --git a/README.md b/README.md index 9c6ef4f..a2af390 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,38 @@ -pip uninstall pycrypto -pip install pycryptodome \ No newline at end of file +# Pretty Good Server + +Multipurpose load balancing intercepting proxy written in C. +![Pretty Good Server](static/C_Logo.png) + +## Introduction + +This application is load balancing intercepting proxy. +Key features: + - security against ddos of your upstream server. + - distribute incomming connections over several servers. + - host multiple protocols / services on one port as a security measurement. + - advanced routing based on host name or any header data. + - interception of content. Modifying content going trough this server is possible. + +## Features + +### AI Support +Thanks to the Python implementation it's possible to use AI in this server in the way most people are used to. + +### Interception +All upstream and downstream data will go trough Python code provided by user. A user is using this capable to modify headers and content. With this functionality you can enhance security. Also, you could apply corrections, translations, removing emoji's. In commercial sense, you could replace certain words with links to advertised content. + +### Advanced routing +Routing is more advanced than any other webserver provides. For routing Python is integrated giving it unlimited options. You could even write custom responses with Python, adding webhooks or you could override an existing page of software where you normally can't control over. Other features include, but not limited to: + - Force the usage of authentication tokens. (Or base64 authentication). + - Validate authentication tokens by connecting to a database. + - Do rate limiting. + - Execute calls to AI to modify intercepted content. + +### Load balancing +Using Python you can apply your own dynamic load balancing rules. You know exactly what servers have which connections. A good idea could be to include the server load or other statistics in the response header of servers. Using interception you remove this data for the client. + +### Hostname redirection +You can redirect based on hostname dynamically. You could use the same source code and base on hostname for example if you use production or development settings. + +### Application server +Because of its huge concurrency capabillities it's perfectly fine as an application server. It's not only a load balancer, it's also a reverse proxy. It's a complete solution to your needs. \ No newline at end of file diff --git a/pgs.zip b/pgs.zip new file mode 100644 index 0000000000000000000000000000000000000000..af1d98d6235be6fa80fae06b4258b8cd2ecdeddc GIT binary patch literal 8994 zcmZ{q1yEdBv&RSb;O+#M!7Vref&_PWcXv;4g1dWgcY?dSyA3YELa;~n`}S?#?!KDp zshL~1e&?L(d-`_&`^ZT_Kw46n%gX{7o%bE3{DCPdDSV`&UkreX8` z>Ix{%sZH!FeR^9;Qgo$6BTq!}$h?qy_0Katm7pjN!DaL%} zjf4`O`zl&B7FH)U2pmcsT`3xg$&K;KZP?FQ%q`$C;&J3)`dp&M)@cKmndXkd1rcMc z0^2c-y0a^E{Mn~zj`h?&$;Saz>$0WF#pdW+>r3NYO+(iBVCUmEn6c z-;Z3FJ9uQ}SsGATQRWx~MIQ9&D5CP%AeuunrtBF~?4Y9VQsPJ}UB1gMTl;c{F29lJ z7<(g_x0v?>Pgm}Lebmg6r9RIZPo(zhG3!@DeD#s3v5l^szNxX}pME+Eay0#AfAf=Z zxDdP_2@2r+A`9ocp4?d!sv|2SZHEb6VQZP0FLA;Im=uXT#SXy9*$}8~ zZlWJ#JvNdcMT&J}yQbUBpN($KUh5l#hgmR7QujXIr)c|YcH*pA>f{CKy9n?A03SX8 zfbcpyJ5xtP2Xi~8KPTtr=V3AM)I+% zuCDbhI~-B&tZHsfblHMpI9Dcu4~V|0rZvOtU*F6R)g+a@oG>v@=lAvY?5KBR)h2e* zc=G)`KAuWGt@><*QG0h?)MT#IXL3n+x!-lC8+GwwXRPmRhT>mn{Lwq}?33EtSRXi<`FhXi=lL|{? zx(>r9ljcFhR!q?@k^l+OzR`f0yD(F+K}l9m$iWmPV~hS1U{YfOM_AFGQDRhD%hNNT zgYM9-Yw0bV$7k6z?pBEe@ggYM#Sd;-^m+&$WfsFUsvpPaGwb=ghS`GSQ>IM-Ej~=Ra7MFflb=6ubP+x*J#Uttr zh$|}EH)90wDx_iIrF$)yxH1W_<*dFRgXtdJJ7cfWmXvrT?2&K zIGedze}aEJoAHl@O%MXT_3RSjP$JNJd#b)hO6SswvefOqhcTXv1@-9DQa5jx5@`Qe z>y*-2$Qw-q2^CsYhpRR#0F-x6DWot>S>*wK z#~(wN#S73GPH;cBSZxVIZ1!_)?ciXgw&Zj? zV=>;+30R>;alIf1sUfXixBSX*RcMcb^hY}U_N4XT*i7W{g3**gcS*eYwrOka=mtAK z_1ce%9Ycqyk|d9Jn+0;=kiicTFJH?)$oZqtT(X!VqU>o`w}h7LSZCcP<{J6R{c|t=MbvL|+P9~ON31hu+1VlT&xGTTFH^o zTHy=g#`*ZE%$o)FM?of}(Cd+YKJvh-7(xn=i81bNgI7nrT&6y&fvPH^9+6U!v`}hu zHboM$s*aJWfi63ANUGOj-vCFTER;hNTeUl)S4=}gIQteYDZtsNp#2ucx$r~Ku-mD^ zM1!L|v!1QMyQp9W$rR6t7TE&70@q^u<@R}45~_$G-j>q++mSXu75IIg)aRIUF#c2-j`Ay{6LMG6jh?Y!YqP6{m9I`my^bT)<`ycmf$`23Ubxk`y0xN;* z-=22OPOd|mqPlA3`Qpwe1}=5tqG{;3aau-FuPo&Xa{)o$eHctD#e99GpIXZA+ZE5B zg?dEP+AT@mwIAGFf7dBlQQG52mY)V1lgdZFLoqplB%{kZO@~#Y2X(i`GH>3j{A+hN%&ZkF3pa}d&}~x4wACMXyj>$6o&e$^^xOV{{bOKH6|(1EKPtc6S%#wt-aQ$*ae~2L zv*Yle1bNWeUgupkZ*3?@MQ1r04RtM7D}UhWuj-i!@$NFxOFYS%rECV0-%CHKoZ4)C zvwI&Rl;d$vSGjK@6gY@5oCiUk0v5_g&=9NfqliYE!IIx3=!Ho|`_lyp8j%{$`UNZX zMQz!SLL#h4Qt2Q>kNd6Tx!vtY0c`Ju8Lzbgm*_XTMY@TOmH9<) z1ihaRC0O0%t#+Oh@K%_llM?s?;dwJsMK%uZ7CnKuu^yop0^ku`6cTHTK6lxKCzNpc zQFl;wf`q(41Ru1#n>Y(z2E6B}A8aivOpYVNg_qsb?fcHMgm_e@rH<93_C^@?d;A=_+xuh-Dt|nG4d;wo&`zsYk!ynlWU zA!inKO@9Q6?qLHxco2IQ^%z`1T`I1jzC z;5e51zxDAXHQWz4;fiU|u1M|H9Wml(6Sw-a7a)d9q#3Hrvek2lwoCPVnmk}mtW&Wz z&9)J-qVbkYQmmp{F*~n+5Lna2YFV#Yi(BfS2Ko~Xp5EO`ad!x1JqpT(OF211Q&D)N zt5$yTD86}CDLGF28h*5O&i{GoIE%Pbn-PoWBtt==v$&~=t|_`t^aM*eT&Gw*0Eiy*9D9f%cnG# zUn-^L>KId|>KP$Er!@wgA*Td6nFU;0k%i<4!R}4B4Kljy(3^7(_(hE2j&-$ps#EZZ zv-g`PQe#GAPtS%K?zjqqJnkAF&RL%kK)$XghHLq1!C&ghl*IwsiPf@LE2#Q=L;Yh33v$bJG?k;cPLuADkz?ZN%-= z3)o-zq#{?Ax_X{MaN}#HTlQL&K>sJ7{4=BSa>Q_O4D zt+$f(sJUkrwNv4Of0)%LStK%mow>n*?xQ~T2o_xM&$ZGiT2c(3dPFZR`5x?ypkg+4 z44!EGS$Dtbk&@1UFeic9$z&7VJVe$GM1PqMXLzP*-}`~tJegl|^@O6JYX;i;0yJSo zQ0Az|XqIs8b2PHiB@L#!IZWJI<}pV+9v%&XXE* zsngG!TS1w%8A;4iZsU5lDWjkrMr@A5s1?R0I7?e;g^AH7ERNdIB*^e1H8C07c$q5k6?a;u>+|YVyVi-;nPTgns#6Kcmtr@YkQ~T}mxw2=pR_zP5relD6JCH53xNrqp z`P2mg^FY0NPUhs@_SwMI&qh%d`UMdL=~~HV6M{yDi=|4%rE&gzUc*gGf@j(}eXWBP zsMbLTP7!B<^p+>I02PPXm3@aNvrpbIMat7b{R?Ee8qT1KXlMg`6T=Q}z=j=P=}40~m;-`Te|E=CQ`LiIK8dPe|A7oP%h> z&mtvh3I`m~Wih1PD*(1sOb-W5n2W1Jr-S|9lXAxDJFr&<3H=`U?UC^XpZ1#sF6L;j zI80?^SG=muEmk9HxCO&ti}Z_%SaHtcy$xW3;pp$A{eB=`<<48$`n8zf}cI z9ENe9<9^8nZYgZWkEJ|*;f1NaWEL}1q9eN#HYK%{A&xpj8@0y|6xSQu#pgXw(J}-_ zv>06a+z-GXT<<+gIxh2Et1ZvNeG#&TDOK$1saQ=Ma|)5h%X?d#3i8F~?blvz zx?PpQ+2-0oa#7-TnXp@U2LCHi=7eRbqb4`_(7XmpxmSb#6)_xaooo$lt^OM_PH~+~ zf7#zchT{0B)Hsc_gmM)PP(osOVq$8fYDYl~Yjkt~Wq9bLFgD%rs1!^n7~rqLOlh;! z1)nvEs$Rnr)oY~>`D-xu{|?h_=V$#xEyYGsH@uLjy1k`RR&cA_HqYOJ}B}8%kPh8_cjpvHj zejKe%-Y}JUs_~f4x@c;34{x>-b%?M&>>w|ZAg5~+`5;(s2I)E_NnM-0^Lx&!A7*$Sc`BXR3&@M=J&eo{k;<7uFYHH^8{nxcAM zWlig0KCudH2;iK+d47qA)3C7!=%as}o5T1(kk28#T8X3P_+rhPLZ)`Qf!R+bKa+RGhqIU zb?P(XK{~tX!xXCWyB$}Z+ix2wPkooIc#!M2WlU?0SbU9^G@tQ>K$R{_dYKmM&~fdNX6?rKSgH#%;>fe)A0?7niEe14w~v*!5Th2hWKQJ zeC&J)JI?$>G2OOigFi0C1o?rTrygr3!9ItwqR^CMtIYT(yLHV@`x&C+F*|f>eligs znEVyar?DU<*m(2HFM)uGU9BsZBf_x8xg+&iY{Pbx7-pc*( zZ8>{`_bsc1m}qw$BRSvYLjHc!C&$uYLyou+^WgPK@~_Q0Te5%c_KNT<^*Q>=M-Q0S z-A?$Q9L&+y(DJ|g9fa>>`pf>d-^bL|ZCAuld=@Gf-+dLLyjI2##V7u}BUdah%0b>L zo(2yo4P+o=qlu<#wK#fNUwR-Z9<)KY?js9s-54MDayRA4ykw^?g33 zJe9BQD?B!8uXKW!!=3n^QGI75gH9qhy|{58HqE#m=fTrqF!dt^fv)t_-GhKv(XMSp zaE~3D^n@?MRM#`-#v5o1WPUO^+Z2>*cRx8Dw0I0|phSE@uyB=DCoI7RoIFdE<@I-y z6yv7CbLnTQFRg9g$B$(eiI^QU{>W8w&7#%8PJD1FkMd-=BOmWs2p$=oP$L=pZN;!n1s;wQE!x{=-!{(V_J=q1 z$6U7-xk^X&wRLkJWxUC|vUkJGrlBX6uB6;L^t1sa%Nf>`Nil=uauHz6olw|Bsw{Na z$@SX`EwQYdh?IQ#P!pp+c&5oVYf+@#tnTD4Pp>jF7T+)_$=!li){#(}x!mC?6 zfQtqsW@;=FA=&pQtVoDmHgWGUdR^VC12V!GTq1KC{81gj6R(nUcH7P0g=3K{U~N;b zxiBX~AHZ&p)JJtkQ%Z)FbS)#UspOR+EQIBNHFa@ddmOH~9J0W3MKbs!F38&@?oFu< zQ1cS&$^h4;yAPFo7KRZp^N%uyd5*3~Jhgh%vT3?dWfeO^#G|XE6< z%dz5-V8R}fC)G*jHl6O}MU*#7MB*+y@G{%IdB7|>#rNRd&RqNz#B)}z<)m%~=3dBL zen33<`-2QE0uP)Xj|=T7BfR30ip|%3Baf!Xo&1Y5)UJkZdEqO~EOwk$LXUMRdFf|D5p6UQT5@;Y(B3`E;bQQo`C zM65%eF0w489DFerwL^~yI~3nZmU(9%McoUzZ^&AtdR-@)Vx>!g!SqiL$Y+y(HY57^k2?|vQ2DX8qTQqQO zYrv$>zaiOZeLm$oRgo_I2>7D5D3cTa;pIZ{i)S+?i4YLXsx~>mwm4D3jHR6@66Z!u zYM|<^G||KfTi~0L&|V#a}sHtk+fi+ibp~@9RVG5@G zIBe^D3d!;=c8(xc!enLIX1X5_V&ZSiX;9J1D(pk8uWt|chk$Xb}U zKi7%y4D85S3JNeO^XdX--Gf1MJwT5@I505|`ykYmfjXjv8w*uzSP3s`BE7*$V}R*~5dif>Ds3$fV~4o&H=E_Zy&~Ly^H6sR{~UCKEpW2o6Zo zPQSa>(M+MjLkW&$0ttX_Jud3L~4Hs7bF2VhcaJ@VV*eB+wL}{Q<`gVcuD!Cc}7a z%tGAOYgrR^v=ytKqR0hS^6l*S5&vDH;=a|*H|9R$8 zrdglKllqYWlSNv}P-}LfHmRQpxRiiPrk(B)wJ9%cy+@ zjHDm!b4gm=EJmN#m6gK^Pr?Q+_%J+O;>aBW+r>SSA#|gQD!GNy9B8Ix^O`PDK)p=4 zN)mJga%qR}gW#sTyC<7|=3YZLT}kw#fLxVp6N&dupuv2;Al_^~&Cwy1PYYc!XQj{x zc}hfzp7{$&BS!D=gWL?TKV{P8B;wV+XJ1lLR5QnSuSv%fo#(_9b6HrJp{k3^`xXJ4 zEu%N}BfI3o7)Ad`q5t0bo8 zady@W%Aaw9-zXQsz$4<+gTgcHsEB0I+S~|Lk!Q;gUXp|vziz;ii-SrRgz<(!OxJRi z6ifla*2#8*Hy{d0e29O8XGkM#DWAtyXPWBSo%k%t^)*2+)hz=0^27EgmQV)dg7{SN zrcFN+HBFVbyi!)7!P7i-0p)xfINhRe*_#z9Vj&y)b0%Ojs=07!hZcNJ`GuEx*engo zl_w;IBpOrdr~>aoS#NARF1K+((^97JsX7b#H1_BRHs8_qYYHVrF}~prk=$xsuJfau zk!E4zTSaEp>E1G#@NiH(xxpe>)^mSK)yRAIiF!0x;gR%gHw=8+phLO!_#kt{F@M1XV6#zrMZK?#>(miS5__vAf6ds#^I9&ja3GzrtE6g zRmL!flrftUTUSxI%lp2EAzW|JrDYW94~R%=50+S4e0uKBzNnMqTrr40OM|j}mW6V( z8`T<%zfw%zvQvU(2X<11Ru+Sa&Xi7;A-|(M9!aLDa}otfx5G($;FU(Z;6G<8)*V?( z`q{}`#DGD!?9xZy53I`ebY*p1)zu=-#7T)W?pOi+9!sg)3cAh*`abVe z6VWZYpU84jVBka$|KEWEoY&eE0C-jM0CoPqe*Ja40O~)-3;y;r{!aU6>-%?F{wwtV zHo{+t|I!5io%qjo_3uRC*KPBEn%A$ue`#F*4*aKH`8zNc@ekl1>g6lzUzE$=S^pFP ze`kdv{lWTE5`4w|iyZhn?w<<5@3>afSKM!U!7J}yw1VGx{}cg!=TW1*^8SznUP=EV z2mDU@XMyoM2@4AV__N%2W&KO3@jL6EA@6tAQUfp0DMLLOYoDEf`b0_Si-%2 NzP-9%mgLvJ{{b@CFF*hQ literal 0 HcmV?d00001 diff --git a/static/C_Logo.png b/static/C_Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..dc7dbd7ba43b533f4ea3b90b70e8339c4431a134 GIT binary patch literal 23215 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 be?aZx^a^>GHw6I5G>MVExn8}_-N*j}&t>S# literal 0 HcmV?d00001