From d2c982b37f3c4373e99e7c60c19d048de02b5919 Mon Sep 17 00:00:00 2001 From: dinesh Date: Mon, 11 Aug 2008 09:25:49 +0530 Subject: [PATCH] commiting ccan web pages --- web/approval.php | 134 +++++++++++++++++++++++++++++++++++++++ web/ccan.jpg | Bin 0 -> 5054 bytes web/changedetail.php | 107 +++++++++++++++++++++++++++++++ web/configuration | 36 +++++++++++ web/db/ccan | Bin 0 -> 16384 bytes web/db/ccan.db | Bin 0 -> 32768 bytes web/dbfunc | 11 ++++ web/del.php | 43 +++++++++++++ web/dispmoduleinfo.php | 48 ++++++++++++++ web/functions.php | 42 ++++++++++++ web/index.html | 10 +++ web/login.php | 105 ++++++++++++++++++++++++++++++ web/logo.html | 15 +++++ web/logout.php | 13 ++++ web/menulist.html | 30 +++++++++ web/reponse.html | 7 ++ web/requestid.php | 94 +++++++++++++++++++++++++++ web/search.html | 27 ++++++++ web/search.php | 40 ++++++++++++ web/searchengine.php | 17 +++++ web/tools/ccanlint | Bin 0 -> 44233 bytes web/tools/create_dep_tar | Bin 0 -> 45906 bytes web/tools/infotojson | Bin 0 -> 50270 bytes web/upload.php | 31 +++++++++ web/uploader.php | 133 ++++++++++++++++++++++++++++++++++++++ 25 files changed, 943 insertions(+) create mode 100644 web/approval.php create mode 100644 web/ccan.jpg create mode 100644 web/changedetail.php create mode 100644 web/configuration create mode 100755 web/db/ccan create mode 100755 web/db/ccan.db create mode 100644 web/dbfunc create mode 100644 web/del.php create mode 100644 web/dispmoduleinfo.php create mode 100644 web/functions.php create mode 100644 web/index.html create mode 100644 web/login.php create mode 100644 web/logo.html create mode 100644 web/logout.php create mode 100644 web/menulist.html create mode 100644 web/reponse.html create mode 100644 web/requestid.php create mode 100644 web/search.html create mode 100644 web/search.php create mode 100644 web/searchengine.php create mode 100755 web/tools/ccanlint create mode 100755 web/tools/create_dep_tar create mode 100755 web/tools/infotojson create mode 100644 web/upload.php create mode 100644 web/uploader.php diff --git a/web/approval.php b/web/approval.php new file mode 100644 index 00000000..dc99ca7d --- /dev/null +++ b/web/approval.php @@ -0,0 +1,134 @@ +You donot have a rite to approve users"; + exit(); + } + + //extracting user information + $query = "SELECT * FROM users where username=\"$accountid\""; + $result = sqlite3_query($handle, $query) or die("Error in query: ".sqlite3_error($handle)); + if (($row = sqlite3_fetch_array($result)) == '') { + echo "
Not a valid account id
"; + exit(); + } + + $name = $row["name"]; + $email = $row["email"]; + $website = $row["website"]; + $desc = $row["description"]; + + if($row["approved"] == "true") { + $query = "SELECT * FROM approval where approved=\"$accountid\""; + $result = sqlite3_query($handle, $query) or die("Error in query: ".sqlite3_error($handle)); + $row = sqlite3_fetch_array($result); + echo "
Already $accountid is approved by ".$row["approvedby"]."...
"; + exit(); + } +?> +

Approval

+
+ + + + + + + + + + + + + + + + + + + + + + + +

Full name:

Account id:

Email:

+

Description:

Web Site:

Admin rites (check this if you want this user to be admin)
+

+ + + Successfully approved $accountid..."; +} + +//if approval is canceled +else if (isset($_POST['cancel'])) { +//delete user +$handle = sqlite3_open($db) or die("Could not open database"); +$query = "delete from users where username=\"$accountid\""; +$result = sqlite3_exec($handle, $query) or die("Error in query: ".sqlite3_error($handle)); +echo "
Successfully cancelled $accountid...
"; +} + +function generate_passwd($length = 16) { + static $chars = '!@#$%^&*abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ23456789'; + $chars_len = strlen($chars); + for ($i = 0; $i < $length; $i++) + $password .= $chars[mt_rand(0, $chars_len - 1)]; + return $password; +} +?> \ No newline at end of file diff --git a/web/ccan.jpg b/web/ccan.jpg new file mode 100644 index 0000000000000000000000000000000000000000..babddac9dead4f68b3fc7f05c136a3bec4b29c2a GIT binary patch literal 5054 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 Q&^}dg_}}w08eLBP3m8b6aR2}S literal 0 HcmV?d00001 diff --git a/web/changedetail.php b/web/changedetail.php new file mode 100644 index 00000000..0915d26d --- /dev/null +++ b/web/changedetail.php @@ -0,0 +1,107 @@ + 16) + $errmsg = 'Password should have length between 6 and 16'; + if($password != $repassword) + $errmsg = 'Password and retype password not match'; + } +} + +if(trim($errmsg) != '' || !isset($_POST['submit'])) { +?> +

Change CCAN account

+
+
Note: Please leave password fields blank if you donot want to change
+
+ + + + + + + + + + + + + + + + + + +

Full name:

Email:

New Password:

Retype Password:


+

Web Site[Optional]:


+
+
+
+ + + Sucessfully changed ".$ispass."... "; +} + +function isEmail($email) +{ + return(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i" + ,$email)); +} +?> diff --git a/web/configuration b/web/configuration new file mode 100644 index 00000000..80c6b889 --- /dev/null +++ b/web/configuration @@ -0,0 +1,36 @@ + \ No newline at end of file diff --git a/web/db/ccan b/web/db/ccan new file mode 100755 index 0000000000000000000000000000000000000000..09af37641885a7e8552b6301fdaf2984525ea70f GIT binary patch literal 16384 zcmeGjO>Y~=bttarr9^#4wWBunv^pHc}do#P@T2hRr zOwJtAa4jG#)uz7Z#eT7|Qiy6@V zo@B#7`s%X9Y+nj64g}x`;6?6=zU0pf-`*E~v9Vs_t`~B5*z1+K?2B$MhFSIIC=i<; zYdi3}ec>PQ=j6c%ojbA>pizpr)HfQXGIwNP``tm<_1qX@)oL{WiNV14o|g`9d0tO~ zRg3xrjoM<^3;6_$`{OaVq$QQW|EUCCW<45tfpNOqPS=&eK09PAgB263sp>mUa|3I~ z-o1wv(`;AO`_k$9(hd=p`wPJ)3Btfq41@3h0q5=+>>a9|28)Bmwr$~tGN5+j?@+rL z_A3PwPQM!iO@hs`!9y?$3Fp6=rRwyON+6ZMr;vcjKBiU%y8`zz>Qu%sCd=9kY}s3F z%WiD6EXTImn_KH!O{l4D$yURvNlWOqXe(B*?U-TYSIAVf*ILfHB^!+`t0t`0TBEhr z-fV8xYXVv}#TvE5xZ^E&s$kokVN6wGbMi>e%GMZc8+fl``*Vgdv8qgtU2~wnbtzk$ zYc*My_C~uY);H_2B{yIYlK7H+Gq9!NKaTukv-HURzjq%RLjMneP8F$`hA~||GF@A8 z&1s1Cy4`NK?9DB^CDvOt0ij1j)M^c<#>lQ2NQBj}ecmu;YH@puJyHVOY3xGMOD~^Z z0!{XFYJ9r?*M2_s|2J=AgA@ID)&tZ1TMVjpQA`A6tm5&JflEAZuFvFkeWE-O+GxEO{W zRdB1Md#a)fgY{r+FJim#Tw(Dde^HG|Wd=l##ShKo$fEjUoI{AR4w&0GHi!tTbr26@ zGzU^*A2fBW0K?F+POk7|xl+;Ni1;Ok64kOzXtkUAdK6w-{=*V@i~WNr7T9&VAD{of ztmN|UC3bAJg5;f3>@&+f&|IObK&FN_VKN>g0IR%}E z7|AIhqZx*_0s0XK&d4lJ^iIhcOqglBK{87(sRT@RP5b{c2xAVFCzG9+)6;)_d#^@H zYp@-_nL(VftT{s#L1U1DcB+f4YXBO$4%jRd5<3a@lLuhWwQ(UAdQ^%)w0uG?XuKa}dCgk-Sy;o%wNH)hU0 z@wK(>tIsGl9oBJTHhuU5>kbJPNH(9(bFOGRifmi-Akd%!b_(>mjkL4oT+#aWkDhJE zMr4%K2%8wbABKZ(RIB*E;{Bv2T0zD0JJo0)yzTj%7B7ym1$*)U_`1l~K)&C#_ubeq zox=A-_%SK!p>}wL4(pwx{0(grark}YKW;9Rs@LrO{taA$;k&rdLiTSPueRq8@aX8BeRGG^kcz(~}jt2`ef>v1ruN~eIzN{$z^j`mFm~W65LH=nuOA;WpfyHuM zaXWpboUlrawDsm5j_;H6e>zqdLA!%L(g>CRn`U}G5q-(@wVsw6%(=JHSp6)0PHA7y zm;_9Aoiyx==l?0|5cz)@`}b4)a18$!{Xh9X{m%b;{{KTgZ^BrP;*ZGxyPviHS7BEa ze>?#G6o2H*ndRDdTAltU#gKg#Pp6U*-ortpc25}Z>G%sA21#DAU#*VBKR$YtbLPUz z#*I$TSB?!^CRmI_esLeH1jg|g?1foVZ;(w`gmpYDv~Hm3kcj~l<7YLqm+CgjC%vQ+_&g+F zvR6sJVILi^TSkp8Sd-}%J%ez5KqAMCSqUS#S8q$B|wB_%~W_r)NxD zOh9S^iotHdSZKX}I#>7-e^Rga+l26zMorV&}q%i~dCLl=XhA zuH&D-LVswV@=UJqRK>EiOk-xr1^>93S!?X05AV;iSH}$YI=vr|@2nalUTMGMT(0od z;_9lV8Av>SktC?;q_j1^ba5pS$q%l~MbmlSzD}4*Mi*--A=k z&>PGua5P~pVLumCVwyk_cF_S%W4y4?*wi*DCKrtkQXcY@vAs{Lq(~<%sRX_l68I;f Ct~_4= literal 0 HcmV?d00001 diff --git a/web/db/ccan.db b/web/db/ccan.db new file mode 100755 index 0000000000000000000000000000000000000000..30078430204eee429a34814a69569db88508b1fe GIT binary patch literal 32768 zcmeHP+m9sIS?`{jo!KtONgQVw2D90-V~y!v_gweB_HHsBkK-kK%kEmckeF6=b#+f= zs;k;n)iXPB9N}1TkU|j23m5T#-~ok5`~id)BoMqI1>S>%!~;SCq3{F}{C?j#r@MMC zUMB%NiMuu3U480YzVn@PzRU0XYVLmadYA{QoupkaS7%C-rE(;t@B>{tlw@o{R@};rgyfv;stH*ytlG)zO_=Do-EDYNc&m7 z=dZNT?@14JJzU};;^R|X!se-4yyde9A{>Rh7iyC;}g!z953{}kCdIcIen==ssAg^H%rbRI^T5u z4Eq0jumJwr`L6R%KhDI*ZO0rKbKpnfz&mRBqB@@*sC?1#Rx}*@sIyQm3WZ6keToC; zDE)tIV!7n}iQ_q?iQmEH_%-IhQ5lmyk=M+YlC-n@WhuX(q)|(?5;*K$9wxEMl6Jo9rNI(93;6C#9zSvE z#OAq~S-Y=0OIl$qLC<}v)AhoLBOP{ksgop~DCl{eAY&cH%^$`cWh-Muj?wm_END0! z=(**YS*v~zAIRP{Q{vC1!o2Jdz|oa2b?pEzP8@$~VP(YR>9mIAQ!y9EBe|7I zMH!M?12XTIkI!A1+k9$f#`JO+H!$0=@kJ|F%@-YW~@;NXt z296c||H-1kaHRg9F8`|5|K*9_omeja4SxPh>1*%xoc&94o6ECSN**TPy4h0Nqi^V9EUh%@gv#yi~{j<-F1{M4mWRAJ%)ibyZE9BP4~hgiJ7 zUvR5oHw@Q8%>XyHTBbd9eD2ao4t7uj95T?4JWj{z|JghLZ~9+Y_?{U6zh(`98LQ%p z%o*~|-u+<=04~o@xc(>phoJxXHRiyW10O&R(EcBv{}158kEcB5060MXf2{niQu$jG zPfffu@s|_-F=osA%Yiqi%G0y6v*kCpbFUc%QPK%x`Iy+av$=k6Q{7vC;rgbMqH5Su zOnT`Asp_R+*Gu=*cCc4h{VYghuN$ZxFZH*)w0dT(ruuRCT0c;6lB>8MMRnElvTQd= zTO+mX?OJVOYWB)(xdc=xc&PoUhS$#%`Q4E58>{l=>^al3Cr*^#+!T_%UN22{yvTk} zju383tNJ1sj(+~^AvD@r&AkDYtT&)?d2(uYNYJ2O*$Yfp$J zr}&;4A(ADkszz8?9Ja0kLXZQJR@W{LX*z`cY+G2M0r_>c8#FU!;M#>+J9oZTSFIrP z)37JtsJ*kgva*6(mLaN{BvIhSgTBzH?e(Kvi35d-Oo)0!t=icBe}7N=c=Ry`-cJsU z?f>_a`{S|49C&{@@VN8erK$4wOB267@oi_``GfNJoxgj3DH@Odf5?G1KjBW#&drs- zGAqVz7SJ8gpC1}Acy(E|o3#4T&=@_`Yk&{1h4_OtOIgQS<8_sXd7=G2vzS)xpxwol zOXq8~Uz(bleQxF`^POgRW0jxNyVKe$x-qcYGnQw^N2Vb~Rac4SUdOkX>Ac__n)AFi zHa9N|hBkj%<65q1KfASu$ERmco-DulNg22uMnSS02kGFVGD5(hxT<)0z=1g6gGpxt zrWAdQ+G=HLcJt&>ycvwtSRGut&ptLa`^mYZn&?GttmCkyQR3@xlU%Ar)eX7{Tu}Mx<=7-?(nsn=kh%A^0$r@k77M$*DCh=po+(dd z@~hBpcPsR_)Lzn8h;ni5RGzr4J+L$M(feSCKxIA857cg$Z^7B|kmJ!|LP^p#v@9ug zZ!65C8_e!wZ$Dn1eroPb=j#!oTFGIs)~rL^4w-W!#Z|iFRCrMTyNY$N)IGLmjlXzhPlePn(cmM$R|0x zG@T+HNY>Xi6z5w3NGWo2$P5NS&6XJMoD5@cKJ>V`F1wYdF~z9g3e@vi-U^eYt*eEy zd9wqS&3AigYuwQ#gu@cdKP z$k>BIg}k}|=Sk(eiE2mQPLgJq6@&{c7l^nBQWPC=FqFBOrkQ0j=x8k}BnZ+y)lQLH z2qggy1dDmHXfD}}D`IrZi$N#k!7d)K2Wkp&4XK<`ka9w}5-Po@lcdmJ&>f(#-OnLZ zmt+zJLLjlpj%e50%Tyz*7CBF^c&+REM9GkG{X2R(Ai#`sd)?qjpt)n4(uacGmHUTw?PPY);vUE z8h}f&T7g)6LlZAr-Y&RGdI37})Gin+Du!fo+mUNzA2zCG{3KeYOw-OcN2X=%w!X~%0sA?kTO%IZU=uCCxP&}OPiC!;mM1GJ*^?(#3a2eMt>4VdoJx< zNJuS|vA?jQ5SjKj?Jip3g)VWt1BheTuTf;wfN=*XLd4Y|gR~6AoRW4M8;j<3LIp*^ z4px}i;C?G?w_(M`xeMza26SCD`#GmXcNd2!^y0opK(VTC6g9a73d()it8RmxXi#eucFpRcJaSJaBM)$&6RER@j3 zKdLp?<&egt_EBwxbJCUu-^k!H&He4;{iMs1LL^~U06D6dj4pv=vu`rwm+cO$s2sr_ znfVpNbE72MR+wt8t$}N|8h2j2f9FfL8p0!dZ$8+7Y+X5z&?rX{R-@hXW=<5_B2YJy zKAb8ZT(jdBGAmKnv>et=p<-emd#c)oidkJbd-2?b^EGM#y+DWb2N9ycgHFChW9vY- zMMv$(3B6m|saXygf_uz^;(@g3RkgM;q}SE$JGbsNkT~$-m*ndHoon|t>*~h(?Z(}g z*Y9k;2}u5Z35yYe6pG0uK6KthHi2=OZhgLtOChwZC(Gn{eI zNU7BbV|cMRc9y%cZcQBaZC>d%+{DsE3>4i?1W~b}5I0znI~w_ccqXdR@8#O|sEqb3 z+gp0>fnmDiPEe$Wgsq*$=lS8Poazn6(ni2=J4qMVFlIFC(Jy?lFTQ(Ki{V-iu9Lm? zbjPEF@th3k8q`$JD&T056&v_@@WcuK^h`w04_S*0k9|YE0S@oi|0Q88tqtf>7dA}~ ziXc_Ha$*b$L?HwfxhtR!6eCe1t!I^bnT7P8RA7OZfj=NJw!7D$N^ZjEsA{3xNSa>& zM_=cr(f$Ss)M(BGiC1HB12c+gd$+q!xNzt}0{?KN?@=%#4gd)oOrWJuakgv?-SiS0zI z2&>`eXk$P=c$V7B)(k)c{Kq#OS5_TTMZ3-&)YSesr$fV1ubo&{IA!?T6_8Kt7MMW| zzX{Y7`v;Z7_%inkSWoCR%Nt?4!Fs3wAeSXFu3gI^ZF-*xWoTNYO~}3sQ72?H4l+T? ztEc^D&FnJF3d^Ob<~26e)5wt_kbAJT--J)sOQQcjTtK3h-?z&-(400EI{1rK47(kIVAjDW>0;Y)#2v~k)1fbrD~$XA{*EMfxF zlW+<4GC3*sE1>ceXBSYX00rh0i@{11eOJbZpwo*#*jwWN3j_NjX%oZ* z+k;*-?6eK}nH43l(6@e%hWoCpLpV1~uIK4BCOSbNSs!25tevw12c zh?jQ5Z9on14di)O{#w2Vo;B9vJ@g!R8lW{#{3LSS7c4Wl%>e-+(GN>%dA5=C_E5H! zW0%#`+RDmVbu-*n8e2kn?Rp-NU{G|1Z5=;@|uCdVANIT9`|IGi>(5sMSDP zDpa9{or@*=;b*zG$N&?RESpfA0yz~M5TX!4rJWGC(GaxOf=G)iJN@Pq+ zWm}@&c|_bnzk~+*^1$6?gE;H(7Zf8_y_W`n3T!Y7KE!^i>WGg4kYXH9q)8NZk@eZa z5oCM~M}uKEKoS5x5O0K;-;&d3ysijLqfFrheOm{Ov!8eJdIrPZ<+;xJe0u2z-w6yXD6 zsr2m4B!CD}%WCSP5GG!hz#bVwKibr9Ckc)q#jv#=QKC-c!&tnKz_LYU)>iq`)&ZCF zT-ccVO`D7u*AxSo$4nqXUU=o&^%ooKckgcAxmVS|3SyAPl*ULdAv{Jt?>Q?kiA9` z+UAs>bJc^ztC9vWK&L@ltKX|W00@FA6m1f!;3O@|XWMAo7_5K@M4%;V&D%xR$S@WI zvixDL<{!*!E5pS`4D&3A7@(IXY+*>lhPVr?uPq>B3()}ReR!neHkm3=eLOiZUc(G= z@rW5Bd7A7=2!!@7!|;c8@W3?v0%Q9Rpio+asY68IXbk${tt0x-yejrYwg~_1#!uSr z10J_Qhd5BzG)1&9wvBayYao^~8AS28wa_L2qKQ!34o?*U-Ap)v8<0KmBBEMu4zP{} z8=X2H2TCRK2Q_d)3#W_~wNfo|QDXnXRR*`PiNQ-mb$9|>x;BnG1vc%Ct-yofh=oE> z5iB{oAf>7U6UavhjcY^Yi#r#WFRth)Bl8k0@<&q)Pc|%{KdYKyuG0=M7aQ!t<-p#| zc4GV|5`03>$4f8+n%Y2)-I>1as5MTQ2u& zZJ$pqa1Q;R>;%djjQ+T=`C#4l&&pp2&aSxMi_L&smF=jb4_^js7-W4G=Nb8 zT6g=lQrnO7h-Get&xDA(78o7W$dd+v{gI#m3ou^^Yw8Vwy@M4o3W`WL)CG}2nC}wT z(=Bc_?%%m}^ZKtGjlW`kKu!nnt5G`gK#Ea9=uy}r0IMEWv=w1wLj^5YL1WQey3%Pb z(3`gr>kd)`zlEm;_ZKF^Bclfh=UvAIW#?fG>8sL@BM8QZDa7n`@qY4%j&TOk1siMN zcQE{V2d599+6Wag=npXfrhzk!3`)RhLb?um^AvCcGo6iHk`6t8aHYr`O^qI~%5~9m z(Hyy=HgDd#dwYW%v?_nV{Q~$0Q4yey&i|Pxf44MI!^imb)5L+_*r-fBIk)-SSK!-g zaf=HGTl&Jv!VQE*G~93xb_6Tf{24e$tv;ff1_fXSiy$o$HIMcdxB5^ki?DZE9=I~| z*1h9Xb90}0`>sBudO&@RG0lY$vNlIZyJEC16fy>z(8hux=?qXHqVNJtLkO8voG_Ry zuxoVg9AthF!}#_CYvXH)tJ^GX9WFiR^=$}B4TZe>oIV~oC~8LL)ickKwBR*cAOSlV z7EL4_%-0|&hsk@Ul)A@;-4FI84oWuC+rDn@5|K&tBY*GM6@9}(M?L_zUIJu3+t=X@ zuY-)7gFPClr*mht{y$wR;qRSaU%NYvl(5hK)-7ha=;fDumqn<%J|RSkSlA;{Sl9u) zfelGp5Bit(I)rG!CFd@{P78Z|*Z?#O4t58J7Z!nrZs8~)hfAPXIO5vm;Q$RWCgJ=7 zGewWI=K!gpJKn^uf?h^qmsm(rJr=A~XQeVHRYQP5w;8mUm$2XI8bX+o3(#^+1@?9L zK0L(2V`W&BXd#)Vh8&za7%(E%iz=BmKgD>FXqlrpHE6<{gFI8}Y=o^Fg`1MrWm;=T z=ykMs)DXfK(n$3{REj;n>qHtemyr}Gx@|By50D!Q=4FnG4@G}uqK)a*&JBSfB8ohz zHp1RpGA^b$zZ{I)pc=y7SbI)|=pMJ=PK3`sYr@MuZfPf@YLa+Q`!%gh{ejCW{e{Tv z#epYR8c5HsK7;>q$XQ_#5P3pn-q9^VNMRM8eU=TG&oD^!U0{ZIrWW8?nJzA4GMaw* zE;N@eWmL?i!Q7V7p)nm9nZykOkI0{cZD;&Q4sY*R;dJo)Pdrh=-}p7=K&kXrG&yx@ zuK)IDB}ODcJ1y*ozYjQcI%KT z1czDx4j71Um_dN3b=epNbFy3N?Nyo?wPx0x%-iqbJ~p z=u9RZX7CmXzqX(dZap#v2tEO`6Ql<{ScNHQGM>;VKs9x@01`{uG&zAbMrx57J}ooE zk0Fi1PCrEUHQ?M`LNKB);a|AJ00~HPoF|CIRm0epS+%f}FSc;)L)7`p@!D*H%K zv1GX8WrOs4*lDy?3{ZjpUJD+}){POa1=fbgd0;ui`PU&?*{0ZcSfhx!6*l}#%h*7k z+}<#g0qFn?H--&iYvKt2GSQCt6MD}NeyXm36@`6enaC=2WrPeo8? z7+xC%=v||0BQw>gpods8aTS>jNiav4`$%#gaX5g>w}}%V5u2w4<8X!np14UENF9!X z;~;={2xzR!GYLr1ixAo3fB$7ByFC7bNDW)rGy}^Qb0PyklLICcL3d-|FgmLtFR@ql z0Dtt`f_s??1RYZmQ7M$7v5hEpbbuSli0x_#f<~Pil zk-@9au=3K75GL4&{a;=z;cxtU6bHWXvOD$k+^fHTQpBlFdC|(TPyktBbPII}^MeP+ z6@Cmf7C~t&ISvocOR=T#k#LjpWta(a896!FU?W){dJxD1bqxSIbFTF z#0sBykhCHgz!IzD0QSftc4jj}kk}2P(p@SwT`>yUOiIGTF!mS|4d129#P&wa4MEUh z$`FonM*Et6NfT!e+9yLUM%c!glUdgle142Z(Z$qj9)Ix6hx>(|so|_Jz%;ML0ALZ} z_2DL_b{43^M+wPjAw=X5MARtPiP>TtSECcSHZ>$+2`6*-vjHB083>+hOQCoNps%^r z!c(qzA_T;1o=EsnLlZ_S@*gXSFf-X+npH-I4>4$ZnHxC%V%iL+YXrDWo8d08qL1@{ zrorMdwt>8CEp^>tmJ3K0C4o)U$8jIv+sx~yWhJbTIV)`UkIVU=_~#P-#;-94envU) zt;aqD@bbnV;~9R2@{G)uYlv%!WXg|y&#dbTI7vu63jt8#e<#pQu@5Bl7;HgI22Wb+ z(56IWq4MSFLIzK_gPU15qO11!bnu8y8`x#w2_DbS=vu5hd@6)z0&W*_spnPHW2cVPj^S|Tgf90X;@$ diff --git a/web/del.php b/web/del.php new file mode 100644 index 00000000..f494f223 --- /dev/null +++ b/web/del.php @@ -0,0 +1,43 @@ + diff --git a/web/dispmoduleinfo.php b/web/dispmoduleinfo.php new file mode 100644 index 00000000..b6f08172 --- /dev/null +++ b/web/dispmoduleinfo.php @@ -0,0 +1,48 @@ + + + + + + +
/.tar>Download/_dep.tar>Download Dependencies
+ + + + + + + + + + + + + + + + +

