index.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455
  1. <?php
  2. include 'functions.php';
  3. if (file_exists('../../install.lock')) {
  4. exit("The installation has been completed already. Please delete the File 'install.lock' to re-run");
  5. }
  6. ?>
  7. <html>
  8. <head>
  9. <title>Controlpanel.gg installer Script</title>
  10. <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"
  11. integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
  12. <style>
  13. body {
  14. background-color: powderblue;
  15. }
  16. .card {
  17. position: absolute;
  18. top: 50%;
  19. left: 50%;
  20. margin-right: -50%;
  21. transform: translate(-50%, -50%);
  22. width: 30%;
  23. }
  24. .ok {
  25. color: green;
  26. }
  27. .ok::before {
  28. content: "✔️";
  29. }
  30. .notok {
  31. color: red;
  32. }
  33. .notok::before {
  34. content: "❌";
  35. }
  36. </style>
  37. </head>
  38. <body>
  39. <?php
  40. $cardheader = '
  41. <div class="card card-outline-success bg-dark">
  42. <div class="card-header text-center">
  43. <b class="mr-1 text-light">Controlpanel.GG</b>
  44. </div>
  45. <div class="card-body bg-light">';
  46. if (! isset($_GET['step'])) {
  47. if (! file_exists('../../.env')) {
  48. echo run_console('cp .env.example .env');
  49. }
  50. echo $cardheader; ?>
  51. <p class="login-box-msg">This installer will lead you through the most crucial Steps of Controlpanel.gg`s
  52. setup</p>
  53. <p class="<?php echo checkHTTPS() == true ? 'ok' : 'notok'; ?>">HTTPS is required</p>
  54. <p class="<?php echo checkWriteable() == true ? 'ok' : 'notok'; ?>">Write-permissions on .env-file</p>
  55. <p class="<?php echo checkPhpVersion() === 'OK' ? 'ok' : 'notok'; ?>"> php
  56. version: <?php echo phpversion(); ?> (minimum required <?php echo $requirements['minPhp']; ?>)</p>
  57. <p class="<?php echo getMySQLVersion() === 'OK' ? 'ok' : 'notok'; ?>"> mysql
  58. version: <?php echo getMySQLVersion(); ?> (minimum required <?php echo $requirements['mysql']; ?>)</p>
  59. <p class="<?php echo count(checkExtensions()) == 0 ? 'ok' : 'notok'; ?>"> Missing
  60. php-extentions: <?php echo count(checkExtensions()) == 0 ? 'none' : '';
  61. foreach (checkExtensions() as $ext) {
  62. echo $ext.', ';
  63. }
  64. echo count(checkExtensions()) == 0 ? '' : '(Proceed anyway)'; ?></p>
  65. <!-- <p class="<?php echo getZipVersion() === 'OK' ? 'ok' : 'notok'; ?>"> Zip
  66. version: <?php echo getZipVersion(); ?> </p> -->
  67. <p class="<?php echo getGitVersion() === 'OK' ? 'ok' : 'notok'; ?>"> Git
  68. version: <?php echo getGitVersion(); ?> </p>
  69. <p class="<?php echo getTarVersion() === 'OK' ? 'ok' : 'notok'; ?>"> Tar
  70. version: <?php echo getTarVersion(); ?> </p>
  71. <a href="?step=2">
  72. <button class="btn btn-primary">Lets go</button>
  73. </a>
  74. </div>
  75. </div>
  76. <?php
  77. }
  78. if (isset($_GET['step']) && $_GET['step'] == 2) {
  79. echo $cardheader; ?>
  80. <p class="login-box-msg">Lets start with your Database</p>
  81. <?php if (isset($_GET['message'])) {
  82. echo "<p class='notok'>".$_GET['message'].'</p>';
  83. } ?>
  84. <form method="POST" enctype="multipart/form-data" class="mb-3"
  85. action="/install/forms.php" name="checkDB">
  86. <div class="row">
  87. <div class="col-md-12">
  88. <div class="form-group">
  89. <div class="custom-control mb-3">
  90. <label for="database">Database Driver</label>
  91. <input x-model="databasedriver" id="databasedriver" name="databasedriver"
  92. type="text" required
  93. value="mysql" class="form-control">
  94. </div>
  95. </div>
  96. <div class="form-group">
  97. <div class="custom-control mb-3">
  98. <label for="databasehost">Database Host</label>
  99. <input x-model="databasehost" id="databasehost" name="databasehost" type="text"
  100. required
  101. value="127.0.0.1" class="form-control">
  102. </div>
  103. </div>
  104. <div class="form-group">
  105. <div class="custom-control mb-3">
  106. <label for="databaseport">Database Port</label>
  107. <input x-model="databaseport" id="databaseport" name="databaseport"
  108. type="number" required
  109. value="3306" class="form-control">
  110. </div>
  111. </div>
  112. <div class="form-group">
  113. <div class="custom-control mb-3">
  114. <label for="databaseuser">Database User</label>
  115. <input x-model="databaseuser" id="databaseuser" name="databaseuser" type="text"
  116. required
  117. value="controlpaneluser" class="form-control">
  118. </div>
  119. </div>
  120. <div class="form-group">
  121. <div class="custom-control mb-3">
  122. <label for="databaseuserpass">Database User Password</label>
  123. <input x-model="databaseuserpass" id="databaseuserpass" name="databaseuserpass"
  124. type="text" required
  125. class="form-control ">
  126. </div>
  127. </div>
  128. <div class="form-group">
  129. <div class="custom-control mb-3">
  130. <label for="database">Database</label>
  131. <input x-model="database" id="database" name="database" type="text" required
  132. value="controlpanel" class="form-control">
  133. </div>
  134. </div>
  135. </div>
  136. <button class="btn btn-primary" name="checkDB">Submit</button>
  137. </div>
  138. </form>
  139. </div>
  140. </div>
  141. <?php
  142. }
  143. if (isset($_GET['step']) && $_GET['step'] == 2.5) {
  144. echo $cardheader; ?>
  145. <p class="login-box-msg">Lets feed your Database and generate some security keys!</p>
  146. <p> This process might take a while. Please do not refresh or close this page!</p>
  147. <?php if (isset($_GET['message'])) {
  148. echo "<p class='notok'>".$_GET['message'].'</p>';
  149. } ?>
  150. <form method="POST" enctype="multipart/form-data" class="mb-3"
  151. action="/install/forms.php" name="feedDB">
  152. <button class="btn btn-primary" name="feedDB">Submit</button>
  153. </div>
  154. </div>
  155. </div>
  156. <?php
  157. }
  158. if (isset($_GET['step']) && $_GET['step'] == 3) {
  159. echo $cardheader; ?>
  160. <p class="login-box-msg">Tell us something about your Host</p>
  161. <?php if (isset($_GET['message'])) {
  162. echo "<p class='notok'>".$_GET['message'].'</p>';
  163. } ?>
  164. <form method="POST" enctype="multipart/form-data" class="mb-3"
  165. action="/install/forms.php" name="checkGeneral">
  166. <div class="row">
  167. <div class="col-md-12">
  168. <div class="form-group">
  169. <div class="custom-control mb-3">
  170. <label for="database">Your Dashboard URL</label>
  171. <input id="url" name="url"
  172. type="text" required
  173. value="<?php echo 'https://'.$_SERVER['SERVER_NAME']; ?>" class="form-control">
  174. </div>
  175. </div>
  176. <div class="form-group">
  177. <div class="custom-control mb-3">
  178. <label for="name">Your Host-Name</label>
  179. <input id="name" name="name" type="text"
  180. required
  181. value="Controlpanel.gg" class="form-control">
  182. </div>
  183. </div>
  184. </div>
  185. <button class="btn btn-primary" name="checkGeneral">Submit</button>
  186. </div>
  187. </form>
  188. </div>
  189. </div>
  190. <?php
  191. }
  192. if (isset($_GET['step']) && $_GET['step'] == 4) {
  193. echo $cardheader; ?>
  194. <p class="login-box-msg">Lets get your E-Mails going! </p>
  195. <p class="login-box-msg">This might take a few seconds when submitted! </p>
  196. <?php if (isset($_GET['message'])) {
  197. echo "<p class='notok'>".$_GET['message'].'</p>';
  198. } ?>
  199. <form method="POST" enctype="multipart/form-data" class="mb-3"
  200. action="/install/forms.php" name="checkSMTP">
  201. <div class="row">
  202. <div class="col-md-12">
  203. <div class="form-group">
  204. <div class="custom-control mb-3">
  205. <label for="method">Your E-Mail method</label>
  206. <input id="method" name="method"
  207. type="text" required
  208. value="smtp" class="form-control">
  209. </div>
  210. </div>
  211. <div class="form-group">
  212. <div class="custom-control mb-3">
  213. <label for="host">Your Mailer-Host</label>
  214. <input id="host" name="host" type="text"
  215. required
  216. value="smtp.google.com" class="form-control">
  217. </div>
  218. </div>
  219. <div class="form-group">
  220. <div class="custom-control mb-3">
  221. <label for="port">Your Mail Port</label>
  222. <input id="port" name="port" type="port"
  223. required
  224. value="567" class="form-control">
  225. </div>
  226. </div>
  227. <div class="form-group">
  228. <div class="custom-control mb-3">
  229. <label for="user">Your Mail User</label>
  230. <input id="user" name="user" type="text"
  231. required
  232. value="info@mydomain.com" class="form-control">
  233. </div>
  234. </div>
  235. <div class="form-group">
  236. <div class="custom-control mb-3">
  237. <label for="pass">Your Mail-User Password</label>
  238. <input id="pass" name="pass" type="password"
  239. required
  240. value="" class="form-control">
  241. </div>
  242. </div>
  243. <div class="form-group">
  244. <div class="custom-control mb-3">
  245. <label for="encryption">Your Mail encryption method</label>
  246. <input id="encryption" name="encryption" type="text"
  247. required
  248. value="tls" class="form-control">
  249. </div>
  250. </div>
  251. </div>
  252. <button class="btn btn-primary" name="checkSMTP">Submit</button>
  253. </form>
  254. </div>
  255. <a href="?step=5"><button class="btn btn-warning">Skip this step for now</button></a>
  256. </div>
  257. </div>
  258. <?php
  259. }
  260. if (isset($_GET['step']) && $_GET['step'] == 5) {
  261. echo $cardheader; ?>
  262. <p class="login-box-msg">Almost done! </p>
  263. <p class="login-box-msg">Lets get some info about your Pterodactyl Installation!</p>
  264. <?php if (isset($_GET['message'])) {
  265. echo "<p class='notok'>".$_GET['message'].'</p>';
  266. } ?>
  267. <form method="POST" enctype="multipart/form-data" class="mb-3"
  268. action="/install/forms.php" name="checkPtero">
  269. <div class="row">
  270. <div class="col-md-12">
  271. <div class="form-group">
  272. <div class="custom-control mb-3">
  273. <label for="url">Pterodactyl URL</label>
  274. <input id="url" name="url"
  275. type="text" required
  276. value="https://ptero.example.com" class="form-control">
  277. </div>
  278. </div>
  279. <div class="form-group">
  280. <div class="custom-control mb-3">
  281. <label for="key">Pterodactyl API-Key (found here: https://your.ptero.com/admin/api)</label>
  282. <input id="key" name="key" type="text"
  283. required
  284. value="" class="form-control"
  285. placeholder="The Key needs ALL read&write Permissions!">
  286. </div>
  287. </div>
  288. <div class="form-group">
  289. <div class="custom-control mb-3">
  290. <label for="clientkey">Pterodactyl Admin-User API-Key (https://your.ptero.com/account/api)</label>
  291. <input id="clientkey" name="clientkey" type="text"
  292. required
  293. value="" class="form-control"
  294. placeholder="Your Account needs to be an Admin!">
  295. </div>
  296. </div>
  297. </div>
  298. <button class="btn btn-primary" name="checkPtero">Submit</button>
  299. </div>
  300. </form>
  301. </div>
  302. </div>
  303. <?php
  304. }
  305. if (isset($_GET['step']) && $_GET['step'] == 6) {
  306. echo $cardheader; ?>
  307. <p class="login-box-msg">Lets create yourself!</p>
  308. <p class="login-box-msg">We're making the first Admin user</p>
  309. <?php if (isset($_GET['message'])) {
  310. echo "<p class='notok'>".$_GET['message'].'</p>';
  311. } ?>
  312. <form method="POST" enctype="multipart/form-data" class="mb-3"
  313. action="/install/forms.php" name="createUser">
  314. <div class="form-group">
  315. <div class="custom-control mb-3">
  316. <label for="pteroID">Your Pterodactyl User-ID (found in the users-list on your pterodactyl dashboard)</label>
  317. <input id="pteroID" name="pteroID" type="text"
  318. required
  319. value="1" class="form-control">
  320. </div>
  321. </div>
  322. <div class="form-group">
  323. <div class="custom-control mb-3">
  324. <label for="pass">Password (this will be your new pterodactyl password aswell!)</label>
  325. <input id="pass" name="pass" type="password"
  326. required
  327. value="" minlength="8" class="form-control">
  328. </div>
  329. </div>
  330. <div class="form-group">
  331. <div class="custom-control mb-3">
  332. <label for="repass">Retype Password</label>
  333. <input id="repass" name="repass" type="password"
  334. required
  335. value="" minlength="8" class="form-control">
  336. </div>
  337. </div>
  338. </div>
  339. <button class="btn btn-primary" name="createUser">Submit</button>
  340. </div>
  341. </form>
  342. </div>
  343. </div>
  344. <?php
  345. }
  346. if (isset($_GET['step']) && $_GET['step'] == 7) {
  347. $lockfile = fopen('../../install.lock', 'w') or exit('Unable to open file!');
  348. fwrite($lockfile, 'locked');
  349. fclose($lockfile);
  350. echo $cardheader; ?>
  351. <p class="login-box-msg">All done!</p>
  352. <p class="login-box-msg">You may navigate to your Dashboard now and log in!</p>
  353. <a href="<?php echo getEnvironmentValue('APP_URL'); ?>">
  354. <button class="btn btn-success">Lets go!</button>
  355. </a>
  356. </div>
  357. </div>
  358. <?php
  359. }
  360. ?>
  361. <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"
  362. integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p"
  363. crossorigin="anonymous"></script>
  364. </body>
  365. </html>