index.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  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. require_once __DIR__ . '/controllers/QuotaController.php';
  16. use application\controllers\BackupController;
  17. use application\controllers\DeployDevController;
  18. use application\controllers\GetSSLDaysController;
  19. use application\controllers\ProdController;
  20. use application\controllers\QuotaController;
  21. const API_PASSWORD = 'your-secure-password';
  22. function authenticateRequest() {
  23. $headers = getallheaders();
  24. $providedPassword = $headers['X-Api-Key'] ?? '';
  25. if ($providedPassword !== API_PASSWORD) {
  26. http_response_code(403);
  27. echo json_encode(['error' => 'Unauthorized']);
  28. exit;
  29. }
  30. }
  31. header('Content-Type: application/json');
  32. $requestMethod = $_SERVER['REQUEST_METHOD'];
  33. $requestUri = explode('/', trim($_SERVER['REQUEST_URI'], '/'));
  34. $endpoint = $requestUri[0] ?? '';
  35. $username = $requestUri[1] ?? '';
  36. $domain = $requestUri[2] ?? '';
  37. if(isset($_SERVER['CONTENT_TYPE'])) {
  38. $content_type = $_SERVER['CONTENT_TYPE'];
  39. }
  40. if ( $GLOBALS['debug'] == true) {
  41. error_log("ContentType: " . $content_type);
  42. }
  43. $phpData = file_get_contents("php://input");
  44. if ($GLOBALS['debug'] == true) {
  45. error_log("phpData: " . $phpData);
  46. }
  47. $inputData = json_decode($phpData) ?? [];
  48. $parameters = array();
  49. if($inputData) {
  50. foreach($inputData as $param_name => $param_value) {
  51. $parameters[$param_name] = $param_value;
  52. }
  53. }
  54. authenticateRequest();
  55. error_log("endpoint: " . $endpoint);
  56. error_log("domain: " . $domain);
  57. error_log("username: " . $username);
  58. switch ($endpoint) {
  59. case 'deploydev':
  60. error_log("Request deploydev from " . get_client_ip());
  61. if ($GLOBALS['debug'] == true) {
  62. error_log("POST");
  63. error_log("Parameters: " . print_r($parameters, true));
  64. error_log("Admin-Name: \"" . $parameters["admin_name"] . "\"");
  65. }
  66. if ($requestMethod === 'POST' && !empty($username) && !empty($domain)) {
  67. DeployDevController::deploy(array_merge($parameters, ['username' => $username, 'domain' => $domain]));
  68. }
  69. break;
  70. case 'revertdev':
  71. error_log("Request revertdev from " . get_client_ip());
  72. if ($requestMethod === 'POST' && !empty($username) && !empty($domain)) {
  73. DeployDevController::revert(array_merge($parameters, ['username' => $username, 'domain' => $domain]));
  74. }
  75. break;
  76. case 'migrateprod':
  77. error_log("Request migrateprod from " . get_client_ip());
  78. if ($requestMethod === 'POST' && !empty($username) && !empty($domain)) {
  79. ProdController::migrateFromDev(array_merge($parameters, ['username' => $username, 'domain' => $domain]));
  80. }
  81. break;
  82. case 'disableprod':
  83. error_log("Request disableprod from " . get_client_ip());
  84. if ($requestMethod === 'GET' && !empty($username) && !empty($domain)) {
  85. ProdController::disable(array_merge($_POST, ['username' => $username, 'domain' => $domain]));
  86. }
  87. break;
  88. case 'enableprod':
  89. error_log("Request enableprod from " . get_client_ip());
  90. if ($requestMethod === 'GET' && !empty($username) && !empty($domain)) {
  91. ProdController::enable(array_merge($parameters, ['username' => $username, 'domain' => $domain]));
  92. }
  93. break;
  94. case 'isprodenabled':
  95. error_log("Request isprodenabled from " . get_client_ip());
  96. if ($requestMethod === 'GET' && !empty($username) && !empty($domain)) {
  97. ProdController::isenabled(array_merge($parameters, ['username' => $username, 'domain' => $domain]));
  98. }
  99. break;
  100. case 'getssldays':
  101. error_log("Request getssldays from " . get_client_ip());
  102. if ($requestMethod === 'GET' && !empty($username) && !empty($domain)) {
  103. GetSSLDaysController::getSSLDays(['username' => $username, 'domain' => $domain]);
  104. }
  105. break;
  106. case 'listbackups':
  107. error_log("Request listbackups from " . get_client_ip());
  108. if ($requestMethod === 'GET' && !empty($username)) {
  109. BackupController::listBackups(['username' => $username, 'domain' => $domain]);
  110. }
  111. break;
  112. case 'restorebackup':
  113. error_log("Request restorebackup from " . get_client_ip());
  114. if ($requestMethod === 'POST' && !empty($username) && !empty($domain)) {
  115. BackupController::restoreBackup(array_merge($parameters, ['username' => $username, 'domain' => $domain]));
  116. }
  117. break;
  118. case 'terminate':
  119. error_log("Request terminate from " . get_client_ip());
  120. if ($requestMethod === 'GET' && !empty($username)) {
  121. DeployDevController::terminate(array_merge($parameters, ['username' => $username, 'domain' => $domain]));
  122. }
  123. break;
  124. case 'ping':
  125. error_log("Request ping from " . get_client_ip());
  126. echo json_encode(['answer' => 'pong']);
  127. break;
  128. case 'getQuota':
  129. error_log("Request getquota from " . get_client_ip());
  130. if ($requestMethod === 'GET' && !empty($username)) {
  131. QuotaController::getQuota(['username' => $username]);
  132. }
  133. break;
  134. case 'getStats':
  135. error_log("Request getstats from " . get_client_ip());
  136. if ($requestMethod === 'GET') {
  137. QuotaController::getStats();
  138. }
  139. break;
  140. case 'setQuota':
  141. error_log("Request setquota from " . get_client_ip());
  142. if ($requestMethod === 'POST' && !empty($username)) {
  143. QuotaController::setQuota(array_merge($parameters, ['username' => $username]));
  144. }
  145. break;
  146. default:
  147. error_log("Error Request: " . $endpoint . " / " . $username ." / " . $domain);
  148. http_response_code(404);
  149. echo json_encode(['error' => 'Endpoint not found']);
  150. break;
  151. }
  152. function get_client_ip():string {
  153. $ipaddress = '';
  154. if (getenv('HTTP_CLIENT_IP'))
  155. $ipaddress = getenv('HTTP_CLIENT_IP');
  156. else if(getenv('HTTP_X_FORWARDED_FOR'))
  157. $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
  158. else if(getenv('HTTP_X_FORWARDED'))
  159. $ipaddress = getenv('HTTP_X_FORWARDED');
  160. else if(getenv('HTTP_FORWARDED_FOR'))
  161. $ipaddress = getenv('HTTP_FORWARDED_FOR');
  162. else if(getenv('HTTP_FORWARDED'))
  163. $ipaddress = getenv('HTTP_FORWARDED');
  164. else if(getenv('REMOTE_ADDR'))
  165. $ipaddress = getenv('REMOTE_ADDR');
  166. else
  167. $ipaddress = 'UNKNOWN';
  168. return $ipaddress;
  169. }