index.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <?php
  2. $debug = true;
  3. /*
  4. RewriteEngine On
  5. # Erlaubt den direkten Zugriff auf bestehende Dateien und Verzeichnisse
  6. RewriteCond %{REQUEST_FILENAME} !-f
  7. RewriteCond %{REQUEST_FILENAME} !-d
  8. # Leitet alle anderen Anfragen an index.php weiter
  9. RewriteRule ^(.*)$ index.php [QSA,L]
  10. */
  11. require_once __DIR__ . '/controllers/BackupController.php';
  12. require_once __DIR__ . '/controllers/DeployDevController.php';
  13. require_once __DIR__ . '/controllers/GetSSLDaysController.php';
  14. require_once __DIR__ . '/controllers/ProdController.php';
  15. use application\controllers\BackupController;
  16. use application\controllers\DeployDevController;
  17. use application\controllers\GetSSLDaysController;
  18. use application\controllers\ProdController;
  19. const API_PASSWORD = 'your-secure-password';
  20. function authenticateRequest() {
  21. $headers = getallheaders();
  22. $providedPassword = $headers['X-Api-Key'] ?? '';
  23. if ($providedPassword !== API_PASSWORD) {
  24. http_response_code(403);
  25. echo json_encode(['error' => 'Unauthorized']);
  26. exit;
  27. }
  28. }
  29. header('Content-Type: application/json');
  30. $requestMethod = $_SERVER['REQUEST_METHOD'];
  31. $requestUri = explode('/', trim($_SERVER['REQUEST_URI'], '/'));
  32. $endpoint = $requestUri[0] ?? '';
  33. $username = $requestUri[1] ?? '';
  34. $domain = $requestUri[2] ?? '';
  35. if(isset($_SERVER['CONTENT_TYPE'])) {
  36. $content_type = $_SERVER['CONTENT_TYPE'];
  37. }
  38. if ( $GLOBALS['debug'] == true) {
  39. error_log("ContentType: " . $content_type);
  40. }
  41. $phpData = file_get_contents("php://input");
  42. if ($GLOBALS['debug'] == true) {
  43. error_log("phpData: " . $phpData);
  44. }
  45. $inputData = json_decode($phpData) ?? [];
  46. $parameters = array();
  47. if($inputData) {
  48. foreach($inputData as $param_name => $param_value) {
  49. $parameters[$param_name] = $param_value;
  50. }
  51. }
  52. authenticateRequest();
  53. switch ($endpoint) {
  54. case 'deploydev':
  55. error_log("Request deploydev from " . get_client_ip());
  56. if ($GLOBALS['debug'] == true) {
  57. error_log("POST");
  58. error_log("Parameters: " . print_r($parameters, true));
  59. error_log("Admin-Name: \"" . $parameters["admin_name"] . "\"");
  60. }
  61. if ($requestMethod === 'POST' && !empty($username) && !empty($domain)) {
  62. DeployDevController::deploy(array_merge($parameters, ['username' => $username, 'domain' => $domain]));
  63. }
  64. break;
  65. case 'revertdev':
  66. error_log("Request revertdev from " . get_client_ip());
  67. if ($requestMethod === 'POST' && !empty($username) && !empty($domain)) {
  68. DeployDevController::revert(array_merge($parameters, ['username' => $username, 'domain' => $domain]));
  69. }
  70. break;
  71. case 'migrateprod':
  72. error_log("Request migrateprod from " . get_client_ip());
  73. if ($requestMethod === 'POST' && !empty($username) && !empty($domain)) {
  74. ProdController::migrateFromDev(array_merge($parameters, ['username' => $username, 'domain' => $domain]));
  75. }
  76. break;
  77. case 'disableprod':
  78. error_log("Request disableprod from " . get_client_ip());
  79. if ($requestMethod === 'GET' && !empty($username) && !empty($domain)) {
  80. ProdController::disable(array_merge($_POST, ['username' => $username, 'domain' => $domain]));
  81. }
  82. break;
  83. case 'enableprod':
  84. error_log("Request enableprod from " . get_client_ip());
  85. if ($requestMethod === 'GET' && !empty($username) && !empty($domain)) {
  86. ProdController::enable(array_merge($parameters, ['username' => $username, 'domain' => $domain]));
  87. }
  88. break;
  89. case 'isprodenabled':
  90. error_log("Request isprodenabled from " . get_client_ip());
  91. if ($requestMethod === 'GET' && !empty($username) && !empty($domain)) {
  92. ProdController::isenabled(array_merge($parameters, ['username' => $username, 'domain' => $domain]));
  93. }
  94. break;
  95. case 'getssldays':
  96. error_log("Request getssldays from " . get_client_ip());
  97. if ($requestMethod === 'GET' && !empty($username) && !empty($domain)) {
  98. GetSSLDaysController::getSSLDays(['username' => $username, 'domain' => $domain]);
  99. }
  100. break;
  101. case 'listbackups':
  102. error_log("Request listbackups from " . get_client_ip());
  103. if ($requestMethod === 'GET' && !empty($username)) {
  104. BackupController::listBackups(['username' => $username, 'domain' => $domain]);
  105. }
  106. break;
  107. case 'restorebackup':
  108. error_log("Request restorebackup from " . get_client_ip());
  109. if ($requestMethod === 'POST' && !empty($username) && !empty($domain)) {
  110. BackupController::restoreBackup(array_merge($parameters, ['username' => $username, 'domain' => $domain]));
  111. }
  112. break;
  113. case 'terminate':
  114. error_log("Request terminate from " . get_client_ip());
  115. if ($requestMethod === 'GET' && !empty($username) && !empty($domain)) {
  116. ProdController::terminate(array_merge($_POST, ['username' => $username, 'domain' => $domain]));
  117. DeployDevController::terminate(array_merge($parameters, ['username' => $username, 'domain' => $domain]));
  118. }
  119. break;
  120. case 'ping':
  121. error_log("Request ping from " . get_client_ip());
  122. echo json_encode(['answer' => 'pong']);
  123. break;
  124. default:
  125. error_log("Error Request: " . $endpoint . " / " . $username ." / " . $domain);
  126. http_response_code(404);
  127. echo json_encode(['error' => 'Endpoint not found']);
  128. break;
  129. }
  130. function get_client_ip():string {
  131. $ipaddress = '';
  132. if (getenv('HTTP_CLIENT_IP'))
  133. $ipaddress = getenv('HTTP_CLIENT_IP');
  134. else if(getenv('HTTP_X_FORWARDED_FOR'))
  135. $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
  136. else if(getenv('HTTP_X_FORWARDED'))
  137. $ipaddress = getenv('HTTP_X_FORWARDED');
  138. else if(getenv('HTTP_FORWARDED_FOR'))
  139. $ipaddress = getenv('HTTP_FORWARDED_FOR');
  140. else if(getenv('HTTP_FORWARDED'))
  141. $ipaddress = getenv('HTTP_FORWARDED');
  142. else if(getenv('REMOTE_ADDR'))
  143. $ipaddress = getenv('REMOTE_ADDR');
  144. else
  145. $ipaddress = 'UNKNOWN';
  146. return $ipaddress;
  147. }