uploader.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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. }
  24. else {
  25. exec('tar -xf '.$tempfolder.$_FILES["uploadedfile"]["name"].' -C '.$tempfolder, $op, $status);
  26. }
  27. checkerror($status[0],"Error: cannot extract(tar error).");
  28. //chmod
  29. exec('chmod -R 0777 '. $tempfolder.$folder, $status);
  30. checkerror($status[0],"Error: chmod execution error.");
  31. //running ccanlint
  32. exec($ccanlint.$tempfolder.$folder, $score, $status);
  33. //checkerror($status,"Error: ccanlint execution error.");
  34. //if user not logged in
  35. if($_SESSION["slogged"] == false) {
  36. //move to temp folder
  37. if (file_exists($temprepo . $folder))
  38. rmdirr($temprepo.$folder);
  39. rename($tempfolder.$folder, $temprepo.$folder);
  40. //send mail for review to admins
  41. $subject = "Review: code upload at temporary repository";
  42. $message = "Some developer has uploaded code who has not logged in.\n\nModule is stored in ".$temprepo.$folder.".\n\nOutput of ccanlint: \n";
  43. foreach($score as $disp)
  44. $message = $message.$disp."\n";
  45. $toaddress = getccanadmin($db);
  46. mail($toaddress, $subject, $message, "From: $frommail");
  47. echo "<div align=\"center\"> Stored to temporary repository. Mail will be send to admin to get verification of the code.<//div>";
  48. unlink($tempfolder.$_FILES["uploadedfile"]["name"]);
  49. exit();
  50. }
  51. //if not junk code
  52. if($status == 0) {
  53. $rename = $folder;
  54. //if module already exist
  55. if (file_exists($repopath.$ccan_home_dir . $folder)) {
  56. // if owner is not same
  57. if(!(getowner($repopath.$ccan_home_dir.$folder, $db) == $_SESSION['susername'])) {
  58. if(!file_exists($repopath . $ccan_home_dir. $folder.'-'.$_SESSION['susername']))
  59. echo "<div align=\"center\">".$repopath . $ccan_home_dir. $folder . " already exists. Renaming to ". $folder."-".$_SESSION['susername']."</div>";
  60. else
  61. echo "<div align=\"center\">".$repopath . $ccan_home_dir. $folder."-".$_SESSION['susername'] . " already exists. Overwriting ". $folder."-".$_SESSION['susername']."</div>";
  62. $rename = $folder."-".$_SESSION['susername'];
  63. }
  64. else
  65. echo "<div align=\"center\">".$repopath. $ccan_home_dir. $folder. " already exists(uploaded by you). Overwriting ". $repopath. $folder."</div>";
  66. }
  67. //module not exist. store author to db
  68. else {
  69. storefileowner($repopath . $ccan_home_dir. $folder, $_SESSION['susername'], $db);
  70. }
  71. rmdirr($repopath. $ccan_home_dir. $rename);
  72. rename($tempfolder.$folder, $repopath. $ccan_home_dir. $rename);
  73. echo "<div align=\"center\"> Stored to ".$repopath . $ccan_home_dir. $rename . "</div>";
  74. exec($infotojson . $repopath. $ccan_home_dir. $rename."/_info.c ". $repopath. $ccan_home_dir. $rename."/json_".$rename. " ". $_SESSION['susername']." ".$db, $status);
  75. checkerror($status[0],"Error: In infotojson.");
  76. //createsearchindex($rename, $repopath.$rename, $infofile, $db, $_SESSION['susername']);
  77. }
  78. //if junk code (no _info.c etc)
  79. else {
  80. rmdirr($junkcode.$folder.'-'.$_SESSION['susername']);
  81. rename($tempfolder.$folder, $junkcode.$folder.'-'.$_SESSION['susername']);
  82. if($score == '')
  83. $msg = 'Below is details for test.';
  84. echo "<div align=\"center\"><table><tr><td> Score for code is low. Cannot copy to repository. Moving to ". $junkcode.$folder.'-'.$_SESSION['susername']."... </br></br>". $msg ." </br></br></td></tr><tr><td>";
  85. foreach($score as $disp)
  86. echo "$disp</br>";
  87. echo "</td></tr></table></div>";
  88. }
  89. unlink($tempfolder.$_FILES["uploadedfile"]["name"]);
  90. }
  91. else {
  92. echo "<div align=\"center\"> File type not supported </div>";
  93. exit();
  94. }
  95. function checkerror($status, $msg)
  96. {
  97. if($status != 0) {
  98. echo "<div align=\"center\">" . $msg . "Contact ccan admin. </div>";
  99. exit();
  100. }
  101. }
  102. function getowner($filename, $db)
  103. {
  104. //getting owner of a file stored at db
  105. $handle = sqlite3_open($db) or die("Could not open database");
  106. $query = "SELECT owner FROM fileowner users where filename=\"$filename\"";
  107. $result = sqlite3_query($handle, $query) or die("Error in query: ".sqlite3_error($handle));
  108. $row = sqlite3_fetch_array($result);
  109. return $row["owner"];
  110. }
  111. function storefileowner($filename, $owner, $db)
  112. {
  113. //storing owner of a file stored at db
  114. $handle = sqlite3_open($db) or die("Could not open database");
  115. $query = "insert into fileowner values(\"$filename\", \"$owner\")";
  116. $result = sqlite3_exec($handle, $query) or die("Error in query: ".sqlite3_error($handle));
  117. }
  118. ?>