index.php 8.6 KB

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