index.php 8.1 KB

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