index.php 8.5 KB

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