PageRenderTime 36ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 0ms

/gertrude.php

http://gertrude.googlecode.com/
PHP | 132 lines | 101 code | 28 blank | 3 comment | 21 complexity | b6f295c276a3280a7b2b0fc49e5a1bd6 MD5 | raw file
Possible License(s): GPL-3.0
  1. <?php
  2. $token_filename = "./.token";
  3. $db_filename = "./gertrude.db";
  4. if (isset($_GET["token"]))
  5. $token = $_GET["token"];
  6. else
  7. $token = NULL;
  8. // pour free.fr
  9. function wa_flock($f, $mode) {
  10. // sur serveur free => decommenter la ligne suivante
  11. // return true;
  12. return flock($f, $mode);
  13. }
  14. function check_token() {
  15. global $token_filename;
  16. global $token;
  17. if (!file_exists($token_filename))
  18. return 0;
  19. $fp = fopen($token_filename, 'r');
  20. $ftoken = trim(fgets($fp, 4096));
  21. fclose($fp);
  22. if ($token != $ftoken)
  23. return 0;
  24. return 1;
  25. }
  26. function get_token($force=0) {
  27. global $token_filename;
  28. if (!$force && file_exists($token_filename))
  29. return 0;
  30. $f = fopen($token_filename, "w");
  31. if (wa_flock($f, LOCK_EX)) {
  32. $token = uniqid(md5(rand()), true);
  33. fwrite($f, $token);
  34. wa_flock($f, LOCK_UN);
  35. }
  36. else {
  37. $token = 0;
  38. }
  39. fclose($f);
  40. return $token;
  41. }
  42. function rel_token() {
  43. global $token_filename;
  44. if (!check_token())
  45. return 0;
  46. unlink($token_filename);
  47. return 1;
  48. }
  49. function upload() {
  50. global $db_filename;
  51. if (!check_token())
  52. return 0;
  53. $tmp_file = $_FILES['database']['tmp_name'];
  54. if (!is_uploaded_file($tmp_file))
  55. return 0;
  56. if (file_exists($db_filename)) {
  57. $backup_filename = "backup_" . time() . ".db";
  58. if (!copy($db_filename, $backup_filename))
  59. return 0;
  60. }
  61. if (!move_uploaded_file($tmp_file, $db_filename))
  62. return 0;
  63. return 1;
  64. }
  65. function download() {
  66. global $db_filename;
  67. if (!file_exists($db_filename))
  68. return 0;
  69. $fp = fopen($db_filename, 'r');
  70. $data = fread($fp, filesize($db_filename));
  71. return $data;
  72. }
  73. function get_version($prefix, $suffix) {
  74. $dh = opendir(".");
  75. while (false !== ($file = readdir($dh))) {
  76. if (substr($file, 0, strlen($prefix)) == $prefix && substr($file, 0-strlen($suffix), strlen($suffix)) == $suffix) {
  77. $version = substr($file, strlen($prefix), strlen($file)-strlen($prefix)-strlen($suffix));
  78. return $version;
  79. }
  80. }
  81. }
  82. function execute($action) {
  83. switch($action) {
  84. case "has_token":
  85. return check_token();
  86. case "get_token":
  87. return get_token(0);
  88. case "force_token":
  89. return get_token(1);
  90. case "rel_token":
  91. return rel_token();
  92. case "upload":
  93. return upload();
  94. case "download":
  95. return download();
  96. case "get_exe_version":
  97. return get_version("gertrude_", ".exe");
  98. case "get_templates_version":
  99. return get_version("templates_", ".zip");
  100. }
  101. }
  102. if (isset($_GET["action"]))
  103. echo execute($_GET["action"]);
  104. ?>