uploader.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <?php
  2. session_start();
  3. include('logo.html');
  4. include('menulist.html');
  5. include('configuration');
  6. include('functions.php');
  7. include('searchengine.php');
  8. if ($_FILES["uploadedfile"]["error"] > 0) {
  9. echo "Error: " . $_FILES["uploadedfile"]["error"] . "<br />";
  10. exit();
  11. }
  12. //list of file types supported
  13. if($_FILES["uploadedfile"]["type"] == "application/x-gzip"
  14. || $_FILES["uploadedfile"]["type"] == "application/x-tar"
  15. || $_FILES["uploadedfile"]["type"] == "application/x-bzip"
  16. || $_FILES["uploadedfile"]["type"] == "application/zip") {
  17. $folder = substr($_FILES["uploadedfile"]["name"], 0, strpos($_FILES["uploadedfile"]["name"],'.'));
  18. move_uploaded_file($_FILES["uploadedfile"]["tmp_name"],
  19. $tempfolder . $_FILES["uploadedfile"]["name"]);
  20. //extracting code
  21. if($_FILES["uploadedfile"]["type"] == "application/zip")
  22. exec('unzip '.$tempfolder.$_FILES["uploadedfile"]["name"].' -d '.$tempfolder, $op, $status);
  23. else
  24. exec('tar -xf '.$tempfolder.$_FILES["uploadedfile"]["name"].' -C '.$tempfolder, $op, $status);
  25. checkerror($status,"Error: cannot extract(tar error).");
  26. //if user not logged in
  27. if($_SESSION["slogged"] == false) {
  28. //move to temp folder
  29. if (file_exists($temprepo . $folder))
  30. rmdirr($temprepo.$folder);
  31. rename($tempfolder.$folder, $temprepo.$folder);
  32. //send mail for review to admins
  33. $subject = "Review: code upload at temporary repository";
  34. $message = "Some developer has uploaded code who has not logged in.\n\nModule is stored in ".
  35. $temprepo.$folder.".\n\nOutput of ccanlint: \n";
  36. $toaddress = getccanadmin($db);
  37. mail($toaddress, $subject, $message, "From: $frommail");
  38. echo "<div align=\"center\"> Stored to temporary repository.
  39. Mail will be send to admin to get verification of the code.<//div>";
  40. unlink($tempfolder.$_FILES["uploadedfile"]["name"]);
  41. exit();
  42. }
  43. //running ccanlint
  44. exec($ccanlint.$tempfolder.$folder, $score, $status);
  45. //if not junk code
  46. if($status == 0) {
  47. $rename = $folder;
  48. $exactpath = $repopath . $_SESSION['susername'] .'/';
  49. if (file_exists($exactpath)) {
  50. echo "<div align=\"center\"> Your another upload is in progress please wait...</div>";
  51. exit();
  52. }
  53. //bzr local repo for commit
  54. chdir($repopath);
  55. unset($op); exec($bzr_clone . $_SESSION['susername'], $op, $status);
  56. checkerror($status, "Error: bzr local repo.");
  57. chdir('..');
  58. //if module already exist
  59. if (file_exists($exactpath . $ccan_home_dir . $folder)) {
  60. // if owner is not same
  61. if(!(getowner($ccan_home_dir . $folder, $db) == $_SESSION['susername'])) {
  62. if(!file_exists($repopath . $ccan_home_dir . $folder . '-' . $_SESSION['susername']))
  63. echo "<div align=\"center\">". $ccan_home_dir . $folder .
  64. " already exists. Renaming to " . $folder . "-" . $_SESSION['susername'] . "</div>";
  65. else
  66. echo "<div align=\"center\">". $ccan_home_dir . $folder .
  67. "-" . $_SESSION['susername'] . " already exists. Overwriting " .
  68. $folder. "-" . $_SESSION['susername'] . "</div>";
  69. $rename = $folder."-".$_SESSION['susername'];
  70. }
  71. else
  72. echo "<div align=\"center\">".$repopath. $ccan_home_dir. $folder.
  73. " already exists(uploaded by you). Overwriting ". $repopath. $folder."</div>";
  74. }
  75. //module not exist. store author to db
  76. else {
  77. storefileowner($ccan_home_dir . $folder, $_SESSION['susername'], $db);
  78. }
  79. rmdirr($exactpath . $ccan_home_dir . $rename);
  80. rename($tempfolder . $folder, $exactpath . $ccan_home_dir . $rename);
  81. chdir($exactpath);
  82. unset($op); exec($infotojson . $ccan_home_dir . $rename . " " . $ccan_home_dir.
  83. $rename."/_info.c ". $ccan_home_dir . $rename . "/json_" . $rename . " "
  84. . $_SESSION['susername']. " ../../" . $db, $op, $status);
  85. checkerror($status,"Error: In infotojson.");
  86. unset($op); exec('bzr add', $op, $status);
  87. checkerror($status,"Error: bzr add error.");
  88. unset($op); exec('bzr commit --unchanged -m "commiting from ccan web ' . $rename .
  89. " " . $_SESSION['susername'] . '"', $op, $status);
  90. checkerror($status,"Error: bzr commit error.");
  91. unset($op); exec($bzr_push, $op, $status);
  92. checkerror($status,"Error: bzr push error.");
  93. unset($op); exec($create_dep_tar . " " . $ccan_home_dir. $rename . " ../../" .
  94. $tar_dir . " ../../" . $db , $op, $status);
  95. checkerror($status,"Error: bzr push error.");
  96. chdir('../..');
  97. rmdirr($exactpath);
  98. echo "<div align=\"center\"> Stored to ". $ccan_home_dir . $rename . "</div>";
  99. }
  100. //if junk code (no _info.c etc)
  101. else {
  102. rmdirr($junkcode.$folder.'-'.$_SESSION['susername']);
  103. rename($tempfolder.$folder, $junkcode.$folder.'-'.$_SESSION['susername']);
  104. if($score == '')
  105. $msg = 'Below is details for test.';
  106. echo "<div align=\"center\"><table><tr><td> Score for code is low.
  107. Cannot copy to repository. Moving to ". $junkcode.$folder.'-'.
  108. $_SESSION['susername']."... </br></br>". $msg ." </br></br></td></tr><tr><td>";
  109. foreach($score as $disp)
  110. echo "$disp</br>";
  111. echo "</td></tr></table></div>";
  112. }
  113. unlink($tempfolder.$_FILES["uploadedfile"]["name"]);
  114. }
  115. else {
  116. echo "<div align=\"center\"> File type not supported </div>";
  117. exit();
  118. }
  119. function checkerror($status, $msg)
  120. {
  121. if($status != 0) {
  122. echo "<div align=\"center\">" . $msg . "Contact ccan admin. </div>";
  123. exit();
  124. }
  125. }
  126. function getowner($filename, $db)
  127. {
  128. //getting owner of a file stored at db
  129. $handle = sqlite3_open($db) or die("Could not open database");
  130. $query = "SELECT owner FROM fileowner users where filename=\"$filename\"";
  131. $result = sqlite3_query($handle, $query) or die("Error in query: ".sqlite3_error($handle));
  132. $row = sqlite3_fetch_array($result);
  133. return $row["owner"];
  134. }
  135. function storefileowner($filename, $owner, $db)
  136. {
  137. //storing owner of a file stored at db
  138. $handle = sqlite3_open($db) or die("Could not open database");
  139. $query = "insert into fileowner values(\"$filename\", \"$owner\")";
  140. $result = sqlite3_exec($handle, $query) or die("Error in query: ".sqlite3_error($handle));
  141. }
  142. ?>