Module:

Title:

 

Author:

>

Description:


diff --git a/web/functions.php b/web/functions.php new file mode 100644 index 00000000..4228c3ae --- /dev/null +++ b/web/functions.php @@ -0,0 +1,42 @@ +read()) { + // Skip pointers + if ($entry == '.' || $entry == '..') { + continue; + } + + // Recurse + rmdirr($dirname . DIRECTORY_SEPARATOR . $entry); + } + + // Clean up + $dir->close(); + return rmdir($dirname); +} + +function getccanadmin($db) +{ + //forming admin mail addresses from data base + $handle = sqlite3_open($db) or die("Could not open database"); + $query = "SELECT email FROM users where admin=\"true\""; + $result = sqlite3_query($handle, $query) or die("Error in query: ".sqlite3_error($handle)); + + while ($row = sqlite3_fetch_array($result)) + $admin = $admin.$row[0].","; + return $admin; +} +?> \ No newline at end of file diff --git a/web/index.html b/web/index.html new file mode 100644 index 00000000..b3e3c954 --- /dev/null +++ b/web/index.html @@ -0,0 +1,10 @@ + + +ccan + + + + + + diff --git a/web/login.php b/web/login.php new file mode 100644 index 00000000..90488f91 --- /dev/null +++ b/web/login.php @@ -0,0 +1,105 @@ +
Already logged in as ".$_SESSION['susername']."...
"; + exit(); +} + +if(!isset($_POST['submit'])) { + include('logo.html'); + include('menulist.html'); + loginhtml("Members only. Please login to access."); + exit(); +} + +// get username and password +$username = $_POST['username']; +$password = $_POST['password']; + +// register username and logged as session variables. +session_register("susername"); +session_register("slogged"); + +//set session variables +$_SESSION["susername"] = $username; +$_SESSION["slogged"] = false; + +// open database file +$handle = sqlite3_open($db) or die("Could not open database"); +// query string +$query = "SELECT * FROM login where username=\"$username\""; +// execute query +$result = sqlite3_query($handle, $query) or die("Error in query: ".sqlite3_error($handle)); +// if rows exist +if (($row = sqlite3_fetch_array($result)) != '') { + if(md5($password) == $row["password"]) + $valid_user = 1; +} +else { +$valid_user = 0; +} + +//if not valid user +if (!($valid_user)) { + // Unset session variables. + session_unset(); + include('logo.html'); + include('menulist.html'); + loginhtml("Incorrect login information, please try again. You must login to access."); + exit(); +} + +//if valid user +else { + $referer = $_GET['referer']; + $_SESSION["slogged"] = true; + if($referer != '') { + header('Location: '.$referer); + exit(); + } + include('logo.html'); + include('menulist.html'); + echo "
Logged in sucessfully..."; +} + + + +function loginhtml($info) +{ +?> +
" method="POST"> +

+ + + + + + + + + + + + +
+Username: + + +
+Password: + + +
+ + +

+ + + + diff --git a/web/logo.html b/web/logo.html new file mode 100644 index 00000000..7239556c --- /dev/null +++ b/web/logo.html @@ -0,0 +1,15 @@ + + +ccan + + + + + + + +
+ + +

Comprehensive C Archieve Network

+

\ No newline at end of file diff --git a/web/logout.php b/web/logout.php new file mode 100644 index 00000000..ef6a9d7f --- /dev/null +++ b/web/logout.php @@ -0,0 +1,13 @@ +
Logged out Successfully...
"; +else + echo "
Please login...
"; + +session_destroy(); +?> \ No newline at end of file diff --git a/web/menulist.html b/web/menulist.html new file mode 100644 index 00000000..6e7e63b0 --- /dev/null +++ b/web/menulist.html @@ -0,0 +1,30 @@ + + + + + + + + + +
Welcome ! + Login + + + Request CCAN account + + + Change CCAN account detail + + + Upload Code + + + Search CCAN + + + Logout +
+
\ No newline at end of file diff --git a/web/reponse.html b/web/reponse.html new file mode 100644 index 00000000..0299cf14 --- /dev/null +++ b/web/reponse.html @@ -0,0 +1,7 @@ + + +CCAN Request Account + + + Thank you for registering with CCAN. You will get the password to your after approval. + diff --git a/web/requestid.php b/web/requestid.php new file mode 100644 index 00000000..eedada53 --- /dev/null +++ b/web/requestid.php @@ -0,0 +1,94 @@ + 16) { + $errmsg = 'account id should have length between 4 and 16'; + } + else if(trim($accountid) != '') { + $handle = sqlite3_open($db) or die("Could not open database"); + $query = "SELECT * FROM users where username=\"$accountid\""; + $result = sqlite3_query($handle, $query) or die("Error in query: ".sqlite3_error($handle)); + + if (($row = sqlite3_fetch_array($result)) != '') { + $errmsg = 'Desired id already exist. Please enter different Desired id.'; + } + } + else if(trim($description) == '') { + $errmsg = 'Please enter your description'; + } + else if(strlen($description) < 20) { + $errmsg = 'Description should atleast be 20 characters'; + } +} + +if(trim($errmsg) != '' || !isset($_POST['submit'])) { +?> +

Request CCAN account

+
+
+ + + + + + + + + + + + + + + + + + + +

Full name:

Email:


Desired ID:


Web Site[Optional]:


A short description of what you are planning to contribute:

+

+
+

+ +
Thank you for registering with CCAN. You will get the password to your mail after approval.
+ diff --git a/web/search.html b/web/search.html new file mode 100644 index 00000000..3a497b9f --- /dev/null +++ b/web/search.html @@ -0,0 +1,27 @@ +
+ + + + + + + + + + + +
+ Search ccan repository: + +

+
+

+

+
+ + Display all
+
diff --git a/web/search.php b/web/search.php new file mode 100644 index 00000000..d0c55330 --- /dev/null +++ b/web/search.php @@ -0,0 +1,40 @@ +Please enter some keyword to search
'; + exit(); + } +} +else if($_GET['author'] != '') { + $searchtext = $_GET['author']; + $in = "author"; +} +else if ($_GET['disp'] == 'all') { + $searchtext = ""; + $in = "module"; +} +else + exit(); + +$result = searchdb($searchtext, $in, $db); +echo ''; +if($row = sqlite3_fetch_array($result)) + echo ""; +else + echo '
No results found
'; +while($row = sqlite3_fetch_array($result)) { + echo ""; +} +echo '
".$row["module"]."
". + "".$row["author"]." : ". $row["title"]."

".$row["module"]."
". + "".$row["author"]." : ". $row["title"]."

'; +?> diff --git a/web/searchengine.php b/web/searchengine.php new file mode 100644 index 00000000..6117f38b --- /dev/null +++ b/web/searchengine.php @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/web/tools/ccanlint b/web/tools/ccanlint new file mode 100755 index 0000000000000000000000000000000000000000..f87062467f392a603fff8140951bb74d8d9f243c GIT binary patch literal 44233 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 OVbSa4oKge^_x}xS&t$#; literal 0 HcmV?d00001 diff --git a/web/tools/infotojson b/web/tools/infotojson new file mode 100755 index 0000000000000000000000000000000000000000..9ceaa2fa082d3fef16d8037fe385668608cd89d3 GIT binary patch literal 50270 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 +e!!dk?85QYiM2a7 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 + +

Upload Code

+ + +
+

+

+ + + + + + + + +
+ + Choose a file to upload: + +
+
+
+
+ diff --git a/web/uploader.php b/web/uploader.php new file mode 100644 index 00000000..467c51c0 --- /dev/null +++ b/web/uploader.php @@ -0,0 +1,133 @@ + 0) { + echo "Error: " . $_FILES["uploadedfile"]["error"] . "
"; + exit(); +} + +//list of file types supported +if($_FILES["uploadedfile"]["type"] == "application/x-gzip" + || $_FILES["uploadedfile"]["type"] == "application/x-tar" + || $_FILES["uploadedfile"]["type"] == "application/x-bzip" + || $_FILES["uploadedfile"]["type"] == "application/zip") { + + $folder = substr($_FILES["uploadedfile"]["name"], 0, strpos($_FILES["uploadedfile"]["name"],'.')); + move_uploaded_file($_FILES["uploadedfile"]["tmp_name"], + $tempfolder . $_FILES["uploadedfile"]["name"]); + + //extracting code + if($_FILES["uploadedfile"]["type"] == "application/zip") { + exec('unzip '.$tempfolder.$_FILES["uploadedfile"]["name"].' -d '.$tempfolder, $op, $status); + } + else { + exec('tar -xf '.$tempfolder.$_FILES["uploadedfile"]["name"].' -C '.$tempfolder, $op, $status); + } + checkerror($status[0],"Error: cannot extract(tar error)."); + + //chmod + exec('chmod -R 0777 '. $tempfolder.$folder, $status); + checkerror($status[0],"Error: chmod execution error."); + + //running ccanlint + exec($ccanlint.$tempfolder.$folder, $score, $status); + //checkerror($status,"Error: ccanlint execution error."); + + //if user not logged in + if($_SESSION["slogged"] == false) { + //move to temp folder + if (file_exists($temprepo . $folder)) + rmdirr($temprepo.$folder); + rename($tempfolder.$folder, $temprepo.$folder); + + //send mail for review to admins + $subject = "Review: code upload at temporary repository"; + $message = "Some developer has uploaded code who has not logged in.\n\nModule is stored in ".$temprepo.$folder.".\n\nOutput of ccanlint: \n"; + foreach($score as $disp) + $message = $message.$disp."\n"; + + $toaddress = getccanadmin($db); + mail($toaddress, $subject, $message, "From: $frommail"); + echo "
Stored to temporary repository. Mail will be send to admin to get verification of the code."; + unlink($tempfolder.$_FILES["uploadedfile"]["name"]); + exit(); + } + + //if not junk code + if($status == 0) { + $rename = $folder; + //if module already exist + if (file_exists($repopath.$ccan_home_dir . $folder)) { + // if owner is not same + if(!(getowner($repopath.$ccan_home_dir.$folder, $db) == $_SESSION['susername'])) { + if(!file_exists($repopath . $ccan_home_dir. $folder.'-'.$_SESSION['susername'])) + echo "
".$repopath . $ccan_home_dir. $folder . " already exists. Renaming to ". $folder."-".$_SESSION['susername']."
"; + else + echo "
".$repopath . $ccan_home_dir. $folder."-".$_SESSION['susername'] . " already exists. Overwriting ". $folder."-".$_SESSION['susername']."
"; + $rename = $folder."-".$_SESSION['susername']; + } + else + echo "
".$repopath. $ccan_home_dir. $folder. " already exists(uploaded by you). Overwriting ". $repopath. $folder."
"; + } + //module not exist. store author to db + else { + storefileowner($repopath . $ccan_home_dir. $folder, $_SESSION['susername'], $db); + } + rmdirr($repopath. $ccan_home_dir. $rename); + rename($tempfolder.$folder, $repopath. $ccan_home_dir. $rename); + echo "
Stored to ".$repopath . $ccan_home_dir. $rename . "
"; + + exec($infotojson . $repopath. $ccan_home_dir. $rename."/_info.c ". $repopath. $ccan_home_dir. $rename."/json_".$rename. " ". $_SESSION['susername']." ".$db, $status); + checkerror($status[0],"Error: In infotojson."); + //createsearchindex($rename, $repopath.$rename, $infofile, $db, $_SESSION['susername']); + } + + //if junk code (no _info.c etc) + else { + rmdirr($junkcode.$folder.'-'.$_SESSION['susername']); + rename($tempfolder.$folder, $junkcode.$folder.'-'.$_SESSION['susername']); + if($score == '') + $msg = 'Below is details for test.'; + echo "
Score for code is low. Cannot copy to repository. Moving to ". $junkcode.$folder.'-'.$_SESSION['susername']."...

". $msg ."

"; + foreach($score as $disp) + echo "$disp
"; + echo "
"; + } + unlink($tempfolder.$_FILES["uploadedfile"]["name"]); +} +else { + echo "
File type not supported
"; + exit(); +} + +function checkerror($status, $msg) +{ + if($status != 0) { + echo "
" . $msg . "Contact ccan admin.
"; + exit(); + } +} + +function getowner($filename, $db) +{ + //getting owner of a file stored at db + $handle = sqlite3_open($db) or die("Could not open database"); + $query = "SELECT owner FROM fileowner users where filename=\"$filename\""; + $result = sqlite3_query($handle, $query) or die("Error in query: ".sqlite3_error($handle)); + $row = sqlite3_fetch_array($result); + return $row["owner"]; +} + +function storefileowner($filename, $owner, $db) +{ + //storing owner of a file stored at db + $handle = sqlite3_open($db) or die("Could not open database"); + $query = "insert into fileowner values(\"$filename\", \"$owner\")"; + $result = sqlite3_exec($handle, $query) or die("Error in query: ".sqlite3_error($handle)); +} +?> \ No newline at end of file -- 2.39.2