From af556cdb07404d9de2c12ba871ef23108711540e Mon Sep 17 00:00:00 2001 From: Anna Puddles <113144806+annapuddles@users.noreply.github.com> Date: Wed, 4 Dec 2024 14:31:07 -0500 Subject: [PATCH] Add a file server example (#8) Added an example of a prim-dns file server setup, with more intricate pages that make use of other files (like including a Javascript script) and dynamic responses (getting a list of agents in the region). --- file server/example/README.md | 12 ++++ file server/example/agents/index.js | 25 +++++++ file server/example/agents/index.xhtml | 30 +++++++++ .../example/example inventory contents.png | Bin 0 -> 22708 bytes file server/example/index.xhtml | 22 ++++++ file server/example/javascript/index.js | 5 ++ file server/example/javascript/index.xhtml | 26 ++++++++ file server/example/request handler.lsl | 63 ++++++++++++++++++ 8 files changed, 183 insertions(+) create mode 100644 file server/example/README.md create mode 100644 file server/example/agents/index.js create mode 100644 file server/example/agents/index.xhtml create mode 100644 file server/example/example inventory contents.png create mode 100644 file server/example/index.xhtml create mode 100644 file server/example/javascript/index.js create mode 100644 file server/example/javascript/index.xhtml create mode 100644 file server/example/request handler.lsl diff --git a/file server/example/README.md b/file server/example/README.md new file mode 100644 index 0000000..5ad9f3e --- /dev/null +++ b/file server/example/README.md @@ -0,0 +1,12 @@ +# example prim-dns file server + +This is an example setup of a prim-dns file server. + +The directory structure seen here would actually be simulated by naming the notecards as follows: +- `/agents/index.js` +- `/agents/index.xhtml` +- `/index.xhtml` +- `/javascript/index.js` +- `/javascript/index.xhtml` + + diff --git a/file server/example/agents/index.js b/file server/example/agents/index.js new file mode 100644 index 0000000..8631812 --- /dev/null +++ b/file server/example/agents/index.js @@ -0,0 +1,25 @@ +window.addEventListener('load', function() { + fetch('agents.json').then(resp => resp.json()).then(agents => { + document.getElementById('region-name').innerHTML = agents.region; + + let table = document.getElementById('agents-table'); + + agents.agentList.forEach(agent => { + let row = document.createElement('tr'); + + let col1 = document.createElement('td'); + col1.innerHTML = agent.key; + row.append(col1); + + let col2 = document.createElement('td'); + col2.innerHTML = agent.displayName; + row.append(col2); + + let col3 = document.createElement('td'); + col3.innerHTML = agent.username; + row.append(col3); + + table.append(row); + }); + }); +}); diff --git a/file server/example/agents/index.xhtml b/file server/example/agents/index.xhtml new file mode 100644 index 0000000..08b7f29 --- /dev/null +++ b/file server/example/agents/index.xhtml @@ -0,0 +1,30 @@ + + + +
+| Key | +Display name | +Username | +
|---|
L ztqDTnr_V&+s%)2U@VHl3M=U9$35+Qdw^kP^KHNzX)hkGIGxP)i|47PLe0-w4`29m4 z*=v8Um<4n;s;r731yn$WOx~SO2~QHo)hn$4XRnU~2Z^6=Q64A_41u{28M(QxoPCj< z+!47=WEyRBa~C^JkLsMd7*{;E#dm|#YHtp3m5-DC?kEiQY!saGn+#oNv$)v>FT-0A z!dR3eQJ_SLxua012B1cN@}Ybd%dWa}xj9ll(vREwi~_JZd18&SyTPenaF7m>ore;? zI74Nr%_mNtqTGlo6ZEM)>K7WoGGN-lH)VL$mX_a9)z2%1de2Ft53b`n%35$)xmb-h zCycWV6yFlX#SI4Fk&diNaG!TEJ1P`MYTL<`R3BeuxOd+V1f37PckQJE)9Fe z9%sw9m@rfRJJW;z>ugIu^SlHxS6j7dAGWZowodqo+}R%<(n$y+`4vM71E2_$?9Gas zgN+{qjnbETKRtNlckLUXb^NNrd9rGl%JHGsr9k3TCBJdauBlAW_1VgsrIN3msww=s zxsnKYT880wtvWf)FTEyJuQj^5>|6>Z=l&diFF6;?j0+6-AfgzCFTzhoLov^iq+owA z{#;qf14B%EDC-5R1O#RsBTAtJ7l{5E-w-_DLY+U0XN#Sp6rs}9S1{ceElnCJF;PF# z{Un*7(Pg?)^j}{=sSZw!GpiK=XW2I_F;&g}bRU-x*ZA*>OC|1BaQcLA2dh0}?e0+e zk7uucy}jwt`=(F26E@M9rbo;Iaa*-~!F6<6t!_ddOfyfHU4!5N(<~~$y4n94WUJqz zmS62JjyVSFJV*86*>xMbi$l2jEZzMnf*C?+vdY-5b!)yQ&dX%+O^>j#2j_CB`A?Z~ zbtnQKibFyaV)7qoV{R1{Dh@H4kD}3SKJXglXaYG@7pPDhfr@WQ Bz}b!aX6cVRp&Cvzm%b #0`?4C8;ZHQRoH*Nipbq1=Gs6ABj$$jgE zoJc)oxNnk4B+6BN1Rq*2&w3Y3%*i5{eW5y@LnrF ~*fe^4?Enf(t2?6oQyG;fH+piHnFF`gZD&y88Li2{mB;|!S z*iy2>a*ESY6@`NiOC?3(<6HAp>n)!~y@F>&Ce5E6B=&ycT>FLJqlrdsrZBa~2q?pk zj~vLRyC84Xw(~IRV3>$(LcggOYwuYs>bHdJt*ra@bbpdopNmS?a*~f0nbsx~(_XL2 z!lc8F3G&tnkKy52rCsevyqMMLi?`aLtFtk8M4e 6;hQ1FWLwR6V+^UHF@a&wAfoDvT`N6l`ffL7d=gniS+YzqWvlTqs1bvmlst!~ve z|K<7HF||Ouq >u=s5w$woam4 L;oIb?9Q7WzC2>TR7%Dy1xm zQ=XOMTyMFK=myj2)KB2tF8A)(9FN!7>DBS_xnG~U{mfyz+Y=srBHe2@-SWqL?4j39 zut>r>HfsX| CEHW#n!_~bEiU#YX*9QH zFll+;(5i>bN9KoU`WJ5&tNRVS% T( zS=0(?+LkcNy%YQdX&y4ZIwzMq6o0&Mh0D7a8gq%+IvFpGblYmywcvVEDWDjH3QL$E z5dn;cNYckLJPa9JFD|-2%m;aQwDG~i9c;2_6kpiKDwzo+iVm^LB#N6F+Ta xJjJ=r&k#Ru=f(ZODcD zEw=2CgmL(1ai{T)sPuQ*TNj;6HU3)b+Ux2ceLigtiSgt=;X?yK+bJN Q` zBNLE%DD&pYlL= 2AQbxV4Os`vo<6y(_Peinh6Q}jCY8(o#M=6imk*eO zzydCE%1~a2T~Sy&_GdA^Hbaw~CCJ>s=sExUCr6!~KC^^Z%y+UnUJNN#flKpAPB!L6 zOslfpLxw5yil680g_9Pg;B!-r2ds2=G~mwB+Fl>3my)BzIFS&TP7H5=1Cct=e?bA9 z60a{R96R-EC8~Lucu~h0g^f~XDNhowNRmiUOwY3v^T@FBo#d-OouI}5rmZ}l- A%@m(#l(jC8ZOwU_{I>dbdB^uT_95Hc*oY+l zBYrz#ND%_!>&J}`J@C1T7}ZNd?HV|I33tr>=v{|XdI06>X l!l13^DNup 059;;T&&rhC>I(_a!JM|-!q`3~y0MuYCmvM)t$yn-TgsIj= zU|y(}lAzC)Q4EqE0UmBESL|5$Av-<#bvm)cz*aEyo^s{Sge-7x$Zg0z>O5BTRUl(& zs00Ks!~~_{Y&$-ABWfjfOp;ggvNWAki@#WK^?bUV>X?x5e`7V-?sD2vAwF~n2p@&! zU1Sc}W00L#mg(HI?Am`P495$3Xz9;6M98~u>naQ31_P%)#>u{}Y<5X0>zvP@A(#cp z*=M*}AD%8g6i5&-aW_?;YV9;g9f)=wf6}n39}IlEa73Nwv-Nq^i1a#8=E2uDeYr{P zyS`V$Uu}A8FY-vsu=Ha#IouD552t0t+nMRh&}UCTlec)(*}Du&5cE(`0e{U >fT4XBl7(uXKyB{gTd(4PAy-n1GbwS5c_bTO$#uSAo;%pa#Zk z4FHUz;K5?(UZ-9i>7 XODr*LQ!CAK;&nG*moLI$Ch$bT z<8lx9E^0KSTs(84=^w|N(cn8RCN4i&vrjY@<=8c|XcMc2#SQ8N(f9*y8=Cex+cJZp zxgz#yg&>}xTVj~@Ato3ndU4D;$wVj(RaO%6#_IR3fr7lx?fOQ7nHFrU6+2f>`^14b zfH9?Y6SWmunrrdSUrc1n2`q|i7Qlh%*vGiEKZ>_x*vs-Nd+Z;?G{^F14J;8}Ac U3|iX&004EMlk;L&8YJ%X8-QM)-P QttEt~aAmu1SWQ_Y+@K?6t@%H_9eW&B2gS>*B=8QSL0w?A&f->nvlwPNzk&6F?p zdC 0<0ZCsc92X%9c%!WiM>Ap4j_p#^>ZyTqiIrbUevB(lBzUjAI*x_r Du{`p#Uz4n8!b|UP(&3_zViouNUxhU*o_62^ z@hzE?+8rZ2&3&Qw)W4rcpckoC;da>>FMz{%hS{yIvcNV&0VVjm6~;( *;7fS6By7ePTGGRf1UH-NmfBltmM>vJLSe6n zddOa)=-W{==((IFk0!ldf@`!VOHFYxd(Kw4WYsp}O~T9WWNrw|D2Bb L%mFO9LeL$fJ-{y8uf)@m;qItBKZ^#&z=Rqs5^giyk<`<`%18}4C$MEx#q+*H9>!-MSB5%vZDRNae_ KgxSIuRk%W6 zT#hvuL!cKOC0E}izsSGOdNLavT(MN%Q$yETb32pXZ&}t=mU7l+KZ&)*S>Of_6)xvE zg96+3NAZAR{ktDP*~W$mRekN%+D-g@$50Ed4#lAMYu-1|iqH6@V_}}bW+dxjhEiTN zdH_9Cxv)64kiIaV1Btw)_~~$oBD*^}F}iscR}+5lIq(#0u}%;N1x`^07c%x~D#lBN zO76-a%#-)h!m{)=8wx_$kwzO7Z0U{4z&ep{ MuWZ> zxGV|tK{VOltn?*t`frLoZd;8&eJFjwur>Z)G&LnxVW#JZkw>7)x^Yv`&pZ9j4QmCT z@*Zy2q!35VFK)|F?TLHs1PPP+_9+!4o8%Pp)qZLdo_?ISrmx6|pQt3n?MFt+)^2jB zKZIgvy |af0B|p{p;sLB`f*TZ~hYZicP9z7#ap*4|G3qU7dD5l04g1cY4~C zKwgFFBIQ2vzNTM-Nzg=Jr?bOOBFCdVSMqxA9gU^`7&;4xrBiR(f5d5LNw7?UbX>;D z6xVFN>-WJ0LEIqQO=; 8`&M?8~qpZuz7sAC!1tAw@wXPavgGZ1g)Vj~q zV|+_fi5lLj;ifh`L1jBxCWOtULCm=NHHR56+!(z`O6~1M+DuP=-|vqPx<1Gr8eTda z(oHH9o9dABH%BNd!;$B^ai_bYyBe}e 4}dzW?$! z{xJLcu+ZUXUE&?6qGj>^rRPRT;bFSO=o5z)59#gSkO$5&uU`ZMJqs+NxhS>vt6XMr z!%4b_(gxHk^ZJ1_H)||gl(>budfrME M&X8(Od;kAM|zRBxy7>0!z_oHA(|b z^3hq6!0g=V8?`&C^;GU+NUo$opFj{-hU|eaGMI@Wolx#*!5GCbC(CBh*Rw-_^~5RF zmH( RkY zi*o6teul`+sWYb5{pEYB2fpkNUFQ@AEG@r01?@sO#Z+)04GyW@*E#Gm?gD-bvHW?p z2P;qQ*JWCtG)rBPl4O~q{Gz3;*`{n+Rx(-2|L@2oZ7tv4GyT^rNLL%BHnK;)OW>cK zbYKi%d t4lBKiq4-}9PtTk&H(agquUNpA$8o|zjRGpuOn!f2!B}e z&}f@Yskf1CEs?hvjT8~Eq#}E#2@f{PF2%CU(!j01_+Hn+TO#t=vI!)G-~pz4()vO8 zXGTLD$*&pwAxIqPSl+qClVFv8w>f5+uGx1r!{f^DhWqZEVqwr0X3p4-ClRx{5p{@z za6Z#wKTl-2YeFgd)sdT-_0x?lJ0JWXD7$!ADzm?CS6#|})}gP&0982v(=0XqMTvre zoDCrq7KU;l6F)|2nWdvbh`4&|R)CcI=;#pMDy06dEY$SmyT#RA)+B64gD*c@_>{VN z2T82Ft6*Kp@LPA{PB3w~dTi~Q=Jz{0`0i)>z6{l<*hBiD-SE|_Nl89CTfYUi${F=c zqoEWM)$vH|^j>L$_<6^JCPg6QoXqcLG2fu8bku$UKfQd++Hip_*Gw8dPUUvW#>+Jx zE}nVk3dXH>>g%r=#nFVLtbn9^Nk(GGU}P7PULG^X4@(yfS-{mVv1`IfI (iO$07Skmccg z0@~IU+kU(?i5X-V${}Um$%z+g#V5F#inT -$S+A@s z2>R?FP>&zIri?(P2`IoqVAYgN3M7970SuIvr4*G-)J>QDxb33^kM(9!p6Q1Y2W*iF zA79G7>J4+*HEK==X4$Uluy@tpFR+TSgLmIc+&+{ #bRuKbPn#WzfS-yT0vf{Ru_r6a5oplXjnj`2nXchHXE z_U*J8UB;CEUfwOZu?RkgbdVPa|1*siMY#rrpcKHqSy50mk{THZRQpTc{i+8T|3SVx z^((#A_4;j+I!rQIeE5j9RP5#KDl3NAY!IJGY;kwbsHR(Rd>b7u)P+-qZ$WkpL8}c} zI8Vu%t2Oy=Ra#zCZjb&Xcly9>@_7=axFzpqvzIr6sDYkY8SUNyVqUbG07(uhzMYo? ziw2*#xZ{@6#ZJ%9;&KRWzL^?ug%b#&Oe?qixuP%6MnKK}aB^$`e>4;3v>i*O4c|0- zvG}}$qb)g{w(CD!eXHHmT{O@nXM|f|z;}ZcKIIFaet`IhZngVPj*E?Tt>|jUyZJ~H z5&5VN4Ln)6MAW7h6IK!we?&=kth~$PJ)eeEV35K;v6Rb~YjS%kQj_no;@M`o+4YRl zw(H%8@AOUEK_u>oE#EyBNpJnGFZxy19yh&OdSns7EV-11KNQKV5JNet6?3;yc;dY( zoN%jkRf`C~FV^k!ISnR=d&U{ACN^QUJaJKyN*@ymeo?SeKI#PS|HTeQqM;FJ;F*J= zB*sI=3h+yMm;~@?+g{AGk)`lZo~3bj5i`(jz{Z&9b)mCugMNmz*0;VS<&8M>WKg znrP8q*tH~({7U2Lf+lx+FQV18K!vA?`kTeCzVK^d71w`Pmon0$4B};%Enh5nTyE~0 zzo6|};`SH);LlK!0{EyDc=N8w?Hcj3_CY9S^(fl5+p=n8XwF# $H!2?~yA6 z38^b+L5qZaNSa#aZ2P`{tbgPL>>+U@YR+x;tcRBGZ2sJaH1B+WeGE1#k%yUG;jI!r z3^i1d5uy8E9=NCO6#veW`;_-2R|hOk`lS8ko=k$7eRiNsrOUy~#Hrg6p#(FNswvfo zA1`~$NlU;_W_@z+V_f`Hq)lO_mmhnrW;{JdM@Plpae`3HlqY+j4n6C9ZI^FlcT7W& zzmmAy_~ciJj|9g#jua0Bk0 ?~vd4giJJoD !6#sdf}Q7G Up?in=|SQh`S77IrvGIj@5u8 yYaL#5qG!oZ)~uh&lj4Bkv)c#nA-C) zHNDq $7&>uEBKTT^1`|TD)ECqvRLuvXa(@-PRPufG#FSTeG!*5{GW!#SsStNJG+?zb z*M=MOAxZ^pEr|nJYJU=FEf Iox~?d9nB+yDZB9=)+Cd^jouo-9Xjz29%@tt>LWOevjy)}cH^ zf=Ww7$v0O~ptE)PJH ^kbo+!rILZOp#tqi zf?0<%A3a~A
8f}5@tsN$lLj)j0gt%9jKA$;HY^+iVtqA#Yc>{Q9@KcTweBTB|j#clP z4g3PRFNI1b(|>db*eviZ7x~0an_9| +62#x^r5oz_GN7JYLJBc(I@Xy6Kw+hJfxfJR$fbw1nV*6GQe{ot)0Fd>TOF(|5O z_Hj+rAMK9!ABr>moH@>;q7oAmrShiINyJ+On4F*^8Iaj zh*Ilc+N|^M0c;{f-H||;s}gj5`iAc;_u-5xA7gne4IhOzoDcF8AZ?2Sbysb7#ezfl z!odb?_uKs7QK+yPH8Se1CB^PFXMNm 7yszi?Pk zm16QPfahi&v`rhWoD&0h^firA7D84gmCl`tmrqhrfYD%v%_&qfi+K_Zl-Z&<1Fp^P z0gYzD*mW%vs$V;}Gwcrzbn4rUIhIGf5V>>rW5CBxZ}lwfLi-1=43035HHenVT4)|g zbLX-6vAKknF!m*e?{o8=-n>3nnbpaQm{x$(&kv|Fp)%@MB>$p|Bt&w?!*%;oWYQ^| zYa+02_KHkYXl3mtz`MbV^R(>3lds!q^IbQSjkpe)ubxNjUIneo9zy7E@j%41_!7oq zY={7#X{32JqU~=nR*jj}y15BVZ02H!{@N35%A*RW9Jw#^kk7$rtc8E|cPO7Tu|tmn zOQZIyxzVx0Z=-M{LRVBZr~e+9PcfBQc^NRMesAvNx$i(VzdFYe*Y8A4M)`J8jN;RH zRuH?3o9rPo?;h$EHVVXq1$dg|m5mntq<(u4tqF~4cnld%RFPl=U}|R6?o+i9lx=%> zehmaMDNx{Z6KWKpkxbc!! zR{?Cw1OgBNVh*SHTrwiMFKMG)!m9nWor9rz_pWr llbm#F;%W+hlx;$Y%rI9cSsJO+z`%NaN>z6W@Y S$|VS% z;*p*qsNJ=b?)UfBChW7X?uZXNHXYu6b@I_ZOO+R~B6m2TJeV%w=)mAHee^vqn(I2) zhVp=aLp4u#4He=V9K#uPI8nKwl}XR<8$?k$Lhc@aI9>C8HR#Ov!LN6I>ENVys|f={ zJTfAe0E{X|x`dA`VyKOvT5?~wLfua_4NYAHSsxV`Ol^zx@$bc?l39rfee|2k8K334 zm*aDICmRL5vr)5{ScoD&*_Du@cOGPDFs5hqnD%)9Qi~2S?&wRU-&&MpK|tzXBJlG? z_GuMGZl?<747$qub{kC45=tJO5{v?`)r5W=sz8eaeT*#A1 D63Jyo2= z4JMxCbr$j;2D=SESALB^wMMkKYJ_(wfTdJez(M_aoVwu~qq`c5V-dWh1$K>wd^H3$ zQews`cetyp_G0^89)4auuk}zxy_-0cf EwO1Uee|rjIL`h2|ZEn5Sc;vu1e}4g;QZ(~z$Roz*#gTd% z)%3D+sBfZkZ}aQap0jgXRGycKVw!spL^N2saiddBs56lK>oO*USN^&$YLztB;Z}>! zr2#s!`n_5JI{(r%+pnp7%<+_6F8`Z+P1CoLXi79N%AraHF80I$Xy8cyqGI?W}D=6u!tb`~_6EE !0I$DlCSolXKc;friJ8JOG#R)!e3x{ zb;BDHE-{bgsI_%Pj|ltXHJRI~#UENc)jftn!UMQ%c63b5%4Chz2vf1*jF{m>hHv1p z1C)}bxRugZN^I}@QB#E>M(%7_a`v}Lc4hx^QWu~Eo1*#IGQwfWDp9B3(Z^LvqMc@r zZd!%NTCb`XolCv%m*E^Gk+1)kqbBy~Bj~s@U|p5W3gW(5Aj0Dmkazp4*cTmd=M8lU z@He-Z_)N{jU!*t-0xOpALISj5c4fW?1*=W}CjZ6ApY8?^?$iYxrZzz_wzxO|#RpY5 zg4u|I6f9yhXK4~_JXqg#IIQ;Q)DPZ7K+O4f6Ab+s;O<)BSzU|&m$KHy)$Q^>0zufP zf}3wA3KB(~yZ2GV`KwKZ4fAko-xnQ&c6!|YH383aJDpaJ?1V98R)3rFaexak57w4A ze~b8;fCIxhniYE9+*lrD0>G+yQqiQG8tD6iV*2NWbP_84{=gKM*fu*URAD*KT_M4) z^}MqO_1P}yzP>040mTR10`6XU)lVK^LfB8g(&*CqY>=ISnyy!Xb5twzONasd54)Z~ z4?z`q1V2`p1%n9QUkV~I`v)>P`WlM^xyplhjTqQSEwI=(BtBnX=Y!kQvS394nT>7R zGWDEwvtpj;z>aal<^IN8%#ui);L=WYw7dsex$0D4lQevimm^J@uF*o-bZ8Ap^2O21 zpCanc{+i^GAS&VWP5V?SE-W(eVyk+{ dQ8$Z{vGaJ4AkkK)g6IcX`J2w##L=qRdVLFn9(^r+hq$99t5WVCLU|Gz}` zViN;0ggu}fN eY zz3eW6;TEy2jVT6z>x-lN;4ODgWHz%*#Jg~7vieh%h5DJ}i0KMJ&kVoQI=${(R+M?$ zUYiKGGt8Y}EakKNKm~*>#|B GGWFb{TEeLfu3BC{>-sB(*+mTD#fBsC zErBwA4G=zhOWx(*ypW&N-8&8rJRb_#KwXPZ9OwL6o|OgvQ{;{g{?}>2(Rw<>_0O@w zdik5fc56zkU|Ps2i2^rBU!$2IQTFcke%2b{T$QhQ$}yVo^FDk+zxvD}Z%>TaG?e&J z`V9+fu`t!;9Mz+k*Y(akpRd+5NIUZjZG)KjVMC=V*5>9^3I0QMa;HaTzhhX&gGG^r zCt=K$g9t4bh@lm(6+I{M-XaXYI{#hl3^rYFG^vh~I;mKDvW$TJE*g!R(T5|@Hm*EU z0xaP-A1OEZU%&h(W9mqIU@L(i!bh|9cNqsFO(SWBsOqcicS}A?MP>QZ(I%Culs2Bf zaw@B052>;#CW}jX@u_Cv?Y%XhkN;=q1_+|rw#~YaoMsxveMEM?l|NUvXVrIXaev%o z-Q!+mF{0!M$MDcGDGSM7wrvgODs!pzKl a_OX-ic zxr+GQ5|ap&tsf)f@bmLkR?8I&ANk^;2B(HwvVL+KMgKLFKc`yS1lzolBbGn5i0-Kd zNuYTym+ z+W51h7`9{n=HK6byrpP7^7>fv#SAV*f&{}--^Jr#Kg5rr$l);g?78Gf1yU0DHloTl zr9(^&rls4_PP!7X!!CLYqqSt$mD`6R-oV@g@Kf8TB3hlVcr&NLr OUrM?oS_voKnbmZ9_wEhtm$&?L#?HnXwhf1UeVx^B3n5 z&l+n9N2ph%Y?wPraP@$?PKOo=nSe8sz)2S6p|I|`AKf~v$u>@$?E;=MWPQ$1 >}YzeNaXtcx2_6V^9AzdpSh5=75d&0;5#a6Dabd@hUPe`sYWHw{pQr@yrV zGerG@z0%X9b*{pU0zw*JR!!-Mpc#vbw8OveeJlLkNxG1Rn$=+ds~JK~!3%`7A`bN@ zIH^30H0%)`nNO(+tVDGnOl}6$TwdOg&TDedMHoZy1F^a^*uj)`X?Se7mJmrVD9^oh z59tMNk3Kb5!>Q^aAt5Zvz%XON-1>0nZRf8{)-ka-Yg!jzNVOFqx2zf$4*fbDt~c!& zzI@y0s|)L !iR3i1Of5(kYHAP z=p!VZ_p7IIsD&L Y`4;41ai%=%a7^F}Yb;S785DFPb`U%VZN2iK8e zY9HedM-fgvawjS~mj{p3Nn>@{nTv3pk8_ove5L~3!qIC6<>jx1S#JwCf& ?oR^5<(cuaA%_+1=4>d@l-mV64){FXoQ(I-dJdh ^tWVChUmKd{?2%NY|QCRnL?@bC()6I!0@Aa&hL=JLL9@;yNo;Is<+Hx znX>*~!eW#?KJDe6Js(yRwLb~`+^d?*>-C<^yqiMn`BQC 1Ad*EIzo+&raxZV}zq~sieGJLU1*vq+d4m5QMxc54Vn{s4|5L >VMM;RL5vnz6&q|G!+Fwz7)e1#viIJk;T2-yBR?S+WXi+P++ElGRx8Lu1 z&huAJ?vtF{pZlDAuFv&;zpl4K;V|H- qnhTVBEvBNm=gl_yMp`NgokaX`tUmKr5uU1cwXRhJHe6l}a1 z!ph<}PS~%6860hXM=XUk11HHrjZ;%zzsZfKSKQOENo76Gv|LaZW5E`)%=7=OuTt=+ zf?LK~bMO5oLi>R*zI8i=wcTYh4w#>v6_tMw8yi~$cxKmorKx8%BayFZfO-&f>zZQF zfM&=Q1jI=Jg-}-sXM4!5s{z@C4TB6Jlt^+nKI(auCt*#jsi3{C6hSoRNKFI9jW~}p zmwXOYSrugz)o$&}DXh8bV{Ss6{QT@0JD4_1N$7G7(SsRM^uBUIea=5(n=I_Kz+u2( z_l$gB(?(Hps)wdost{Ox`C@0 6_yM+C9IB{vI>XhX9Ka#=!a>@@S z+K0iM6F}`wMB1!!Cf-OfC>6p9Op4p}i0kmURsds3fXOkj601zp3!y{Mm`x`ufZ92W zf-UT8QOIJR)P43om&X{tQUN@mxYU?3_v2j85^#t_y9R18=1@sAvho|Q@$Bhgi;>9D z7hn=u^wg5p<~mlEMGnkX5nj$JR*dCS@*-furhj$#SsW|4IkS=VV0IVKrjV#2J>?Dl zzp4+0J|1>p8UJ`q1@iTN!jU3nJ?hmgse)YOa@+55V>-1*I;TRP2vV-;Y%jNpB!Rn* zJ3p{4R`U1-L6+5?v2lXjOC;8MY=~YPn4MF|_sC=}D4{KZ`^%H>W;$DYL*GtS&*vha zd{+`XebOd&t*62E*!rfhHR2!h5`3sCP7KsImSICvg5`x(3#W&J387`VZdljcMLXSe zB-=S*Dbl;~{I$e$XeHw~ZmVvQ`A%er(&Mfiy*hx&sRnT0I_?G9jO!@|#JR?sd_uHT zXz@7IUE1_$X#ePcTkU}>G=5M23H0Xf3=0QlFd5naR|xq^3leBYnb0TTTV^fJWL8#b z&G R3>dHhISdnjrk3`&nd;q7B9QFPnBtwNN2(>!~TJRF9jS< z`~a;dtqDio&uDo#5YBehju{K36=wQi$jS$8+q9yPN_mh6LM<$Ad&FI=JcDG3Gd*po zL2w|%(>C@Z+&snJJ6gS&9*oMg sm}DB zJ_@D@*1(XR1Xp|EtgV(XJAOAXBq_QCuBE=*T9t%f)(6g8z5G}0_zxJ|b@{!)hU7r9 zM|Q+bM`}E54zdii_;7*=XAVI2$;V|Z8R&TDy|Zv28UOJL%gkQ7VyNI=zZ7`<`tn_O zfTHuDXp$>A0364t!HghhyFZS10}=P6`^>oo)5FL33}$3M92~Ch-n8(#^~uvNwvPuP z$jCU#A^(ZBh6eZ&PWz^JRc&~{En;Uu#<(Ih^YfGo$k)!Da{bVcSCk;swT!+_1?LY9 zHT$DLi_ ety3uPRMES SU>_}lDO$I$2lr^(?z5UuuM=t5P{CI%{(5(q(>yv5K*X1H-Z+HX(TV0Nny znmYG6Jy$;=ac6I2G X(zwhf%s`H!#D_aQ$KnBIUE4&~BKvDAnP6=nu~JSc;z)O^51uz&u{qG1 zdCjU2sBW=E_SAdf!Y(^GpE#u4ADkd+f7sW5+$>LP{E)xox*#bXplg8M*~@}zL)?mN zGz~eTyXw3bUt?22&tetKa4{wi!jzrKT$l=7amZ7V0GG=_5GIzwLcpeKSQS30A5i0c z{-RAue2d2Mm8r`k%JXYj+rKuo!S=kCURwcED+PNPQ9>K2w@c4BAV4pR20+`jIwY8q zWQeWqq~jhsK}8{-iLcp;9FDDI={+`CHvYW7Hkziq8o#p=Z4;*bzHpfjOAw)w03QUE zEkv1#vlIsHFZ=0{DmF{4;xZ3`+A4-SUAFQv61L(hN9b-v
#O~I>ZFVB8N)N%OAK9yR`v=G({kIwIB)%u)gB- zdW(PpoApYn@1@&FA=>08AfNV*TGY6)>1;W=5V+#6OHPzq>HhhaGR>9TAckuUoC6Nx z?>-E6UGHb%sz6Y7rg703%=HVxZF!Sle942f>|ude22+=W0{O+avKGj-{pzUi!|o&v zttexBNt<)Q>_!;Q@c}upwUH-oAU~dbl=*viSUQZN85+ofa&mLy&(J~L40;$Tq7`2~ zP2P!XR93yO1U!|!;czdWar5N?JYM_LLL2PfzsyWyu~ihIqH i2#M@511OVMfkfn5f++xAg6L0Jr48g$gtEc8uu|ds~DU$uOxjfA@YU=Qs}M zAj@FcK4o^FHRO|n_E$#80Ng|_u|PI%+GXBu7P$p?ewWls7LmLGSg06hN%oh}ZEG#t z>}6zM#QbrWA_PTQiayeq{&;&g9-S)W$i@cNza7k}`%A%!YII(?fV*x{vF!aLKr}b$ z9~~x$gtY<5H)%v^bJ^ztL8MqD*~Q4iWQ{>g^X%*prbp4CU4FS@OpvcuvMUV~$t8KG zW;DIv67$FWJpqag2q%`vf-83>^S&~^y1zdBWa9&_l`3e39(V>ycezt2r?#6i7U!Qf zP*-e5JgELXU-1tKrz?);?qW%lIA8&@^WK(S7o0_t)sx5xi -aW{Lb3Ul7QC%7? A(w8 h M0 zue95fF#TqO9GEOOds&TQz=N_r(r+^5{k#(3+ars`w>S{``G{Zzg7*ujd?0kGMb;Fc zs_Xs*ppz6<;Dks-F?<6DM|NkZ|Fh%EQ?@DdITP#KW9K{ldw$MD_sSPECu67P4R6>T zh>&9spx}{V7M@T);{TE{fwfn$T+W+6IMJB?Ek#82I1RIQ=L<1V5_r9`gWIT}Q)&6C z+N|a;m%}!`CG_954Jdr5Ok7bXj_pnP#K2 8U*xB6Z%^Y$+6IA7 6sF?q8Ozp?;`^exrN zRX-u39eg3Z`h{(slPAmegf|#ZT^ad#r=8)T9$U&EmaiBXeR4Q48`pBS#Ps&eRp%20 zJhHgd;9E=v-cRlai3Z+DN0j>;%?&4)6-9O+J5gDNbG!~XKzG;CB+P?9MxY_&j@il{ zQB3@35o7#Qb<-}Pfn5VgG-`AdfkF!ms;s !-_d0Tb@ }`#TZIBoFq%Sg=^G!nyo94X|bH`uJ-rr zsqcX2Z!Z^O+& rNtT?>~4M-Vs9h(62gvz*TKYLQ*QEl+TSi%r+h0wKbTfucp*PbL3|?gAD7L7 zIPAA`W7o1Fq`1X(0MamZM?e?XK9SpmCa{%w3+PTRplo`qn)_bd0M!DM2`WBWPOrJo zFlP_;6voRe2k>3pd7y9q%=o>~_}jEUDd$AYM?Fw 6h**S !OPKO6-AVX&I*z#?`*TMk0T`&y#EZA4iPMxLgkBB+ZIElws>mwT&93g+DHTv? zZ*yB2%mtF0GIdPFU%B4`-2yjX{BR!$S)_aIe--e~f}jdzI dg(w>icSjd^i2rF~@#y-IqJY)(l1i@%t9G4CB;oqb^Q!EquIB_{v7y zZh_Z6ePl4BNxhu~^U%V>5~Sb7l?eSgOp6hxdp0{XDldO ~>SQz?1v7~d =3-gL+qNrjPtnEeprg6C~IsAv) zAXCkcDpg4o ;eM^b zsf$cnJ@JWmKN&_K_;ZXQOJ4cc#V;0@h_Z61W>| zRa04{mjoIo#SkpB6PW*z34Fh_$ti^5MaqyKk*QrMg|(hD+Ab@+!HAMT9yPdzB&`YE zYvF6d%2xmG8T}T?KXj{Ptw*#F1emH6>30Bc#zLix@PmFG3D^^87Ik$u;1-qm3b(~Y zP#PDZ heK$?>Kb{l m&p!VflswfL{1`0Lw@JW5+xN;n#>pQlF;Bn!H$^0ZT`fcS_|#T@ihX-blEb2 z8d+qdz#{-v 9{82$AP7d(PU~mUxY?4eS37 zAwRh0f`QP$B2q`?r6$)m_(}<{@#vqW4D%u&_+SZ=HQ4{|X-CYfRZ6*#?1V~Gt;Y;I z_FzQ!z~TF1%5AT{x`xyvaa?nzjN#r68(+jKkP*R (8YFcfWiL)ph#~ Gw4I>FHWHL{7u+=JG zPl4^NUxw-NC%OOGbK85-ONdk>?uf*AN68sQGVb)Ms)4Lm0QXhT_Wyrjr< ?0zL5@2HY#;5u|=ZXTp=M-!rVmV?1T^DW=-oI)fb?c&oHiA z`wt(mJtPIIF+HogeLNQlQ_8~D&8H1MU1V!oj$n`_93*f_=Qfq8&bV1C_68PEcK#%R z3)k9k56@_r`BCeLom`nknu8#n5{aM&%uP(s &&bHSOC=M=zRX!L)3q2?-s z`Ljz{Z~l00VR6v#HW%wkJzMRTKO;-Q-p(lX%M}s!mxKNPDsm< pl2Rc8V!a#z-m*&J*eRj9pQi*5#wnwt3{0 nF97D)}?r)YvAA6g+6L53Gsz3GxAZSrN22>e-5K2Uw zF{qRR6Q`lgqjNZt8z!qQsLuY&A3LT8X>N>v$MW;&V1!RFacf)`7`=g`1u>d}WgPEP z@@hwtPJm*iIfSx4NbIEUA2_i;I4JOpshzP`6w@nuD9Y_`e2_?0bz+};;3ZR*vh^Wb z05isvX>~BH$eyo+v_5u ?W%OSqrZ0i+NZ8^U~C9&?fqe;6+1~C>jYf_#VW#=C~_AWutv~@Fcp-f z!-7@yiW-4yNil3hz3ssS?~&1X+ + + + prim-dns file server default page + + + + +prim-dns file server examples
+These are some examples of what you can do using the prim-dns file server:
+ + + diff --git a/file server/example/javascript/index.js b/file server/example/javascript/index.js new file mode 100644 index 0000000..21a7091 --- /dev/null +++ b/file server/example/javascript/index.js @@ -0,0 +1,5 @@ +window.addEventListener('load', function() { + document.querySelectorAll('.color-button').forEach(btn => btn.addEventListener('click', function() { + document.getElementById('color-text').style.color = btn.getAttribute('data-color'); + })); +}); diff --git a/file server/example/javascript/index.xhtml b/file server/example/javascript/index.xhtml new file mode 100644 index 0000000..c19fb56 --- /dev/null +++ b/file server/example/javascript/index.xhtml @@ -0,0 +1,26 @@ + + + + +Javascript example + + + + + + +Javascript example:
+Color me!+ + + + + diff --git a/file server/example/request handler.lsl b/file server/example/request handler.lsl new file mode 100644 index 0000000..4ed9516 --- /dev/null +++ b/file server/example/request handler.lsl @@ -0,0 +1,63 @@ +/* This script handles requests to special paths which return dynamic responses using LSL. */ + +string jsonrpc_notification(string method, string params_type, list params) +{ + return llList2Json(JSON_OBJECT, ["jsonrpc", "2.0", "method", method, "params", llList2Json(params_type, params)]); +} + +jsonrpc_link_notification(integer link, string method, string params_type, list params) +{ + llMessageLinked(link, 0, jsonrpc_notification(method, params_type, params), NULL_KEY); +} + +default +{ + state_entry() + { + /* Register the paths this script will handle instead of the file server. */ + jsonrpc_link_notification(LINK_SET, "prim-dns:file-server:register-path", JSON_OBJECT, ["path", "/agents/agents.json"]); + } + + link_message(integer sender, integer num, string str, key id) + { + string jsonrpc_method = llJsonGetValue(str, ["method"]); + + if (jsonrpc_method == "prim-dns:request") + { + key request_id = (key) llJsonGetValue(str, ["params", "request-id"]); + string method = llJsonGetValue(str, ["params", "method"]); + string headers = llJsonGetValue(str, ["params", "headers"]); + string body = llJsonGetValue(str, ["params", "body"]); + + /* Get the path from the headers and use it to determine the response. */ + string path = llJsonGetValue(headers, ["x-path-info"]); + + if (path == "/agents/agents.json") + { + list agents = llGetAgentList(AGENT_LIST_REGION, []); + integer total_agents = llGetListLength(agents); + list agentList; + integer i; + + for (i = 0; i < total_agents; ++i) + { + key agent = llList2Key(agents, i); + + agentList += llList2Json(JSON_OBJECT, [ + "key", agent, + "username", llGetUsername(agent), + "displayName", llGetDisplayName(agent) + ]); + } + + string out = llList2Json(JSON_OBJECT, [ + "region", llGetRegionName(), + "agentList", llList2Json(JSON_ARRAY, agentList) + ]); + + jsonrpc_link_notification(sender, "prim-dns:set-content-type", JSON_OBJECT, ["request-id", request_id, "content-type", CONTENT_TYPE_JSON]); + jsonrpc_link_notification(sender, "prim-dns:response", JSON_OBJECT, ["request-id", request_id, "status", 200, "body", out]); + } + } + } +}