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